Kubernetes部署没有进行滚动更新

时间:2016-07-07 17:01:59

标签: 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

问题在于,当我更新我的部署以便说出我的图像的新版本时,Kubernetes将立即使用旧图像杀死两个pod,并带来两个带有新图像的新pod。当新的pod正在启动时,我会遇到服务中断。

由于rollingUpdatelivenessProbe我期待Kubernetes执行以下操作:

  1. 使用新图片启动一个广告连播
  2. 根据livenessProbe
  3. 等待新吊舱健康
  4. 使用旧图片杀死一个吊舱
  5. 重复,直到迁移完所有广告
  6. 我在这里遗失了什么?

1 个答案:

答案 0 :(得分:4)

您需要的是readinessProbe

初始延迟之前的默认状态LivenessSuccess,而初始延迟之前的默认状态ReadinessFailure

如果您希望在探测失败时杀死并重新启动容器,请指定LivenessProbeRestartPolicy AlwaysOnFailure

如果您只想在探测成功时开始向广告连播发送流量,请指定ReadinessProbe

有关详细信息,请参阅container probes

要获得您描述的滚动更新行为,请将maxSurge设置为1(默认值)。这告诉部署一次最多可以扩展一个副本&#34;。有关详细信息,请参阅docs of maxSurge