资源配置清单详解

一、Pod资源配置

1、非Object配置

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. spec:
  5. activeDeadlineSeconds: <integer>
  6. automountServiceAccountToken: <boolean>
  7. dnsPolicy: <string> # 'ClusterFirst', 'Default' or 'None'
  8. enableServiceLinks: <boolean>
  9. hostIPC: <boolean>
  10. hostNetwork: <boolean> # 是否使用宿主机网路,类似于--network=host
  11. hostPID: <boolean>
  12. hostname: <string> # 设置主机名称,类似于--hostname
  13. nodeName: <string> #
  14. nodeSelector: <map[string]string> # 节点标签选择器
  15. priority: <integer>
  16. priorityClassName: <string>
  17. restartPolicy: <string> # 重启策略:Always, OnFailure, Never
  18. runtimeClassName: <string>
  19. schedulerName: <string>
  20. serviceAccount: <string>
  21. serviceAccountName: <string>
  22. shareProcessNamespace: <boolean>
  23. subdomain: <string>
  24. terminationGracePeriodSeconds: <integer>

2、spec.affinity

2.1、spec.affinity.nodeAffinity:节点亲和性配置

  1. spec:
  2. affinity: <Object>
  3. nodeAffinity: <Object>
  4. requiredDuringSchedulingIgnoredDuringExecution: <Object>
  5. nodeSelectorTerms: <[]Object> -required-
  6. - matchExpressions: <[]Object>
  7. - key: <string> -required-
  8. operator: <string> -required- # 设置键值关系(In, NotIn, Exists, DoesNotExist)
  9. values: <[]string>
  10. - value1
  11. - value2
  12. matchFields: <[]Object> # 通过节点字段
  13. - key: <string> -required-
  14. operator: <string> -required- # 设置键值关系(In, NotIn, Exists, DoesNotExist)
  15. values: <[]string>
  16. - value1
  17. - value2
  18. preferredDuringSchedulingIgnoredDuringExecution: <[]Object>
  19. - weight: <integer> -required-
  20. preference: <Object> -required-
  21. matchExpressions: <[]Object> # 通过节点标签
  22. - key: <string> -required-
  23. operator: <string> -required- # 设置键值关系(In, NotIn, Exists, DoesNotExist)
  24. values: <[]string>
  25. - value1
  26. - value2
  27. matchFields: <[]Object> # 通过节点字段
  28. - key: <string> -required-
  29. operator: <string> -required- # 设置键值关系(In, NotIn, Exists, DoesNotExist)
  30. values: <[]string>
  31. - value1
  32. - value2

2.2、spec.affinity.podAffinity:pod亲和性配置

  1. spec:
  2. affinity: <Object>
  3. podAffinity: <Object>
  4. requiredDuringSchedulingIgnoredDuringExecution: <[]Object>
  5. namespaces: <[]string>
  6. topologyKey: <string> -required-
  7. labelSelector: <Object>
  8. matchLabels: <map[string]string>
  9. key1: value1
  10. key2: value2
  11. matchExpressions:
  12. key: <string> -required-
  13. operator: <string> -required- # 设置键值关系(In, NotIn, Exists, DoesNotExist)
  14. values: <[]string>
  15. - value1
  16. - value2
  17. preferredDuringSchedulingIgnoredDuringExecution: <[]Object>
  18. - weight: <integer> -required-
  19. podAffinityTerm: <Object> -required-
  20. namespaces: <[]string>
  21. topologyKey: <string> -required-
  22. labelSelector: <Object>
  23. matchLabels: <map[string]string>
  24. key1: value1
  25. key2: value2
  26. matchExpressions:
  27. key: <string> -required-
  28. operator: <string> -required- # 设置键值关系(In, NotIn, Exists, DoesNotExist)
  29. values: <[]string>
  30. - value1
  31. - value2

2.3、spec.affinity.podAntiAffinity:pod反亲和性配置

  1. spec:
  2. affinity: <Object>
  3. podAntiAffinity: <Object>
  4. requiredDuringSchedulingIgnoredDuringExecution: <[]Object>
  5. namespaces: <[]string>
  6. topologyKey: <string> -required-
  7. labelSelector: <Object>
  8. matchLabels: <map[string]string>
  9. key1: value1
  10. key2: value2
  11. matchExpressions:
  12. key: <string> -required-
  13. operator: <string> -required- # 设置键值关系(In, NotIn, Exists, DoesNotExist)
  14. values: <[]string>
  15. - value1
  16. - value2
  17. preferredDuringSchedulingIgnoredDuringExecution: <[]Object>
  18. - weight: <integer> -required-
  19. podAffinityTerm: <Object> -required-
  20. namespaces: <[]string>
  21. topologyKey: <string> -required-
  22. labelSelector: <Object>
  23. matchLabels: <map[string]string>
  24. key1: value1
  25. key2: value2
  26. matchExpressions:
  27. key: <string> -required-
  28. operator: <string> -required- # 设置键值关系(In, NotIn, Exists, DoesNotExist)
  29. values: <[]string>
  30. - value1
  31. - value2

3、spec.containers:容器配置

  1. spec:
  2. containers: <[]Object> # 容器配置
  3. - name: <string> -required- # 容器名、DNS_LABEL
  4. image: <string> # 镜像名称
  5. imagePullPolicy: <string> # 镜像拉取策略,Always、Never、IfNotPresent
  6. command: ["/bin/sh"] # 类似于dockerfile中的entrypiont
  7. args: ["-c", "while true; do echo hello; sleep 10;done"] # 类似于dockerfile中的cmd
  8. stdin: <boolean>
  9. stdinOnce: <boolean>
  10. terminationMessagePath: <string>
  11. terminationMessagePolicy: <string>
  12. tty: <boolean>
  13. workingDir: <string>
  14. ```持续更新
  15. ### 3.1、spec.containers.ports:容器端口号配置
  16. ```yaml
  17. spec:
  18. containers: <[]Object>
  19. ports: <[]Object> # 端口配置
  20. - name: <string> # 定义端口名
  21. containerPort: <integer> -required- # 容器暴露的端口
  22. protocol: <string> # 端口协议,UDP, TCP, or SCTP
  23. hostIP: <string> # 指定要绑定的主机IP
  24. hostPort: <integer> # 指定主机开放的端口

3.2、spec.containers.env:环境变量设置

  1. spec:持续更新
  2. containers: <[]Object>
  3. env: <[]Object> #环境变量配置
  4. - name: <string> -required- # 环境变量名称,如:MYSQL_ROOT_PASSWORD
  5. value: <string> # 设置环境变量的值
  6. valueFrom: <Object>
  7. configMapKeyRef: <Object> # 指定从configmap的键名获取
  8. name: <string> # configmap名称
  9. key: <string> -required- # configmap资源清单下data字段下的键名
  10. optional: <boolean>
  11. fieldRef: <Object>
  12. apiVersion: <string>
  13. fieldPath: <string> -required-
  14. resourceFieldRef: <Object>
  15. containerName: <string>
  16. divisor: <string>
  17. resource: <string> -required-
  18. secretKeyRef: <Object> # 指定从Secret的键名获取
  19. name: <string> # Secret名称
  20. key: <string> -required- # Secret资源清单下data字段下的键名
  21. optional: <boolean>
  22. envFrom: <[]Object>
  23. - configMapRef: <Object> # 指定从configmap资源获取
  24. name: <string> # 指定configmap名称
  25. optional: <boolean>
  26. secretRef: <Object> # 指定从Secret资源获取
  27. name: <string> # 指定Secret名称
  28. optional: <boolean>
  29. prefix: <string>

3.3、spec.containers.volumeMounts:容器内部存储卷挂载配置

  1. spec:持续更新
  2. containers: <[]Object>
  3. volumeMounts: <[]Object> # 容器挂载卷配置
  4. - name: <string> -required- # 设置挂载卷名称
  5. mountPath: <string> -required- # 设置挂载存储卷的路径
  6. readOnly: <boolean> # 是否只读,默认为false
  7. mountPropagation: <string>
  8. subPath: <string>
  9. subPathExpr: <string>

3.4、spec.containers.livenessProbe:存活状态检测

  1. spec:
  2. containers: <[]Object>
  3. livenessProbe: <Object> # 存活探针
  4. exec: <Object>
  5. command: <[]string>
  6. httpGet: <Object>
  7. port: <string> -required-
  8. path: <string>
  9. host: <string>
  10. httpHeaders: <[]Object>
  11. name: <string> -required-
  12. value: <string> -required-
  13. scheme: <string>
  14. tcpSocket: <Object> # TCPSocket指定涉及TCP端口的操作
  15. port: <string> -required- # 容器暴露的端口
  16. host: <string> # 默认pod的IP
  17. initialDelaySeconds: <integer> # 设置多少秒后开始探测
  18. failureThreshold: <integer> # 设置连续探测多少次失败后,标记为失败,默认三次
  19. successThreshold: <integer> # 设置失败后探测的最小连续成功次数,默认为1
  20. timeoutSeconds: <integer> # 设置探测超时的秒数,默认1s
  21. periodSeconds: <integer> # 设置执行探测的频率(以秒为单位),默认1s

3.5、spec.containers.readinessProbe:就绪状态检测

  1. spec:
  2. containers: <[]Object>
  3. readinessProbe: <Object> # 就绪探针
  4. exec: <Object>
  5. command: <[]string>
  6. httpGet: <Object>
  7. port: <string> -required-
  8. path: <string>
  9. host: <string>
  10. httpHeaders: <[]Object>
  11. name: <string> -required-
  12. value: <string> -required-
  13. scheme: <string>
  14. tcpSocket: <Object> # TCPSocket指定涉及TCP端口的操作持续更新
  15. port: <string> -required- # 容器暴露的端口
  16. host: <string> # 默认pod的IP
  17. initialDelaySeconds: <integer> # 设置多少秒后开始探测
  18. failureThreshold: <integer> # 设置连续探测多少次失败后,标记为失败,默认三次
  19. successThreshold: <integer> # 设置失败后探测的最小连续成功次数,默认为1
  20. timeoutSeconds: <integer> # 设置探测超时的秒数,默认1s
  21. periodSeconds: <integer> # 设置执行探测的频率(以秒为单位),默认1s

3.6、spec.containers.resources:资源限制

  1. spec:
  2. containers: <[]Object>
  3. resources: <Object> # 资源配置
  4. requests: <map[string]string> # 要求分配的最小资源
  5. memory: "1024Mi" # Mi,Gi
  6. cpu: "500m" # 500m代表0.5CPU
  7. limits: <map[string]string> # 能够分配的最大资源
  8. memory:
  9. cpu:

3.7、spec.containers.lifecycle

  1. spec:
  2. containers: <[]Object>
  3. lifecycle: <Object>
  4. postStart: <Object>
  5. exec: <Object>
  6. command: <[]string>
  7. httpGet: <Object>持续更新
  8. port: <string> -required-
  9. path: <string>
  10. host: <string>
  11. httpHeaders: <[]Object>
  12. name: <string> -required-
  13. value: <string> -required-
  14. scheme: <string>
  15. tcpSocket: <Object>
  16. port: <string> -required- # 容器暴露的端口
  17. host: <string> # 默认pod的IP
  18. preStop: <Object>
  19. exec: <Object>
  20. command: <[]string>
  21. httpGet: <Object>
  22. port: <string> -required-
  23. path: <string>
  24. host: <string>
  25. httpHeaders: <[]Object>持续更新
  26. name: <string> -required-
  27. value: <string> -required-
  28. scheme: <string>
  29. tcpSocket: <Object>
  30. port: <string> -required- # 容器暴露的端口
  31. host: <string> # 默认pod的IP

3.8、spec.containers.volumeDevices

  1. spec:
  2. containers: <[]Object>
  3. volumeDevices: <[]Object>
  4. - name: <string> -required-
  5. devicePath: <string> -required-

4、spec.volumes:数据存储卷配置

4.1、spec.volumes.emptyDir:使用emptyDir存储

  1. spec:
  2. volumes: <[]Object> #数据卷配置
  3. - name: <string> -required- #设置卷名称,与volumeMounts名称对应
  4. emptyDir: <Object>
  5. medium: <string>
  6. sizeLimit: <string>

4.2、spec.volumes.hostPath:使用宿主机路径存储

  1. spec:持续更新
  2. volumes: <[]Object> #数据卷配置
  3. - name: <string> -required- #设置卷名称,与volumeMounts名称对应
  4. hostPath: <Object> #设置挂载宿主机路径
  5. path: <string> -required-
  6. type: <string> #类型:DirectoryOrCreate、Directory、FileOrCreate、File、Socket、CharDevice、BlockDevice

4.3、spec.volumes.nfs:使用nfs网络存储

  1. spec:
  2. volumes: <[]Object> #数据卷配置
  3. - name: <string> -required- #设置卷名称,与volumeMounts名称对应
  4. nfs: <Object> #设置NFS服务器
  5. server: <string> -required- #设置NFS服务器地址
  6. path: <string> -required- #设置NFS服务器路径(该路径必须存在)持续更新
  7. readOnly: <boolean> #设置是否只读

4.4、spec.volumes.configMap:使用configmap存储

  1. spec:
  2. volumes: <[]Object> #数据卷配置
  3. - name: <string> -required- #设置卷名称,与volumeMounts名称对应
  4. configMap: <Object>
  5. name: <string> #configmap名称
  6. defaultMode: <integer> #权限设置0~0777,默认0664
  7. optional: <boolean> #指定是否必须定义configmap或其keys
  8. items: <[]Object>
  9. - key: <string> -required-
  10. path: <string> -required-
  11. mode: <integer>

4.5、spec.volumes.secret:使用Secret存储

  1. spec:
  2. volumes: <[]Object> #数据卷配置
  3. - name: <string> -required- #设置卷名称,与volumeMounts名称对应
  4. secret: <Object>
  5. secretName: <string>
  6. defaultMode: <integer> #权限设置0~0777,默认0664
  7. optional: <boolean> #指定是否必须定义configmap或其keys

4.6、spec.volumes.persistentVolumeClaim:使用pvc存储

  1. spec:
  2. volumes: <[]Object> #数据卷配置
  3. - name: <string> -required- #设置卷名称,与volumeMounts名称对应
  4. persistentVolumeClaim: <Object>
  5. claimName: <string> -required- #pvc名称
  6. readOnly: <boolean>

4.7、spec.volumes.storageos

  1. spec:
  2. volumes: <[]Object> #数据卷配置
  3. - name: <string> -required- #设置卷名称,与volumeMounts名称对应
  4. storageos: <Object>
  5. volumeName: <string>
  6. volumeNamespace: <string>
  7. fsType: <string>
  8. secretRef: <Object>
  9. name: <string>

5、spec.tolerations:污点容忍度配置

  1. spec:
  2. tolerations: <[]Object>
  3. effect: <string> # NoSchedule, PreferNoSchedule, NoExecute
  4. key: <string>
  5. value: <string>
  6. operator: <string> # Exists, Equal
  7. tolerationSeconds: <integer>

6、spec.securityContext

  1. spec:
  2. securityContext: <Object>
  3. fsGroup: <boolean>
  4. runAsGroup: <boolean>
  5. runAsNonRoot: <boolean>
  6. runAsUser: <boolean>
  7. supplementalGroups: <[]integer>
  8. seLinuxOptions: <Object>
  9. level: <string>
  10. role: <string>
  11. type: <string>
  12. user: <string>
  13. sysctls: <[]Object>
  14. name: <string> -required-
  15. value: <string> -required-

二、Deployment资源配置(deploy)

  1. apiVersion: extensions/v1beta1
  2. kind: Deployment
  3. metadata:
  4. spec:
  5. minReadySeconds: <integer> # 设置pod准备就绪的最小秒数
  6. paused: <boolean> # 表示部署已暂停并且deploy控制器不会处理该部署
  7. progressDeadlineSeconds: <integer>
  8. replicas: <integer> # pod的副本数量
  9. revisionHistoryLimit: <integer> # 设置保留的历史版本个数,默认是10
  10. rollbackTo: <Object>
  11. revision: <integer> # 设置回滚的版本,设置为0则回滚到上一个版本
  12. selector: <Object> # pod标签选择器,匹配pod标签,默认使用pods的标签
  13. matchLabels: <map[string]string>
  14. key1: value1
  15. key2: value2
  16. matchExpressions: <[]Object>
  17. operator: <string> -required- #设定标签键与一组值的关系,In, NotIn, Exists and DoesNotExist
  18. key: <string> -required-
  19. values: <[]string>
  20. strategy: <Object> # 将现有pod替换为新pod的部署策略
  21. rollingUpdate: <Object> # 滚动更新配置参数,仅当类型为RollingUpdate
  22. maxSurge: <string> # 滚动更新过程产生的最大pod数量,可以是个数,也可以是百分比
  23. maxUnavailable: <string> #
  24. type: <string> #部署类型,Recreate,RollingUpdate
  25. template: <Object> -required- # 同pod配置

三、StatefulSet资源配置(sts)

  1. apiVersion: apps/v1
  2. kind: StatefulSet
  3. metadata:
  4. spec:
  5. podManagementPolicy: <string> # pod更新替换策略,OrderedReady(默认)、Parallel
  6. replicas: <integer> # 副本数
  7. revisionHistoryLimit: <integer> # 历史版本
  8. serviceName: <string> -required- # 设置headless服务名
  9. selector: <Object> -required- # 标签选择器
  10. matchLabels: <map[string]string>
  11. key1: value1
  12. key2: value2
  13. matchExpressions: <[]Object>
  14. operator: <string> -required- #设定标签键与一组值的关系,In, NotIn, Exists and DoesNotExist
  15. key: <string> -required-
  16. values: <[]string>
  17. template: <Object> -required- # 同pod配置
  18. updateStrategy: <Object>
  19. rollingUpdate: <Object>
  20. partition: <integer> # 默认为0
  21. type: <string> # 默认RollingUpdate
  22. volumeClaimTemplates: <[]Object>
  23. - apiVersion: <string>
  24. kind: <string>
  25. metadata: <Object>
  26. spec: <Object>
  27. accessModes: <[]string>
  28. resources: <Object> # 参考链接:https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/
  29. limits: <map[string]string>
  30. requests: <map[string]string>
  31. storage: 5Gi
  32. dataSource: <Object>
  33. apiGroup: <string>
  34. kind: <string> -required-
  35. name: <string> -required-
  36. selector: <Object>
  37. matchLabels: <map[string]string>
  38. key1: value1
  39. key2: value2
  40. matchExpressions: <[]Object>
  41. operator: <string> -required- #设定标签键与一组值的关系,In, NotIn, Exists and DoesNotExist
  42. key: <string> -required-
  43. values: <[]string>
  44. storageClassName: <string>
  45. volumeMode: <string>
  46. volumeName: <string>

三、DaemonSet资源配置(ds)

  1. apiVersion: extensions/v1beta1
  2. kind: DaemonSet
  3. metadata:
  4. spec:
  5. minReadySeconds: <integer>
  6. revisionHistoryLimit: <integer>
  7. selector: <Object>
  8. template: <Object> -required-
  9. templateGeneration: <integer> #已过时
  10. updateStrategy: <Object>

四、Pv资源配置

1、标配

  1. apiVersion: v1
  2. kind: PersistentVolume
  3. metadata:
  4. spec:
  5. accessModes: <[]string> # 访问模式
  6. persistentVolumeReclaimPolicy: <string> # pv空间释放时处理机制
  7. storageClassName: <string> # 当前 PY 所属的 StorageClass 的名称
  8. capacity: <map[string]string>
  9. storage: 5Gi #容量设置

2、spec.nfs

  1. spec:
  2. nfs: <Object>
  3. server: <string> -required- # nfs服务器地址
  4. path: <string> -required- # nfs服务器存储路径设置
  5. readOnly: <boolean> # 是否只读

3、spec.hostPath

  1. spec:
  2. hostPath: <Object>
  3. path: <string> -required-
  4. type: <string> # 参考链接:https://kubernetes.io/docs/concepts/storage/volumes/#hostpath

4、spec.storageos

  1. spec:
  2. storageos: <Object>
  3. fsType: <string> # "ext4", "xfs", "ntfs",未指定默认为ext4
  4. readOnly: <boolean>
  5. volumeName: <string>
  6. volumeNamespace: <string>
  7. secretRef: <Object>
  8. apiVersion: <string>
  9. kind: <string>
  10. name: <string>
  11. namespace: <string>
  12. fieldPath: <string>
  13. resourceVersion: <string>
  14. uid: <string>

五、Pvc资源配置

  1. apiVersion: v1
  2. kind: PersistentVolumeClaim
  3. metadata:
  4. spec:
  5. accessModes: <[]string>
  6. storageClassName: <string>
  7. volumeMode: <string>
  8. volumeName: <string>
  9. resources: <Object> # 参考链接:https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/
  10. limits: <map[string]string>
  11. requests: <map[string]string>
  12. storage: 5Gi
  13. dataSource: <Object>
  14. apiGroup: <string>
  15. kind: <string> -required-
  16. name: <string> -required-
  17. selector: <Object>
  18. matchLabels: <map[string]string>
  19. key1: value1
  20. key2: value2
  21. matchExpressions: <[]Object>
  22. operator: <string> -required- #设定标签键与一组值的关系,In, NotIn, Exists and DoesNotExist
  23. key: <string> -required-
  24. values: <[]string>

六、Service资源配置(svc)

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. spec:
  5. clusterIP: <string>
  6. externalIPs: <[]string>
  7. externalName: <string>
  8. externalTrafficPolicy: <string>
  9. healthCheckNodePort: <integer>
  10. loadBalancerIP: <string>
  11. loadBalancerSourceRanges: <[]string>
  12. ports: <[]Object>
  13. publishNotReadyAddresses: <boolean>
  14. selector: <map[string]string>
  15. key: value
  16. sessionAffinity: <string>
  17. sessionAffinityConfig: <Object>
  18. clientIP: <Object>
  19. timeoutSeconds: <integer>
  20. type: <string> # ExternalName, ClusterIP, NodePort, LoadBalancer

六、Ingress资源配置(ing)

  1. apiVersion: extensions/v1beta1
  2. kind: Ingress
  3. metadata:
  4. spec:
  5. backend: <Object>
  6. serviceName: <string> -required-
  7. servicePort: <string> -required-
  8. rules: <[]Object>
  9. host: <string>
  10. http: <Object>
  11. paths: <[]Object> -required-
  12. backend: <Object> -required-
  13. serviceName: <string> -required-
  14. servicePort: <string> -required-
  15. path: <string>
  16. tls: <[]Object>
  17. hosts: <[]string>
  18. secretName: <string>

七、ConfigMap资源配置(cm)

  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4. binaryData: <map[string]string>
  5. data: <map[string]string>

八、Secret资源配置

  1. apiVersion: v1
  2. kind: Secret
  3. metadata:
  4. data: <map[string]string>
  5. stringData: <map[string]string>
  6. type: <string>

九、HorizontalPodAutoscaler资源配置(hpa)

kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [options]

  1. spec:
  2. maxReplicas: <integer> -required- # 最大副本数
  3. minReplicas: <integer> # 最小副本数,默认为1
  4. targetCPUUtilizationPercentage: <integer> #
  5. scaleTargetRef: <Object> -required- #设置指定资源类型
  6. apiVersion: <string>
  7. kind: <string> -required-
  8. name: <string> -required-

十、LimitRanges资源配置(limits)

LimitRange 在名称空间中限制 Limits/Requests 的比例。如果指定了 LimitRange 对象的 spec.limits.maxLimitRequestRatio 字段,名称空间中的 Pod/容器的 request 和 limit 都不能为 0,且 limit 除以 request 的结果必须小于或等于 LimitRange 的 spec.limits.maxLimitRequestRatio

  1. apiVersion: v1
  2. kind: LimitRange
  3. metadata:
  4. name: <string>
  5. namespace: <string>
  6. labels: <map[string]string>
  7. spec:
  8. limits:
  9. - default: <map[string]string>
  10. defaultRequest: <map[string]string>
  11. max: <map[string]string>
  12. memory: xxxMi
  13. cpu: xxxm
  14. maxLimitRequestRatio: <map[string]string>
  15. memory: 2 # 限定了命名空间中任何Pod的最大内存限定(limit)不能超过最小内存的请求(request)的两倍
  16. min: <map[string]string>
  17. memory: xxxMi
  18. cpu: xxxm
  19. type: Container