3

我有一个 docker 镜像推送到 Container Registrydocker push gcr.io/go-demo/servertime和一个用kubectl run servertime --image=gcr.io/go-demo-144214/servertime --port=8080.

每次推送新版本的映像时,如何启用 Pod 的自动更新?

4

3 回答 3

4

我建议切换到某种 CI 来管理流程,而不是触发 docker push 触发将提交推送到 git 存储库的流程。此外,如果您切换到使用更高级别的 kubernetes 构造,例如deployment,您将能够将您的 pod 滚动更新到您的新映像版本。我们的流程大致如下:

git commit #triggers CI build
docker build yourimage:gitsha1
docker push yourimage:gitsha1
sed -i 's/{{TAG}}/gitsha1/g' deployment.yml
kubectl apply -f deployment.yml 

其中 deployment.yml 是我们部署的模板,将更新为新的标签版本。

如果您手动执行此操作,则通过运行简单地更新现有部署中的映像可能会更容易kubectl set image deployment/yourdeployment <containernameinpod>=yourimage:gitsha1

于 2016-09-28T17:03:10.517 回答
3

我在 Spinnaker 团队。

可能有点重,但在不知道您考虑的其他领域的情况下,Spinnaker是一个 CD 平台,您可以从该平台通过注册表更新触发 k8s 部署。

这是一个代码实验室,可帮助您入门。

如果您希望简化设置过程,您可以通过Cloud Launcher获得一个带有 k8s 和 GCR 集成预设置的启动 Spinnaker 实例。

您可以在我们的slack 频道(我是@stevenkim)上找到更多支持。

于 2016-09-28T17:12:53.970 回答
1

它需要一些胶水,但您可以使用Docker Hub ,它允许您在推送新图像或创建新标签时为每个存储库定义一个webhook 。

这意味着您必须构建自己的 Web API 服务器来处理传入的通知并使用它们来更新 pod。而且你必须使用 Docker Hub,而不是 Google Container Repository,它不允许使用 web hooks。

因此,对于您要解决的问题,可能有太多更改。

于 2016-09-30T17:20:11.977 回答