【问题标题】:Rolling Update Of docker containers in GCP Instance GroupGCP 实例组中 docker 容器的滚动更新
【发布时间】:2021-08-20 19:12:32
【问题描述】:

我正在 GCP 的实例组中的 VM 内部署 Java Spring Boot 容器。 所以每个虚拟机都会有一个 Spring Boot 容器。 我希望实现容器的滚动更新。

  • 我可以使用 docker compose 删除最新的容器,拉取镜像(从 docker 注册表中),然后重新创建容器。
  • 但容器位于 GCP 中单个实例组下的不同虚拟机中,如何跨虚拟机进行滚动更新?
  • 我正在使用非托管实例组,其中每个 VM 都在其中运行 Spring Boot 应用程序的 Docker 容器。

【问题讨论】:

  • 如果您使用的是托管实例组,则执行实例​​的滚动替换,而不是实例中的容器。编辑您的问题以指定实例组类型以及容器在每个实例(Docker 或容器操作系统)上的运行方式。细节决定了要遵循的程序。
  • 由于您在非托管实例组上使用 Docker,因此您必须手动更新每个实例,编写自己的自动化软件或使用第三方产品。编写一个连接到每个实例并运行一组 shell 命令的 Python 应用程序会很简单。另一种选择是创建一个启动脚本,在启动时拉取最新的容器。然后您可以使用 CLI 重新启动每个实例。您将遇到的问题是从负载均衡器中删除实例、更新,然后将实例放回原处。
  • 我会重新设计和使用托管实例组和计算优化操作系统。那么您可以使用托管滚动替换。
  • @Wojtek_B 根据您在问题中提供的信息提供了一个很好的答案。

标签: docker google-cloud-platform


【解决方案1】:

这个主题有很多方法 - 如John Hanley pointed out,您可以手动更新非托管实例组中的每个虚拟机,但更简单的方法是使用一些脚本来执行此操作。您甚至可以为此使用Ansible,但如果只有几个虚拟机,那就太过分了。

执行rolling update of your container on all VM's inside the group 的简单方法(仅使用 GCP 提供的)最好使用托管实例组。它实际上会替换你的虚拟机,所以如果你在他们的磁盘上存储一些数据,最好使用Stateful MIG。

设置一切的简单方法是:

  1. 创建一个实例并根据您的需要对其进行配置。
  2. 从其磁盘中停止 VM 和 create a disk image。
  3. Create instance template 并选择自定义磁盘映像(您刚刚创建的)
  4. 创建有状态托管实例组

此时,您可以创建一个服务作为您的后端,并在需要时在其前面放置一些负载均衡器。您可以设置一些 MIG 的 autoscaling 和 autohealing,以防负载过重或某些无响应的 VM 需要重新启动。

如果您想更新您的虚拟机(或它们运行的​​容器),请使用新配置重复步骤 1-3。或者,如果它很简单,您可以使用每次为您的组创建新 VM 时都会运行的启动脚本。 有了新组后,进入虚拟机组页面并选择要更新的组,在详细信息中单击顶部的“更新虚拟机”按钮。

在“新模板”下的新页面中,从下拉列表中选择您创建的新模板。

此时只需单击底部的“更新 VM”蓝色按钮并等待结果。几分钟后,您的虚拟机应该会更新并显示为使用新的实例模板。

更新时您会看到两个模板都在使用:

当您知道过程非常简单时,不过需要一些“点击”。

您始终可以走“硬路”并设置自己的自动化。

最后 - 开始时的pulling latest Docker images (using startup scripts) 似乎也是一个非常好的主意,因为您可以在您的组中“重新启动/替换”虚拟机,并且在重新启动后所有虚拟机都将开始为新容器提供服务。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    相关资源
    最近更新 更多