Argo CD 是“Argo”和“CD”这两个词的组合,Argo是一个用于 Kubernetes 的开源容器原生工作流引擎。它是一个CNCF 托管项目,它提供了一种简单的方法来组合所有三种计算模式——服务、工作流和基于事件的——所有这些对于在 Kubernetes 上创建作业和应用程序非常有用。它是一个引擎,它使在 Kubernetes 上轻松地指定、调度和协调复杂工作流和应用程序的运行变得容易。名称中的 CD 指的是持续交付,它是持续集成 (CI) 的扩展,因为它在构建阶段之后自动将所有代码更改部署到测试和/或生产环境中。
Argo CD 遵循GitOps 方法。GitOps 是一种以使用Git 作为单一事实来源为中心,用于声明式基础设施和应用程序代码。它监控远程 Git 存储库以查找新的或更新的清单文件,并将这些更改与集群同步。通过在 Git 中管理清单并将它们与集群同步,您可以获得基于 Git 的工作流的所有优势(版本控制、拉取请求审查、协作透明度等)以及 Git 存储库中的内容与集群中部署的内容之间的一对一映射。
Argo CD 使组织能够使用 GitOps 在 Kubernetes 上声明式地构建和运行云原生应用程序和工作流。
Argo CD 是一个基于拉取的、声明式的、用于 Kubernetes 的 GitOps 持续交付工具,具有功能齐全的 UI。该工具从您的 Git 存储库中读取您的环境配置,并将其应用到您的 Kubernetes 命名空间。应用程序定义、环境和配置应为声明式且版本控制的。应用程序部署和生命周期管理应自动化、可审计且易于理解。
Argo CD 专为使 Kubernetes 集群的持续部署过程更简单、更高效而构建,它解决了多个挑战,例如需要在 Jenkins 之外设置和安装其他工具以完成 Kubernetes 的 CI/CD 过程,需要配置对 Kubernetes 的进出访问控制(包括云平台),需要在将新应用程序推送到 Kubernetes 集群后可视化部署状态等。
Argo CD 不仅部署在 Kubernetes 内部,而且应被视为 Kubernetes 的扩展,因为它使用现有的 Kubernetes 资源和功能,如 etcd 和控制器来存储数据并监控应用程序状态的实时更新。
Argo CD 是如何工作的?它通过成为 Kubernetes 集群的更重要组成部分来解决 CD 流程中的上述问题。 Argo CD 不是将更改推送到 Kubernetes 集群,而是拉取 Kubernetes 清单更改并将它们应用于集群。 在 Kubernetes 集群中设置 Argo CD 后,您可以配置 Argo CD 以连接和跟踪 Git 仓库更改。
如果检测到任何更改,Argo CD 会自动将这些更改应用于集群。 现在,开发人员可以提交代码(例如,Jenkins),这将自动构建一个新镜像,将其推送到 Docker 仓库,然后最终更新将由 Argo CD 自动拉取的 Kubernetes 清单文件,最终节省手动工作,减少初始设置配置,并消除安全风险。 但是,DevOps 团队如何对应用程序配置进行其他更改呢? 与 Git 仓库连接的任何清单文件都将由 Argo CD 跟踪和同步,并被拉入 Kubernetes 集群,为开发人员和 DevOps 提供一个灵活的单一部署工具。
Argo CD 也会监控集群中的更改,这在有人手动更新集群时变得很重要。 Argo CD 将检测集群和 Git 仓库之间状态的差异。 Argo CD 将 Git 仓库中所需的配置与 Kubernetes 集群中的实际状态进行比较,并将 Git 仓库中定义的内容同步到集群,覆盖任何手动更新,从而确保 Git 仓库仍然是唯一的事实来源。 但是,当然,如果需要直接快速更新集群并发送警报,Argo CD 足够灵活,可以配置为不自动覆盖手动更新。
Argo CD 是一种非常简单且高效的方式,它通过自动监控和拉取 Git 仓库中的清单更改来实现声明式和版本控制的应用程序部署,但也具有易于回滚和恢复到以前状态的功能,而无需手动恢复集群中的每次更新。
它还通过 GitOps 工作流程提供自动化和可追溯性,并提供用于可视化 Kubernetes 资源的 Web UI。
Argo CD 通过不同的方式定义 Kubernetes 清单:它支持 Kubernetes YAML 文件、Helm Charts、Kustomize 和其他生成 Kubernetes 清单的模板文件。
Argo CD 还具有命令行界面应用程序、Grafana 指标仪表盘和应用程序事件和 API 调用的审计跟踪。
Argo CD 具有非常简单的集群灾难恢复过程,如果集群出现故障,将新的集群指向 Git 仓库会自动重建完全相同的状态,而无需任何干预,因为它的声明性。
使用 Git 和 Argo CD 进行 Kubernetes 集群访问控制非常简单 - 您可以配置谁可以提交合并请求以及谁可以实际批准这些合并请求,从而提供一种干净的方式来间接通过 Git 管理集群访问权限。 也无需向其他工具(如 Jenkins)提供外部访问权限,从而保证集群凭据安全,因为 Argo CD 已经在集群中运行,并且是实际应用更改的唯一工具。
安装 Docker Desktop
启用 Kubernetes
安装 Argo CD
brew install argocd
创建一个名为 argocd 的命名空间,所有 Argo CD 资源都将安装在此命名空间中。
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
kubectl get po -n argocd
NAME READY STATUS RESTARTS AGE
argocd-application-controller-0 0/1 ContainerCreating 0 3m9s
argocd-dex-server-65bf5f4fc7-5kjg6 0/1 Init:0/1 0 3m13s
argocd-redis-d486999b7-929q9 0/1 ContainerCreating 0 3m13s
argocd-repo-server-8465d84869-rpr9n 0/1 Init:0/1 0 3m12s
argocd-server-87b47d787-gxwlb 0/1 ContainerCreating 0 3m11s
kubectl get po -n argocd
NAME READY STATUS RESTARTS AGE
argocd-application-controller-0 1/1 Running 0 5m25s
argocd-dex-server-65bf5f4fc7-5kjg6 1/1 Running 0 5m29s
argocd-redis-d486999b7-929q9 1/1 Running 0 5m29s
argocd-repo-server-8465d84869-rpr9n 1/1 Running 0 5m28s
argocd-server-87b47d787-gxwlb 1/1 Running 0 5m27s
kubectl port-forward svc/argocd-server -n argocd 8080:443
Forwarding from 127.0.0.1:8080 -> 8080
Forwarding from [::1]:8080 -> 8080
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
HcD1I0XXXXXQVrq-
brew install argocd
默认情况下,Argo CD API 服务器不会公开具有外部 IP 的服务器。 要访问 API 服务器,请选择以下方法之一来公开 Argo CD API 服务器
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'
service/argocd-server patched
argocd login localhost
WARNING: server certificate had error: x509: certificate signed by unknown authority. Proceed insecurely (y/n)? y
Username: admin
Password:
'admin:login' logged in successfully
Context 'localhost' updated
% argocd account update-password
*** Enter password of currently logged in user (admin):
*** Enter new password for user admin:
*** Confirm new password for user admin:
Password updated
Context 'localhost' updated
ajeetraina@Ajeets-MacBook-Pro ~ %
由于我们在 Docker Desktop 上运行它,因此我们将相应地添加它。
argocd cluster add docker-desktop
WARNING: This will create a service account `argocd-manager` on the cluster referenced by context `docker-desktop` with full cluster level admin privileges. Do you want to continue [y/N]? y
INFO[0002] ServiceAccount "argocd-manager" created in namespace "kube-system"
INFO[0002] ClusterRole "argocd-manager-role" created
INFO[0002] ClusterRoleBinding "argocd-manager-role-binding" created
Cluster 'https://kubernetes.docker.internal:6443' added
点击“创建”,并提供以下仓库 URL:https://github.com/argoproj/argo-cd/tree/master/manifests/base/redis
argocd app list
NAME CLUSTER NAMESPACE PROJECT STATUS HEALTH SYNCPOLICY CONDITIONS REPO PATH TARGET
redisdemo https://kubernetes.docker.internal:6443 argocd default Synced Healthy <none> <none> https://github.com/argoproj/argo-cd manifests/base/redis HEAD
argocd app delete redisdemo
让我们尝试部署一个投票应用程序。 投票应用程序只接受每个客户端一个投票。 如果已经从客户端提交了投票,它不会注册投票。
一个 Python Web 应用程序,允许您在两个选项之间投票
一个收集新投票的 Redis 队列
一个使用投票并将其存储在…中的 .NET 工作进程
一个由 Docker 卷支持的 Postgres 数据库
一个实时显示投票结果的 Node.js Web 应用程序
转到 Argo CD 仪表盘,输入仓库 URL,并提供正确的 PATH。 点击“创建应用程序”以在 Docker Desktop 上部署应用程序。
按父资源分组
以下是投票应用程序的完整概览。
通过https://localhost:31000/访问应用程序