[云原生] K8S声明式资源管理

news/2024/6/3 18:12:24 标签: 云原生, kubernetes, 容器

一、资源配置清单的管理

资源清单的编写管理,都是基于yaml编写的格式

1.1 YAML 文件格式及编写注意事项 

YAML 是一种标记语言,它可以很直观的展示数据序列化格式,可读性高。类似于 json 数据描述语言,语法比 json 简单的很多。关于 YAML 的真相是,YAML 中只有两种数据结构:序列(sequence)和映射(mapping)。这是两个花哨的名字,你会发现它代表了你非常熟悉的概念。这篇文章解释了这两种结构,更重要的是,介绍了它们是如何协同工作,使 YAML 成为表示你所关心的数据的强大方式。

  • YAML数据结构通过缩进来表示
  • 连续的项目通过减号来表示
  • 键值对用冒号分隔
  • 数组用中括号 [ ] 括起来
  • hash 用花括号 { } 括起来

使用 YAML 时需要注意下面事项:
●大小写敏感
●通过缩进表示层级关系
●不支持制表符 tab 键缩进,只能使用空格缩进
●缩进的空格数目不重要,只要相同层级左对齐,通常开头缩进2个空格
●用 # 号注释
●符号字符后缩进1个空格,如冒号 :  、逗号 ,  、横杠 - 
●如果包含特殊字符用单引号('')引起来会作为普通字符串处理,双引号(""): 特殊字符作为本身想表示的意思
 

1.2  查看资源配置清单  
 
kubectl get deployment nginx -o yaml
//解释资源配置清单
kubectl explain deployment.metadata

 

 

1.3 修改资源配置清单并应用 
(1)离线修改

 离线修改的过程:

(1)首先将配置资源导入通过重定向符号导入到yaml文件中

(2)通过vim编辑器进行yaml配置文件,删除多余的选项,修改配置项,进行保存

(3) 通过apply -f  该yaml 文件 或者是   (先  deleter -f 该yaml文件,再create -f 该yaml 文件)

 用来实现声明式离线修改资源清单的配置

create与apply的区别:

 create和apply都能运用于资源模板的创建,但是create创建资源模板属于固定式的资源配置,一旦创建,后期想要修改时,就只能通过先delete删除资源模板,再进行create创建,达到资源更新的效果。

而apply属于一种实时更新使用的创建模板方式,后期对资源模板的配置文件进行修改时,只需要先修改配置文件,再使用apply -f 指定配置文件即可。

但是apply并不是什么情况下都能生效使用。如果你发现配置并不生效,而且与书写格式无关,则

可以先delete -f 该配置文件,再create -f 该配置文件

修改yaml文件,并用kubectl apply -f xxxx.yaml 文件使之生效
注意:当apply不生效时, 先使用delete清除资源,再apply创建资源
 
kubectl get service nginx -o yaml > nginx-svc.yaml
vim nginx-svc.yaml    #修改port:8080
kubectl delete -f nginx-svc.yaml  #删除yaml文件
kubectl apply -f nginx-svc.yaml   #应用yaml文件
kubectl get SVC

(2)在线修改 
直接使用kubectl edit svc nginx-service
 在线编辑资源配置清单并保存退出即时生效( 如port: 6060)
此修改方式不会对yaml文件内容修改
使用i修改,使用esc+wq保存退出(在线修改和vim操作一样,修改完实时生效,有些字段不支持修改还是需要离线修改)

 

1.4 删除资源配置清单 
陈述式删除:
Kubernetes 支持YAML和JSON格式管理资源对象
JSON 格式:主要用于api接口之间消息的传递
YAML格式:用于配置和管理,YAML 是一种简洁的非标记性语言,内容格式人性化,较易读
kubectl delete pods nginx
声明式删除
kubectl delete -f nginx-svc.yaml

二、自主编写资源清单 

2.1 初步认识资源清单中svc的重要配置项
Service yaml文件详解
 
apiVersion: v1
kind: Service
matadata:                                #元数据
  name: string                           #service的名称
  namespace: string                      #命名空间  
  labels:                                #自定义标签属性列表
    - name: string
  annotations:                           #自定义注解属性列表  
    - name: string
spec:                                    #详细描述
  selector: []                           #label selector配置,将选择具有label标签的Pod作为管理 
                                         #范围
  type: string                           #service的类型,指定service的访问方式,默认为 
                                         #clusterIp
  clusterIP: string                      #虚拟服务地址      
  sessionAffinity: string                #是否支持session
  ports:                                 #service需要暴露的端口列表
  - name: string                         #端口名称
    protocol: string                     #端口协议,支持TCP和UDP,默认TCP
    port: int                            #服务监听的端口号
    targetPort: int                      #需要转发到后端Pod的端口号
    nodePort: int                        #当type = NodePort时,指定映射到物理机的端口号
  status:                                #当spce.type=LoadBalancer时,设置外部负载均衡器的地址
    loadBalancer:                        #外部负载均衡器    
      ingress:                           #外部负载均衡器 
        ip: string                       #外部负载均衡器的Ip地址值
        hostname: string                 #外部负载均衡器的主机名
2.2 手动编写pod资源配置  
vim pod-demo.yaml

apiVersion: v1
kind: Pod
metadata:
   name: pod-demo
   namespace: default
   labels:
      appname: myapp
      appversion: v1
spec:
   containers:
   - name: myapp
     image: nginx:latest
     ports:
     - containerPort: 80
       name: http
       protocol: TCP

#创建资源对象
kubectl create -f  pod-demo.yaml

kubectl get pods

 

2.3 手动编写deployment资源配置 
vim depl-demo.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: depl-demo
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      myname: myapp
  template:
    metadata:
      labels:
        myname: myapp
    spec:
      containers:
      - name: myapp
        image: nginx
        ports:
        - containerPort: 80
          name: http


kubectl apply -f depl-demo.yaml

 

 2.4 手动编写svc资源配置 
vim svc-demo.yaml

apiVersion: v1
kind: Service
metadata:
  name: svc-demo
  namespace: default
spec:
  type: NodePort
  selector:
    myname: myapp
  ports:
  - port: 9090
    nodePort: 30888
    targetPort: 80
 # clusterIP: 10.0.0.0/24

kubectl apply -f svc-demo.yaml
  1. 补充:

  2. 详解k8s中的port

  3. ●port

  4. port是k8s集群内部访问service的端口,即通过clusterIP: port可以从Pod所在的Node. 上访问到service

  5. ●nodePort

  6. nodePort是外部访问k8s集群中service的端口,通过nodeIP: nodePort 可以从外部访问到某个service。

  7. ●targetPort

  8. targetPort是Pod的端口,从port或nodePort来的流量经过kube-proxy 反向代理负载均衡转发到后端Pod的targetPort上,最后进入容器

  9. ●containerPort

  10. containerPort是Pod内部容器的端口,targetPort映射到containerPort

三、手动生成模板,再编写资源清单  

(1)生成模板 
用--dry-run命令生成yaml资源清单
 
kubectl run --dry-run 打印相应的 API 对象试运行而不执行创建
#空跑测试
kubectl run nginx-svc2 --image=nginx:1.20  --port=80 --dry-run=client
 
#空跑测试的输出结果
kubectl run nginx-svc2 --image=nginx:1.20  --port=80 --dry-run=client -o yaml
#生成模板
kubectl run nginx-svc2 --image=nginx:1.20  --port=80 --dry-run=client -o yaml >nginx-svc2.yaml

(2)修改并编写模板 
vim nginx-svc2.yaml 
kubectl apply -f nginx-svc2.yaml
kubectl get pods

四、如何 获取K8S资源配置清单文件模板(yaml配置文件)?

1)手写yaml配置文件,可以根据 kubectl explain 命令获取字段信息
2)查看现有的资源配置获取:

kubectl get -n <命名空间> <资源类型> <资源名称> -o yaml > XXX.yaml
kubectl edit -n <命名空间> <资源类型> <资源名称> ,然后手动复制资源配置,粘贴到yaml文件中
3)通过模拟运行kubectl陈述式创建资源的命令获取
kubectl create|run|expose  选项  --dry-run=client -o yaml > XXX.yaml
4)复制K8S官网文档的资源配置案例 Kubernetes 文档 | Kubernetes

 

K8S资源配置清单文件字段的值类型:

字段: <integer>   数字         字段: 数值
字段: <string>    字符串       字段: "字符串"     字段: '字符串'    字段: 字符串
字段: <boolean>   布尔值       字段: true|false

字段: <Object>    对象:值可能是一层或多层子字段
                               字段:
							     二级字段:
								   三级字段

字段: <[]Object>   列表类型的对象             字段:
                                              - 二级字段:
											      三级字段
								              - 二级字段: 
字段: <map[string]string>    映射:值可能是一个或多个键值对类型的值
                                  字段:
								    key1: value1
								    key2: value2
								    key3: value3

http://www.niftyadmin.cn/n/5395872.html

相关文章

全量知识系统问题及SmartChat给出的答复 之2

Q6. 根据DDD的思想( 也就是借助 DDD的某个或某些实现)&#xff0c;是否能按照这个想法给出程序设计和代码结构&#xff1f; 当使用领域驱动设计&#xff08;DDD&#xff09;的思想来设计程序和代码结构时&#xff0c;可以根据领域模型、领域服务、值对象、实体等概念来进行设计…

JavaWeb个人学习01

1:RequestParam(defaultValue "默认的值") 这个可以在一个参数的前面写上 要是前端不传值进来的话 这个形参就是你定义的默认值 2: slf4j 对应的是日志的输出 log.info("参数是 {}", detail); 3: 分页插件 PageHelper 用法: 准备工作: 引入依赖 …

第四十五回 病关索大闹翠屏山 拚命三火烧祝家店-

官府得到上报&#xff0c;被杀死的僧人是报恩寺的裴如海&#xff0c;旁边的头陀是寺后面的人叫胡道。孔目说他们两个互相杀死&#xff0c;没有其他人什么事&#xff0c;这件事也就过去了。 杨雄听说了这件事&#xff0c;知道是石秀干的&#xff0c;找石秀为自己错怪他道歉。两…

腾讯云4核8G服务器支持多少人在线访问?

腾讯云4核8G服务器支持多少人在线访问&#xff1f;支持25人同时访问。实际上程序效率不同支持人数在线人数不同&#xff0c;公网带宽也是影响4核8G服务器并发数的一大因素&#xff0c;假设公网带宽太小&#xff0c;流量直接卡在入口&#xff0c;4核8G配置的CPU内存也会造成计算…

git 中使用git clean删除未跟踪Untracked的文件

git clean -nf 是 Git 中的一个命令。让我们分解一下这个命令的意思&#xff1a; git clean: 这是一个命令&#xff0c;其功能是用来删除未被跟踪的文件。 -n&#xff1a;这是一个选项&#xff0c;也可以写作 --dry-run。添加这个选项后&#xff0c;命令将显示哪些文件会被删除…

【推荐算法系列十六】:协同过滤

文章目录 参考原理基于邻域的协同过滤算法基于用户的协同过滤&#xff08;User-Based Collaborative Filtering&#xff09;基于内容的协同过滤 基于模型的协同过滤算法 扩展优缺点 参考 推荐系统之神经协同过滤 原理 基于邻域的协同过滤算法 基于邻域的协同过滤算法又包括…

CrossOver2024电脑虚拟机软件详细介绍概述

CrossOver是由CodeWeavers开发的一款系统兼容软件&#xff0c;它能够在Mac和Linux操作系统上直接运行Windows应用程序&#xff0c;而无需创建或启动完整的Windows虚拟机。CrossOver通过模拟Windows应用程序所需的运行环境&#xff0c;实现了跨平台的无缝集成和高效运行。 Cross…

Unity IK 反向动力学 学习笔记

目录 Unity IK 反向动力学 ik 示例代码&#xff1a; Unity IK 反向动力学 “IK是Inverse Kinematic的缩写&#xff0c;也就是反向动力学。是根据骨骼的终节点来推算其他父节点的位置的一种方法。比如通过手的位置推算手腕、胳膊肘的骨骼的位置。” 适用的场景&#xff1a;比…