目录

ArgoCD

前言

Argo CD 是 Kubernetes 中最受欢迎和增长最快的 GitOps 工具。 当遵循 GitOps 部署模式时,Argo CD 可以轻松定义一组应用程序,它们在存储库中具有所需的状态以及它们应该部署的位置。 部署后,Argo CD会持续监控状态,甚至可以捕捉配置漂移。

Argo CD 的核心组件是应用程序控制器,它执行对应用程序的持续监控,然后将它们与实时应用程序状态与您在 Git 存储库中定义的目标状态进行比较。

应用程序控制器从 Git 存储库中检索所需的资源清单,并将其与 Kubernetes 集群中的实时资源进行比较。 这种方法通过利用 Git 作为您的事实来源,为您的部署工作流程启用 GitOps。 现在,让我们进一步探索如何最好地利用 Argo CD 进行部署!

开始

Argo CD 有几个最佳实践; 但是,我们将回顾我们从 Argo 社区收集的一些最重要的内容,并在下面列出优先级。

1. Separate your Git repositories

将您的配置和源代码分离到不同的 Git 存储库中是非常重要的。 在其存储库中分离您的配置会限制提交访问,以避免将某些内容推送到生产环境。 例如,如果您不小心将清单更改推送到配置存储库,它可能会触发构建作业和 Git 提交触发器的无限循环。 使用自动化 CI 管道,您还可以防止将清单更改推送到同一存储库。

分离您的存储库也更安全并限制提交访问,因此不会有人意外错误配置应用程序。

 

https://codefresh.io/wp-content/uploads/2022/03/word-image-20220330-174003.png

 

Argo CD 不会连接到您的源代码存储库。 但是,如果您对代码进行更改并且希望将更改部署到特定环境,则可以执行以下操作:

构建一个新的应用程序代码版本,然后在配置存储库中合并一个拉取请求 (PR) 以使用您创建的新应用程序版本。 通过使用源代码存储库中的管道,利用自动化对源代码进行更新。 Argo CD Image Updater 允许您更新由 Argo CD 管理的 Kubernetes 工作负载的容器镜像。

2. Create a directory structure to enable a multi-application system for your Argo CD deployments

一旦您将源代码和配置分离到单独的存储库中,就必须设置一个目录结构,将 GitOps 应用于 Argo CD 部署。 您可以利用多种方法来构建最能满足您组织需求的 Git 存储库结构。 但是,我们将重点介绍一些技巧,以在使用 Argo CD 时更好地构建目录。

✅:我们建议使用不同的文件夹而不是配置存储库中的分支来建模您的环境或集群(例如,prod、staging、testing 等)。
✅:确保您的集群和环境配置存储库是分开的(即,将您的 prod 配置与暂存不同的存储库分开)。
✅:利用某种清单管理,例如原始 Kubernetes YAML 文件、Kustomize 或 Helm 来为您的应用程序定义环境。
✅:在您的配置存储库中为每个集群创建一个“argocd”文件夹,并为集群存储库中的每个应用程序创建一个 Argo CD 应用程序清单。 通过创建单独的“argocd”文件夹,如果您希望使用 Git 存储库权限,还可以对不同的集群实施基于角色的访问控制。
✅:利用多文件夹或多仓库结构而不是多分支方法。您的集群或环境不应该有永久分支。
❌:永远不要将任何独立的应用程序或由不同团队管理的应用程序放在同一个存储库中。

为您的目录结构实施上述这些策略提供了几个优点。 这些优势包括提高安全性、轻松回滚、审核日志、更轻松的测试以及自动化清单更新。 它还允许您动态创建和删除应用程序。 如果您想查看这些目录结构的一些示例,请查看此处。 否则,请花点时间查看一个较新的项目,Argo CD Autopilot,它提供了一个自以为是的目录结构,它还安装 Argo CD 并允许它自行管理。

3. Determine a promotion strategy

既然您已经建立了目录结构,您可能会面临关于集群之间的最佳推广实践的挑战。 使用 Argo CD 部署多个应用程序时,最好选择一种适合您的目录结构的推广策略并坚持下去。 下面我们将重点介绍如何根据自己的需要执行此操作。

Group your applications

  • ApplicationSets

首先,一旦您建立了管理应用程序和部署的方法,并且有太多应用程序需要跟踪 - ApplicationSet 是您的最佳解决方案。 我们还应该注意,ApplicationSet 以前是一个外部控制器,您必须自己安装,现在它已经集成,让事情变得更容易! 但是,在使用 ApplicationSet 而不是 App of Apps 模式时,您需要一些额外的支持,这种模式很容易立即使用,无需任何额外帮助或学习曲线。

然而,在部署到生产环境时,ApplicationSet 是最佳选择。 这是因为 ApplicationSet 是一个 Kubernetes 控制器/自定义资源定义 (CRD),它可以在跨多个集群管理多个应用程序时实现自动化并提供灵活性。

  • Generators
  • Application template

您实际上是在允许 ApplicationSet 充当模板代理。

与 ApplicationSet 一起使用的生成器负责生成参数,利用模板来使用变量,然后将它们作为 Argo CD 应用程序应用到集群。 因此,对 ApplicationSet 模板及其字段所做的任何更改都将自动应用于创建的每个应用程序。

这样,您可以同时将 Argo 应用程序部署到多个 Kubernetes 集群。

 

https://codefresh.io/wp-content/uploads/2022/03/word-image-20220330-174007.png

 

  • App of Apps

在管理十个或更少的应用程序时,最好使用 App of Apps 模式。

App of Apps 是 ApplicationSets 之前的先驱,它使我们能够轻松地一次部署多个应用程序。

您正在利用实际应用程序本身,即“根应用程序”来包含其他应用程序,而不是单个 Kubernetes 对象。 这反过来又允许您管理一组可以以声明方式部署的应用程序。 本质上,这种模式支持以递归方式声明子应用程序。

另一种促进更改的可能方法是 Argo CD Image Updater。 它仍然是一个相对较新的项目,但它提供了一种手动更新清单版本的方法。

但是,我们应该注意,这种方法对 GitOps 不友好。 这意味着它违背了 GitOps 的声明性,但也许它的功能正是您和您的团队所需要的。

Which to choose?

开始使用 Argo CD 进行部署时,并不“需要”推广策略。 当试图解决“太多的应用程序”时,需要上面列出的策略。 这个问题很大程度上取决于您管理的 Argo CD 应用程序的数量以及您是否已经有部署过程。

Argo 社区制定了上面列出的策略来帮助您管理所有 Argo CD 应用程序部署,具体取决于您的规模、目录结构和清单类型以及其他因素。

但是,这最终取决于您和您的工作量,这对您和您的团队来说是最好的。

4. Manage your secrets securely

没有一种密钥管理解决方案适用于所有组织。 但是,基于以下两个重要因素,一些对于如何最好地使用 Argo CD 处理机密的常用方法可以提供帮助:

Encrypt your secrets directly in your Git repository:

  • Bitnami Sealed Secrets

密封的秘密是加密任何人创建的秘密的一种方法,但只能由在目标集群中运行的控制器解密。

  • SOPS

SOPS (Secret Operations) 是一种开源解决方案,允许您为 Kubernetes 机密加密和解密整个文件或字段。 这种方法将使您能够将您的秘密和其他 Kubernetes 清单直接存储在您的 Git 存储库中。

Externalizing your secrets from your Git repository:

  • Argo CD Vault plugin

这个解决方案引发了有关它是否是 GitOps 的争论。 尽管如此,这是在 Vault 中使用 Kubernetes auth 的解决方案。 Argo CD 存储库服务器授权 Vault 使用秘密清单中的服务账户令牌,替换所需的值并为您创建一个秘密。

  • Cloud Provider Secrets

云提供商机密由您的云服务提供商 (CSP) 创建,具体取决于云服务。 这取决于您的 CSP 提供什么以及他们的秘密管理解决方案是否满足您的需求。 确保您评估哪种策略可以最好地保护您的数据。 首先,将您的秘密存储在 Git 存储库中并不容易! 也许您的组织对机密有不同的政策,或者您已经有一个系统,因此在这种情况下,您可能希望将您的机密外部化。 但是,如果您想将您的秘密存储在您的 Git 存储库中,则无法将纯文本秘密存储在您的存储库中,并且您永远不想冒险存储敏感数据并暴露它! 但是,Git 可以真正成为真相的来源,包括你的秘密,当它们被非对称加密时,你不必冒被解雇的风险。 您可以使用 Argo CD 来管理从 Git 到集群的部署状态,包括您的秘密,方法是确保流程到位,并且安全使用上述工具。

5. Confirm how your team accesses Argo CD

本质上,我们不能说对您和您的团队来说访问 Argo CD 的最佳做法是什么。 但是,我们可以建议您和您的团队选择最适合您的组织的方法并为您的团队设定标准。

开发人员需要访问 Argo CD,因此您需要设置安全措施和基于角色的访问控制 (RBAC)。这种方法允许您的开发人员访问 Argo CD UI 并确保每个团队都可以适当地访问他们的应用程序和他们的应用程序。

Argo CD 提供包含两个预定义角色的 RBAC 配置:

  • Read-only
  • Admin

您还可以使用 Argo CD 为您的应用程序和其他资源类型实现权限定义。 然后,您可以将这些角色和权限同步在一起,以创建一个策略来定义对您的系统的访问。

您的组织内没有人需要访问 Argo CD。

一些组织不希望任何人访问 Argo CD UI 或 API 服务器。 也许组织想要使用自动化但不想利用 UI 组件。 在这种情况下,您可以使用 Argo CD 的变体,也称为 Argo CD Core。 这允许开发人员进行提交并忽略 UI 方面并降低复杂性。 但是,我们应该注意到,安装 Argo CD Core 会失去多租户优势。

因此,无论您在上面选择哪种方法——只要它有利于您和您的团队,您就做出了正确的选择。

6. Increase automation for your system with the other Argo projects

如果您使用 Argo CD 进行持续交付 (CD),您希望提升工作流程的其余部分以自动化 Kubernetes 中的所有内容以减少停机时间。 然后,您应该查看其他 Argo 项目并了解更多关于它们如何提供帮助的信息。

我们不鼓励您使用任何特定项目来利用最佳实践,相反,我们鼓励您使用对您和您的系统有最大帮助的项目。

同时,如果您愿意,我们可以探索如何使用 Argo 事件、工作流程和部署来增强您的系统。

Progressive Delivery

渐进式交付是一组逐步推出新功能而不是一次性推出新功能的做法。

  • Argo Rollouts

工作流允许您构建和编排并行作业并利用 Kubernetes 上的管道。

  • Argo Events

Events 是一个与 Kubernetes 一起使用的事件驱动的工作流自动化框架。

通过利用这些其他 Argo 项目,您可以轻松管理集群、运行工作流并为您的 Kubernetes 系统实施 GitOps! 然而,并非所有组织都准备好为 Kubernetes 中的所有内容实现自动化。 结合所有这些工具需要时间并了解您的系统是如何工作的,然后才能确定哪种工具最能帮助您的团队的流程。

总结

Argo CD 和其他 Argo 项目允许您自动化生产发布、迁移和系统操作工作流程的每个步骤,这无疑让生活变得更轻松! 通过利用上述这些最佳实践,您在授权团队并将 GitOps 应用于您的基础架构的正确轨道上,这样您就可以更频繁地部署到生产环境中。