Deployment 模板

Deployment 模板

以下是一个完整的 Deployment 模板:

apiVersion: apps/v1                        #必选,早前版本有extensions/v1beta1或apps/v1beta1
kind: Deployment                           #必选,类型为Deployment
metadata:                                  #必选,元数据信息 
  name: myapp                              #必选,Deploy的名称
  namespace: pro                           #命名空间,实际部署到的环境
  labels:                                  #标签
    app: myapp                             #应用名
    version: v1                            #版本
    env: pro                               #发布环境
    tier: frontend                         #构架,区分前后端或base基础服务
    partition: HangZhou                    #服务器地区信息
    project: k8s                           #所属项目名
spec:                                      #必选,规格说明
  replicas: 3                              #必选,副本数量
  selector:                                #标签选择器,用来选择Pod
    matchLabels:                           #标签选择器
      app: myapp                           #选择标签键值对
    matchExpressions:                      #使用标签选择表达式,如果同时两种标签选择则必须都满足
      - {key: tier, operator: In, values: [cache]}  
  minReadySeconds: 10                      #启动多长时间内容器未发生崩溃等异常状态视为就绪,默认0秒
  template:                                #必选,定义Pod的模板
    metadata:                              
      labels:                              #生成Pod的标签
        app: myapp                         #可以和选择器一致
    spec:                                  
      terminationGracePeriodSeconds: 60    #发送SIGTERM信号后等待程序关闭的时间
      restartPolicy: Always                #重启策略
      serviceAccountName: flannel          #SA账号名
      nodeSelector:                       
        disktype: SSD    
      tolerations:                         #污点信息
      - effect: NoSchedule
        operator: Exists        
      containers:                          
      - name: myapp                        #Pod内运行容器名
        image: my.com/user/myapp:1.0       #拉取镜像地址
        imagePullPolicy: IfNotPresent      
        command:                           #容器启动后的命令,还可以用["sleep", "999999"]格式
        - sh
        - -C
        - 'while true; do echo "waiting"; sleep 5; done; echo "Done"'
        args:                              #命令参数
        - '-config.file=/etc/prometheus/prometheus.yml'
        ports:                             #容器端口
        - name: http                       #端口名称
          containerPort: 8080              #指定容器内端口
          hostPort: 811                    #指定映射到的节点端口,通过节点IP:端口即能访问
          protocol: TCP                    #定义协议,还可以是UDP
        env:                               #通过环境变量的方式,直接传递自定义环境变量
        - name: LOCAL_KEY                  #本地Key
          value: value                     #key值
        - name: CONFIG_MAP_KEY             #局策略可使用configMap的配置Key
          valueFrom:                       #指定来源
            configMapKeyRef:               #来自configMap
              name: special-config         #选择name为special-config的configmap
              key: special.type            #选择的key
        resources:                         #资源信息
          requests:                        #请求最小资源
            cpu: 0.1
            memory: 100Mi
          limits:                          #限制最大资源
            cpu: 0.2
            memory: 320Mi
        livenessProbe:                     #存活探针
          httpGet:                         #采用HTTP GET方式
            path: /health                  #监测路径
            port: 8080                     #端口
            scheme: HTTP                   #方式
          initialDelaySeconds: 60          #启动后延时多久开始运行监测
          timeoutSeconds: 5                #超时时间
          successThreshold: 1              #处于失败状态时,探测至少连续成功多少次转为成功
          failureThreshold: 5              #处于成功状态时,探测至少连续失败多少次转为失败
        readinessProbe:                    #就绪探针
          httpGet:
            path: /
            port: 80
            scheme: HTTP
          initialDelaySeconds: 30
          timeoutSeconds: 5
          successThreshold: 1
          failureThreshold: 5
        volumeMounts:                      #挂载volumes中定义的磁盘
        - name: sdb                        #Volume的名称
          mountPath: /data/media           #挂载到容器中的路径
          subPath: /nginx/config           #挂载卷内目录的绝对路径
      volumes:                             #挂载卷信息
      - name: log-cache                  
        emptyDir: {}                       #挂载临时卷
      - name: sdb
        hostPath:                          #挂载节点上的目录
          path: /any/path                  #说明路径
      - name: example-volume-config        #供ConfigMap文件内容到指定路径使用
        configMap:
          name: example-volume-config      #ConfigMap中名称
          items:
          - key: log-script                #ConfigMap中的Key
            path: path/to/log-script       #指定目录下的一个相对路径path/to/log-script
      - name: nfs-client-root
        nfs:                               #挂载NFS类型储存
          server: 10.10.0.55               #NFS服务器地址
          path: /opt/public                #NFS中共享的路径
      - name: rbd-pvc
        persistentVolumeClaim:             #挂载PVC
          claimName: rbd-pvc1              #挂载已经申请的PVC