用 ArgoCD 可以实现基于 Kubernetes 集群的 GitOps CD。
前置条件
- Kubernetes 集群
- 安装 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 实现自动部署。