【问题标题】:How to ensure pod is starting even if a older version of the same pod was running即使同一 pod 的旧版本正在运行,如何确保 pod 正在启动
【发布时间】:2021-08-11 04:26:13
【问题描述】:

我有一个 pod 用作其他 pod 的 initContainers。每当新部署发生时,现有的 initContainers 仍会继续运行。即使没有对旧 pod 进行任何更改,如何确保部署不会拾取旧 pod。对于每个部署,它应该创建一个配置为 initContainers 的更新版本的 pod。

【问题讨论】:

    标签: kubernetes containers openshift kubernetes-pod


    【解决方案1】:

    这不是 initContainers 的工作方式。它们仅适用于定义它们的任何 PodSpec,对任何其他 pod 没有影响。

    【讨论】:

    • 在这种情况下,我们如何才能达到与普通 pod 相同的效果。我的意思是即使没有对现有正在运行的 pod 进行任何更改,部署也应该启动一个新的 pod。
    • 嗨,如果上面的答案不能解释 initContainers 的工作原理,请提供更多详细信息 - 您当前的阶段是什么,您的示例中的期望状态是什么
    【解决方案2】:

    这不是 initContainers 的工作方式——但从上下文来看,“我有一个 pod 用作其他 pod 的 initContainers”是在谈论容器映像,而不是 pod。

    根据这个猜测,您可能在谈论许多不同的事情。

    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: whatever
    ...
    spec:
      strategy:
        type: Recreate
    

    默认情况下,部署会先创建一个新的 Pod,然后终止旧的 Pod。在开始创建替换之前重新创建更改并终止旧 pod。

    ...
      template:
        ...
        spec:
        ...
          containers:
          - image: some.registry/image:tag
            imagePullPolicy: Always
    

    pull 策略通常是 Always、IfNotPresent(但对于离线集群,也可以是“Never”)。

    这将确定您的 pod 是否会在使用前从您的注册表中提取容器映像的更新副本。

    根据您的其他回复:

    我的意思是即使没有进行任何更改,部署也应该启动一个新的 pod 到现有的正在运行的 pod。

    kubectl -n namespace rollout restart deploy/whatever
    

    我认为您说的是容器映像,而不是 pod。在这种情况下,如果您有“IfNotPresent”拉取策略并且由于某种原因不想将其更新为“Always”,那么小型集群的黑客选项是在每个工作节点上运行“crictl pull ...”,并且然后重新启动。

    第

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-01
      • 1970-01-01
      相关资源
      最近更新 更多