【问题标题】:Auto update pod on every image push to GCR每次将图像推送到 GCR 时自动更新 pod
【发布时间】:2016-09-28 15:19:23
【问题描述】:

我有一个使用 docker push gcr.io/go-demo/servertime 推送到 Container Registry 的 docker 映像和一个使用 kubectl run servertime --image=gcr.io/go-demo-144214/servertime --port=8080 创建的 pod。

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

【问题讨论】:

  • 这个功能是 OpenShift 中的天赐之物。我在 Kubernetes 中非常想念它..

标签: kubernetes google-kubernetes-engine google-container-registry


【解决方案1】:

我建议切换到某种 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 来简单地更新现有部署中的映像可能会更容易

【讨论】:

  • 谢谢。所以 kubectl 需要在 CI 工具上运行。我希望避免这种情况,因为它可能不那么容易获得。
【解决方案2】:

我是 Spinnaker 团队的一员。

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

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

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

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

    • 是的,改动太多。我最终在我的 CI 工具中使用了 kubectl。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-09
    • 2020-04-22
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    相关资源
    最近更新 更多