22|如何使用 ArgoCD 快速打造生产可用的 GitOps 工作流?
- 深入了解
- 翻译
- 解释
- 总结
本文以示例应用为例,介绍了如何使用 ArgoCD 构建完整的 GitOps 工作流。通过结合 GitHub Action、应用定义以及 ArgoCD,读者可以快速了解如何建立 GitOps 工作流,涉及到 Docker 镜像、CI 构建、镜像仓库、应用定义、Kubernetes 和 ArgoCD 等技术。在技术选型和组合方面,读者可以根据团队实际情况任意组合技术栈。在连接技术方面,文章介绍了如何通知 ArgoCD 部署新镜像版本,以及介绍了 Argo CD Image Updater 的使用方式。最后,文章提出了一个思考题,邀请读者交流讨论。整篇文章以实际操作为主,适合读者快速了解和实践,同时提供了一些生产建议,有助于读者更好地使用 ArgoCD 构建生产级的 GitOps 工作流。
《云原生架构与 GitOps 实战》,新⼈⾸单¥59
全部留言(16)
- 最新
- 精选
- 邵涵对于思考题,CURRENT SYNC STATUS 从 Synced 变为 OutOfSync 可能是应用定义中的Deployment的replicas指定的数量与k8s集群中该Deployment下pod的实际数量不符造成的吗?因为集群中Deployment下的pod实际数量可能是HPA动态管控的 如果是这个原因的话,那是有什么方法可以声明忽略对这个数量的比对吗? 另外,还有两个问题,使用ArgoCD做自动的拉取、比对,和更新k8s集群中对象 1. 如何指定给某个环境使用的values-xxx.yaml文件? 2. 如果是要同时更新多个环境,是要为每个环境都创建一个ArgoCD应用吗?
作者回复: 回答正确。解决方案也非常简单,把 Deployment 的 replicas 字段删除即可,这样该字段会由 HPA 的最小副本数控制。 另外两个问题提的非常好,你可以参考 27 讲的内容,多环境自动创建的方法。
2023-03-20归属地:北京2 - gyl1989113argocd repo add https://github.com/xxx/kubernetes-example.git --username xxx --password xxx 为什么我执行这句报错rpc error: code = Unknown desc = error testing repository connectivity: authentication required
作者回复: 尝试用 git 协议,这个仓库是公开的。
2023-02-13归属地:四川21 - Sophia-百鑫老师好,如果技术栈是 gitlabCI pipeline +ArgoCD,应用定义 helm chart, 如果修改 gitlab-ci.yaml文件,使CI 自动修改 helm values.yaml 文件 的 image tag ?
作者回复: 是一种方案,另一种方案是使用 argo image updater 自动监听镜像版本的变化。
2023-08-02归属地:上海 - 辣条愛乃请教下,"连接GitOps工作流"这一步,我使用的gitlab,但是似乎没有找到,类似github的"valueFile"用来修改helm里面的tag id,不知道gitlab是怎么修改的
作者回复: 把 gitlab ci 当做是一台机器,本质上可以通过 shell 命令实现任何操作,比如编辑 yaml 文件可以用 yq 命令行工具。
2023-04-07归属地:湖北 - 辣条愛乃自己搭建的gitlab,但是报错 FATA[0003] rpc error: code = Unknown desc = error testing repository connectivity: Get "https://www.gittest.com/root/kubernetes-example.git/info/refs?service=git-upload-pack": dial tcp 128.14.151.194:443: connect: connection refused
作者回复: 看着是网络原因导致的,你可以尝试用托管的 GitLab 跑流程。
2023-03-28归属地:湖北 - 大圈感谢老师的解答,还有一个问题请教一下: 我们目前直接使用jenkins做CI/CD,然后我准备把CD工具替换为argocd。 关于"自动更新 Helm Chart values.yaml 文件镜像版本的部分"这块实践,看老师的教程可得github、gitlab-ci都可以实现。但是我暂时不想用gitlab-ci做CI工具,继续使用Jenkins做CI操作的话能否实现"自动更新 Helm Chart values.yaml 文件镜像版本的部分"呢? 我目前想到的方案就是通过自己写脚本来实现了。
作者回复: 很容易实现,Jenkins 里通过 shell 命令调用 YQ 工具来更新 helm chart,核心原理不变,只要能更新 values.yaml 即可。
2023-03-20归属地:北京 - 大圈请教一下,假如我有3个java服务,每个服务对应3套环境,test,preview,product,那么我是不是就得给这3个服务分别创建3个application,在argocd上。 有什么好的方式来解决在argocd上重复创建application的问题吗?
作者回复: 非常好的问题,你可以查看第27讲,这里面有提到多环境管理。
2023-03-15归属地:北京 - bob老师,您好!请问后端运行报错会是什么原因?谢谢! Traceback (most recent call last): File "/usr/local/lib/python3.8/runpy.py", line 194, in _run_module_as_main return _run_code(code, main_globals, None, File "/usr/local/lib/python3.8/runpy.py", line 87, in _run_code exec(code, run_globals) File "/usr/local/lib/python3.8/site-packages/flask/__main__.py", line 3, in <module> main() File "/usr/local/lib/python3.8/site-packages/flask/cli.py", line 1050, in main cli.main() File "/usr/local/lib/python3.8/site-packages/click/core.py", line 1055, in main rv = self.invoke(ctx) File "/usr/local/lib/python3.8/site-packages/click/core.py", line 1657, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) File "/usr/local/lib/python3.8/site-packages/click/core.py", line 1404, in invoke return ctx.invoke(self.callback, **ctx.params) File "/usr/local/lib/python3.8/site-packages/click/core.py", line 760, in invoke return __callback(*args, **kwargs) File "/usr/local/lib/python3.8/site-packages/click/decorators.py", line 84, in new_func return ctx.invoke(f, obj, *args, **kwargs) File "/usr/local/lib/python3.8/site-packages/click/core.py", line 760, in invoke return __callback(*args, **kwargs) File "/usr/local/lib/python3.8/site-packages/flask/cli.py", line 911, in run_command raise e from None File "/usr/local/lib/python3.8/site-packages/flask/cli.py", line 897, in run_command app = info.load_app() File "/usr/local/lib/python3.8/site-packages/flask/cli.py", line 312, in load_app app = locate_app(import_name, None, raise_if_not_found=False) File "/usr/local/lib/python3.8/site-packages/flask/cli.py", line 218, in locate_app __import__(module_name) File "/app/app.py", line 18, in <module> db.init_app(app) File "/usr/local/lib/python3.8/site-packages/flask_sqlalchemy/extension.py", line 253, in init_app raise RuntimeError( RuntimeError: A 'SQLAlchemy' instance has already been registered on this Flask app. Import and use that instance instead.
作者回复: 示例应用的后端服务的镜像版本 latest 和 1276e23 都是运行正常的,请问你使用的镜像版本是?
2023-03-02归属地:广东4 - 加菲老猫老师您好,我尝试根据您的范例,在github action中 Update helm values.yaml遇到以下错误,请您给个思路,谢谢! updateFile is deprected, the updated content will be written to the file by default from now on Error: HttpError: Resource not accessible by integration
作者回复: 把 updateFile 参数删除即可。
2023-02-22归属地:上海 - Andrew是否可以通过export环境变量的方式 比如 定义values.yaml image: tag: _${IMAGE_TAG} 然后再deploy的时候通过脚本 export IMAGE_TAG=${DOCKER_IMAGE_ID}
作者回复: Values.yaml 文件需要静态的内容。不支持这种方式。可以调研一下 helmfile 是否满足你的诉求。
2023-02-11归属地:美国