首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果码头映像更新,迫使Kubernetes重新部署部署YAML?

如果码头映像更新,迫使Kubernetes重新部署部署YAML?
EN

Stack Overflow用户
提问于 2021-03-09 21:50:29
回答 1查看 1.4K关注 0票数 0

我有一个工作流,在这个工作流中,我编写了一些代码,并在latest下部署了一个坞映像。目前,它部署到我的容器注册中心,然后在容器部署之后运行这个kubectl apply file.yaml,但是K8s似乎没有意识到它需要重新拉出并使用新拉出的映像展开一个新的部署。

我如何才能在部署的YAML规范中提供基本信息,然后重新启动部署呢?

或者,是否有更好的办法?我正以这种方式无条件地展开部署,重新启动我的所有部署。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-09 22:41:24

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

当你看到标签latest时,不要读“最新”这个词。这是一个默认标记,它破坏了判断图像内容是否发生变化的能力。

一个更好的机制是用一些不变的值标记你的图像..。例如,您的代码是散列表。这是Docker对其图像散列所做的事情,这是识别图像的最好(但不容易)的方法:[[image]]@sha256:....

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

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

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

但这对强大的部署(小写-D)并不好。您还应该做的是在每次更改映像时创建唯一的部署清单。然后,如果您犯了一个错误,并且无意中部署了一些不正常的东西,那么您就有了一份您所做的事情的副本,并且您可以更正它(另一个清单)并应用它。这是一个不变的基础设施背后的原则。

所以..。

代码语言:javascript
复制
TAG=$(git rev-parse HEAD)

docker build \
--tag=${REPO}/${IMAGE}:${TAG} \
...

docker push ${REPO}/${IMAGE}:${TAG}

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

代码语言:javascript
复制
sed --in-place "s|image: IMAGE|image: ${REPO}/${IMAGE}:${TAG}|g" path/to/manifest.yaml

git add /path/to/manifest.yaml
git commit --message=...

然后应用修改后的(但独特的!)对集群的清单:

代码语言:javascript
复制
kubectl apply \
--filename=/path/to/manifest.yaml \
--namespace=${NAMESPACE}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66555295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档