
Jenkins和Github Actions等CI/CD工具,在进行容器部署时,一般都是通过调用kubectl来进行的,比较简单。但是对于生产系统来说,系统运行的连续性很重要,容器镜像的新老版本升级需要有一个过渡,慢慢来。
于是,作为专用的持续部署工具,argo CD就出现了。argo CD的原理是把容器的运行时和镜像进行定时比对,一旦发现有新的镜像,就自动升级。它支持蓝绿、金丝雀等多种部署方式,并支持回滚操作,可以比较好地保证容器升级部署的稳定性和连续性。
操作系统Debian 12 ,Kubernetes 1.28.4, argo CD 2.10.8
一、前期工作
请先按照文章《Github Action CI/CD工具在裸金属Kubernetes集群的应用》,完成Github Action的安装和部署。
在action-runner-poc目录下,新建目录appdep,把deployment.yaml和service.yaml复制到appdep目录下面。
在action-runner-poc目录下,运行下列命令,同步到github。
git add -A
git commit -m "new commit"
git push origin main
二、安装argo CD
在Kubernetes集群的master主机上,运行下列命令,安装argo CD容器。
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/v2.10.8/manifests/ha/install.yaml
运行下列命令,安装命令行
curl -sSL -o argocd-linux-amd64 https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64
sudo install -m 555 argocd-linux-amd64 /usr/local/bin/argocd
rm argocd-linux-amd64
运行下列命令,对外开放argo CD的service
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'
运行命令
kubectl get svc argocd-server
可以看到argo CD的外部IP地址。
运行命令
argocd admin initial-password -n argocd
得到argo CD管理员admin的密码。
运行
argocd login <ARGOCD_SERVER>
登录到arocd , 输入用户名admin和密码 。<ARGOCD_SERVER>就是argo CD的外部IP地址。
运行
argocd account update-password
可以修改管理员密码。
三、设置和使用
运行
kubectl config set-context --current --namespace=argocd
argocd app create appdep --repo https://github.com/<github-username>/action-runner-poc.git --path appdep --dest-server https://kubernetes.default.svc --dest-namespace default
argocd app set appdep --sync-policy automated
其中<github-username>是你在github上的用户名,按照实际情况修改。appdep是argocd的应用名称,自己可以取名。
默认情况下,每隔三分钟检查一次镜像库,发现变动后自动升级。
运行
argocd app sync appdep
可以手动进行镜像同步。
运行
argocd app get appdep
可以看到镜像是否同步,以及目前运行的镜像tag。
四、测试
在action-runner-poc目录下,运行下列命令
echo "# test " >> README.md
git add -A
git commit -m "new commit"
git push origin main
github action会自动运行,构建和推送新的镜像。
运行
argocd app get appdep
可以看到同步状态变成了outofsync,等上几分钟,再运行上述命令,会变成sync,镜像tag也变成了最新的,说明argo CD的镜像自动部署功能已经生效。
参考