简介

Argo CD是用于Kubernetes的声明性GitOps连续交付工具。
关于 GitOps 相关的概念这里不做更多介绍,本文主要以实战为主,通过一个完整的使用示例,希望对大家实践 GitOps 有所帮助。
接来下就开干......

安装Argo CD

1、根据官网文档,其实安装很简单,两条命令搞定

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

这里说明下,如果有私有仓库,可以先把需要的镜像下载下来传到自己的私有仓库,要不然可能会因为网络原因部署很慢甚至不成功,
a、需要如下四个镜像,我先下载到自己的仓库了。

        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,方便测试。线上环境建议配置Ingress

2、部署完成如下所示

[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

3、现在可以通过浏览器进去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

登录后可以看到如下界面
GitOps之Argo CD实践

使用Argo CD创建应用

1、从git repo创建一个应用,这里就直接使用官方的示例https://github.com/argoproj/argocd-example-apps.git 我直接把项目克隆到内部私有的git上,地址变为了http://gogs.kubeops.net/scofield/argocd-example-apps.git 如果没有私有git可以直接用github的

2、通过Argo CD UI界面创建一个App
a、首先在管理界面设施repo,让Argo CD 能够连接到git仓库
GitOps之Argo CD实践
b、点击New APP,填写相关信息
GitOps之Argo CD实践
c、填写APP名字,项目:默认为Default,同步策略:可选Manual或者Auto
GitOps之Argo CD实践
d、选择源,点击输入框会自动出现刚才添加好的repo,选着其中一个项目即可
GitOps之Argo CD实践
e、选择目的,因为本文Argo CD 是部署到kubernetes中,直接能过读取到集群信息,然后输入Namespace
GitOps之Argo CD实践
f、最后可以按需修改参数,不需要修改默认也可。
GitOps之Argo CD实践
g、填写完信息,点击CREATE,创建好以后如下图
GitOps之Argo CD实践
注意,现在状态是OutOfSync,还没有同步git

运行APP

1、点击项目,进入详情
GitOps之Argo CD实践
2、现在我们来手动同步看下效果
GitOps之Argo CD实践
3、点击SYNC并确认以后,开始同步repo并根据部署文件把应用部署到kubernets集群中,所示,guestbook项目运行成功,现在可以访问项目了。
运行成功后,会自动生成项目拓扑图,简单明了。
GitOps之Argo CD实践
4、因为我创建项目时候修改了服务类型为NodePort,现在可以通过Node点IP+Port直接访问项目
GitOps之Argo CD实践

自动触发项目

现在我们来修改下项目,以实现我们提交完代码到git仓库,自动触发更新项目。
比如:现在项目pod的副本数为5,我们想扩容到10
1、修改项目同步模式,Sync Policy改成AUTO_SYNC
GitOps之Argo CD实践
2、修改git代码并提交代码到仓库
我这里用的是gogs,直接在网页上修改了,修改为直接commit
GitOps之Argo CD实践
3、观察应用变化,Pod数正在增加
GitOps之Argo CD实践

APP部署文件解析

现在我们来看下生产的这个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 集群中的目标

以上就是本文所有内容,谢谢阅读。