我有一个k8s部署-我经常将新版本部署到docker repo-更改image标签-并尝试使用kubectl replace -f file.yaml
替换部署。我的副本设置为1-一次只有一个Pod运行。
当我更改图像标签(例如,将v1更改为v2)并尝试替换它时,它会创建一个新的广告连播,但它会无限期保持“待定”状态,而旧广告连播会保持“运行”状态。
我认为新Pod等待旧Pod终止-但它不会自行终止。我需要用k8s删除它,以便新的Pod可以代替它。
使用replace --force
可解决此问题-但我希望它仅使用replace -f
即可工作。任何想法如何实现这一目标?
答案 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