每次将图像推送到 GCR 时自动更新 pod

Auto update pod on every image push to GCR

我使用 docker push gcr.io/go-demo/servertime 将一个 docker 图像推送到 Container Registry,并使用 kubectl run servertime --image=gcr.io/go-demo-144214/servertime --port=8080 创建了一个 pod。

如何在每次推送新版本镜像时自动更新pod?

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

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 是我们将更新到新标记版本的部署模板。

如果您手动执行此操作,则可能更容易通过 运行ning kubectl set image deployment/yourdeployment <containernameinpod>=yourimage:gitsha1

更新现有部署中的映像

我在 Spinnaker 团队。

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

这里有一个 codelab 可以帮助您入门。

如果您希望简化设置过程,您可以通过 Cloud Launcher.

获取带有 k8s 和 GCR 集成预设置的入门 Spinnaker 实例

您可以在我们的 slack channel (I'm @stevenkim) 上找到更多支持。

它需要一些胶水,但您可以在推送新图像或创建新标签时为每个存储库使用 Docker Hub, which lets you define a webhook

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

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