一、资源配置清单的管理
资源清单的编写管理,都是基于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.yamlvim nginx-svc.yaml#修改port:8080kubectl 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: v1kind: Servicematadata:#元数据name: string #service的名称namespace: string#命名空间labels:#自定义标签属性列表- name: stringannotations: #自定义注解属性列表- name: stringspec:#详细描述selector: [] #label selector配置,将选择具有label标签的Pod作为管理#范围type: string #service的类型,指定service的访问方式,默认为#clusterIpclusterIP: string#虚拟服务地址sessionAffinity: string#是否支持sessionports: #service需要暴露的端口列表- name: string #端口名称protocol: string #端口协议,支持TCP和UDP,默认TCPport: 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.yamlapiVersion: v1kind: Podmetadata: name: pod-demo namespace: default labels:appname: myappappversion: v1spec: containers: - name: myapp image: nginx:latest ports: - containerPort: 80 name: http protocol: TCP#创建资源对象kubectl create -fpod-demo.yamlkubectl get pods
2.3手动编写deployment资源配置
vim depl-demo.yamlapiVersion: apps/v1kind: Deploymentmetadata:name: depl-demonamespace: defaultspec:replicas: 3selector:matchLabels:myname: myapptemplate:metadata:labels:myname: myappspec:containers:- name: myappimage: nginxports:- containerPort: 80name: httpkubectl apply -f depl-demo.yaml
2.4手动编写svc资源配置
vim svc-demo.yamlapiVersion: v1kind: Servicemetadata:name: svc-demonamespace: defaultspec:type: NodePortselector:myname: myappports:- port: 9090nodePort: 30888targetPort: 80 # clusterIP: 10.0.0.0/24kubectl apply -f svc-demo.yaml
补充:
详解k8s中的port
●port
port是k8s集群内部访问service的端口,即通过clusterIP: port可以从Pod所在的Node. 上访问到service
●nodePort
nodePort是外部访问k8s集群中service的端口,通过nodeIP: nodePort 可以从外部访问到某个service。
●targetPort
targetPort是Pod的端口,从port或nodePort来的流量经过kube-proxy 反向代理负载均衡转发到后端Pod的targetPort上,最后进入容器。
●containerPort
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.yamlkubectl 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资源配置清单文件字段的值类型:
字段: 数字 字段: 数值字段: 字符串 字段: "字符串" 字段: '字符串'字段: 字符串字段: 布尔值 字段: true|false字段: