Argo CD安装与创建Nginx部署的教程

484 阅读5分钟

在典型的基于推送的部署中,Ansible和Jenkins等工具直接连接到服务器或集群并执行配置命令。当集群在网络上可以访问,并且你的部署服务器和目标服务器之间有直接的连接时,这种方法效果很好。出于合规或安全原因,部署工具和集群之间的连接可能是不可能的。

Argo CD是一个基于拉动的部署工具。它观察远程Git存储库的新的或更新的清单文件,并将这些变化与集群同步。通过在Git中管理清单并与集群同步,你可以获得基于Git的工作流程的所有优势(版本控制、拉动请求审查、协作的透明度等),以及Git repo中的内容与集群中部署的内容之间的一对一映射。这种方法被称为GitOps。

在本教程中,你将:

安装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               5556/TCP,5557/TCP,5558/TCP   3h32m
argocd-metrics          ClusterIP      10.100.73.57              8082/TCP                     3h32m
argocd-redis            ClusterIP      10.104.11.24              6379/TCP                     3h32m
argocd-repo-server      ClusterIP      10.100.132.53             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             8083/TCP                     3h32m

一旦安装完成,负载平衡器工作,Argo CD的用户界面(UI)就可以在EXTERNAL IP

Argo CD home page

在谈论Argo CD部署之前,你需要一个带有Kubernetes(k8s)清单文件的Git repo,准备进行部署。我使用的是我的公共 repoexample-assets/argocd/getting-started ,有一个Nginx部署清单文件

目标是让Argo CD监听k8s清单文件的变化,然后与它所部署的集群(本例中是Minikube)同步。你可以通过创建一个包含清单文件的源 repo、目标集群细节和同步策略信息的应用程序来做到这一点。

点击左上角的New App ,配置一个新的应用程序。由于我的目标Kubernetes服务器是Argo CD安装的服务器(Minikube),我把服务器的默认值保持不变。这些是我配置的值。

  1. 应用程序名称。ayush-test-application
  2. 项目。default
  3. 同步策略。automated
  4. 同步选项。prune: true; selfHeal: true
  5. 源码库URL。https://gitlab.com/ayush-sharma/example-assets.git
  6. 来源修订版。HEAD
  7. 源路径。argocd/getting-started
  8. 目的地集群URL。https://kubernetes.default.svc
  9. 目的地命名空间。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

你的配置应该看起来像这样。

Argo CD application configuration

保存配置后,你的应用程序应该在主页上显示为一个卡片。由于你指定了同步策略为Automated ,你的新应用程序将立即开始与版本库进行同步。

Argo CD application syncing

创建Nginx部署

在本教程中,清单文件是一个具有三个副本的标准Nginx部署。一旦ayush-test-application 完成同步,Argo CD 将显示一个漂亮的部署图形视图。

Argo CD application deployment

使用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部署方法。我特别喜欢 repo 中的内容和集群中的内容之间的一对一关系,使事件管理变得更加简单。

另一个很大的优势是,由于Git repo包含了Argo CD所需要的一切,你可以删除整个Argo CD的安装,从头开始设置。这意味着在发生灾难性故障的情况下,建立第二个相同的集群并部署整个工作负载是更加可行和实用的。

第三大优势是更少的开放端口。Argo CD从远程Git repo拉取变化,所以不需要定义防火墙规则和虚拟私有云(VPC)对等连接来让你的部署服务器与你的集群连接,这就少了一个入口点。这大大减少了你的开发、质量保证(QA)和生产服务器的攻击面。

由于Git repo和分支名称是可配置的,你可以创造性地使用部署模型。例如,你可以让两个不同的Argo CD在两个不同的QA和生产集群上运行,监听同一个 repo的分支。这样可以保证在两个集群上部署相同的清单文件,确保QA和生产环境包含相同的代码库。此外,一个Argo CD能够针对多个服务器,这意味着枢纽和辐条部署模式是可能的,即一个主Argo CD协调不同地区或环境中的多个开发、QA和生产集群的部署工作。

在Argo CD上发挥创意,别忘了与他人分享你的实验。