用ArgoCD实现CD

Database and Ruby, Python, History


用 ArgoCD 可以实现基于 Kubernetes 集群的 GitOps CD。

前置条件

  1. Kubernetes 集群
  2. 安装 kuberctl 并配置好 kubeconfig

安装 ArgoCD

当前为验证环节,所以没有用 HA 部署 ArgoCD。

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

Port Forward

没有配置域名,我就本地 forward 端口出来,浏览器访问 localhost:8080 登陆 ArgoCD UI。

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

登陆 ArgoCD

通过下面命令获取到 admin 用户的密码,登陆 ArgoCD

argocd admin initial-password -n argocd

创建 project

ArgoCD 默认会有一个 default project,配置里面允许所有的 repo 部署到所有的集群。也可以创建自己的 project。

创建 repo

通过 https token 的方式创建一个 repo,也可以通过 ssh。

创建 application

创建 application 之后,就可以自动部署了。

自动部署

提交一个 commit 到对应 repo 里面,比如修改 imageTag,新的版本就可以部署上去了,并且在 history 里面看到记录。

查看同步状态

如何实现 Configmap 的自动 rollouts

可以通过修改 commonAnnotations 来实现 configmap 的自动 rollouts。 https://codefresh.io/blog/using-argo-cd-and-kustomize-for-configmap-rollouts/

如何多集群的部署

可以参考 kustomize 的实现方式,实现多个环境多个集群的部署。参见这个repo

HA 部署

上面的安装是验证性质的部署方式,如果是 production,需要高可用部署。参见官网

如何添加集群

可以通过下面的命令添加集群,要求your_k8s_context_name对应的是kubeconfig 里面对应context_name。这个命令会在目标集群上创建 serviceaccount, cluster role 和 cluster role binding。最后,还创建了一个长期的 Bearer token,此后 ArgoCD 就可以利用这个 token 在目标集群上进行部署了。

argocd cluster add your_k8s_context_name

ArgoCD 是如何工作的

ArgoCD 是利用 Kubernetes 的 CRD,以及自己定义的 controller 来实现自动部署的。下面是官网的架构图,当 repo 里面的 Kubernetes YAML 代码改动的时候,ArgoCD 的 controller 会对比集群和 repo 里面的定义,进而通过上面的 Token 实现自动部署。