CrashLoopBackOff时如何自动停止滚动更新?

问题描述 投票:2回答:2

我使用谷歌Kubernetes引擎,我故意在代码中添加错误。我希望滚动更新会在发现状态为CrashLoopBackOff时停止,但事实并非如此。

在这个page,他们说..

Deployment控制器将自动停止错误的卷展栏,并将停止扩展新的ReplicaSet。这取决于您指定的rollingUpdate参数(特别是maxUnavailable)。

但它没有发生,是否只有状态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 / readyiness探测器,但我认为它不能阻止滚动更新?或者是吗?

kubernetes google-kubernetes-engine
2个回答
1
投票

事实证明我只需要设置minReadySeconds并在新的replicaSet具有状态CrashLoopBackOff或类似Exited with status code 1时停止滚动更新。所以现在旧的replicaSet仍然可用而且没有更新。

这是新的配置。

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

谢谢你的帮助!


0
投票

你引用的解释是正确的,这意味着新的replicaSet(有错误的那个)将不会继续完成,但它会在进展到maxSurge + maxUnavailable计数时停止。旧的replicaSet也会出现。

这是我试过的例子:

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(maxUnavailable的1个插槽和maxSurge的1个插槽)。

旧的replicaSet将继续运行3个pod(4 - 1 unAvailable)。

你在rollingUpdate部分设置的两个参数是关键点,但你也可以玩其他因素,如readinessProbelivenessProbeminReadySecondsprogressDeadlineSeconds

对他们来说,here的参考。

© www.soinside.com 2019 - 2024. All rights reserved.