Kubernetes 如何在docker compose上管理每用户一台机器的软件更新?

Kubernetes 如何在docker compose上管理每用户一台机器的软件更新?,kubernetes,docker-compose,ansible,devops,docker-watchtower,Kubernetes,Docker Compose,Ansible,Devops,Docker Watchtower,我们正在使用docker compose部署Java后端和React UI应用程序。我们的Docker容器运行Java、Caddy和Postgres 这种体系结构的不寻常之处在于,我们没有将应用程序作为集群运行。每个用户都有自己的服务器和自己的子域。一切都很顺利,但随着用户数量的增长,我们需要一种管理/更新机器的策略 我们可以在半夜接受一些停机时间,所以我们不需要高可用性。 我们只是不确定在所有机器上更新软件的最佳方式是什么。我们对Docker还很陌生,对Kubernetes或Ansible、厨

我们正在使用docker compose部署Java后端和React UI应用程序。我们的Docker容器运行Java、Caddy和Postgres

这种体系结构的不寻常之处在于,我们没有将应用程序作为集群运行。每个用户都有自己的服务器和自己的子域。一切都很顺利,但随着用户数量的增长,我们需要一种管理/更新机器的策略

我们可以在半夜接受一些停机时间,所以我们不需要高可用性。 我们只是不确定在所有机器上更新软件的最佳方式是什么。我们对Docker还很陌生,对Kubernetes或Ansible、厨师、木偶等都没有经验,但我们很快就学会了

我们预计将有成百上千的用户。每台机器运行相同的代码,但具有用户独有的环境变量。我们最初的资源调配解决了这一问题,因此我们预计不必通过软件更新来更改这些资源调配。但一个也能提供这种能力的解决方案并不是一件坏事

因此,问题是,当我们进行代码更改并希望部署更新的javajar或React应用程序时,以自动化的方式将它们部署到那里的最佳方式是什么

我们考虑了一些事情:

  • Docker Hub(关于速率限制的担忧)
  • 部署我们自己的Docker repo
  • 库伯内特斯
  • 安西布尔
我们可能需要的其他东西包括GitHub操作来构建和更新Docker映像


我们对这里没有列出的想法持开放态度,因为关于管理许多运行docker compose的机器,我们有很多不知道的地方。因此,请随时提供建议。非常感谢

在您的情况下,我建议您结合使用CD工具。其中之一就是。我认为这是以自动化方式进行此类更新的最佳方式。当然,你可以只使用Kubernetes,但使用Buddy或其他CD工具,你会使它更快、更简单。在我的回答中,我描述了Buddy,但是在Kubernetes中有很多流行的自动化工作流的CD工具,例如:或者-你应该选择最适合你的工具。看一看:

使用Buddy,您可以在自动更新的同时避免大多数这些步骤(执行
kubectl apply,
kubectl set image
命令),只需简单地推到Git即可

每次更新应用程序代码或Kubernetes配置时,都有两种可能更新集群:
kubectl apply
kubectl set image

这种工作流通常看起来像:

1.编辑应用程序代码或配置.YML文件

2.将更改推送到Git存储库

3.打造新的码头工人形象

4.推送Docker图像

5。登录您的K8s群集

6.运行
kubectl apply
kubectl set image
命令将更改应用于K8s群集

Buddy是一个CD工具,您可以使用它自动化整个K8s发布工作流,如:

  • 管理Dockerfile更新
  • 构建Docker映像并将其推送到Docker注册表
  • 在K8s群集上应用新映像
  • 管理K8s部署的配置更改 等等
使用Buddy,您只需配置一个管道

随着应用程序代码或YAML配置文件的每次更改,此工具将应用部署,Kubernetes将开始将容器转换为所需状态

运行Kubernetes吊舱或作业的管道配置 假设我们在K8s群集上有应用程序,其存储库包含:

  • 我们的应用程序的源代码
  • Dockerfile,其中包含有关创建应用程序图像的说明
  • 数据库迁移脚本
  • Dockerfile,其中包含有关创建将在部署期间运行迁移的映像的说明(db migration runner)
在这种情况下,我们可以配置一个管道,该管道将:

1.构建应用程序并迁移映像

2.将它们推到Docker中心

3。使用先前构建的映像触发DB迁移。我们可以定义映像、命令和部署,并使用YAML文件

4。使用应用K8s部署或设置K8s映像更新K8s应用程序中的映像

您可以根据您的环境/应用程序属性适当调整上述工作流

Buddy支持GitLab作为Git提供者。这两个工具的集成很容易,只需要在您的配置文件中授权GitLab。由于这种集成,您可以创建管道来构建、测试应用程序代码并将其部署到服务器。当然,如果您使用的是GitLab,就不需要将Buddy设置为额外的工具,因为GitLab也是自动化Kubernetes中工作流的CD工具。 您可以在此处找到更多信息:


另请阅读:。

事实证明,我们发现付费码头中心计划满足了我们的所有需求。我很感谢@Malgorzata提供的精彩信息。

你看到了吗:?看起来很有趣,@Malgorzata。谢谢你的提示!我已经把它作为一个附加信息的答案贴了出来,请看一看,如果有帮助,请投票/接受我的答案。