【问题标题】:validate that image exist when updating kubernetes deployment更新 kubernetes 部署时验证该映像是否存在
【发布时间】:2018-07-19 11:18:56
【问题描述】:

当使用不存在的映像更新部署时,Kubernetes 首先将开始终止现有的 pod,并最终导致部署中断。 是否可以在终止现有 pod 之前告诉 kubectl 验证/提取图像?

【问题讨论】:

  • 运行多个副本?所以只有一个会被终止。
  • 嗯,这是肯定的,但我最终会得到比我想要的更少的豆荚
  • 我不确定我是否在关注。当您说“Kubernetes 首先将开始终止现有 pod”时,这表明您正在使用 Recreate 策略 (kubernetes.io/docs/concepts/workloads/controllers/deployment/…)?因为默认值为RollingUpdate,这意味着(连同探针)只有当新的 pod 处于活动状态并准备就绪时,旧的 pod 才会被删除。你能澄清一下吗?

标签: kubernetes kubectl google-kubernetes-engine


【解决方案1】:

我不得不将 strategy.rollingUpdate.maxUnavailable 更改为 0

strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
    type: RollingUpdate

我认为strategy.rollingUpdate.maxUnavailable的默认值是1

感谢迈克尔·豪森布拉斯

【讨论】:

    【解决方案2】:

    虽然我没有对此进行测试,但我认为理论上这应该可行:

    您可以使用准入控制器 AlwaysPullImages 和至少一个 pod 已启动的部署策略。准入控制器确保在 pod 启动之前拉取镜像 Always

    要启用此准入控制器,您必须在 Kubernetes API 服务器上启用标志,例如 from this link

    kube-apiserver --enable-admission-plugins=AlwaysPullImages,LimitRanger
    

    【讨论】:

      【解决方案3】:

      实施 Liveness / Readiness 将确保旧 pod 仅在新 pod 健康时才会终止。

      【讨论】:

        猜你喜欢
        • 2017-11-24
        • 2017-06-03
        • 1970-01-01
        • 1970-01-01
        • 2019-11-11
        • 2019-09-24
        • 2021-07-22
        • 2018-08-24
        • 1970-01-01
        相关资源
        最近更新 更多