我正在kubernetes中设置一个应用程序,如果新映像被推送到docker hub中,我想重新启动pod。 如果将新映像推送到Docker Hub注册表中,我将无法重新启动Pod?
我已包含
“ imagePullPolicy”:“始终”
“ terminationGracePeriodSeconds”:30
在deployment.yaml文件中
如何在不停止现有吊舱的情况下将新图像拖到吊舱中?
答案 0 :(得分:1)
即使在普通Docker中,也不能在不删除并重新创建容器的情况下将其更新为较新的映像。在Kubernetes中这也是不可能的:pod spec中的containers
列表“当前无法添加或删除...无法更新”,这意味着您永远无法在现有Pod上更改图像。
在Kubernetes中,最佳实践是始终使用显式版本标签(切勿使用latest
或任何可能会更改的类似标签)并使用“部署”来管理Pod。当您使用新版本时,将您的Deployment规范更改为具有新标签。 Kubernetes将注意到新的部署与旧的部署不同,并且将按以下顺序进行:
这将导致停机时间为零。
答案 1 :(得分:0)
启动的容器是不可变的,如果在部署中进行映像更改,则只有在启动新容器并删除旧容器时它才会更改。
使用部署启动您的Pod。启动以下命令来更改图像:
kubectl set image deployment/DEPLOY_NAME container-name=image_path:version
部署将负责杀死旧吊舱并启动新吊舱。