本文首发于:Jenkins 中文社区git
在咱们正在进行的 Kubernetes FAQ 系列中,咱们回答了社区中一些常见的问题,本周咱们将讨论在选择 CI/CD 工具时须要考虑什么。安全
目前已经有大量的 CI/CD 工具可供选择-开源解决方案和商业解决方案。在这里,咱们重点介绍在设置持续交付流水线时要考虑的一些最重要的注意事项。架构
在这篇文章中你将学到:分布式
自动化 CI/CD 流水线有许多好处:工具
CD 流水线由几个不一样的阶段组成; 一个工具不能知足全部这些步骤。测试
如下是构成大多数自动化流水线的步骤:命令行
建立流水线的困难之一是成功地将您想要使用的工具粘合在一块儿。这些是为流水线选择工具时要考虑的主要功能:3d
在市场上的 CI/CD 工具中,有些工具将 CI 和 CD 部分合并为一个工具。或者更糟糕的是,那些负责建立 CI/CD 流水线的人将组装一系列手工锻造的脚本,这些脚本能够在一个方向上经过流水线推送代码,或执行被称为CIOP 流水线。代理
出于多种缘由,您不但愿这样作。这是一种反模式,由于集群安全和其余凭据不在集群以外,这多是不安全的。建议的方法是使用实现 Kubernetes Operator 的工具。版本控制
部署到集群的 Kubernetes Operator 能够监视仓库中的新镜像。更进一步,若是您的整个集群状态(经过声明性清单)都保存在 Git 中,那么“diff alert”能够成为从仓库中“提取”新镜像并将其部署到集群的动力。这不只是一种更安全的部署方法,并且还为开发人员提供了一种更简单的方法来应用和回滚生产环境的更改。
跟踪差别历史记录,以及在团队中处理大型应用程序时管理新旧部署的回滚可能具备挑战性。您须要一个能够轻松处理此类方案的工具。若是您拥有一个彻底可审计的路径,它能够帮助您了解什么时候什么时候执行了哪些操做,这也有助于 SOC 2合规性规定的增长。
将可观察性归入您的流水线意味着什么?
为了提升你的速度,你的流水线须要结合可观察性来回答这些问题:
若是自动发布更改,我怎么知道它是否有效? 在复杂的分布式系统中,我如何理解问题、诊断问题并管理事件 - 尤为是当您须要回滚时? 将持续交付与实时可观察性相结合,使您的开发团队可以在部署新功能以前作出更好的决策。
新功能和补丁被推送到 Git 并触发部署流水线,当它们准备好发布时,理想状况下应该对正在运行的集群实时监控。这容许开发人员根据反馈作出决策。能够将它们返回到流水线的起点,或将更新后的镜像部署到生产集群中。
除了可以频繁可靠地部署以外,还须要考虑考虑一个重要场景,是在集群宕机时的恢复。这须要快速、平滑,而且可能由可能不是由 Kubernetes 专业的开发人员来执行。
为了在当今的云原生世界中快速发展,开发人员必须从端到端控制流水线。提交凭据等待人来回复的时期已经没有了。从开发人员一直使用的工具构建流水线是有意义的。像 Git 这样的工具。
使用 GitOps,有三个基本原则:
经过使用 Git 做为事实源,能够观察集群并将其与所需的状态进行比较。目标是描述全部内容:策略、代码、配置,甚至监控事件和版本控制。将全部内容保持在版本控制之下,能够加强收敛性,若是最初它们没有成功,则能够从新应用更改。
通常来讲,使用命令行工具 kubectl 直接部署到集群不是一个好主意。许多人让他们的 CI 工具推进部署,可是这样作可能会对生产环境遭受更容易被攻击的风险。
使用遵循操做符模式的 Kubernetes Operator,您的集群始终经过其签入 Git 的配置文件与“事实源”保持同步。因为集群的所需状态保存在 Git 中,所以还能够观察到与正在运行的集群的差别。
经过采用 GitOps,开发人员能够经过提取请求管理基础架构配置和软件部署以及回滚。当真实来源与集群中运行的不一样时,集群会自动与 Git 中保存的内容同步。
Weave Cloud 的部署代理在集群内部运行。这意味着容器映像注册表和集群 API 的凭据永远不会离开集群的域。经过使用 Git 做为事实源,能够比较和警告所需的状态和当前状态。这不只能够确保集群保持最新,并且还能够在集群崩溃时提供从灾难中快速恢复的方法。
译者:史彦军