如果docker镜像更新,是否强制Kubernetes重新部署部署YAML



我有这样的工作流程,我在其中编写一些代码,并在latest下部署一个docker映像。目前,它部署到我的容器注册表中,然后我在容器部署后运行这个kubectl apply file.yaml,但K8s似乎没有意识到它需要重新拉取并推出具有新拉取的映像的新部署。

我如何基本上输入我的部署的YAML规范,然后重新启动部署?

或者,有更好的方法吗?我无条件地以这种方式在所有部署中重新启动部署。

@daniel mann劝阻使用:latest是正确的。

当您看到标签latest时,请不要阅读单词"latest"。这是一个默认标记,它破坏了确定图像内容是否已更改的功能。

一个更好的机制是通过一些不变值来标记图像。。。例如,您的代码的散列。这就是Docker对其图像哈希所做的,这是识别图像的最佳(但不是最简单)方法:[[image]]@sha256:....

您可以使用一些SemVer值。另一种常见的机制是将代码的git提交用于其标记:git rev-parse HEAD或类似的标记。

那么,假设您现在通过标签唯一地识别图像,如何更新部署?文档提供了各种方法:

https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#updating-a部署

但这些对于健壮的部署(低卡数-D)来说并不好。您还应该在每次更改映像时创建唯一的部署清单。然后,如果你犯了一个错误,无意中部署了一些不愉快的东西,你有一份你所做的事情的副本,你可以纠正它(制作另一个清单)并应用它。这是不可变基础设施背后的一个原则。

所以。。。

TAG=$(git rev-parse HEAD)
docker build 
--tag=${REPO}/${IMAGE}:${TAG} 
...
docker push ${REPO}/${IMAGE}:${TAG}

然后更改清单(并将更改提交给源代码管理):

sed --in-place "s|image: IMAGE|image: ${REPO}/${IMAGE}:${TAG}|g" path/to/manifest.yaml
git add /path/to/manifest.yaml
git commit --message=...

然后将修改后的(但唯一!)清单应用于集群:

kubectl apply 
--filename=/path/to/manifest.yaml 
--namespace=${NAMESPACE}

相关内容

  • 没有找到相关文章

最新更新