我有一个使用image test:latest
的Kubernetes部署(不是真实的图片名称,但它是最新的标签)。
此图像位于docker hub上。我刚刚将test:latest
的新版本推送到dockerhub。我期待在Kubernetes中重新部署我的pod,但没有任何事情发生。
我已经像这样创建了我的部署:
kubectl run sample-app --image=`test:latest` --namespace=sample-app --image-pull-policy Always
为什么在推送新图片后没有触发新部署?
答案 0 :(得分:8)
Kubernetes 不正在关注新版图片。图像拉取策略指定如何获取图像以运行容器。 Always
表示每次启动容器时都会尝试提取新版本。要查看更新,您需要删除Pod(而不是部署) - 新创建的Pod将运行新映像。
没有直接的方法让Kubernetes使用新图像自动更新正在运行的容器。这将是持续传递系统的一部分(可能使用kubectl set image
使用新的sha256sum或图像标记 - 但不是latest
)。
答案 1 :(得分:4)
强制更新发生的一种方法是在您的 CI 脚本中运行它(在推送新映像之后,并在应用的 yaml 中将 image-pull-policy
设置为 Always
):
kubectl rollout restart deployment/<name> --namespace=<namespace>
在 Azure Devops 中输入“rollout”作为命令,使用上面的命名空间功能并在参数字段中输入“restart ...”。
答案 2 :(得分:1)
如果要处理yml文件,请使用
执行部署kubectl apply -f myfile.yml
和
imagePullPolicy: Always
在您的文件上,k8s不会提取新图像。首先,您需要删除Pod,K8s部署将自动拉取映像。