【发布时间】:2021-08-11 04:26:13
【问题描述】:
我有一个 pod 用作其他 pod 的 initContainers。每当新部署发生时,现有的 initContainers 仍会继续运行。即使没有对旧 pod 进行任何更改,如何确保部署不会拾取旧 pod。对于每个部署,它应该创建一个配置为 initContainers 的更新版本的 pod。
【问题讨论】:
标签: kubernetes containers openshift kubernetes-pod
我有一个 pod 用作其他 pod 的 initContainers。每当新部署发生时,现有的 initContainers 仍会继续运行。即使没有对旧 pod 进行任何更改,如何确保部署不会拾取旧 pod。对于每个部署,它应该创建一个配置为 initContainers 的更新版本的 pod。
【问题讨论】:
标签: kubernetes containers openshift kubernetes-pod
这不是 initContainers 的工作方式。它们仅适用于定义它们的任何 PodSpec,对任何其他 pod 没有影响。
【讨论】:
这不是 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 ...”,并且然后重新启动。
第
【讨论】: