docker - GCP 实例组中 docker 容器的滚动更新
问题描述
我正在 GCP 的实例组中的 VM 内部署 Java Spring Boot 容器。所以每个虚拟机都会有一个 Spring Boot 容器。我希望实现容器的滚动更新。
- 我可以使用 docker compose 删除最新的容器,提取图像(从 docker 注册表中),然后重新创建容器。
- 但是容器位于 GCP 中单个实例组下的不同虚拟机中,如何跨虚拟机进行滚动更新?
- 我正在使用非托管实例组,其中每个 VM 都在其中运行 Spring Boot 应用程序的 Docker 容器。
解决方案
这个主题有很多方法 - 正如John Hanley 指出的那样,您可以手动更新非托管实例组中的每个 VM,但更简单的方法是使用一些脚本来执行此操作。您甚至可以为此使用Ansible,但如果只有几个 VM,这完全是矫枉过正。
简单的方法(仅使用 GCP 提供的)在组内的所有 VM 上执行容器的滚动更新,最好使用托管实例组。它实际上会取代你的虚拟机,所以如果你在他们的磁盘上存储一些数据,最好使用Stateful MIG。
设置一切的简单方法是:
此时,您可以创建一个服务作为您的后端,并在需要时在其前面放置一些负载均衡器。您可以设置 MIG 的一些自动缩放和自动修复,以防负载过重或某些无响应的 VM 需要重新启动。
如果您想更新您的虚拟机(或它们运行的容器),请使用新配置重复步骤 1-3。或者,如果它很简单,您可以使用每次为您的组创建新 VM 时都会运行的启动脚本。当你有一个新组时,进入虚拟机组页面并选择你想要更新的组,在详细信息中点击顶部的“更新虚拟机”按钮。
此时只需单击底部的“更新 VM”蓝色按钮并等待结果。几分钟后,您的虚拟机应该会更新并显示使用新的实例模板。
更新时,您将看到两个模板都在使用:
当你知道这个过程很容易时,它需要一些“点击”。
您总是可以走“硬路”并设置自己的自动化。
最后 -在开始时提取最新的 Docker 映像(使用启动脚本)似乎也是一个非常好的主意,因为您可以在您的组中“重新启动/替换”虚拟机,并且在重新启动后所有虚拟机都将开始为新容器提供服务。
推荐阅读
- php - 将跟踪按钮添加到 WooCommerce 订单页面
- laravel - Laravel - 在json响应中用大写大写转换字段名称
- java - OpenJDK 8 (1.8.0_232) 和一些导致 HTTP 错误 403 的 HTTPS 连接是否存在任何已知问题?
- python - 如何更有效地求平方和?
- python - 列表总和不改变列表熊猫的长度
- javascript - 我如何处理使用 useState 获取 API 结果
- c++ - 输入字符而不是整数时程序中断
- javascript - 检查和修改函数默认参数值
- macos - macOS 汇编教程中架构 x86_64 的未定义符号
- php - 如何将数组元素设置为数组的开头,并按其分值对其他元素进行排序?