首页 > 其他分享 >专注开发者体验 | GitOps 实现 Kuberentes 持续部署

专注开发者体验 | GitOps 实现 Kuberentes 持续部署

时间:2023-06-12 20:44:16浏览次数:46  
标签:GitOps 部署 Kuberentes CD repo 集群 开发者

大量的企业已经将 Kuberentes 用于其生产环境, 但面对他们正在运行的多套不同阶段的 Kuberentes 集群,仍然困惑于在保证业务团队敏捷性的同时,如何实现持续部署,高安全性、权限分离以及可审计。我们认为 GitOps 是目前比较理想的一种方法来实现基于 Kuberentes 集群的持续部署,且同时满足安全性、权限分离等企业级需求。

在这篇文章中,我们将分享 GitOps 的核心思想和工作流程。后续的系列文章中,我们会一起实践如何在 Amazon EKS 环境里构建 GitOps 风格的 CI/CD 流水线,欢迎持续关注!

亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、活动与竞赛等。帮助中国开发者对接世界最前沿技术,观点,和项目,并将中国优秀开发者或技术推荐给全球云社区。如果你还没有关注/收藏,看到这里请一定不要匆匆划过,点这里让它成为你的技术宝库!

 

什么是 GitOps

GitOps 是一种为云原生应用程序实施持续部署的方法。它通过使用开发者已经熟悉的工具,包括 Git 和持续部署工具,专注于在操作基础架构时以开发者为中心的体验。

GitOps 的核心思想包括:

  • 拥有一个 Git 存储库,该存储库始终包含对生产环境中当前所需基础设施的声明性描述,以及一个使生产环境与存储库中描述的状态相匹配的自动化过程;

  • 期望的状态以强制不变性和版本控制的方式存储,并保留完整的版本历史;

  • 如果开发者想部署一个新的应用程序或更新一个现有的应用程序,开发者只需要更新存储库,软件代理自动从源中提取所需的状态声明,自动化过程会处理其他所有事情;

  • 软件代理持续观察实际系统状态并尝试应用所需状态;

为什么选择 GitOps

同传统的持续部署系统相比,GitOps 有以下特点:

aba8a94ea5de978f44fba7d1272bf8d1.png

我们为什么认为 GitOps 是实现基于 Kuberentes 集群的持续部署,且同时满足安全性、权限分离等企业级需求的理想方式呢?其中一个原因是GitOps 在实践中可以选择采用推 (push) 或是拉 (pull) 的部署风格。

采用拉 (Pull) 部署风格会有如下好处:

  • 更加安全。因为 GitOps 代理运行在 Kubernetes 集群中,因此仅需要最小的权限用于部署。简化网络配置不需要该集群同 CD 程序建立网络连接,尤其在管理多集群时尤为简洁。
  • 一致性。管理多集群时,确保了每个集群的管理方式都是一样的。
  • 隔离性。每个集群的部署不依赖于集中的流水线 CD 程序。
  • 可伸缩性。该方式可以容易的扩展到同时管理成百上千的集群。

GitOps 部署方式我们建议首选拉 (Pull) 部署风格。因为采用拉 (pull) 的部署风格从安全性、可伸缩性、隔离性、一致性都更优。

选择 GitOps 的另一个原因,是可以通过 Kuberentes 上 GitOps 具体实践来了解细节。

GitOps 方法下,Git 成为系统所需状态的唯一事实来源,支持可重复的自动化部署、集群管理和监控。开发者通过复用企业中已经非常成熟的 Git 工作流程来完成编译、测试、扫描等持续集成步骤。当系统最终状态的声明代码进入 Git 仓库主线分支后,依托 GitOps 工具链来完成验证部署,到观测告警,到操作修复达到系统最终状态的闭环。流程参见下图:

46788a4ea6bc75b6e91f9bb96dd89f5b.jpg

基于 Amazon EKS 的 GitOps 最佳实践

本次最佳实践的整体 CI/CD 流水线如下图所示:

8429015bacdae1dfccb4947404da828c.png

代码仓库 CodeCommit 包含三个代码库,第一个为 Flux CD 的配置仓库 flux-repo,用来定义 Flux 相关资源。第二个是保存微服务应用配置和部署文件的 microservices-repo,另一个是业务服务的源码仓库 app-repo,本文中会使用一个前端项目作为案例。CI/CD 流水线中使用 CodePipeline 持续集成,把构建的 docker 镜像存储在 Amazon ECR 中,持续交付引擎 Flux 以 Pod 方式部署在 Amazon EKS 环境中。

基本的工作流程如下:

  • 开发者在开发环境中编写代码,并将最终完成的应用代码推送至 app-repo;
  • 应用代码库 app-repo 中的代码变更触发 CodePepeline;
  • CodePepeline 对代码进行编译打包并生成容器镜像,然后将其推送至 Amazon ECR 容器镜像仓库;
  • 部署在 EKS 环境中的 CD 引擎 Flux 周期性扫描 ECR 容器镜像仓库并从中拉取应用的容器镜像元数据
  • 当发现有新版本的容器镜像产生时会自动将新版本的容器镜像地址通过 git commit/push 同步至保存在 microservices-repo 中的应用部署文件;
  • Flux 周期性拉取 flux-repo 代码库中的应用配置和部署文件,由于 flux-repo 代码库引用了微服务的仓库 microservices-repo,flux 比较集群当前的应用负载运行状态是否和 microservices-repo 中的文件所描述的期望一致,当发现二者有差异时,Flux 会自动将差异同步至 EKS 集群,确保工作负载始终按照期望状态运行。

在后续文章中,我们将分别介绍最佳实践中的四个模块,和开发者一起完成 CI/CD 流水线架构的构建,包括:

  1. 通过 IaC 部署云基础架构;
  2. 在 Amazon EKS 集群上部署 Flux CD;
  3. 利用 Flux CD 部署 GitOps 工作流;
  4. 利用 GitOps 工作流实现基于镜像的自动部署;

请持续关注 Build On Cloud 微信公众号,了解更多面向开发者的技术分享和云开发动态!

往期推荐

Generative AI 新世界

亚马逊的开源文化

开发者生态

文章作者

Betty200.png

郑予彬

亚马逊云科技资深开发者布道师

20 年 ICT 行业和数字化转型实践积累,专注于亚马逊云科技云原生、云安全技术领域。18 年架构师经验,致力于为金融、教育、制造以及世界 500 强企业用户提供数据中心建设以及软件定义数据中心等解决方案的咨询及技术落地。

阙铭飞200.jpg

阙铭飞 

亚马逊云科技大中华区解决方案研发中心解决方案架构师

任职亚马逊云科技大中华区解决方案研发中心-解决方案架构师,负责解决方案研发工作。到目前为止有 10 年的工作经验,主要涉及大数据、DevOps、容器化等相关工作。

文章来源:

https://dev.amazoncloud.cn/column/article/64256901add53077e881c79d?sc_medium=regulartraffic&sc_campaign=crossplatform&sc_channel=bokey

标签:GitOps,部署,Kuberentes,CD,repo,集群,开发者
From: https://www.cnblogs.com/AmazonwebService/p/17476063.html

相关文章

  • 开发者 vs ChatGPT:开发者如何始终赢得比赛?
    【摘要】在不断发展的技术领域,开发人员在塑造我们生活的数字世界方面发挥着至关重要的作用。他们是架构师、问题解决者和创新软件解决方案背后的创造性思维。虽然像ChatGPT这样的人工智能模型在自然语言处理方面取得了重大进步,但开发人员仍然是软件开发成功的关键。本文探讨了开......
  • phptrace 是一个用于跟踪 PHP 应用程序性能的工具,可以帮助开发者快速发现性能瓶颈和调
    phptrace是一个用于跟踪PHP应用程序性能的工具,可以帮助开发者快速发现性能瓶颈和调试PHP应用程序。以下是一个使用phptrace的简单案例:1.安装phptrace可以通过以下命令安装phptrace:sudoapt-getinstallphp7.0-devgitclonehttps://github.com/Qihoo360/phptrace.......
  • Fedora 开发者 Neal Gompa 计划在 x86 BIOS 系统上使用 U-Boot
    导读去年,Fedora和RedHat开发人员计划在Fedora37中放弃传统BIOS支持,只关注UEFI平台。但该计划随后遭到用户极力反对,认为现在弃用传统BIOS支持为时尚早,希望Fedora能够给出一个更加平缓的过渡方式。其次,一些云厂商仍在BIOS模式下启动VM,尤其是AWS和较小的......
  • 谷歌公开自家「AI+软件工程」框架DIDACT:数千名开发者内部测试,用了都说生产力高
    谷歌公开自家「AI+软件工程」框架DIDACT:数千名开发者内部测试,用了都说生产力高摘要谷歌近日公布了自家的DIDACT(DynamicIntegratedDeveloperACTivity,动态集成开发人员活动)框架,用AI技术增强软件工程,将软件开发的中间状态作为训练数据,辅助开发人员编写、修改代码,并实时了解软件......
  • 英特尔开源新等宽字体Intel One Mono,称可保护开发者视力
    英特尔开源了一款面向开发者的新等宽字体 “ IntelOneMono”,这是一种富有表现力的等宽字体系列,集清晰度、易读性和开发者视力保护于一体。IntelOneMono字体涵盖了200多种使用拉丁文字的语言,提供四种粗细——Light、Regular、Medium和Bold,并带有默认的斜体。该系......
  • GitOps 最佳实践(上)| 基于 Amazon EKS 构建 CI/CD 流水线
    GitOps是目前比较理想的方法来实现基于Kuberentes集群的持续部署。了解了 GitOps的概念以及CI/CD流水线的架构,接下来我们将通过以下四个模块逐步完成构建CI/CD流水线的最佳实践:通过IaC部署云基础架构;在AmazonEKS集群上部署FluxCD;利用FluxCD部署GitOps工......
  • 面向开发者的 ChatGPT 提示工程课程|吴恩达携手OpenAI 教你如何编写 prompt
    提示工程(PromptEngineering)是一门相对较新的学科,旨在开发和优化提示,从而高效地将语言模型(LM)用于各种应用和研究主题,并帮助开发人员更好地理解大型语言模型(LLM)的能力和局限。随着ChatGPT等大语言模型的爆火,提示工程在大模型中的重要性不言而喻。有效的提示工程需要考虑哪些......
  • GitOps 最佳实践(下)| 基于 Amazon EKS 构建 CI/CD 流水线
    了解了 GitOps的概念以及CI/CD流水线的架构,完成了构建GitOps风格的CI/CD流水线的前两部分,恭喜开发者们!我们一起在GitOps最佳实践的道路上已经实现了大半。接下来,我们一起看看构建CI/CD流水线最佳实践的后两个部分:通过IaC部署云基础架构在AmazonEKS集群上部署......
  • 写给go开发者的gRPC教程-通信安全
    使用TLS安全传输数据什么是SSL/TLSSSL包含记录层(RecordLayer)和传输层[1],记录层协议确定传输层数据的封装格式。传输层安全协议使用X.509[2]认证,之后利用非对称加密演算来对通信方做身份认证,之后交换对称密匙作为会话密匙(Sessionkey[3])。这个会谈密匙是用来将通信两方交换......
  • 2023-06-01 微信开发者工具看不了报错
    具体表现为:开发工具捕获到1个error,点击开发工具的调试器也显示有1个error,点击查看,发现是空白,没有显示任何内容。原因:开发工具的调试器设置了一个【selectedcontextonly】,勾选上后就不会显示具体报错内容,而是只显示error的数量。解决方案:在开发工具的右上角的第二个setting,点进......