Kubernetes 如何在docker compose上管理每用户一台机器的软件更新?
我们正在使用docker compose部署Java后端和React UI应用程序。我们的Docker容器运行Java、Caddy和Postgres 这种体系结构的不寻常之处在于,我们没有将应用程序作为集群运行。每个用户都有自己的服务器和自己的子域。一切都很顺利,但随着用户数量的增长,我们需要一种管理/更新机器的策略 我们可以在半夜接受一些停机时间,所以我们不需要高可用性。 我们只是不确定在所有机器上更新软件的最佳方式是什么。我们对Docker还很陌生,对Kubernetes或Ansible、厨师、木偶等都没有经验,但我们很快就学会了 我们预计将有成百上千的用户。每台机器运行相同的代码,但具有用户独有的环境变量。我们最初的资源调配解决了这一问题,因此我们预计不必通过软件更新来更改这些资源调配。但一个也能提供这种能力的解决方案并不是一件坏事 因此,问题是,当我们进行代码更改并希望部署更新的javajar或React应用程序时,以自动化的方式将它们部署到那里的最佳方式是什么 我们考虑了一些事情: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 Hub(关于速率限制的担忧)
- 部署我们自己的Docker repo
- 库伯内特斯
- 安西布尔
我们对这里没有列出的想法持开放态度,因为关于管理许多运行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部署的配置更改 等等
- 我们的应用程序的源代码
- Dockerfile,其中包含有关创建应用程序图像的说明
- 数据库迁移脚本
- Dockerfile,其中包含有关创建将在部署期间运行迁移的映像的说明(db migration runner)
另请阅读:。事实证明,我们发现付费码头中心计划满足了我们的所有需求。我很感谢@Malgorzata提供的精彩信息。你看到了吗:?看起来很有趣,@Malgorzata。谢谢你的提示!我已经把它作为一个附加信息的答案贴了出来,请看一看,如果有帮助,请投票/接受我的答案。