如何在不影响正在运行的Pod的情况下将新映像从Docker Hub拉到kubernetes?

时间:2019-03-25 13:24:35

标签: docker kubernetes docker-compose

我正在kubernetes中设置一个应用程序,如果新映像被推送到docker hub中,我想重新启动pod。 如果将新映像推送到Docker Hub注册表中,我将无法重新启动Pod?

我已包含

  

“ imagePullPolicy”:“始终”

     

“ terminationGracePeriodSeconds”:30

在deployment.yaml文件中

如何在不停止现有吊舱的情况下将新图像拖到吊舱中?

2 个答案:

答案 0 :(得分:1)

即使在普通Docker中,也不能在不删除并重新创建容器的情况下将其更新为较新的映像。在Kubernetes中这也是不可能的:pod spec中的containers列表“当前无法添加或删除...无法更新”,这意味着您永远无法在现有Pod上更改图像。

在Kubernetes中,最佳实践是始终使用显式版本标签(切勿使用latest或任何可能会更改的类似标签)并使用“部署”来管理Pod。当您使用新版本时,将您的Deployment规范更改为具有新标签。 Kubernetes将注意到新的部署与旧的部署不同,并且将按以下顺序进行:

  1. 使用新图像开始新的Pod;
  2. 等待其健康检查通过;和
  3. 删除旧Pod。

这将导致停机时间为零。

答案 1 :(得分:0)

启动的容器是不可变的,如果在部署中进行映像更改,则只有在启动新容器并删除旧容器时它才会更改。

使用部署启动您的Pod。启动以下命令来更改图像:

kubectl set image deployment/DEPLOY_NAME container-name=image_path:version

部署将负责杀死旧吊舱并启动新吊舱。

相关问题