10.5 使用 Argo CD 进行持续交付

Argo CD 是以 Kubernetes 作为基础设施,并遵循声明式 GitOps 设计理念的 CD(continuous delivery,持续交付)工具。Argo CD 支持多种配置管理,包括 ksonnet/jsonnet、kustomize 和 Helm 等。它的配置和使用非常简单,并自带一个简单易用的可视化界面。

如图 10-10 所示,Argo CD 部署在集群之后,它将持续监控应用当前的实际状态是否与 Git 仓库中声明的期望状态相匹配,如不匹配则自动同步修正。


图 10-10 Argo CD 如何工作 图片来源open in new window

接下来,笔者将演示在集群内安装 Argo CD 以及部署一个应用示例,介绍 Argo CD 的使用概况。

10.5.1 安装 Argo CD

先创建一个命名空间,然后通过 kubectl apply 安装 Argo CD 提供的 yaml 文件即可。

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

安装之后,可以使用自带的 WebUI 进行交互操作,也可以额外安装 CLI ,出于演示的目的,这里使用自带 WebUI 进行交互。

默认情况下,Argo CD 的 WebUI 服务在集群内部并没有暴露出来,可以通过 LoadBalancer 或者 NodePort 类型的 Service、Ingress、Kubectl 端口转发等方式将 Argo CD 服务发布到 Kubernetes 集群外部。

如下,通过 NodePort 服务的方式暴露 Argo CD 到集群外部。

$ kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "NodePort"}}'

查找到 argocd-server 关联的 NodePort 端口,通过浏览器打开:https://localhost:35123/ 控制台。

初次访问需要登录,Argo CD 默认账户是 admin,帐号的初始密码是自动生成,并以明文的形式存储在 Argo CD 安装的命名空间中 argocd-initial-admin-secret 的 Secret 对象下的 password。

通过下面命令获取初始密码。

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

10.5.2 部署应用

部署应用之前,我们先了解 Argo CD 定义的 Application 资源,它通过下面两个关键的属性将目标 Kubernetes 集群中的 namespace 与 Git 仓库中声明的期望状态连接起来:

  • Source:指的是 Git 仓库中 Kubernetes 资源配置清单所在的位置,可以是原生的 Kubernetes 配置清单,也可以是 Helm Chart 或者 Kustomize 部署清单。
  • Destination:通过 Server 指定 Kubernetes 集群以及相关的 namespace,这样 Argo CD 就知道将应用部署到 Kubernetes 集群中的哪个位置。

通过如下 yaml 文件,了解 Argo CD 对 Application 资源的定义。

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: guestbook
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/argoproj/argocd-example-apps.git
    targetRevision: HEAD
    path: helm-guestbook
  destination:
    server: https://kubernetes.default.svc
    namespace: default

除了 Application 资源,Argo CD 也定义了 Project 资源,用来对 Application 分组,设置更细粒度的访问权限控制,实现多租户环境。

创建 Application 之后,应用状态为初始 OutOfSync 状态,此时也尚未创建任何 Kubernetes 资源,在控制台点击 “SYNC” 按钮进行同步部署,部署之后的状态如下图所示。


图 10-11 Argo CD 应用部署示例

如此,后续无论是通过 CI 触发更新 git 仓库中的编排文件,还是工程师直接修改,Argo CD 都会自动拉取最新的配置并应用到 Kubernetes 集群中。

总字数:834
Last Updated:
Contributors: isno