gpt4 book ai didi

kubernetes - kubectl replace -f 在 Pending 状态下无限期地创建 pod

转载 作者:行者123 更新时间:2023-12-03 11:14:57 29 4
gpt4 key购买 nike

我有一个 k8s 部署 - 我经常将一个新版本部署到 docker repo - 更改图像标签 - 并尝试使用 kubectl replace -f file.yaml 替换部署.我的副本设置为 1 - 我一次只有 1 个部署的 pod 正在运行。

当我更改图像标签(例如,将 v1 更改为 v2)并尝试替换它时 - 它会创建一个新的 pod,但它会无限期地保持在“pending”状态,而旧的 pod 保持在“Running”状态。

我认为新 pod 会等待旧 pod 终止 - 但它不会自行终止。我需要由 k8s 删除它,以便新的 pod 可以取代它。

使用 replace --force修复了这个问题 - 但我希望它只使用 replace -f 就能工作.任何想法如何实现这一目标?

最佳答案

您看到的问题与 kubectl 替换/应用无关。真正的原因是部署默认使用 RollingUpdate 策略,默认情况下等待新 pod 运行,然后才杀死旧 pod。从您的问题中不清楚新 pod 处于 Pending 状态的原因,但在大多数情况下,这表明新 pod 缺乏计算资源。

你可以做两种不同的事情:

使用 maxUnavailable=1 的 RollingUpdate 策略。这会做你想做的 - 它会杀死旧的 pod 然后创建一个新的。

spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1

或者您可以指定有效执行相同操作的重新创建策略:
spec:
strategy:
type: Recreate

在此处阅读有关部署策略的更多信息: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy

关于kubernetes - kubectl replace -f 在 Pending 状态下无限期地创建 pod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55739329/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com