在典型的基于推送的部署中,Ansible 和 Jenkins 等工具直接连接到服务器或集群并执行配置命令。当集群可在网络上访问并且部署服务器和目标服务器之间存在直接连接时,此方法效果良好。出于合规性或安全原因,部署工具和集群之间的连接可能不可行。
Argo CD 是一个基于拉取的部署工具。它监视远程 Git 存储库中新的或更新的清单文件,并将这些更改与集群同步。通过在 Git 中管理清单并将其与集群同步,您可以获得基于 Git 的工作流的所有优势(版本控制、拉取请求审查、协作透明度等)以及 Git 仓库中的内容与集群中部署的内容之间的一对一映射。此方法称为 GitOps。
在本教程中,您将
- 在 Minikube 安装上安装 Argo CD
- 创建名为
ayush-test-application
的示例 Argo CD 应用程序,并将其与 我的仓库ayush-sharma/example-assets
链接 - 创建具有三个副本的 Nginx 部署
- 确保新应用程序显示在 Argo CD 仪表板上,并使用
kubectl
进行验证
安装 Argo CD
本教程使用 Minikube 版本 v1.21.0。如果您没有,请下载并安装 Minikube。
在 Minikube 启动并运行后,您可以安装 Argo CD。Argo CD 文档包含有关如何为任何集群安装和配置它的详细步骤。执行这些步骤后,在单独的终端窗口中运行 minikube tunnel
,以确保 Minikube 在本地系统上公开 Argo CD 服务器的负载均衡器端点。要验证这一点,请运行 kubectl get po -n argocd
并检查 argo-server
服务是否具有 EXTERNAL-IP:
user@system ~ kubectl get svc -n argocd
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
argocd-dex-server ClusterIP 10.110.2.52 <none> 5556/TCP,5557/TCP,5558/TCP 3h32m
argocd-metrics ClusterIP 10.100.73.57 <none> 8082/TCP 3h32m
argocd-redis ClusterIP 10.104.11.24 <none> 6379/TCP 3h32m
argocd-repo-server ClusterIP 10.100.132.53 <none> 8081/TCP,8084/TCP 3h32m
argocd-server LoadBalancer 10.98.182.198 10.98.182.198 80:32746/TCP,443:31353/TCP 3h32m
argocd-server-metrics ClusterIP 10.105.182.52 <none> 8083/TCP 3h32m
安装完成后并且负载均衡器工作正常,Argo CD 用户界面 (UI) 将可在 EXTERNAL IP
访问。

(Ayush Sharma,CC BY-SA 4.0)
创建您的第一个应用程序
在讨论 Argo CD 部署之前,您需要一个带有 Kubernetes (k8s) 清单文件的 Git 仓库,以便进行部署。我正在使用我的公共仓库 example-assets
,其中包含 Nginx 部署清单文件,位于 /argocd/getting-started
。
目标是让 Argo CD 监听 k8s 清单文件的更改,然后将其与部署它的集群(在本例中为 Minikube)同步。您可以通过创建一个包含有关清单文件的源仓库、目标集群详细信息和同步策略的应用程序来完成此操作。
单击左上角的 New App
以配置新应用程序。由于我的目标 Kubernetes 服务器是安装 Argo CD 的服务器 (Minikube),因此我将服务器默认设置保持不变。以下是我配置的值
- 应用程序名称:
ayush-test-application
- 项目:
default
- 同步策略:
automated
- 同步选项:
prune: true; selfHeal: true
- 源仓库 URL:
https://gitlab.com/ayush-sharma/example-assets.git
- 源修订版本:
HEAD
- 源路径:
argocd/getting-started
- 目标集群 URL:
https://kubernetes.default.svc
- 目标命名空间:
default
为了简化操作,您可以单击右上角的 EDIT AS YAML
并粘贴到
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: ayush-test-application
spec:
destination:
name: 'default'
namespace: default
server: 'https://kubernetes.default.svc'
source:
path: argocd/getting-started
repoURL: 'https://gitlab.com/ayush-sharma/example-assets.git'
targetRevision: HEAD
project: default
syncPolicy:
automated:
prune: true
selfHeal: true
您的配置应如下所示

(Ayush Sharma,CC BY-SA 4.0)
保存配置后,您的应用程序应以卡片形式显示在主页上。由于您将同步策略指定为 Automated
,因此您的新应用程序将立即开始与仓库同步。

(Ayush Sharma,CC BY-SA 4.0)
创建 Nginx 部署
在本教程中,清单文件是一个标准的 Nginx 部署,带有三个副本。一旦 ayush-test-application
完成同步,Argo CD 将显示部署的精美图形视图。

(Ayush Sharma,CC BY-SA 4.0)
使用 kubectl get po
验证部署
NAME READY STATUS RESTARTS AGE
nginx-deployment-585449566-584cj 1/1 Running 0 5m
nginx-deployment-585449566-6qn2z 1/1 Running 0 5m
nginx-deployment-585449566-d9fm2 1/1 Running 0 5m
Argo CD 的优势
Argo CD 是一种相对轻量级的 k8s 部署方法。我特别喜欢仓库中的内容与集群中的内容之间的一对一关系,这使得事件管理变得更加简单。
另一个很大的优势是,由于 Git 仓库包含 Argo CD 所需的一切内容,您可以删除整个 Argo CD 安装并从头开始设置。这意味着,在发生灾难性中断的情况下,现在可以更可行和更实际地启动第二个相同的集群并部署您的整个工作负载。
第三个很大的优势是开放端口更少。Argo CD 从远程 Git 仓库拉取更改,因此无需定义防火墙规则和虚拟私有云 (VPC) 对等连接来使您的部署服务器与您的集群连接,这减少了一个入口点。这大大减少了您的开发、质量保证 (QA) 和生产服务器的攻击面。
由于 Git 仓库和分支名称是可配置的,因此您可以在部署模型方面发挥创意。例如,您可以让两个不同的 Argo CD 在两个不同的 QA 和生产集群上运行,并监听同一仓库的分支。这保证了相同的清单文件部署在两个集群上,确保 QA 和生产环境包含相同的代码库。此外,单个 Argo CD 能够定位多个服务器,这意味着可以实现中心辐射型部署模型,其中一个主 Argo CD 协调跨不同区域或环境中的多个开发、QA 和生产集群的部署。
尽情发挥 Argo CD 的创意,不要忘记与他人分享您的实验。
本文最初发表在 Ayush Sharma 的博客上,根据 CC BY-SA 4.0 许可发布。
评论已关闭。