Deployment配置

apiVersion: apps/v1 #版本号
kind: Deployment #资源类型,有Pod|Deployment|Job|Ingress|Service。K8s一般不直接创建Pod,而是通过控制器和模版配置来管理和调度
                 #我们用Deployment控制器,用于管理无状态的持久化应用,例如http服务等;它用于为Pod和ReplicaSet提供声明式更新,是建构在ReplicaSet之上的更为高级的控制器。
metadata: #Pod的一些元数据,主要是资源标识和说明,常用的有name、namespace、labels等
  name: name #Pod名称
  namespace: namespace #Pod所属的命名空间,如果不写的话表示默认命名空间default
  labels: #标签 键值对的形式,用户自己指定的
    app: app
    component: component
    tier: tier
spec: #对各种资源配置的详细描述
  progressDeadlineSeconds: 600 #配置滚动升级的超时时间,默认是600s即10分钟,如果超过该progressDeadlineSeconds设定的时间,滚动升级仍未完成,则升级被视为失败,升级过程自动取消
  replicas: 1 #指定该 Deployment 有几个 Pod 副本
  selector: #标签选择器,通过它指定该控制器管理哪些pod
    matchLabels: # 标签
      app: app
      component: component
      tier: tier
  template: #被控制容器的模板,当副本数量不足时,会根据模板创建pod副本。template以上部分为控制器定义;以下部分为被控制对象,被控制的对象可以是pod,甚至是控制器
    metadata:
      labels: # selector.matchLabels 两个标签要匹配,因为deployment会监控pod,而deployment就是根据这个标签的匹配来知道要监控哪些pod,pod模板中可以定义多个pod标签,而deployment选择器中的标签只要满足pod标签中的其中一个就可以匹配上,若不匹配,则会出问题,就等于deployment一创建了这些个pod,这些pod就不归deployment管理了
        app: app
        component: component
        tier: tier
    spec:
      containers: #pod中的容器,可以有多个 但是一般只用一个
        - env: #容器运行前需设置的环境变量列表
            - name: NAME
              value: VALUE
          image:  #镜像仓库的路径/镜像的名称:镜像的标签
          readinessProbe: #检查容器是否已经处于可接受服务请求的状态,探测方式由三种,exec(执行命令探测) HttpGet(Http请求)  tcpSocket(TCP端口探测)
            httpGet:
              path: http://ip:port/probe
              port: 8080
            timeoutSeconds: 10 #对容器健康检查探测等待响应的超时时间,单位秒,默认1秒
            failureThreshold: 30
            periodSeconds: 5 #对容器监控检查的定期探测时间设置,单位秒,默认10秒一次
          imagePullPolicy: Always #镜像的下载策略。有三种:Always(总是去仓库下载) ,Never(从不去仓库下载) , IfNotPresent(如果本地没有就去仓库下载)
          name: name #容器的名称,必须字段,名称唯一且对象创建后不可以被修改
          ports: #容器公开的端口列表。在这里公开端口可以为系统提供关于容器使用的网络连接的额外信息,但主要是提供信息。在这里不指定端口不会阻止该端口被公开。任何监听容器内默认的“0.0.0.0”地址的端口都可以从网络访问
            - containerPort: 8080 #容器监听的端口号 (0 < x < 65536)
              protocol: TCP
          resources: #对资源进行限制和需求
            limits: #限制
              cpu: 2000m
              memory: 2000Mi
            requests: #需求
              cpu: 500m
              memory: 1000Mi
          terminationMessagePath: /xxx/xxx-log #日志
          terminationMessagePolicy: File
      dnsPolicy: ClusterFirst #DNS策略
      restartPolicy: Always #pod的重启策略,重启策略对同一个Pod的所有容器起作用,容器的重启由Node上的kubelet执行,
                            #Always:只要退出就会重启;OnFailure:只有在失败退出(exit code不等于0)时,才会重启;Never:只要退出,就不再重启
      terminationGracePeriodSeconds: 30 #默认是30s,关闭容器时间。如果在时间内容器还未完全停止,就发送 SIGKILL 信号强制杀死进程


#  ports:                 #定义端口
#    - port: 8080         #port 指定server端口,此端口用于集群内部访问
#      targetPort: 80     #绑定pod端口
#      nodePort: 14000    #将server 端口映射到Node节点的端口,用于外网访问
#      protocol: TCP      #端口协议
#      hostPort     <integer> # 容器要在主机上公开的端口,如果设置,主机上只能运行容器的一个副本(一般省略)
#      hostIP       <string>  # 要将外部端口绑定到的主机IP(一般省略)

#  dnsPolicy:
#  Default: 继承pod所在宿主机的域名解析设置。
#  ClusterFirst: 将优先使用kubernetes环境的dns服务(如coreDNS提供的域名解析服务),将无法解析的域名转发到系统配置的上游DNS服务器。
#  ClusterFirstWithHostNet: 适用与以hostNetwork模式运行的pod。
#  None: 忽略集群的DNS配置,需要手工通过dnsConfig自定义DNS配置。这个选项在1.9版本中开始引入,到1.10版本时升级为Beta,到1.14版本时达到稳定版本。

# kubectl explain pod.spec.containers 查看可配置项