Kubernetes 部署不进行滚动更新

pho*_*360 2 amazon-web-services kubernetes

我在 kubernetes 中有以下部署:

 apiVersion: extensions/v1beta1
 kind: Deployment
 metadata:
   labels:
     run: hello-node
   name: hello-node
   namespace: default
 spec:
   replicas: 2
   selector:
     matchLabels:
       run: hello-node
   strategy:
     rollingUpdate:
       maxSurge: 2
       maxUnavailable: 0
     type: RollingUpdate
   template:
     metadata:
       creationTimestamp: null
       labels:
         run: hello-node
     spec:
       containers:
       - image: <image>:<tag>
         imagePullPolicy: Always
         name: hello-node
         livenessProbe:
           httpGet:
             path: /rest/hello
             port: 8081
           initialDelaySeconds: 15
           timeoutSeconds: 1
         ports:
         - containerPort: 8081
           protocol: TCP
         resources:
           requests:
             cpu: 400m
         terminationMessagePath: /dev/termination-log
       dnsPolicy: ClusterFirst
       restartPolicy: Always
       securityContext: {}
       terminationGracePeriodSeconds: 30
Run Code Online (Sandbox Code Playgroud)

问题是,当我更新我的部署以假设我的映像的新版本时,Kubernetes将立即使用旧映像杀死两个 Pod,并使用新映像带来两个新 Pod。当新 Pod 启动时,我遇到服务中断。

由于rollingUpdatelivenessProbe我期望Kubernetes做以下事情:

  1. 使用新镜像启动一个 pod
  2. 等待新 Pod 基于 livenessProbe
  3. 用旧图像杀死一个 pod
  4. 重复直到所有 pod 都迁移完毕

我在这里遗漏了什么?

jan*_*kuo 5

你需要的是readinessProbe

Liveness初始延迟之前的默认状态是Success,而Readiness初始延迟之前的默认状态是Failure

如果您希望在探测失败时终止并重新启动容器,请指定 aLivenessProbe和 a RestartPolicyof Alwaysor OnFailure

如果您只想在探测成功时才开始向 Pod 发送流量,请指定一个ReadinessProbe.

有关更多详细信息,请参阅容器探针

要具有您描述的滚动更新行为,请设置maxSurge1(默认值)。这告诉部署“一次最多扩展一个副本”。有关更多详细信息,请参阅文档maxSurge