ArgoCD 是市场上第一个以在 Kubernetes 上基于声明性 GitOps 的部署而闻名的公司之一,是最常用的持续交付工具之一。它以其在 Kubernetes 上出色的应用程序部署和管理以及自动修复集群、用户访问管理、状态检查等功能而闻名。它是在 Apache 2.0 许可证下在 github上开源的。

ArgoCD 存在,为什么🤔?

[但是为什么是](https://res.cloudinary.com/practicaldev/image/fetch/s--znpQN1v---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev- to-uploads.s3.amazonaws.com/uploads/articles/ec6gjcpw7vvlrkj88cvs.jpeg)

市场上已经有很多工具,为什么我们还需要另一个呢?为了证明 ArgoCD 的存在,让我们尝试了解 ArgoCD 前后应用程序部署的工作流程。

ArgoCD之前的工作流程

[before-argocd](https://res.cloudinary.com/practicaldev/image/fetch/s--mIrM_-vr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev -to-uploads.s3.amazonaws.com/uploads/articles/f9dxi44lpvq97pkg03al.jpg)

在 ArgoCD 存在之前,管道看起来像上图。一个常见的 ci-cd 工具用于持续集成和持续部署。

  • 一旦代码被推送到版本控制让我们说 Github,该工具会触发其他作业

  • 它运行测试用例,构建镜像,将镜像推送到相应的容器注册表

  • 然后根据新映像构建更改部署清单,然后使用kubectl命令部署新清单

所有这些作业/任务都由 ci-cd 工具执行。这就是 ArgoCD 存在之前传统 ci-cd 工作流程的工作方式。但是,此工作流程存在一些挑战。

  • 我们需要在ci-cd工具中安装和配置kubectl、helm等工具

  • 如果将 eks 等托管服务用于相应的 ci-cd 工具,我们将必须提供对 k8s 集群和云提供商的访问权限

  • 向外部工具提供凭证可能导致安全漏洞

  • 部署指标不可见,您的 ci-cd 工具在应用清单后不知道已部署应用程序的状态

ArgoCD之后的工作流程

[后-argocd](https://res.cloudinary.com/practicaldev/image/fetch/s--SlS9e6iJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to -uploads.s3.amazonaws.com/uploads/articles/j6pnk2lfu0hixq09avgj.jpg)

ArgoCD 上市后,整个工作流程发生了变化。正如您在图像中看到的,持续集成和持续部署现在已经分开了。 ArgoCD 使用基于声明性 GitOps 的部署,它指出最佳实践是拥有两个不同的 git 存储库,一个用于应用程序源代码,另一个用于部署清单文件。

  • 一旦代码被推送到版本,CI 管道触发作业

  • 开始运行测试用例,构建镜像,将镜像推送到各自的容器注册表,然后根据清单更新清单并将清单推送到其各自的 git 存储库

  • 一旦更新的清单被推送到其各自的存储库,如镜像所显示的 Github、Gitlab 等,安装在集群内的 ArgoCD 会自动检查更新并在集群内应用。

这就是相应的 ci-cd 工具仅限于 CI 和 ArgoCD 处理 CD 部分的方式,从而将这两个操作分开。使用此工作流程有许多不同的优点,其中一些是 -

  • 它使用 git 作为单一数据源,从而将 GitOps 原则用于部署

  • 因为 ArgoCD 安装在集群中并且是唯一在集群中进行更改的,它不需要任何额外的凭据,这与 ci-cd 工具的情况不同

  • ArgoCD 提供了一个仪表板来管理所有已部署的应用程序,因此使您能够获得应用程序正在部署或未部署的状态,这是我们在以前的工作流程中无法获得的

  • 轻松回滚,因为集群与单独的git仓库同步,所以我们只需要还原git中的更改,集群就会自动与git仓库同步

  • 灾难恢复,如果发生任何灾难,您只需将 git 存储库指向新创建的集群,它将具有之前集群的所有配置

因此,这些是 ArgoCD 之后 Workflow 的一些主要优势。现在让我们深入了解 ArgoCD 并做一些实际的事情。

ArgoCD 入门

正如我们已经看到了 ArgoCD 的一些背景概念及其需求,让我们深入了解一些动手部分。在集群中安装和设置 ArgoCD 有两种不同的方法,

1.使用脚本安装

2.使用helm chart安装

让我们来看看这些。

[注意:安装 argocd 之前必须安装 kubectl 命令,并且 kubeconfig 文件应该在默认位置(~/.kube/config)]

脚本安装

只需几个命令,您就可以在集群中安装 ArgoCD 并准备在其上部署应用程序。请执行以下命令进行安装 -

创建一个命名空间argocd将安装所有 ArgoCD 资源

kubectl create namespace argocd

进入全屏模式 退出全屏模式

在创建的命名空间中安装所有资源

kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

进入全屏模式 退出全屏模式

安装后,您需要访问仪表板。他们的文档中提供了不同的方法来访问仪表板。我们将在本地机器上安装时使用端口转发。请执行以下命令

kubectl port-forward svc/argocd-server -n argocd 8080:443

进入全屏模式 退出全屏模式

现在可以在127.0.0.1:8080中访问您的 ArgoCD 仪表板,如下图所示。

[argocd-dashboard](https://res.cloudinary.com/practicaldev/image/fetch/s--lEu5-bhW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev -to-uploads.s3.amazonaws.com/uploads/articles/nofuzua4039l96mekfna.png)

对于登录凭据,用户名是admin,对于密码,执行以下命令 -

kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo

进入全屏模式 退出全屏模式

恭喜🥳 您已成功登录 argocd 仪表板。

现在,这是方法之一。它也可以使用 helm chart 安装。让我们看看如何。

helm安装

最近 argo-project 推出了对 ArgoCD 的官方 helm-chart 支持,这使我们也可以使用 helm 安装它。请执行以下命令以使用 helm 安装 ArgoCD -

在系统中添加 helm 存储库

helm repo add argo https://argoproj.github.io/argo-helm

进入全屏模式 退出全屏模式

现在安装 ArgoCD helm chart

helm install my-release argo/argo-cd

进入全屏模式 退出全屏模式

使用 helm chart 安装的好处是,您可以在安装过程中轻松提供所需的配置。关于 ArgoCD helm chart 支持的参数的详细信息,请看这个详细的README

安装后,要访问仪表板和凭据,您可以按照我们之前执行的相同命令进行操作。

[注意:如果您在安装期间没有提供任何命名空间,请确保删除命名空间,即-n argocd,以访问仪表板和凭据。要提供命名空间,请将其附加到 helm install 命令--create-namespace --namespace argocd]

这就是您可以使用两种不同方法轻松安装 ArgoCD 的方式。有关 ArgoCD 入门的详细文档,请查看。现在,让我们部署一个简单的应用程序并将其配置为由 ArgoCD 管理。

应用部署

对于要由 ArgoCD 部署和管理的任何应用程序,我们需要创建一个配置文件,例如application.yaml,它将具有 ArgoCD 所需的所有配置,其中包含要与之同步的存储库 URL,存储所有清单的路径,需要部署、命名空间和其他配置。这是一个演示项目,我们将在我们的集群中部署它,其中包含所有yamlsapplication.yaml文件以及最低配置。

让我们部署我们的应用程序。请按照以下步骤操作。

  • 首先,我们需要将所有配置文件,包括application.yaml存储在单独的 gitHub(gitlab、bitbucket 等)存储库中,因为您可以在这里看到

  • 然后我们只需要使用以下命令在集群中部署包含 ArgoCD 所需配置的application.yaml-

kubectl apply -f application.yaml

进入全屏模式 退出全屏模式

[kubectl-apply](https://res.cloudinary.com/practicaldev/image/fetch/s--Nkp3HXNG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to -uploads.s3.amazonaws.com/uploads/articles/jctvbkokfrlqazr975ho.png)

现在只需应用 ArgoCD 应用程序配置文件,所有其他 k8s yamls 将自动部署并与集群同步。在下图中,您可以看到应用程序go-app-argo-config负责创建所有其他资源。

[argo-config](https://res.cloudinary.com/practicaldev/image/fetch/s--ocu67w-u--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev -to-uploads.s3.amazonaws.com/uploads/articles/brglesoh6gl1155uaifw.png)

如果我们想要更新部署、服务或添加任何其他 k8s 清单(yamls),我们只需要进行更改并推送到与其同步的 github 存储库中,其余部分将由 ArgoCD 处理。

所以,这就是关于 ArgoCD 的全部内容,您需要启动并围绕它进行游戏。如果您有任何疑问或建议,请随时发表评论,我很乐意回答您的所有问题。

有关 ArgoCD 的更多详细信息,请随时查看他们的Github 存储库

我在做什么

正如您在博客中看到的,ArgoCD 专门用于部署和其他操作,您仍然需要其他工具。Devtron是一个用于 Kubernetes 的开源工具生态系统。 Devtron 还使用 ArgoCD 进行 GitOps 驱动部署,以及其他行业认可的开源工具,如 Prometheus 和 Grafana(用于监控)、Clair(用于图像扫描)、Casbin(用于 rbac 身份验证实施)以及更多开源和企业级工具都集成无缝集成在一个包中。

目前我正在写另一个博客,我将解释 Devtron 如何利用 ArgoCD 和其他工具在 Kubernetes 上提供完整的软件交付生命周期的无缝体验。

GitHub 徽标devtron-labs/devtron

Kubernetes 工具集成平台

Logo

CI/CD社区为您提供最前沿的新闻资讯和知识内容

更多推荐