Argo CD是用于Kubernetes的声明性GitOps连续交付工具。
关于 GitOps 相关的概念这里不作更多介绍,本文主要以实战为主,经过一个完整的使用示例,但愿对你们实践 GitOps 有所帮助。
接来下就开干......git
一、根据官网文档,其实安装很简单,两条命令搞定github
kubectl create namespace argocd kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
这里说明下,若是有私有仓库,能够先把须要的镜像下载下来传到本身的私有仓库,要否则可能会由于网络缘由部署很慢甚至不成功,
a、须要以下四个镜像,我先下载到本身的仓库了。redis
image: hub.kubeops.net/dev/dex:v2.25.0 image: hub.kubeops.net/dev/haproxy:2.0.4 image: hub.kubeops.net/dev/argocd:latest image: hub.kubeops.net/dev/redis:5.0.10-alpine
b、我这里直接修改argocd的Service类型为NodePort,方便测试。线上环境建议配置Ingressshell
二、部署完成以下所示浏览器
[root@ argo]# kubectl get po -n argocd NAME READY STATUS RESTARTS AGE argocd-application-controller-0 1/1 Running 0 12d argocd-dex-server-58ff66cff7-nmgh5 1/1 Running 0 12d argocd-redis-ha-haproxy-68c68f5664-bjp9b 1/1 Running 0 12d argocd-redis-ha-haproxy-68c68f5664-crttm 1/1 Running 0 12d argocd-redis-ha-haproxy-68c68f5664-xzckx 1/1 Running 0 12d argocd-redis-ha-server-0 2/2 Running 0 12d argocd-redis-ha-server-1 2/2 Running 0 12d argocd-redis-ha-server-2 2/2 Running 0 12d argocd-repo-server-5f665db888-4pjzl 1/1 Running 0 12d argocd-repo-server-5f665db888-vkvc2 1/1 Running 0 12d argocd-server-78798c96c8-hpn4q 1/1 Running 0 12d argocd-server-78798c96c8-j7frq 1/1 Running 0 12d 查看Service,这里看到argocd-server 的类型为NodePort [root@ argo]# kubectl get svc -n argocd NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE argocd-dex-server ClusterIP 10.96.180.148 <none> 5556/TCP,5557/TCP,5558/TCP 12d argocd-metrics ClusterIP 10.110.44.191 <none> 8082/TCP 12d argocd-redis-ha ClusterIP None <none> 6379/TCP,26379/TCP 12d argocd-redis-ha-announce-0 ClusterIP 10.108.171.93 <none> 6379/TCP,26379/TCP 12d argocd-redis-ha-announce-1 ClusterIP 10.99.64.124 <none> 6379/TCP,26379/TCP 12d argocd-redis-ha-announce-2 ClusterIP 10.98.107.138 <none> 6379/TCP,26379/TCP 12d argocd-redis-ha-haproxy ClusterIP 10.101.136.77 <none> 6379/TCP 12d argocd-repo-server ClusterIP 10.106.50.123 <none> 8081/TCP,8084/TCP 12d argocd-server NodePort 10.106.75.221 <none> 80:31016/TCP,443:30807/TCP 12d argocd-server-metrics ClusterIP 10.106.25.225 <none> 8083/TCP 12d
三、如今能够经过浏览器进去Argo CD的管理界面了,用户名:admin,密码: server Pod 的名字,能够经过以下命令获取网络
[root@qd01-stop-k8s-master001 argo]# kubectl get pods -n argocd -l app.kubernetes.io/name=argocd-server -o name | cut -d'/' -f 2 argocd-server-78798c96c8-hpn4q
登陆后能够看到以下界面app
一、从git repo建立一个应用,这里就直接使用官方的示例https://github.com/argoproj/argocd-example-apps.git 我直接把项目克隆到内部私有的git上,地址变为了http://gogs.kubeops.net/scofield/argocd-example-apps.git 若是没有私有git能够直接用github的ide
二、经过Argo CD UI界面建立一个App
a、首先在管理界面设施repo,让Argo CD 可以链接到git仓库
b、点击New APP,填写相关信息
c、填写APP名字,项目:默认为Default,同步策略:可选Manual或者Auto
d、选择源,点击输入框会自动出现刚才添加好的repo,选着其中一个项目便可
e、选择目的,由于本文Argo CD 是部署到kubernetes中,直接能过读取到集群信息,而后输入Namespace
f、最后能够按需修改参数,不须要修改默认也可。
g、填写完信息,点击CREATE,建立好之后以下图
注意,如今状态是OutOfSync,尚未同步git工具
一、点击项目,进入详情
二、如今咱们来手动同步看下效果
三、点击SYNC并确认之后,开始同步repo并根据部署文件把应用部署到kubernets集群中,所示,guestbook项目运行成功,如今能够访问项目了。
运行成功后,会自动生成项目拓扑图,简单明了。
四、由于我建立项目时候修改了服务类型为NodePort,如今能够经过Node点IP+Port直接访问项目测试
如今咱们来修改下项目,以实现咱们提交完代码到git仓库,自动触发更新项目。
好比:如今项目pod的副本数为5,咱们想扩容到10
一、修改项目同步模式,Sync Policy改为AUTO_SYNC
二、修改git代码并提交代码到仓库
我这里用的是gogs,直接在网页上修改了,修改成直接commit
三、观察应用变化,Pod数正在增长
如今咱们来看下生产的这个APP的部署清单,直接点击项目详情便可看到
project: default source: repoURL: 'http://gogs.kubeops.net/scofield/argocd-example-apps.git' path: helm-guestbook targetRevision: HEAD helm: parameters: - name: image.repository value: hub.kubeops.net/dev/ks-guestbook-demo - name: service.type value: NodePort destination: server: 'https://kubernetes.default.svc' namespace: default syncPolicy: automated: {}
从如上信息咱们能够看到,上面定义的 Application 这个资源,就是 Argo CD 用于描述应用的 CRD 对象:
project:应用程序将被配置的项目名称,这是在 Argo CD 中应用程序的一种组织方式 repoURL:源代码的仓库地址 targetRevision:想要使用的 git 分支 path:Kubernetes 资源清单在仓库中的路径 destination:Kubernetes 集群中的目标
以上就是本文全部内容,谢谢阅读。