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

时间:2019-04-18 04:51:06

标签: kubernetes

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

当我更改图像标签(例如,将v1更改为v2)并尝试替换它时,它会创建一个新的广告连播,但它会无限期保持“待定”状态,而旧广告连播会保持“运行”状态。

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

使用replace --force可解决此问题-但我希望它仅使用replace -f即可工作。任何想法如何实现这一目标?

1 个答案:

答案 0 :(得分:1)

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

您可以做两件事:

使用maxUnavailable = 1的RollingUpdate策略。这会做您想要的-它会杀死旧的吊舱,然后创建一个新的吊舱。

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

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

spec:
  strategy:
    type: Recreate

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