apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-app3
spec:
  # pod数量
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
      # 超过期望的可用pod个数。
      maxSurge: 1
      # 在升级过程中不可用Pod的最大数量
      maxUnavailable: 0
  selector:
    matchLabels:
      app: app3
  template:
    metadata:
      labels:
        app: app3
    spec:
      # k8s将会给应用发送SIGTERM信号，可以用来正确、优雅地关闭应用，默认为30秒
      terminationGracePeriodSeconds: 100
      containers:
        - name: app3
          # 镜像版本
          image: codingsoldier/app3:v1
          ports:
            - name: http
              containerPort: 10013
          lifecycle:
            # 在容器被终止前睡眠一段时间，以便kube-proxy更新service的endpoint
            preStop:
              exec:
                command: [ "/bin/bash", "-c", "sleep 35" ]
          # 就绪探针。
          # docker容器启动成功，并不代表容器中的服务就能处理外部的请求，例如java应用启动需要一定时间
          # Kubernetes提供了readinessProbe来检测pod中的容器是否可以接受外部流量
          readinessProbe:
            httpGet:
              # 连接使用的schema，默认HTTP。
              scheme: HTTP
              # 访问的容器的端口名字或者端口号。端口号必须介于1和65525之间
              port: 10013
              # 访问的HTTP server的path
              path: /app3/info
            # 探测成功后，最少连续探测失败多少次才被认定为失败。默认是3。最小值是1。
            failureThreshold: 3
            # 容器启动后第一次执行探测是需要等待多少秒。
            initialDelaySeconds: 20
            # 执行探测的频率。默认是10秒，最小1秒。
            periodSeconds: 10
            # 探测失败后，最少连续探测成功多少次才被认定为成功。默认是1。对于liveness必须是1。最小值是1。
            successThreshold: 1
            # 探测超时时间。默认1秒，最小1秒。
            timeoutSeconds: 1
          # 存活探针，用于判断容器是否存活。配置参数跟就绪探针相同
          livenessProbe:
            httpGet:
              scheme: HTTP
              port: 10013
              path: /app3/info
            failureThreshold: 3
            initialDelaySeconds: 20
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 1