GitOps之Argo CD实践
scofield 菜鸟运维杂谈
简介
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
登录后可以看到如下界面
使用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仓库
b、点击New APP,填写相关信息
c、填写APP名字,项目:默认为Default,同步策略:可选Manual或者Auto
d、选择源,点击输入框会自动出现刚才添加好的repo,选择其中一个项目即可
e、选择目的,因为本文Argo CD 是部署到kubernetes中,直接能过读取到集群信息,然后输入Namespace
f、最后可以按需修改参数,不需要修改默认也可。
g、填写完信息,点击CREATE,创建好以后如下图
注意,现在状态是OutOfSync,还没有同步git
运行APP
1、点击项目,进入详情
2、现在我们来手动同步看下效果
3、点击SYNC并确认以后,开始同步repo并根据部署文件把应用部署到kubernets集群中,所示,guestbook项目运行成功,现在可以访问项目了。
运行成功后,会自动生成项目拓扑图,简单明了。
4、因为我创建项目时候修改了服务类型为NodePort,现在可以通过Node点IP+Port直接访问项目
自动触发项目
现在我们来修改下项目,以实现我们提交完代码到git仓库,自动触发更新项目。
比如:现在项目pod的副本数为5,我们想扩容到10
1、修改项目同步模式,Sync Policy改成AUTO_SYNC
2、修改git代码并提交代码到仓库
我这里用的是gogs,直接在网页上修改了,修改为直接commit
3、观察应用变化,Pod数正在增加
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 集群中的目标
以上就是本文所有内容...
PS:文章会同步到dev.kubeops.net