使用ArgoCD实现GitOps

孤街浪徒 提交于 2021-01-12 01:45:49
   ↑ 点击上方“大魏分享”关注我

阅读提示|本文大概2000字   阅读需要30分钟




什么是Argo CD?

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

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

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

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


Argo CD源自哪里?

Argo CD是由Intuit主导的开源项目,是Argo项目集合中的一个,Argo项目集合还包括Argo Workflow、Argo Rollout、Argo Event等项目。4月8日,CNCF技术监督委员会(Technical Oversight Committee,TOC)投票决定接受Argo作为孵化级别的托管项目。

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


查看argocd中定义的K8S集群:

#argocd cluster list

在将应用程序配置到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





在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

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

  • A namespace

  • A Deployment

  • A Service

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

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

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

oc -n reverse-words delete deployment reverse-words

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

argocd app sync reverse-words-app

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


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


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

探索OpenShift Route定义文件:

将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中定义应用程序,输入参数如下:

查看创建好的应用:


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


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


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

可以对应用做多种操作:



参考文档:

https://www.kubernetes.org.cn/7336.html

本文分享自微信公众号 - 大魏分享(david-share)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!