1

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

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

我们可以在半夜接受一些停机时间,因此我们不需要高可用性。

我们只是不确定在所有机器上更新软件的最佳方式是什么。而且我们对 Docker 还很陌生,对 Kubernetes 或 Ansible、Chef、Puppet 等没有经验。但我们很快就能上手。

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

所以,问题是,当我们进行代码更改并想要部署更新的 Java jar 或 React 应用程序时,以自动化方式将它们发布到那里的最佳方法是什么?

我们考虑过的一些事情:

我们可能需要的其他东西包括构建和更新 Docker 映像的 GitHub 操作。

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

4

2 回答 2

1

在您的情况下,我建议您将Kubernetes与 CD 工具结合使用。其中之一是好友。我认为这是以自动化方式进行此类更新的最佳方式。当然,您可以只使用 Kubernetes,但使用 Buddy 或其他 CD 工具,您将使其更快、更容易。在我的回答中,我描述的是 Buddy,但有很多流行的 CD 工具可用于在 Kubernetes 中自动化工作流程,例如:GitLabCodeFresh.io - 您应该选择最适合您的工具。看一看:CD-automation-tools-Kubernetes

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

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

这样的工作流程通常看起来像:

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

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

3. 构建一个新的 Docker 镜像

4. 推送Docker镜像

5. 登录你的 K8s 集群

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

Buddy 是一个 CD 工具,可用于自动化整个 K8s 发布工作流程,例如:

  • 管理 Dockerfile 更新
  • 构建 Docker 镜像并将它们推送到 Docker 注册表
  • 在 K8s 集群上应用新镜像
  • 管理 K8s Deployment 等的配置更改。

使用 Buddy,您只需配置一个管道。

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

运行 Kubernetes pod 或作业的管道配置

假设我们在 K8s 集群上有应用程序,它的存储库包含:

  • 我们应用程序的源代码
  • 一个 Dockerfile,其中包含有关创建应用程序映像的说明
  • 数据库迁移脚本
  • 一个 Dockerfile,其中包含有关创建将在部署期间运行迁移的映像的说明(db migration runner)

在这种情况下,我们可以配置一个管道,它将:

1.构建应用和迁移镜像

2.将它们推送到 Docker Hub

3.使用之前构建的镜像触发数据库迁移。我们可以定义镜像、命令和部署并使用 YAML 文件。

4. 使用 Apply K8s Deployment 或 Set K8s Image 更新 K8s 应用程序中的镜像。

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

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

另请阅读:automating-workflows-kubernetes

于 2020-11-25T16:20:52.100 回答
0

事实证明,我们发现付费的 Docker Hub 计划可以满足我们的所有需求。我感谢@Malgorzata 提供的出色信息。

于 2021-01-19T06:13:31.203 回答