04|如何借助GitOps实现应用秒级自动发布和回滚?
传统 K8s 应用发布流程
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了如何利用GitOps实现Kubernetes应用的自动发布和回滚。首先回顾了传统的K8s应用发布流程,包括手动修改Manifest文件和使用kubectl命令更新应用的实战操作。接着详细介绍了GitOps的概念和工作原理,通过将Manifest存储在Git仓库中,GitOps工作流可以自动比对Git仓库和集群内工作负载的实际差异,并进行部署。文章通过实战操作演示了如何安装FluxCD并创建GitOps工作流,以及如何实现自动发布和回滚。总结了K8s更新应用镜像的基本操作,并引入了GitOps工作流的发布方式来解决效率低、回滚困难等问题。此外,还提到了在实际项目中构建端到端的GitOps工作流的细节和推荐使用的工具ArgoCD。最后,留下了思考题,鼓励读者分享并交流讨论。整体而言,本文以实用的技术指导为读者提供了深入浅出的K8s应用发布传统方式和GitOps工作原理的介绍。
《云原生架构与 GitOps 实战》,新⼈⾸单¥59
全部留言(23)
- 最新
- 精选
- includestdio.h我们目前是通过gitlab-ci和自己搭建的CD平台实现流水线,代码变更后ci发起镜像构建,并推送到镜像仓库,CD平台通过hook监听到CI流水线完成,重建Pod并拉取最新的镜像。 缺点是#我们的镜像版本号只区分了 dev mirror prod,回滚不是很优雅,只能是通过gitlab回滚代码重新构建镜像,重新触发CD,效率低,对开发同学也不太友好。最近正在着手看怎么调整,实现通过镜像版本号回滚。
作者回复: 欢迎你关注后续的课程,你的问题在第 17 讲中有提到。 我建议你先使用 git commit id 作为镜像版本号,这样可以把代码版本和镜像对应起来,回滚的话只要找到 commit id 就可以了。对于生产镜像,则可以采用额外的策略,例如 prod-commit_id 把他和常规开发镜像区分开。
2022-12-13归属地:广东59 - Noel ZHANG我们用的是spinnaker, 配置不难,完全可以terraform创建,里面集成了helm和customize,可以用Jenkins job,docker repository, pub/sub 自动触发。用惯了觉得挺好用,但是听孟凡杰说用的人不多。。
作者回复: Spinnaker 在国内确实用的比较少,不过它在国外很流行,也是老牌的持续部署工具,整体相对比较重。 如果对 Spinnaker 感兴趣,可以看看我写的 《Soinnaker 实战》这本书。
2023-01-11归属地:江苏3 - Y我本地windows实验成功了,感谢大佬
作者回复: 加油,后续课程还有更好玩的实验。
2022-12-15归属地:广东3 - JianXu老师,你能介绍一下为什么flux 能成功吗?他比其他gitops 方案到底强在哪里
作者回复: FluxCD 在 11 月底刚通过 CNCF 的评审,进入了毕业阶段。 这意味着社区已经在生产环境下大规模采用了 FluxCD,它的稳定性得到了充分的验证。 GitOps 领域目前两大工具中,FluxCD 的强项在于做集成,而 ArgoCD 更适合工程实践。这两款工具都非常优秀,所以在专栏里我都有进行介绍。 关于 ArgoCD,在后续第 22 讲中会深入介绍,期待我们再见面。
2022-12-13归属地:广东23 - 陈斯佳我们现在使用的是在Jenkins上通过Terraform部署Helm chart,只要修改Terraform里的镜像版本号就能部署或回滚应用。类似这个lab: https://github.com/chance2021/devopsdaydayup/blob/main/004-TerraformDockerDeployment/README.md
作者回复: 也是一种方案。 不过在工程实践中不建议在 CI(Jenkins)里干持续部署的活,本质上持续部署需要更多的能力支持。比如在界面上应该能够很方便看出应用版本、健康状态、应用资源拓扑等,在部署能力支持上,可能还需要蓝绿部署、灰度和金丝雀发布,甚至是结合人工审核定制发布工作流。 这部分的内容可以在第 22、24、25 和 26 将深入了解。
2022-12-13归属地:广东23 - IF-Processing我目前使用的方案是Gitlab-ci将代码检查,编译,制作docker镜像一套走完后,自动推送到生产的镜像仓库,之后进行手工部署和回滚操作。目前有痛点,主要是目前运行的应用是SpringCloud体系的应用程序,每次发版时,需要手工维护Nacos配置,数据变更脚本等功能。请教下,如果使用GitOps体系进行操作时,是否对于运行的目标体系有要求呢?我理解如果是使用K8S的configmap之类的信息进行配置,使用Service进行负载均衡的话,应该很好实现配置与代码一起部署。但是如果是这种依赖Nacos配置注册中心的微服务体系,GitOps体系也能很好的支撑吗?
作者回复: 可以考虑使用 Helm 来封装应用,利用 Helm pre-install 在部署前执行特定的变更配置的 Job,这样就可以做到和 GitOps 工作流进行结合了。
2022-12-17归属地:广东2 - 浅浅老师好,内容太棒了!请问什么时候更新后面的内容呀
作者回复: 今天已经更新了哦,每周一、三、五更新,期待和你再见面~
2022-12-17归属地:广东2 - includestdio.h“接下来,执行 kubectl apply -f new-hello-worlad-flask.yaml 来更新应用” world写错了 ,还有下面的命令
作者回复: 感谢指正
2022-12-19归属地:广东1 - BertGeek代码使用阿里云code,jenkins pipeline,手动构建 1. 开发提交代码到仓库,告知代码已经提交, 2. 运维人员或者开发/测试人员登陆jenkins构建对应的项目模块 3. pipeline作业构建分多个stage阶段,拉取代码--> mvn build --> docker build&push --> kubectl set image 最近领导要求改造发布模式,github action + argocd,自动触发式 发布应用到华为cce 集群
作者回复: 这个场景可以用 gitops 实现。
2023-09-26归属地:陕西 - Dexterello-world-flask https://github.com/dexter-liu/fluxcd-demo.git 14m False failed to checkout and determine revision: unable to clone 'https://github.com/dexter-liu/fluxcd-demo.git': Get "https://github.com/dexter-liu/fluxcd-demo.git/info/refs?service=git-upload-pack": dial tcp: lookup github.com on 10.96.0.10:53: server misbehaving ----这个会是什么问题? [root@master01 ~]# dig -t A github.com ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.10 <<>> -t A github.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7514 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 8, ADDITIONAL: 17 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;github.com. IN A ;; ANSWER SECTION: github.com. 11 IN A 20.207.73.82
作者回复: 无法克隆 github 仓库,看起来是网络原因。
2023-05-21归属地:上海