pod的yaml文件解析

Bertha 。 2023-07-10 08:44 34阅读 0赞

参考:

https://www.cnblogs.com/flying1819/articles/9039529.html\#\_label1

https://blog.csdn.net/BigData\_Mining/article/details/88535356

yaml语法

大小写敏感
使用缩进表示层级关系
缩进时不允许使用Tab键,只允许使用空格
缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
”#” 表示注释,从这个字符一直到行尾,都会被解析器忽略  
在Kubernetes中,只需要知道Lists和Maps两种结构类型即可

map

就是一个键值对

  1. apiVersion: v1

list

就是数组

  1. args:
  2. - beijing
  3. - shanghai
  4. - shenzhen
  5. - guangzhou

map和list可以互相包含:

  1. spec:
  2. containers:
  3. - name: front-end
  4. image: nginx
  5. ports:
  6. - containerPort: 80
  7. - name: flaskapp-demo
  8. image: jcdemo/flaskapp
  9. ports: 8080

翻译为json:

  1. "spec": {
  2. "containers": [{
  3. "name": "front-end",
  4. "image": "nginx",
  5. "ports": [{
  6. "containerPort": "80"
  7. }]
  8. }, {
  9. "name": "flaskapp-demo",
  10. "image": "jcdemo/flaskapp",
  11. "ports": [{
  12. "containerPort": "5000"
  13. }]
  14. }]
  15. }

pod配置

  1. # yaml格式的pod定义文件完整内容:
  2. apiVersion: v1   #必选,指定api版本,此值必须在kubectl apiversion中
  3. kind: Pod       #必选,定创建资源的角色/类型
  4. metadata:       #必选,元数据/属性
  5. name: string   #必选,Pod名称,在同一个namespace中必须唯一
  6. namespace: string  #必选,Pod所属的命名空间
  7. labels:       #设定资源的标签
  8. - KEY: VALUE   #自定义标签名字和值
  9. annotations:   #自定义注解列表
  10. - name: string #自定义注解名字
  11. spec:        #必选,Pod中容器的详细定义
  12. containers:    #必选,Pod中容器列表
  13. - name: string   #必选,容器名称
  14. image: string   #必选,镜像名称或地址(如1.1.1.1:5000/test/chat:latest)
  15. imagePullPolicy: [Always | Never | IfNotPresent] #获取镜像的策略
  16. #Alawys表示下载镜像
  17. #IfnotPresent表示优先使用本地镜像,否则下载镜像
  18. #Nerver表示仅使用本地镜像
  19. command: [string]   #容器的启动命令列表,覆盖dockerfile中的Entrypoint
  20. #如不指定,使用打包时使用的启动命令
  21. args: [string]    #容器的启动命令参数列表,覆盖dockerfile的CMD
  22. workingDir: string #容器的工作目录
  23. volumeMounts:     #挂载到容器内部的持久存储卷配置
  24. - name: string    #引用的共享存储卷的名称,需用volumes[]部分定义的的卷名
  25. mountPath: string #存储卷在容器内mount的绝对路径,应少于512字符
  26. readOnly: boolean #是否为只读模式
  27. ports:       #需要暴露的端口库号列表
  28. - name: string    #端口号名称
  29. containerPort: int #容器需要监听的端口号
  30. hostPort: int    #容器所在主机需要监听的端口号,默认与Container相同
  31. protocol: [TCP|UDP] #端口协议,支持TCP和UDP,默认TCP
  32. env:        #容器运行前需设置的环境变量列表
  33. - name: string   #环境变量名称
  34. value: string   #环境变量的值
  35. resources:   #资源限制和请求的设置
  36. requests:   #容器运行时最低资源需求,也就是最少需要多少资源容器才能正常运行
  37. cpu: float/intm  #Cpu请求,容器启动的初始可用数量,单位为core数,如0.1或100m
  38. #将用于docker run --cpu-shares参数,最小为0.001(10m)
  39. memory: intMi/Gi #内存请求,容器启动的初始可用数量,单位为Mib/Gib,如100Mi
  40. #将用于docker run --memory参数
  41. limits:     #资源最大限制的设置
  42. cpu: float   #Cpu的限制
  43. memory: intMi #内存限制
  44. livenessProbe:   #对Pod内容器健康检查的设置,当探测无响应几次后将自动重启容器
  45. #检查方法有exec、httpGet和tcpSocket,一个容器只需设置其中之一即可
  46. exec:       #对Pod容器内检查方式设置为exec方式
  47. command: [string] #exec方式需要制定的命令或脚本
  48. httpGet:     #容器健康检查方法设置为HttpGet,需要制定Path、port
  49. path: string #URI地址
  50. port: number
  51. host: string #主机地址
  52. scheme: string #如HTTP
  53. HttpHeaders:
  54. - name: string
  55. value: string
  56. tcpSocket:       #容器健康检查方式设置为tcpSocket方式
  57. port: number
  58. initialDelaySeconds: 0 #第一次检测在容器启动后多长时间后开始,单位为秒
  59. timeoutSeconds: 0   #对容器健康检查探测等待响应的超时时间,单位秒,默认1秒
  60. periodSeconds: 0   #对容器监控检查的定期探测时间设置,单位秒,默认10秒一次
  61. successThreshold: 0
  62. failureThreshold: 0
  63. securityContext:
  64. privileged: false
  65. lifecycle: #生命周期管理
  66. postStart: #容器运行之前运行的任务
  67. exec:
  68. command:
  69. - 'sh'
  70. - 'yum upgrade -y'
  71. preStop: #容器关闭之前运行的任务
  72. exec:
  73. command: ['service httpd stop']
  74. imagePullSecrets:   #Pull镜像时使用的secret名称,以key:secretkey格式指定
  75. - name: string
  76. hostNetwork: false  #是否使用主机网络模式,默认false,true表示使用宿主机网络
  77. restartPolicy: [Always | Never | OnFailure] #Pod的重启策略
  78. #Always表示一旦不管以何种方式终止运行,kubelet都将重启,
  79. #OnFailure表示只有Pod以非0退出码退出才重启
  80. #Nerver表示不再重启该Pod(只运行一次)
  81. nodeSelector: : #在哪些节点运行,将该Pod调度到包含这个label的node上
  82. #先给主机打标签kubectl label nodes kube-node1 zone=node1
  83. zone: node1
  84. volumes:     #在该pod上定义共享存储卷列表(定义一组挂载设备列表)
  85. - name: string    #共享存储卷名称 (volumes类型有很多种)
  86. emptyDir: { }   #类型为emtyDir的存储卷,与Pod同生命周期的一个临时目录。为空值
  87. hostPath:   #类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录
  88. path: string   #Pod所在宿主机的目录,将被用于同期中mount的目录
  89. secret:       #类型为secret的存储卷,挂载集群与定义的secre对象到容器内部
  90. scretname: string
  91. items:
  92. - key: string
  93. path: string
  94. configMap:    #类型为configMap的存储卷,挂载预定义的configMap对象到容器内
  95. name: string
  96. items:
  97. - key: string
  98. path: string

例:

  1. #test-pod
  2. apiVersion: v1 #指定api版本,此值必须在kubectl apiversion中
  3. kind: Pod #指定创建资源的角色/类型
  4. metadata: #资源的元数据/属性
  5. name: test-pod #资源的名字,在同一个namespace中必须唯一
  6. labels: #设定资源的标签
  7. k8s-app: apache
  8. version: v1
  9. kubernetes.io/cluster-service: "true"
  10. annotations: #自定义注解列表
  11. - name: String #自定义注解名字
  12. spec: #specification of the resource content 指定该资源的内容
  13. restartPolicy: Always #表明该容器一直运行,默认k8s的策略,在此容器退出后,会立即创建一个相同的容器
  14. nodeSelector: #节点选择,先给主机打标签kubectl label nodes kube-node1 zone=node1
  15. zone: node1
  16. containers:
  17. - name: test-pod #容器的名字
  18. image: 10.192.21.18:5000/test/chat:latest #容器使用的镜像地址
  19. imagePullPolicy: Never #三个选择Always、Never、IfNotPresent,每次启动时检查和更新(从registery)images的策略,
  20. # Always,每次都检查
  21. # Never,每次都不检查(不管本地是否有)
  22. # IfNotPresent,如果本地有就不检查,如果没有就拉取
  23. command: ['sh'] #启动容器的运行命令,将覆盖容器中的Entrypoint,对应Dockefile中的ENTRYPOINT
  24. args: ["$(str)"] #启动容器的命令参数,对应Dockerfile中CMD参数
  25. env: #指定容器中的环境变量
  26. - name: str #变量的名字
  27. value: "/etc/run.sh" #变量的值
  28. resources: #资源管理
  29. requests: #容器运行时,最低资源需求,也就是说最少需要多少资源容器才能正常运行
  30. cpu: 0.1 #CPU资源(核数),两种方式,浮点数或者是整数+m,0.1=100m,最少值为0.001核(1m)
  31. memory: 32Mi #内存使用量
  32. limits: #资源限制
  33. cpu: 0.5
  34. memory: 1000Mi
  35. ports:
  36. - containerPort: 80 #容器开发对外的端口
  37. name: httpd #名称
  38. protocol: TCP
  39. livenessProbe: #pod内容器健康检查的设置
  40. httpGet: #通过httpget检查健康,返回200-399之间,则认为容器正常
  41. path: / #URI地址
  42. port: 80
  43. #host: 127.0.0.1 #主机地址
  44. scheme: HTTP
  45. initialDelaySeconds: 180 #表明第一次检测在容器启动后多长时间后开始
  46. timeoutSeconds: 5 #检测的超时时间
  47. periodSeconds: 15 #检查间隔时间
  48. #也可以用这种方法
  49. #exec: 执行命令的方法进行监测,如果其退出码不为0,则认为容器正常
  50. # command:
  51. # - cat
  52. # - /tmp/health
  53. #也可以用这种方法
  54. #tcpSocket: //通过tcpSocket检查健康
  55. # port: number
  56. lifecycle: #生命周期管理
  57. postStart: #容器运行之前运行的任务
  58. exec:
  59. command:
  60. - 'sh'
  61. - 'yum upgrade -y'
  62. preStop:#容器关闭之前运行的任务
  63. exec:
  64. command: ['service httpd stop']
  65. volumeMounts: #挂载持久存储卷
  66. - name: volume #挂载设备的名字,与volumes[*].name 需要对应
  67. mountPath: /data #挂载到容器的某个路径下
  68. readOnly: True
  69. volumes: #定义一组挂载设备
  70. - name: volume #定义一个挂载设备的名字
  71. emptyDir: { }
  72. hostPath:
  73. path: /opt #挂载设备类型为hostPath,路径为宿主机下的/opt,这里设备类型支持很多种
  74. #nfs

发表评论

表情:
评论列表 (有 0 条评论,34人围观)

还没有评论,来说两句吧...

相关阅读