代码之家  ›  专栏  ›  技术社区  ›  Hana Alaydrus

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

  •  2
  • Hana Alaydrus  · 技术社区  · 7 年前

    CrashLoopBackOff

    在这个 page

    展开控制器将自动停止坏卷展栏,并且 将停止扩展新的复制集。这取决于 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/readiness Probe,但我不认为它能阻止滚动更新?还是真的?

    2 回复  |  直到 7 年前
        1
  •  2
  •   Hana Alaydrus    7 年前

    结果我只需要 minReadySeconds 当新复制集的状态为 CrashLoopBackOff Exited with status code 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
    

    谢谢大家的帮助!

        2
  •  0
  •   Nicola Ben    7 年前

    maxSurge + 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(从 最大不可用 和一个插槽 最大浪涌 ).

    unAvailable ).

    你设定的两个参数 rollingUpdate readinessProbe livenessProbe , minReadySeconds , progressDeadlineSeconds .

    对他们来说, here 参考文献。

        3
  •  0
  •   Rotem jackoby    4 年前

    我同意你的看法@ -我还将考虑更改以下设置:

    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.
    

    甚至改变 maxSurge 0 .
    这将有助于我们暴露不太可能无功能的吊舱(就像我们在 canary release ).

    哈娜·阿莱德鲁斯 建议其重要的设置 minReadySeconds .

    除此之外,有时我们还需要在卷展执行之后执行更多操作。
    (例如,有些情况下,新的pod不能正常工作,但容器中运行的进程没有崩溃)。

    关于一般调试过程的建议:

    1)首先,暂停卷展栏: kubectl rollout pause deployment <name>

    2)调试相关的pod并决定如何继续(也许我们可以继续新版本,也许不行)。

    3)我们必须继续推出: kubectl rollout resume deployment <name> 因为即使我们决定用 undo 我们首先需要 resume 卷展栏。

    4.B)返回到先前版本: kubectl rollout undo deployment <name>


    下面是一个可视摘要(单击内部以查看评论):

    enter image description here