yaml文件编写

打印 上一主题 下一主题

主题 1888|帖子 1888|积分 5664

Kubernetes 支持YAML和JSON格式管理资源
JSON 格式:主要用于 api 接口之间消息的传递
YAML 格式;用于配置和管理,YAML是一种轻便的非标志性语言,内容格式人性化容易读懂
一,yaml语法格式

1.1 根本语法规则



  • 使用空格进行缩进(不使用制表符),通常使用两个或四个空格。缩进代表层级关系,同级左边对齐。
  • 符号 : 符号 - 符号 , 后面要加上空格
  • 对字母的巨细写敏感
  • 字符串要用双引号 “” 大概单引号 ‘’
  • 多行字符串使用 | 保存换行符,>代表折叠换行符
  • 符号 # 注释
  • 符号 — 表示yaml文件的开始,用来分割文件
1.2 api资源版本标签

  1. kubectl api-servions
  2. admissionregistration.k8s.io/v1     #v1业务场景下首选
  3. admissionregistration.k8s.io/v1beta1  #beta代表测试版本,现实生产环境不用
  4. apiextensions.k8s.io/v1
  5. apiextensions.k8s.io/v1beta1
  6. apiregistration.k8s.io/v1
  7. apiregistration.k8s.io/v1beta1   
  8. apps/v1                          
  9. authentication.k8s.io/v1
  10. authentication.k8s.io/v1beta1
  11. authorization.k8s.io/v1
  12. authorization.k8s.io/v1beta1
  13. autoscaling/v1
  14. autoscaling/v2beta1
  15. autoscaling/v2beta2
  16. batch/v1
  17. batch/v1beta1
  18. certificates.k8s.io/v1
  19. certificates.k8s.io/v1beta1
  20. coordination.k8s.io/v1
  21. coordination.k8s.io/v1beta1
  22. discovery.k8s.io/v1beta1
  23. events.k8s.io/v1
  24. events.k8s.io/v1beta1
  25. extensions/v1beta1
  26. flowcontrol.apiserver.k8s.io/v1beta1
  27. networking.k8s.io/v1
  28. networking.k8s.io/v1beta1
  29. node.k8s.io/v1
  30. node.k8s.io/v1beta1
  31. policy/v1beta1
  32. rbac.authorization.k8s.io/v1
  33. rbac.authorization.k8s.io/v1beta1
  34. scheduling.k8s.io/v1
  35. scheduling.k8s.io/v1beta1
  36. storage.k8s.io/v1
  37. storage.k8s.io/v1beta1
  38. v1
复制代码

1.3nginx-deployment.yaml

(1)编写yaml

  1. mkdir /opt/demo
  2. cd demo/
  3. vim nginx-deployment.yaml
  4. apiVersion: apps/v1                #指定api版本标签大写写要注意  kubectl explain deployment
  5. kind: Deployment                #定义资源的类型/角色,deployment为副本控制器,此处资源类型可以是Deployment、Job、Ingress、Service等
  6. metadata:                                        #定义资源的元数据信息,比如资源的名称、namespace、标签等信息
  7.   name: nginx-deployment        #定义资源的名称,在同一个namespace空间中必须是唯一的
  8.   labels:                                #定义Deployment资源标签
  9.     app: nginx       
  10. spec:                                        #定义deployment资源需要的参数属性,诸如是否在容器失败时重新启动容器的属性
  11.   replicas: 3                        #定义副本数量
  12.   selector:                                #定义标签选择器
  13.     matchLabels:                #定义匹配标签
  14.       app: nginx                #需与 .spec.template.metadata.labels 定义的标签保持一致
  15.   template:                                #定义业务模板,如果有多个副本,所有副本的属性会按照模板的相关配置进行匹配
  16.     metadata:
  17.       labels:           #定义Pod副本将使用的标签,需与 .spec.selector.matchLabels 定义的标签保持一致
  18.         app: nginx
  19.     spec:
  20.       containers:                                #定义容器属性
  21.       - name: nginx                                #定义一个容器名,一个 - name: 定义一个容器
  22.         image: nginx:1.15.4                #定义容器使用的镜像以及版本
  23.         ports:
  24.         - containerPort: 80                #定义容器的对外的端口
  25. #查看资源配置清单
  26. kubectl get deployment nginx -o yaml
  27. #解释资源配置清单
  28. kubectl explain deployment.metadata
  29. kubectl get service nginx -o yaml
  30. kubectl explain service.metadata
  31. #修改资源配置清单并应用
  32. 离线修改:
  33. 修改yaml文件,并用 kubectl·apply -f·xxxx.yaml·文件使之生效
  34. 当apply不生效时,先使用delete清除资源,再apply创建资源
  35. kubectl get service nginx -o yaml >.nginx-svc.yaml  #使用重定向的方式生成svc yaml文件
  36. vim nginx-svc.yaml           #修改port:8080
  37. kubectl .delete -f.nginx-svc.yaml
  38. kubectl apply -f .nginx-svc.yaml
  39. kubectl get svc
  40. 在线修改:
  41. 直接使用·kubectl edit service nginx 在线编辑资源配置清单并保存退出即时生效(如port:888)
  42. PS:此修改方式不会对yaml文件内容修改
  43. 7 metadata:
  44. pod元数据:
  45. 名称:Pod的名称,必须在命名空间内唯一。
  46. 命名空间:Pod所属的命名空间,便于资源的组织和管理。
  47. 标签和注释:用于标识和选择Pod的元数据
复制代码






(2)创建,检察资源

  1. kubectl create -f nginx-deployment.yaml    #创建资源对象
  2.    
  3.    kubectl get pods -o wide                             查看创建的pod资源
复制代码

1.4创建service服务对外提供访问并测试

(1)编写yaml

  1. vim nginx-service.yaml
  2. apiVersion: v1          # API 版本,指定使用的 Kubernetes API 版本
  3. kind: Service           # 资源类型,表示创建一个 Service
  4. metadata:               # 元数据部分,包含服务的基本信息
  5.   name: nginx-service   # 服务名称,用于识别该 Service
  6.   labels:               # 标签,用于标识和选择相关资源
  7.     app: nginx          # 标签键值对,便于选择器使用
  8. spec:                   # 规格部分,定义服务的行为
  9.   type: NodePort # 服务类型NodePort,允许通过节点的IP和指定端口访问服务,不设置会自定义端口从30000~32767
  10.   ports:                # 服务暴露的端口配置
  11.   - port: 80            # 服务端口,客户端通过此端口访问服务
  12.     targetPort: 80      # 目标端口,实际后端 Pod 上的端口
  13.   selector:             # 选择器,用于将流量路由到特定的 Pods
  14.     app: nginx          # 选择具有相同标签的 Pods
  15.    
  16.     注意标签要和nginx-deployment.yaml一致
  17.     kubectl get service nginx-service -o yaml
  18.   
复制代码

(2)创建资源对象,并检察

  1. kubectl create -f nginx-service.yaml     #创建资源对象
  2. kubectl get svc     #查看创建的service
复制代码
呆板svc中已经有nginx-service

(3)在欣赏器访问

  1. http://192.168.88.30:31642
  2. http://192.168.88.40:31642
复制代码


总结
二,k8s中的pod

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.创建nginx

1.1编写nginx-1.yaml

  1. cd /opt/demo
  2. vim nginx-1.yaml
  3. apiVersion: apps/v1
  4. kind: Deployment
  5. metadata:
  6.   name: nginx-1
  7.   namespace: default
  8.   labels:
  9.     app: myapp
  10. spec:
  11.   replicas: 3
  12.   selector:
  13.     matchLabels:
  14.       app: myapp
  15.   template:
  16.     metadata:
  17.       labels:
  18.         app: myapp
  19.     spec:
  20.       containers:
  21.         - name: myapp
  22.           image: nginx:latest
  23.           ports:
  24.             - name: http
  25.               containerPort: 80
  26. kubectl create -f nginx-1.yaml
  27. kubectl get pod
  28. kubectl get pod -o wide
  29. curl -I 10.244.2.157
  30. kubectl get pod --show-labels
  31. kubectl get pod -A
  32. kubectl describe deployment.apps nginx-1
复制代码



1.2创建svc

  1. cd /opt/demo
  2. vim nginx-svc1.yaml
  3. apiVersion: vl
  4. kind: Service
  5. metadata:
  6.   name: nginx-1
  7.   namespace: default
  8. spec:
  9.   type: NodePort
  10.   ports:
  11.   - port: 8080
  12.     targetPort: 80
  13.     nodePort: 32222
  14.   selector:
  15.     app: myapp
  16.    
  17.     kubectl apply -f nginx-svc1.yaml
  18.     kubectl get pod,svc
复制代码

2.创建redis

2.1编写redis-1.yaml

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4.   name: redis-1
  5.   labels:
  6.     app: redis
  7. spec:
  8.   replicas: 1
  9.   selector:
  10.     matchLabels:
  11.       app: redis
  12.   template:
  13.     metadata:
  14.       labels:
  15.         app: redis
  16.     spec:
  17.       containers:
  18.         - name: redis
  19.           image: redis:latest
  20.           ports:
  21.             - containerPort: 6379
  22. ---
  23. apiVersion: v1
  24. kind: Service
  25. metadata:
  26.   name: redis-service4
  27.   labels:
  28.     app: redis
  29. spec:
  30.   type: NodePort
  31.   ports:
  32.   - port: 6379
  33.     targetPort: 6370
  34.     nodePort: 32223
  35.   selector:
  36.     app: redis
  37. kubectl apply -f redis-1.yaml
  38. kubectl get pod,svc
复制代码


四,快速创建yaml文件

1.kubectl run --dry-run=client 打印相应的 API 对象而不执行创建

  1. kubectl run nginx-test --image=nginx --port=80 --dry-run=client
  2. kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client
复制代码

2.检察生成yaml格式

  1. kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o yaml
  2. kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o yaml
复制代码


3.检察生成json格式

  1. kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o json
  2. kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o json
复制代码



4.使用yaml格式导出生成模板,并进行修改以及删除一些不必要的参数

  1. kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o yaml > nginx-test.yaml
  2. kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o yaml  > nginx-deploy.yaml
复制代码


5.生成的yaml文件

  1. vim nginx-test.yaml
  2. apiVersion: v1
  3. kind: Pod
  4. metadata:
  5.   creationTimestamp: null     #删除
  6.   labels:
  7.     run: nginx-test
  8.   name: nginx-test
  9. spec:
  10.   containers:
  11.   - image: nginx
  12.     name: nginx-test
  13.     ports:
  14.     - containerPort: 80
  15.     resources: {}             #删除
  16.   dnsPolicy: ClusterFirst
  17.   restartPolicy: Always
  18. status: {}                    #删除
复制代码
6.将现有的资源生成模板导出

  1. kubectl get svc nginx-service -o yaml
复制代码


7.生存到文件中

  1. kubectl get svc nginx-service -o yaml
  2. > my-svc.yaml
复制代码

8.检察字段资助信息,可一层层的检察相关资源对象的资助信息

  1. kubectl explain deployments.spec.template.spec.containers
  2. kubectl explain pods.spec.containers
复制代码
总结
1.快速创建yaml文件
(1)–dry-run 下令生成
  1. kubectl run my-deploy --image=nginx --dry-run=client -o yaml > my-deploy.yaml
复制代码
(2)get下令导出
  1. kubectl get svc nginx-service -o yaml
  2. > my-svc.yaml或kubectl edit svc nginx-service  #复制配置,再粘贴到新文件
复制代码
2.yaml文件的学习方法:
(1)多看官方写的,能读懂理解的
(2)能照着现场的文件改着用
(3)遇到不懂的,用kubectl explain 下令检察
3.yaml文件构成
(1)控制定义,主要用来形貌资源预设的状态,控制类型:deployment,statusfulset,service。需要控制副本数量,使用的容器镜像,预先设置的配置参数和环境变量
metadata,selector,template,spec
(2)被控制对象,被控制器(deployment,statusfulset)管理的资源实例(pod),对控制对象的定义,状态由yaml文件决定

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

美食家大橙子

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表