1、Argo CD简介
在Jenkins CI/CD流程中的持续交付阶段,既部署到k8s集群阶段,使用kubectl工具来进行应用程序的部署和更新操作,但这种方式无法实时跟踪应用程序的状态。这将造成用户在CI/CD流程完成后需要额外操作kubernetes集群,以进一步查看应用程序的状态。为了解决这些问题,可以引入Argo CD来增强持续交付阶段,如下图所示
在上图中,Jenkins仍然负责持续集成阶段,包括拉取代码、代码编译和构建镜像等任务。一旦完成这些任务,Jenkins就会将最新的状态更新到存储在Git代码仓库的kubernetes资源文件中。Argo CD负责执行kubernetes资源文件的更新操作,并持续监控Git代码仓库中的kubernetes资源文件的变化,如果监测到变更,Argo CD会自动将这些变更同步到kubernetes集群中,以完成对应用程序的更新操作。同时,用户可以通过可视化界面实时观察应用程序的更新状态这种分工和协作机制充分发挥了Jenkins和Argo CD的优势,实现饿了更可靠、自动化和可视化的持续交付流程
2、Argo CD 部署
kubectl create ns argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
[root@h-k8s-master-181 k8s]# kubectl get pod,svc -n argocd
NAME READY STATUS RESTARTS AGE
pod/argocd-application-controller-0 1/1 Running 0 50s
pod/argocd-applicationset-controller-5c787df94f-d8ql9 1/1 Running 0 50s
pod/argocd-dex-server-6bb9b5fc75-j6v5d 1/1 Running 0 50s
pod/argocd-notifications-controller-7ccbd7fb6-tcrcx 1/1 Running 0 50s
pod/argocd-redis-6d479f656c-xwgtj 1/1 Running 0 50s
pod/argocd-repo-server-799b498d8b-swwjz 1/1 Running 0 50s
pod/argocd-server-f6d4d8775-jwbdv 1/1 Running 0 50sNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/argocd-applicationset-controller ClusterIP 10.97.89.138 <none> 7000/TCP,8080/TCP 51s
service/argocd-dex-server ClusterIP 10.109.209.155 <none> 5556/TCP,5557/TCP,5558/TCP 51s
service/argocd-metrics ClusterIP 10.103.133.92 <none> 8082/TCP 51s
service/argocd-notifications-controller-metrics ClusterIP 10.100.66.113 <none> 9001/TCP 51s
service/argocd-redis ClusterIP 10.109.242.126 <none> 6379/TCP 51s
service/argocd-repo-server ClusterIP 10.104.220.17 <none> 8081/TCP,8084/TCP 51s
service/argocd-server ClusterIP 10.101.120.102 <none> 80/TCP,443/TCP 51s
service/argocd-server-metrics ClusterIP 10.102.136.4 <none> 8083/TCP 50s
使用kubectl edit svc argocd-server -n argocd命令编辑Service对象,将type字段的值从ClusterIP变更为NodePort,并使用kubectl get svc -n argocd命令获取NodePort端口以进行访问。将看到Argocd的登录页面<http://192.168.31.181:30397/>
[root@h-k8s-master-181 k8s]# kubectl get svc -A|grep Node
argocd argocd-server NodePort 10.101.120.102 <none> 80:30397/TCP,443:31364/TCP 56m
kubernetes-dashboard kubernetes-dashboard NodePort 10.108.148.129 <none> 443:30001/TCP 25h
- 默认用户名为admin,密码由系统随机生成,可以通过下面的命令获取
[root@h-k8s-master-181 k8s]# kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath="{.data.password}" | base64 -d ; echo
GQznYzmiT0Kglz0m
- 登录成功后,进入Argo CD首页。
3、Argo CD实践
3.1 添加代码仓库
3.2 创建应用
3.3 Git仓库中kubernetes资源文件变更
3.4 应用回滚