天天看点

使用ArgoCD实现GitOps

什么是Argo CD?

Argo CD是一个为Kubernetes而生的、遵循声明式GitOps理念的持续部署工具,其优势为:

1、应用定义、配置和环境信息是声明式的,并且可以进行版本控制;

2、应用部署和生命周期管理是全自动化的,是可审计的,清晰易懂;

3、Argo CD是一个独立的部署工具,支持对多个环境、多个Kubernetes集群上的应用进行统一部署和管理。

Argo CD与其他CD工具(例如Spinnaker、Tekton、Jenkins X)等的具体对比请参下图:

使用ArgoCD实现GitOps

查看argocd中定义的K8S集群:

#argocd cluster list

使用ArgoCD实现GitOps

在将应用程序配置到Argo CD之前,我们需要配置Git存储库,该存储库包含用于部署应用程序的清单将存储库添加到Argo CD:

argocd repo add http://gogs.2886795312-80-host04nc.environments.katacoda.com/student/gitops-lab.git

验证存储库已加载到Argo CD中:

argocd repo list

使用ArgoCD实现GitOps

在Argo CD中定义应用程序

Git存储库已经定义好了,现在该继续在Argo CD上配置应用程序。

使用先前定义的git仓库创建应用程序:

argocd app create --project default --name reverse-words-app \

--repo http://gogs.2886795312-80-host04nc.environments.katacoda.com/student/gitops-lab.git \

--path simple-app/reversewords_app/ \

--dest-server https://kubernetes.default.svc \

--dest-namespace reverse-words \

--revision master --sync-policy automated

--project将在其中创建应用程序的Argo CD项目

--name Argo CD应用程序名称

--repo使用Argo CD定义的Git存储库,它将用作代码来源

--path Git存储库中存储应用程序清单的路径

--dest-server Kubernetes部署应用的目标K8S集群

--dest-namespace部署应用的K8S集群中的目标namespaces

--revision用于获取应用程序源的Git branch/reference 

--sync-policy如果自动Argo CD将执行定期检查以确保Kubernetes中的应用程序状态与Git中的应用程序定义匹配

列出新定义的应用程序:

argocd app list

等待Argo CD将应用程序报告为“Healthy”,

argocd app get reverse-words-app

使用ArgoCD实现GitOps

验证应用程序正在运行,应用程序包括:

A namespace

A Deployment

A Service

使用ArgoCD实现GitOps

curl应用,验证效果(将输入的字符串反过来显示):

curl -X POST http://$(oc -n reverse-words get route reverse-words -o jsonpath='{.spec.host}') -d '{"word":"PALC"}'

使用ArgoCD实现GitOps

接下来,我们删除应用的deployment,并观察Argo CD是否可以重新创建deployment。

oc -n reverse-words delete deployment reverse-words

使用ArgoCD实现GitOps

强制进行同步应用(由于同步策略设置为“Automated”,因此Argo CD可能已经同步了该应用程序):

argocd app sync reverse-words-app

使用ArgoCD实现GitOps

上图中的报错,是由我们运行oc Exposure命令时创建的OpenShift Route引起的,因为它没有存储在Git存储库中。如果启用了 auto-pruning 功能,则该路由将被删除。

该错误说明了将所有Kubernetes对象保留在Git中的重要性,以确保没有配置漂移。验证同步完成后是否创建了deployment:

使用ArgoCD实现GitOps

在之前的实验中,我们已经看到Argo CD如何检测到由oc Exposure命令创建的OpenShift Route在Git存储库中不可用,我们将通过将路由定义添加到Git存储库来解决此问题。

探索OpenShift Route定义文件:

使用ArgoCD实现GitOps

将route.yaml添加到git存储库:

cp ~/route.yaml ~/gitops-lab/simple-app/reversewords_app/

提交新更改并将其推送到Git remote

cd ~/gitops-lab/

git add simple-app/reversewords_app/route.yaml

git commit -m "Added application route definition"

git push origin master

我们清除现有的实验环境(部署的项目和应用)。在接下来的步骤中,通过UI部署应用。

在Argo UI中部署应用

登录ArgoCD UI:

连接到repo:

连接成功:

在Argo CD WebUI中定义应用程序,输入参数如下:

使用ArgoCD实现GitOps
使用ArgoCD实现GitOps

查看创建好的应用:

使用ArgoCD实现GitOps

如果单击该应用程序,将进入详细视图:

使用ArgoCD实现GitOps

验证是否在集群中创建了不同的对象(尤其关注自动创建了路由),并通过curl验证应用。

使用ArgoCD实现GitOps

我们进一步查看应用对应的资源:

使用ArgoCD实现GitOps

可以对应用做多种操作:

使用ArgoCD实现GitOps