Kubernetes 如何在CrashLoopBackOff时自动停止滚动更新?
我使用GoogleKubernetes引擎,我故意在代码中输入一个错误。我希望滚动更新在发现状态为“CrashLoopBackOff”时停止,但事实并非如此 在这方面,他们说 部署控制器将自动停止坏卷展栏,并且 将停止扩展新的复制集。这取决于 rollingUpdate您拥有的参数(maxUnavailable) 指定的 但是它没有发生,是不是只有状态Kubernetes 如何在CrashLoopBackOff时自动停止滚动更新?,kubernetes,google-kubernetes-engine,Kubernetes,Google Kubernetes Engine,我使用GoogleKubernetes引擎,我故意在代码中输入一个错误。我希望滚动更新在发现状态为“CrashLoopBackOff”时停止,但事实并非如此 在这方面,他们说 部署控制器将自动停止坏卷展栏,并且 将停止扩展新的复制集。这取决于 rollingUpdate您拥有的参数(maxUnavailable) 指定的 但是它没有发生,是不是只有状态ImagePullBackOff 下面是我的配置 apiVersion: extensions/v1beta1 kind: Deployment
ImagePullBackOff
下面是我的配置
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: volume-service
labels:
group: volume
tier: service
spec:
replicas: 4
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 2
maxSurge: 2
template:
metadata:
labels:
group: volume
tier: service
spec:
containers:
- name: volume-service
image: gcr.io/example/volume-service:latest
另外,我已经阅读了liveness/readiness Probe,但我认为它不能阻止滚动更新?或者是吗?您引用的解释是正确的,这意味着新的复制集(出现错误的复制集)将不会继续完成,但它将在进入
maxsupge
+maxUnavailable
计数时停止。旧的复制集也会出现
下面是我尝试的示例:
spec:
replicas: 4
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
结果如下:
NAME READY STATUS RESTARTS AGE
pod/volume-service-6bb8dd677f-2xpwn 0/1 ImagePullBackOff 0 42s
pod/volume-service-6bb8dd677f-gcwj6 0/1 ImagePullBackOff 0 42s
pod/volume-service-c98fd8d-kfff2 1/1 Running 0 59s
pod/volume-service-c98fd8d-wcjkz 1/1 Running 0 28m
pod/volume-service-c98fd8d-xvhbm 1/1 Running 0 28m
NAME DESIRED CURRENT READY AGE
replicaset.extensions/volume-service-6bb8dd677f 2 2 0 26m
replicaset.extensions/volume-service-c98fd8d 3 3 3 28m
我的新replicaSet将只启动2个新POD(1个插槽来自maxUnavailable
,1个插槽来自maxSurge
)
旧的replicaSet将继续运行3个POD(4-1不可用
)
您在rollingUpdate
部分中设置的两个参数是关键点,但您也可以使用其他因素,如readinessProbe
,livenssprobe
,minReadySeconds
,progressDeadlineSeconds
对于他们来说,参考。证明我只需要设置
minReadySeconds
,当新复制集的状态为CrashLoopBackOff
或类似的退出时,它会停止滚动更新,状态代码为1
。因此,现在旧的复制集仍然可用,并且没有更新
这是新的配置
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: volume-service
labels:
group: volume
tier: service
spec:
replicas: 4
minReadySeconds: 60
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 2
maxSurge: 2
template:
metadata:
labels:
group: volume
tier: service
spec:
containers:
- name: volume-service
image: gcr.io/example/volume-service:latest
谢谢大家的帮助我同意@尼古拉班恩-我也会考虑改变下面的设置:
spec:
replicas: 4
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1 <----- I want at least (4)-[1] = 3 available pods.
maxSurge: 1 <----- I want maximum (4)+[1] = 5 total running pods.
spec:
副本:4份
战略:
类型:RollingUpdate
滚动更新:
maxUnavailable:1如果您使用的是liveness/readiness探测,那么也可以停止滚动更新。我建议您稍微使用一下这个功能,以了解maxSurge和maxUnavailable是如何工作的。谢谢您的回答!我已经明白了。但是当状态CrashLoopBackOff
或类似的退出时,我希望停止滚动更新,状态代码为1