其他分享
首页 > 其他分享> > k8s-deployment解析

k8s-deployment解析

作者:互联网

k8s 最全api介绍 https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#volume-v1-core

k8s env、configmap、secret外部数据加载配置

参考文档:https://www.cnblogs.com/qsing/p/15773745.html

 

# https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#volume-v1-core

apiVersion: apps/v1
kind: Deployment
metadata:
  name: centos
  namespace: test
  labels:
    app: centos
spec:
  selector:
    matchLabels:
      app: centos
  replicas: 1
  strategy: #部署策略更多策略 1.https://www.qikqiak.com/post/k8s-deployment-strategies/
    type: RollingUpdate #其他类型如下 1.重建(Recreate) 开发环境使用 2.RollingUpdate(滚动更新)
    rollingUpdate:
        maxSurge: 25% #一次可以添加多少个Pod
        maxUnavailable: 25%  #滚动更新期间最大多少个Pod不可用
  template:
    metadata:
      labels:
        app: 'centos'
    spec:
      terminationGracePeriodSeconds: 10 #优雅关闭时间,这个时间内优雅关闭未结束,k8s 强制 kill
      affinity:
        podAntiAffinity:  # pod反亲和性,尽量避免同一个应用调度到相同node
          preferredDuringSchedulingIgnoredDuringExecution: #硬需求 1.preferredDuringSchedulingIgnoredDuringExecution 软需求
            - weight: 100
              #weight 字段值的 范围是 1-100。 对于每个符合所有调度要求(资源请求、RequiredDuringScheduling 亲和性表达式等) 的节点,调度器将遍历该字段的元素来计算总和,并且如果节点匹配对应的 MatchExpressions,则添加“权重”到总和。 然后将这个评分与该节点的其他优先级函数的评分进行组合。 总分最高的节点是最优选的。
              podAffinityTerm:
                labelSelector:
                  matchExpressions:
                    - key: app
                      operator: In
                      values:
                        - centos
                topologyKey: "kubernetes.io/hostname"    
      containers:
      - name: centos
        image: centos:centos7.9.2009
        imagePullPolicy: IfNotPresent  #镜像拉取策略 1.IfNotPresent如果本地存在镜像就优先使用本地镜像。2.Never直接不再去拉取镜像了,使用本地的.如果本地不存在就报异常了。
        #3.imagePullPolicy 未被定义为特定的值,默认值设置为 Always 本地是否存在都会去仓库拉取镜像.
        env:
            #自定义变量,最常用的
            - name: DEMO_VERSION #DEMO_VERSION:直接添加变量值demov1
              value: demov1        
            #Downward API官网示例 https://kubernetes.io/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information/
            - name: CENTOS_NODE_IP
              valueFrom:
                fieldRef:  #这两种呈现 Pod 和 Container 字段的方式统称为 Downward API。
                  fieldPath: status.hostIP #获取pod 所在node IP地址设置为CHJ_NODE_IP
            - name: CENTOS_POD_IP  #变量名称
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP #获取pod自身ip地址设置为CHJ_POD_IP变量名称
            #从此清单内容中拿取变量      
            - name: DEMO_CONT_MEM #DEMO_CONT_MEM:结合valueFrom中resourceFieldRef获取容器资源字段limits.memory
              valueFrom:
                resourceFieldRef:
                  containerName: centos
                  resource: limits.memory              
        command: [ "/bin/bash", "-c", "--" ]
        args: [ "while true; do sleep 30; done;" ]
        volumeMounts: #容器内要挂载出去的位置
        - name: root-data #自定义名称,需与volumes下名称对应
          mountPath: /root  #容器内挂载镜像路径
#        - name: root-data-nfs
#          mountPath: /home  
        resources:  #qos 设置
          limits:
            cpu: 100m #pod 占单核cpu 1/10
            memory: 100Mi #内存100M
        #hostPath 卷能将主机节点文件系统上的文件或目录挂载到你的 Pod 中。 虽然这不是大多数 Pod 需要的,但是它为一些应用程序提供了强大的逃生舱。
      volumes:
      - name: root-data  #卷名称
        hostPath:         #卷类型详细见:https://kubernetes.io/zh/docs/concepts/storage/volumes/
          path: /aaa/  #宿主机存在的目录路径
          type: DirectoryOrCreate #如果在给定路径上什么都不存在,那么将根据需要创建空目录,权限设置为 0755,具有与 kubelet 相同的组和属主信息
#      - name: root-data-nfs  #指定名称必须与volumeMounts -name 一致
#        nfs: #nfs存储
#          path: /nfs/v1 #nfs服务器共享的目录
#          server: 192.168.15.111  #nfs服务器ip或是域名

        livenessProbe: #存活探针从这里开始换,1.命令方式
          failureThreshold: 3 #处于成功时状态时,探测操作至少连续多少次的失败才被视为检测不通过,显示为#failure属性.默认值为3,最小值为 1,存活探测情况下的放弃就意味着重新启动容器。        
          initialDelaySeconds: 600   #延迟检测时间
          periodSeconds: 5          #检测时间间隔
          successThreshold: 1 #处于失败状态时,探测操作至少连续多少次的成功才被人为是通过检测,显示为#success属性,默认值为1,最小值也是1
          timeoutSeconds: 3 #存活性探测的超时时长,显示为timeout属性,默认值1s,最小值也是1s          
          exec:                     #使用命令检查
            command:                #指令,类似于运行命令sh
            - cat                   #sh 后的第一个内容,直到需要输入空格,变成下一行
            - /tmp/healthy          #由于不能输入空格,需要另外声明,结果为sh cat"空格"/tmp/healthy
            
        livenessProbe:  #存活探针器配置,2.httpGet 适用于http方式的检测
          failureThreshold: 3 #处于成功时状态时,探测操作至少连续多少次的失败才被视为检测不通过,显示为#failure属性.默认值为3,最小值为 1,存活探测情况下的放弃就意味着重新启动容器。
          httpGet: #1.存活探针器三种方式 1.cmd命令方式进行探测 2.http 状态码方式 3.基于tcp端口探测
            path: /healthy #k8s源码中healthz 实现 https://github.com/kubernetes/kubernetes/blob/master/test/images/agnhost/liveness/server.go
            port: 8080    #应用程序监听端口
          initialDelaySeconds: 600 #存活性探测延迟时长,即容器启动多久之后再开始第一次探测操作,显示为delay属性.默认值为0,即容器启动后立刻便开始进行探测.
          periodSeconds: 10  #执行探测的时间间隔(单位是秒)。默认是 10 秒。最小值是 1秒,过高的频率会对Pod对象带来较大的额外开销,而过低的频率又会使得对错误的反应不及时.
          successThreshold: 1 #处于失败状态时,探测操作至少连续多少次的成功才被人为是通过检测,显示为#success属性,默认值为1,最小值也是1
          timeoutSeconds: 3 #存活性探测的超时时长,显示为timeout属性,默认值1s,最小值也是1s

        livenessProbe:  #存活探针器配置,3.tcpSocket 适用于端口方式的检测
          failureThreshold: 3 #处于成功时状态时,探测操作至少连续多少次的失败才被视为检测不通过,显示为#failure属性.默认值为3,最小值为 1,存活探测情况下的放弃就意味着重新启动容器。
            tcpSocket:           # 探针类型为tcpSocket
              port: 80     #要检测的端口
          initialDelaySeconds: 600 #存活性探测延迟时长,即容器启动多久之后再开始第一次探测操作,显示为delay属性.默认值为0,即容器启动后立刻便开始进行探测.
          periodSeconds: 10  #执行探测的时间间隔(单位是秒)。默认是 10 秒。最小值是 1秒,过高的频率会对Pod对象带来较大的额外开销,而过低的频率又会使得对错误的反应不及时.
          successThreshold: 1 #处于失败状态时,探测操作至少连续多少次的成功才被人为是通过检测,显示为#success属性,默认值为1,最小值也是1
          timeoutSeconds: 3 #存活性探测的超时时长,显示为timeout属性,默认值1s,最小值也是1s

        readinessProbe: #就绪探测器配置从这里开始换,1.命令方式
          failureThreshold: 3 #处于成功时状态时,探测操作至少连续多少次的失败才被视为检测不通过,显示为#failure属性.默认值为3,最小值为 1,存活探测情况下的放弃就意味着重新启动容器。        
          initialDelaySeconds: 600   #延迟检测时间
          periodSeconds: 5          #检测时间间隔
          successThreshold: 1 #处于失败状态时,探测操作至少连续多少次的成功才被人为是通过检测,显示为#success属性,默认值为1,最小值也是1
          timeoutSeconds: 3 #存活性探测的超时时长,显示为timeout属性,默认值1s,最小值也是1s          
          exec:                     #使用命令检查
            command:                #指令,类似于运行命令sh
            - cat                   #sh 后的第一个内容,直到需要输入空格,变成下一行
            - /tmp/healthy          #由于不能输入空格,需要另外声明,结果为sh cat"空格"/tmp/healthy

        readinessProbe:  #就绪探测器配置,2.httpGet 适用于http方式的检测
          failureThreshold: 3 #处于成功时状态时,探测操作至少连续多少次的失败才被视为检测不通过,显示为#failure属性.默认值为3,最小值为 1,存活探测情况下的放弃就意味着重新启动容器。
          httpGet: #1.存活探针器三种方式 1.cmd命令方式进行探测 2.http 状态码方式 3.基于tcp端口探测
            path: /healthy #k8s源码中healthz 实现 https://github.com/kubernetes/kubernetes/blob/master/test/images/agnhost/liveness/server.go
            port: 8080    #应用程序监听端口
          initialDelaySeconds: 600 #存活性探测延迟时长,即容器启动多久之后再开始第一次探测操作,显示为delay属性.默认值为0,即容器启动后立刻便开始进行探测.
          periodSeconds: 10  #执行探测的时间间隔(单位是秒)。默认是 10 秒。最小值是 1秒,过高的频率会对Pod对象带来较大的额外开销,而过低的频率又会使得对错误的反应不及时.
          successThreshold: 1 #处于失败状态时,探测操作至少连续多少次的成功才被人为是通过检测,显示为#success属性,默认值为1,最小值也是1
          timeoutSeconds: 3 #存活性探测的超时时长,显示为timeout属性,默认值1s,最小值也是1s

        readinessProbe:  #就绪探测器配置,3.tcpSocket 适用于端口方式的检测
          failureThreshold: 3 #处于成功时状态时,探测操作至少连续多少次的失败才被视为检测不通过,显示为#failure属性.默认值为3,最小值为  就绪探测情况下的放弃 Pod 会被打上未就绪的标签.
            tcpSocket: # 1.就绪探针三种方式 1.cmd命令方式进行探测 2.http 状态码方式 3.基于tcp端口探测
              port: 8080 #应用程序监听端口
          initialDelaySeconds: 10 #执行探测的时间间隔(单位是秒)。默认是 10 秒。最小值是 1秒,过高的频率会对Pod对象带来较大的额外开销,而过低的频率又会使得对错误的反应不及时.
          periodSeconds: 10  #执行探测的时间间隔(单位是秒)。默认是 10 秒。最小值是 1秒,过高的频率会对Pod对象带来较大的额外开销,而过低的频率又会使得对错误的反应不及时
          successThreshold: 1 #处于失败状态时,探测操作至少连续多少次的成功才被人为是通过检测,显示为#success属性,默认值为1,最小值也是1
          timeoutSeconds: 3  #存活性探测的超时时长,显示为timeout属性,默认值1s,最小值也是1s
          

 

标签:1s,解析,默认值,探测,存活,最小值,deployment,k8s,属性
来源: https://www.cnblogs.com/buyuantouluxingmingdeluxiansheng/p/16383701.html