【问题标题】:Best practices for deploying a new container image to an autoscaling managed instance group on GCP?将新容器映像部署到 GCP 上的自动缩放托管实例组的最佳实践?
【发布时间】:2020-08-22 02:40:06
【问题描述】:

我们在 GCP 上有一个托管实例组,它配置了自动缩放规则。

实例组引用通过gcloud compute instance-templates create-with-container 创建的实例模板。容器镜像托管在 GCR 上。

我正在尝试了解将频繁更新部署到此实例组的最佳方式,例如在 CI/CD 管道中。

根据我目前的理解,程序似乎是:

  1. 构建新的 docker 镜像并将其推送到 GCR
  2. 创建一个新的实例模板。
  3. 向指向新实例模板的实例组提交滚动更新。

但是在 CI/CD 管道中,似乎:

  1. 这将创建成百上千个可能仅使用一次且不再使用的悬空实例模板。这有问题吗?
  2. 不清楚实例模板应该如何命名或版本化。我正在考虑在创建模板时将 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


【解决方案1】:

为了使部署行为更可预测,最好遵循“确定性”方法,该方法涉及使用精确的构建版本或哈希指定标签。这样做的结果是许多模板实例必须在以后进行管理。

另一方面,这提供了版本控制和回滚机会。 MIG 对象的versionsinstanceTemplate 属性以及实例模板的容器映像名称和标记可用于版本控制。

在像您这样的情况下,Kubernetes Engine 看起来是一种公理化的方法。但是如果由于客观因素GKE不适合,可以考虑Cloud Run。它支持自动缩放、服务修订,并负责imageDigest。 与实例模板一样,每个修订版的配置都是不可变的。

Deployment Manager 的优势在于构建复杂的部署。使用 DM,每个构建都应该采用单独部署的形式。基于 Python 或 Jinja2 的模板可以帮助生成有意义的名称、标签、元数据,这些可以在以后的清理过程中使用。但无论如何,部署本身都必须进行管理和清理:使用gcloud deployment-manager deployments delete

无论您喜欢什么,都需要对过时的“托管项目”进行分类和清理: 实例模板、修订或部署。这取决于用户,Google 不提供生命周期管理服务。

原始生命周期解决方案可以是从cron 作业调用的gcloud,该作业在具有被授予适当权限的服务帐户的 VM 上运行。可以根据 ID、时间戳、哈希、摘要等关键属性请求托管项目。项目列表可以按时间戳或版本标签排序,以便删除,例如,最旧的 100 个项目或保留最新的 100 个项目。

Compute Engine > Doc > Deterministic instance templates

Compute Engine > Doc > Deploying containers on VMs and MIGs > Updating a managed instance group to a new version of a container image

Compute Engine > Doc > Creating MIGs > Changing the instance template for a MIG

Compute Engine > Doc > Rolling out updates to MIGs > Relationship between versions and instanceTemplate properties for a managed instance group

【讨论】:

    猜你喜欢
    • 2021-07-20
    • 2018-03-18
    • 2014-11-25
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    相关资源
    最近更新 更多