扩展CI/CD和GitOps以改进K8s应用部署

B站影视 2025-01-16 17:51 2

摘要:Kubernetes彻底改变了组织在云环境中部署和管理容器化应用程序的方式。然而,虽然Kubernetes使组织能够高效地扩展和管理其云原生应用程序,但它也存在自身的一系列复杂性。

传统的 CI/CD 管道和 gitOps 本身缺乏足够的可扩展性和灵活性,无法应对基于 Kubernetes 的软件交付速度。

译自 Extending CI/CD and GitOps for Better K8s App Deployments,作者 Bhushan Nemade。

Kubernetes彻底改变了组织在云环境中部署和管理容器化应用程序的方式。然而,虽然Kubernetes使组织能够高效地扩展和管理其云原生应用程序,但它也存在自身的一系列复杂性。

DevOps的一些基本概念,例如自动化的CI/CD工作流,是将应用程序交付到Kubernetes环境的基础。但是,随着组织开始扩展其服务,这些传统的CI/CD工作流及其更简单的构建、测试和部署方法变得效率低下。

随着规模较大的组织开始处理多个微服务、git分支和Kubernetes环境(即开发、阶段和生产环境),使用传统的CI/CD框架管理这些复杂组件变得很麻烦,这是因为Kubernetes部署的异步特性。

像Argo CD这样的GitOps工具可以加速Kubernetes环境中的应用程序交付,能够将更改从Git存储库部署到目标环境。但是,它们难以理解如何在多个环境和部署目标之间逐步推广应用程序。

每个软件在到达生产环境之前,都会遵循一条通过开发和暂存环境的渐进式部署路径。在每个阶段,都会对服务进行测试和验证,以确保平稳运行。CI/CD管道是驱动这些系统环境转换和验证的基本机制。但是,传统的CI/CD管道在管理大规模部署到多个环境时受到限制。

CI是一种软件开发实践,开发人员将他们的代码更改合并到一个中央git存储库中,然后进行自动构建和测试。由于DevOps更倾向于进行小的增量更改,因此开发人员每天多次将他们的代码提交到主分支。

CI阶段通常通过云原生生态系统中的Jenkins和GitHub Actions等工具来处理。这些CI工具使开发人员能够编写自定义脚本,这些脚本可以自动运行测试用例并生成可用于部署的工件。但是,由于其灵活性,这些CI工具通常用于执行CD管道任务,而这并非其用途。CI阶段的范围通常应该很小:任务应该只是从原始代码中测试和构建工件。

CD是从存储库向各种环境交付代码更改的自动化过程,最终到达生产环境。CD管道通常在到达生产环境之前会经过开发、测试和暂存环境。在每个阶段,应用程序都会进行特定的验证和测试。例如,在开发环境中,开发人员可以验证新功能和修复程序,而暂存环境则模拟生产条件以进行彻底测试。只有在通过所有质量关卡和批准后,代码才会移至生产环境。

为了确保可靠的部署,CD管道严重依赖自动化和GitOps方法以确保一致且可重复的部署。自动化的GitOps方法允许团队快速有效地交付代码和配置更改。CD管道的范围和复杂性大大超过CI管道,它包含跨多个环境的编排部署、渐进式部署策略和自动回滚机制以处理部署失败。

随着组织转向云原生方法以确保其服务的可用性,由于微服务架构和云原生技术的动态特性,传统CI/CD系统的复杂性也随之加剧。每个微服务和部署环境都有其特定的需求和依赖项,这增加了部署的复杂性。 多个微服务依赖和动态环境的复杂性会减慢团队的操作速度,因为他们必须确保每个点的配置一致性。这种复杂性还会增加配置错误和部署错误的可能性,这可能会导致生产系统停机。

传统的CI/CD流水线和GitOps方法会带来以下挑战:

软件开发的加速步伐压垮了传统的CI/CD基础设施,而该基础设施并非设计用于高频部署。这会造成关键部署的瓶颈,并可能导致停机。传统的CI/CD流水线和GitOps方法需要持续维护以确保安全性和合规性。诸如Argo CD实例之类的工具需要持续管理,从而在部署过程中引入额外的延迟。组织必须维护多个CI/CD流水线和Argo CD实例才能跨不同环境执行部署。管理众多流水线(想象一下四个环境中10个不同的微服务)变得越来越复杂和耗时。需要集成用于监控和回滚流程的附加工具会导致工具膨胀,进一步使部署基础设施复杂化。组织依赖在CI阶段执行的脚本将代码更改提升到下一阶段,导致CI流水线过载。管理多个环境、微服务和CI/CD流水线的复杂性带来了版本跟踪方面的挑战,使得难以维护跨环境的部署准确性。工具和环境的膨胀极大地增加了审计流程的复杂性,使得维护部署透明度和问责制具有挑战性。

应用推广是指通过软件部署流水线的不同环境(例如开发、质量保证(QA)、登台和生产环境)逐步部署应用程序的过程。应用程序通过多个环境的这种进展有助于确保应用程序平稳运行,并且功能和更改已通过多个环境彻底验证。在满足某些要求(例如通过测试用例)后,应用程序可以进入下一个环境。

采用应用推广可以简化将多个微服务交付到不同环境的过程,同时提供可扩展且灵活的方法。它以CI/CD和GitOps为基础,并填补空白,提供一条旨在处理软件交付速度的路径。它足够灵活,可以根据需要进行修改。

应用推广允许组织在多个环境中持续推广更改:从开发人员测试其应用程序的开发环境;到模拟生产环境的登台环境;最后到生产环境。应用推广根据定义的标准和检查传递更改,以支持发布稳定性。

这种方法降低了错误、配置错误和停机的风险,使每次部署都更加可靠和高效。它还增强了开发和运维团队之间的协调,提高了部署的可预测性,并有助于维护跨环境的一致应用程序状态。它还创建了清晰的更改审计跟踪,使跟踪部署和必要时的回滚更加容易。

应用推广为CI/CD和GitOps流水线带来的一些好处包括:

它提供了更大的灵活性和对部署流水线的更多控制,其中每个更改都通过一系列环境和自动化检查。每个阶段的持续推广和测试允许团队迭代解决问题并在生产环境中交付稳定的版本。这种现代CI/CD方法有效地管理了多环境部署的复杂性,使组织能够高效地扩展其环境和微服务。它强制在部署过程中实现标准化,确保一致的实践并降低环境特定配置漂移的可能性。它提高了对部署流水线的可见性,允许团队快速识别瓶颈并优化推广过程。它还通过维护跨环境的部署和配置的清晰历史记录,促进了快速的回滚和恢复程序。

Devtron 是一个开源平台,有助于解决管理多个Kubernetes集群的复杂性,从而提高开发人员的生产力,并使DevOps团队更容易大规模管理Kubernetes。

Devtron的应用推广功能允许团队定义强大的防护措施和策略驱动的部署结构,从而促进应用程序在不同环境中的逐步部署。这种方法有助于确保应用程序在推广到下一个环境之前,在每个阶段都经过严格测试。

通过定义明确的成功标准,团队可以自信地验证其应用程序在每个级别都满足性能和功能标准。这最大限度地降低了生产环境中出现问题的风险,也有助于保证应用程序平稳可靠地运行。

来源:琦琦潮科技

相关推荐