【问题标题】:Deployment of a microservice app to a clear Kubernetes cluster将微服务应用部署到清晰的 Kubernetes 集群
【发布时间】:2023-04-09 10:55:01
【问题描述】:

假设有一个系统应该在 Kubernetes 集群上运行。有一个开发环境设置并运行。

然后,它需要部署到另一个全新的空集群。 该系统由多个部署、一堆服务和入口组成。有一些卷和 PVC。它们都使用 kubectl 或 Helm 安装,并使用 secrets 手动配置。

如果我们需要一种安装工具来设置现有集群的所有内容怎么办?如果我们之后可能需要更新一些微服务怎么办?

是否有任何 Kubernetes 管理工具可以帮助部署整个应用程序或更新一些微服务? 我可以想象为每个使用的微服务创建一个 bat 文件来多次运行 helm install,但可能有更好的解决方案。

编辑:我应该更清楚一点,但假设有多个客户使用一个应用程序,并且该应用程序需要部署到他们身边的不同集群。构成应用程序的微服务可能是一堆 Helm 图表。我想要一个工具,可以在将解决方案安装到他们的集群时尽可能地避免客户端运行控制台命令。理想情况下,它还应该允许我们有选择地更新一些微服务。 这与 CI/CD 无关,它非常适合开发,而是关于将应用程序组件部署和升级到不同的客户集群中。

【问题讨论】:

    标签: kubernetes deployment microservices


    【解决方案1】:

    假设您的组织正在开发微服务架构中的服务并部署在 Kubernetes 集群中,您必须使用一些 CD 工具(持续交付工具)来添加新的微服务服务,甚至更新服务。在我看来,如果您使用 kubectl 来更新生产或认证(甚至开发)工作负载,那么您做错了,因为在微服务架构中,移动部件的数量可以像我们以前见过的那样扩展,而这种行为可以你陷入了微服务管理的地狱。

    使用这种工具(CD工具)可以方便集群的迁移或环境之间的服务提升。

    E se precisarmos de um tipo de ferramenta de instalação para configurar tudo em um cluster existente?

    看看 Terraform (https://www.terraform.io/) 和 Ansible (https://www.ansible.com/),最后一个 (ansible) 有很多插件并支持 shell 脚本和/或 bat 文件执行,允许您编写脚本和组织需求。

    如果我们之后可能需要更新一些微服务怎么办?

    看看像 Jenkins (https://www.jenkins.io)、DroneIO (https://drone.io) 这样的工具......一些组织使用 Python 脚本,或者 Go 等等,这种使用 bat-file 的方案很接近你提出的方案,我个人不喜欢这种方法,我认为最好的解决方案是从持续集成和交付组的 CNCF Landscape (https://landscape.cncf.io/zoom=150) 中选择一个工具,这些工具是经过市场测试和使用的。

    【讨论】:

    • 谢谢你,伊布森。我们确实拥有并使用 CI/CD 部署到开发集群。但是,如果整个解决方案应该交付给多个客户,并且他们将在他们自己的明确的 Kubernetes 集群上拥有它。我想我应该仔细看看 Terraform 和 Ansible。
    • 我更新了这个问题,因为它不太清楚我坚持的观点。
    【解决方案2】:

    我为此使用了terraform,它允许我以声明方式指定我的部署状态。 (另一个声明性工具是https://github.com/fluxcd/flux,但我完全没有使用它的经验。)

    terraform 的官方 k8s 提供程序不适用于 kubectl apply(https://github.com/hashicorp/terraform-provider-kubernetes/issues/141),所以对于通常通过 kubectl apply 应用的东西,我只是为它创建一个 wrapper helm chart。

    【讨论】:

    • 谢谢weichung.shaw。您是否偶然知道 Terraform 和 Helm 之间有什么区别?我正在研究这一点,并意识到我可能最终会得到一个基于 Helm 图表和要部署的每个微服务的依赖子模块的解决方案?
    • 两者都可以完成一些事情,但这些工具原本是为了解决不同的问题。 helm 更多地用于安装 k8s 应用程序(并且 quick helm rollback 在 terraform 中没有等价物),terraform 更多地用于声明性地描述云基础设施的状态。所以我使用它们的方式是像你说的那样使用 helm 来部署应用程序,但另外使用 terraform 来描述“我在这个集群中安装了哪个 helm chart”(而不是手动运行 helm install 命令或编写 shell脚本)。
    猜你喜欢
    • 2020-07-22
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    相关资源
    最近更新 更多