【发布时间】:2020-08-22 02:40:06
【问题描述】:
我们在 GCP 上有一个托管实例组,它配置了自动缩放规则。
实例组引用通过gcloud compute instance-templates create-with-container 创建的实例模板。容器镜像托管在 GCR 上。
我正在尝试了解将频繁更新部署到此实例组的最佳方式,例如在 CI/CD 管道中。
根据我目前的理解,程序似乎是:
- 构建新的 docker 镜像并将其推送到 GCR
- 创建一个新的实例模板。
- 向指向新实例模板的实例组提交滚动更新。
但是在 CI/CD 管道中,似乎:
- 这将创建成百上千个可能仅使用一次且不再使用的悬空实例模板。这有问题吗?
- 不清楚实例模板应该如何命名或版本化。我正在考虑在创建模板时将 docker 图像的哈希写入实例模板名称,但这似乎是不必要的手动操作。
这真的是向实例组部署更新的最佳方式,还是我遗漏了什么?部署管理器是否简化了这一切,例如在名称生成或模板清理方面?
【问题讨论】:
-
回答这个问题有点困难,因为您的标题要求“最佳实践”,并且多个问题大多是基于意见的答案。你能把它更多地集中在一个定义更明确的问题上吗?您是否尝试过手头的场景以了解提议的问题是否确实存在问题?
-
我不知道您的用例的最佳实践文档。附带说明:如果您的容器是使用“最新”标签指定的,那么仅替换实例将导致 VM 容器被更新,而无需创建新的实例模板。这仅取决于您需要什么级别的控制和回滚。 cloud.google.com/sdk/gcloud/reference/compute/instance-groups/…
-
坦率地说,从你想要简化 CI/CD 管道的问题来看:在具有自动缩放的环境中频繁更新 dockerized 应用程序。由于现有的解决方案,您必须操作繁重的实例模板,而不是杂耍轻量级容器,这会导致额外成本。基于现有的有限信息,该方案并不能很好地满足项目需求。为什么不考虑 GKE?您能否提供有关您项目要求的更多详细信息以及为什么要坚持当前的解决方案以便社区可以找到最佳方法?
-
@mebius99 我们选择了实例组而不是 GKE,因为 GKE 对用例来说有点矫枉过正——这是一个非常简单的单一服务,通常只在 1 个区域中运行 1 个实例,因此看起来不值得它。也就是说,即使在 GKE 上运行单个实例也会导致 CI/CD 管道中的更新路径开销更低,那么我一定会研究它。
标签: docker google-cloud-platform google-compute-engine continuous-deployment google-deployment-manager