Argo CD介绍
采用容器已成为企业快速推出新应用程序更改、高效部署和安全运行应用程序的常用策略。
如今,为实现这些目标,许多企业正在采用持续交付 (CD),以便快速、频繁且安全地将更改部署到生产中。
许多 CD 工具用于将软件交付生产。市场上一些最常见的工具是:
- 大三角帆
- 阿尔戈光盘
- 特克顿CD
- GitLab
- Azure 开发运营
Spinnaker 和 Argo CD 是转换软件交付流程的最佳工具,因此我们经常被要求描述它们之间的差异并评估哪个更好。简短的回答是,这取决于每个客户的具体情况和要求。但这不是一个令人满意的答案,所以让我们更深入地研究 Spinnaker 和 Argo CD 何时有意义。
Spinnaker 和 Argo CD 的快速介绍
Spinnaker
Spinnaker 是一个开源的多云 CD 平台,用于高速和自信地发布软件变更。
Spinnaker 提供了一个强大而灵活的管道管理系统,许多财富 500 强公司使用该系统每年部署数百万次变更。
请参考 Spinnaker 用户界面:
ArgoCD
ArgoCD 是一个用于 Kubernetes 应用程序的声明式 CD 工具,它使用 GitOps 风格来管理集群资源。Argo CD 监控 Git 存储库中定义的应用程序配置,并将其与集群中的实时状态进行比较。当开发人员更改 Git 中的应用程序定义时,Argo CD 会检测并通知管理员有关不同步的状态。如果管理员批准更改,ArgoCD 会使用新定义的配置在 Kubernetes 集群中创建资源。
参考 Argo CD 用户界面:
Spinnaker 与 Argo CD 的比较
我们从四个维度对 Spinnaker 和 Argo CD 进行了评估:安装和实施、部署、复杂的工作流程和安全性。
表格比较:Spinnaker 与 Argo CD
安装与实施
安装
任何企业可视化的首要参数之一是 Day1 操作,其中包括先决条件、安装、配置和体系结构。
Argo CD 非常轻巧,可以使用清单或 HELM 图表(具有 2GB 内存和 2 个 CPU)安装在 minikube 中,而 Spinnaker 功能丰富,因此非常笨重。
安装 Halyard(Spinnaker 的生命周期管理器)至少需要 12GB 的内存(尽管对于小型设置它可以在 1GB 中运行)。此外,Spinnaker 需要一个具有四个内核和 16GB RAM 的 Kubernetes 集群。
从安装的角度来看,Spinnaker 和 Argo CD 都有详细的文档记录,只需几条命令即可在几分钟内轻松安装。两种 CD 工具都提供容错、高可用性架构,以最大限度地减少软件部署期间的服务中断。
学习曲线和企业范围内的采用
肯定有助于企业扩大采用 CD 解决方案的另一个因素是学习曲线。
由于 Spinnaker 功能丰富,具有许多功能和组件,DevOps 团队必须学习如何配置管道或将其部署到多云环境等。许多 Spinnaker 资源、文档、视频和企业 Spinnaker 插件可用于DevOps 团队缩短他们的学习曲线,并使他们能够在生产中逐步采用它。
相比之下,Argo 是一种仅限于 Kubernetes 应用程序部署的轻量级 CD 解决方案。如果您需要 Kubernetes 的 CD 解决方案,您可以使用 Argo CD 快速设置。但是,在生产部署中,Argo CD 可能无法满足 DevSecOps 经理为生产部署设置的所有安全性和合规性要求。
需要集中式和生产就绪 CD 解决方案来处理各种应用程序类型和部署目标的组织应该寻找提供生产就绪 Spinnaker 和生产就绪 Argo CD 解决方案的供应商,这些解决方案是安全的、可扩展的、可扩展的、强化的和 Fedramp-合规,根据您组织的要求。
部署
Argo CD 遵循 GitOps 风格的部署,即,它将 Git 视为真实来源,并监控存储库中的清单文件中的任何更改,以便在 Kubernetes 中部署应用程序。清单可以在文本文件或 JSON 文件、Kustomize 应用程序、HELM 图表、ksonnet 应用程序或 jsonnet 文件中指定。
Argo CD 旨在仅与 Kubernetes 应用程序和服务一起使用。Argo CD 跟踪对分支或标签的更新,或者在 Git 提交时固定到特定版本的清单,并将更改部署到 Kubernetes 中。来自 Git 存储库的 Kubernetes 清单应用于您的集群配置,Argo 将努力确保您的存储库和集群始终保持同步。
如果目标环境因任何原因发生变化,Argo CD 也可以重新发布 Git 状态到目标环境。
Argo CD 提供了一个 UI 来展示更改的部署状态(并且取决于与 Git 更改的同步)。请参考下图:
Spinnaker 不支持 GitOps 交付方式;但是,还有一种替代方法可以使用供应商增强的解决方案来实现它。Spinnaker 为应用程序交付提供声明式管道。部署到公共云或 Kubernetes 的 DevOps 工程师选择 Spinnaker 管道。通过使用管道,Spinnaker 可以将应用程序部署到任何本地虚拟机 (VM) 或云数据中心,如 AWS、GCP、Azure 和 Kubernetes。Spinnaker 管道的最佳部分是您可以为顺序发布过程配置阶段。
请参阅下面的屏幕截图,其中执行了 Spinnaker 管道(用于 AWS 部署):
想要将 GitOps 风格的交付模型与 Spinnaker 结合使用的开发人员可以对管道进行 hack。他们需要在 Git 中配置触发器以在对 Git 中任何代码的任何提交上执行管道。这种实现 GitOps 的 hack 称为托管交付。
可以在文本文件或 JSON 文件、Kustomize 应用程序、HELM 图表或 Spring Spel 模板中指定清单文件。对 Git 中清单文件的任何更改都会触发 Spinnaker 管道进行部署。应用程序部署跟踪分支或标签的更新,或者在 Git 提交时固定到特定版本的清单。可以调用 Spinnaker API 来创建和管理基础设施(安全组、负载平衡器、防火墙)和流程部署。
请参考下面的屏幕截图,其中根据 Git 更改调用 Spinnaker 管道:
对于大型组织,Spinnaker 通过在 Spinnaker 管道中配置一系列阶段来构建端到端的交付工作流程非常方便。这些阶段的Webhooks可以自动执行一个发布过程的许多活动,例如Jenkins构建作业、部署到测试环境、触发自动化测试用例或部署到登台和生产环境等。手动判断和验证门也可以配置为同一管道的一部分,以确保自动化和无风险的发布过程。下面,图 A 表示使用 Spinnaker 的企业软件交付流程的编排,图 B 表示一个示例 Spinnaker 管道,它自动执行各个交付阶段——构建、测试、部署和生产:
图A:
图B:
为了安全部署,Spinnaker 和 Argo (Argo Rollouts) 都提供了内置的部署策略,例如 highlander、蓝绿、滚动更新和金丝雀。
申请变更
Spinnaker 和 Argo CD 支持本地和托管 Kubernetes。这两种工具都支持将应用程序部署到托管 Kubernetes (EKS/GKE/AKS) 中。Argo CD 直接根据配置更改进行部署,而 Spinnaker 使用交付管道进行部署。
如果您有一些应用程序托管在本地或托管的 Kubernetes 集群中,并且仍在进行一些云转换,那么 Argo CD 可能非常适合您。但是,如果您想构建一个无缝的工作流来自动化交付流程,包括测试集成、批准门(手动或自动)、集成图像构建以及对混合或多云环境部署的可见性,那么选择 Spinnaker 进行持续交付.
通过复杂的工作流程在企业范围内扩展
基于虚拟机的部署
每个企业都将应用程序部署到 VM——通过 GCP、AWS 或不同的云部署到云,或者部署到本地数据中心 VM。标准做法是为应用程序所需的环境创建规范——操作系统版本、二进制文件、存储、网络、库、应用程序、压缩文件等,以创建 VM。这也称为 VM bakery,基础设施团队在这里制作整体环境的快照并将其保存在类似于 AMI 存储的东西中。一旦图像准备就绪,就可以创建多个图像——甚至多达数万个图像——以满足应用程序的要求。该过程也称为不可变基础架构,用于避免配置漂移。
Spinnaker 使用 HELM 图表来烘焙 Kubernetes 清单文件。同样,它使用打包程序模板(在引擎盖下)来烘焙 VM 映像。交付管道完成后,Spinnaker 可以在目标环境(从云到本地 VM,再到裸机服务器)中配置这些 VM(连同负载均衡器、防火墙等)。这有助于基础架构团队利用 Spinnaker 来编排基于 VM 的部署。这种将更新部署到 Kubernetes 服务和基于 VM 的应用程序的能力是许多组织选择在 Spinnaker 上进行软件部署标准化的重要原因之一。
此外,Spinnaker 提供单一管理平台,您可以在其中查看和控制您的资源。开发和运维团队无需登录不同的 UI 或公有云即可了解资源状态。
Argo CD 目前不包括供应基础设施。但这里的技巧是使用像 Crossplane 这样的外部开源软件来组装和管理任何公共云的基础设施。
稳定性和性能
在处理多个应用程序部署和在企业范围内扩展 CD 解决方案时,Spinnaker 和 Argo CD 存在一些性能问题。
例如,根据路线图部分的 Argo 文档,Argo 在处理超过 1,000 个 Kubernetes 应用程序时变得非常慢。此外,要采用 100 个以上的 Kubernetes 集群,您必须增加 Argo CD 控制器的副本数量(即水平扩展)并配置 Argo 以进行自动分片(以在所有 Argo CD 控制器之间分配工作负载)。Argo CD 在配置为在单个存储库中处理 50 多个应用程序时也存在问题——具体来说,它可能无法正确生成清单。
使 Argo CD 软件适合生产——例如使其高度可用——是很棘手的。Argo 为 Prometheus 发布指标(包括计数器和仪表类型)以衡量 Argo CD 系统性能问题。但在开发 Argo CD 对其他监控系统(如 Datadog、NewRelic、Dynatrace 等)的支持时,挑战就出现了。
通知
反馈和通知是持续集成/持续交付 (CI/CD) 流程的重要组成部分。任何 CD 工具都需要广泛涵盖用于在 DevOps 环境中进行通信的各种工具。Spinnaker 和 Argo CD 都提供与第三方协作工具的集成。
Argo CD 通过电子邮件、GitHub、Slack、Mattermost、OpsGenie、Telegram 和 Microsoft Teams 提供通知。要启用通知,您必须安装 Argo Notification。您可以将 Argo Notification 与其他产品(例如 Argo Rollout)一起使用,以获取有关部署状态的实时信息。
Spinnaker 支持通过电子邮件发送通知,并提供与许多协作和服务管理工具的集成,例如 Slack、ServiceNow、JIRA、Twilio、PagerDuty、Microsoft Teams 等。
批准
Argo CD 使管理员能够在 Git 中的更改被识别后立即批准部署。软件交付各个阶段的手动判断步骤需要在 Argo CD 中进行大量配置和脚本编写。
类似地,可以在 Spinnaker 流水线中配置手动判断阶段。尽管如此,它仍然需要付出大量的努力来建立高级判断,例如基于各种 CI/CD 数据的自动批准或新版本的风险。
供应商支持的解决方案汇集了 CD 软件的最佳功能,使管理员能够在整个过程的任何阶段快速批准更新升级,通常是在集成测试、暂存和生产之前。一些解决方案更进一步,允许项目或发布经理通过提供有关构建、测试、票证状态等的 360 度信息来做出明智的批准。发布经理可以做出快速和明智的决策来推进管道。请参考下图。
以这种方式完成的部署更安全,因为可以更清楚地了解所涉及的各个阶段。数据驱动的批准还使公司能够更有信心地部署到生产中。
企业支持
Spinnaker 和 Argo CD 从开源社区获得升级和补丁修复的支持。一些供应商提供企业支持以缓解漏洞和合规性问题。通过选择为这些开源社区做出贡献的供应商,您可以确保获得所需的专家帮助。
如需 Argo CD 支持,请访问此处,或在此处找到Argo slack 频道。如需 Spinnaker 支持,请加入Spinnaker 频道。
如果您是爱好者,可以继续关注并参加 ArgoCon 和 Spinnaker 峰会,结识从事 CI/CD 项目的志同道合的 DevOps 人员。
安全
企业正在采用新的 DevSecOps 文化来加强 CI/CD 管道中的安全性。这种左移心态要求组织考虑安全团队的要求,例如适当的身份验证、授权、安全连接等等。Spinnaker 和 Argo 都提供身份验证,支持 LDAP 和 SAML 协议,并通过 RBAC 进行授权。
安全
Argo CD 经过了安全审查和渗透测试,并消除了产品本身的所有漏洞。
Argo CD 通过 JSON Web 令牌提供身份验证,通过 RBAC 策略提供授权。不同服务(argoCD-server、argocd-repo-server、
argoCD-application-controller)之间的通信通过 TLS 进行保护。Argo CD 还通过将外部集群的凭据存储在 Kubernetes 秘密中来提供秘密管理。Argo CD 对如何管理秘密没有意见。
Spinnaker 还为企业提供高安全标准,以应对内部或外部威胁。它支持各种协议,如 RBAC、LDAP、OAuth 和 MFA,以进行适当的授权和身份验证。由于支持 mTLS 和基于 X.509 证书的通信,Spinnaker 被认为是最安全的 CD 工具之一。此外,Spinnaker 直接不鼓励您以纯文本形式存储秘密、令牌、密码和类似的敏感信息,而是提供与 Git、S3 和 Vault 的集成来保存此类信息。
政策与合规
开源 Spinnaker 通过与 Open Policy Agent (OPA) 集成来促进自动策略执行,OPA 是一种指定策略的标准。政策经理现在可以使用声明性语言轻松定义政策,并使用管道在部署或发布过程中实施规则。这有助于组织确保 100% 遵守 HIPAA、GDPR、SOX 和内部最佳实践等行业标准。
审计
Spinnaker 和 Argo CD 都提供审计功能。
要审计 Argo CD 中的部署活动,您需要连接外部工具,如Event Exporter、Event Router或ElasticSearch。要解决问题,DevOps 团队需要配置解决方案以获取审计日志并存储所有事件日志。
Spinnaker 有一种机制来存储有关管道运行和部署的日志信息。借助 Spinnaker,审计人员可以快速调查有关部署的所有活动。
持续验证
在 DevOps 中成熟的组织经常寻求通过适当评估每次更改的质量和性能来最大程度地降低生产中新版本的风险。这称为持续验证。Spinnaker 和 Argo CD 都没有提供任何开箱即用的功能来从外部来源获取日志或指标数据,或者为您提供可以帮助您做出部署决定的信息。但是,一些供应商增强的解决方案可以在不同的交付阶段验证新版本。
最终总结
我们基于企业关心的四个广泛维度对 Spinnaker 和 Argo CD 进行了评估:
- 安装与实施
- 部署
- 维护和可扩展性
- 安全
在某些方面,例如实现,Argo CD 可以比 Spinnaker 更快。在其他方面,例如部署能力,只有 Spinnaker 能够为 DevOps 和安全管理者提供全面的能力。
Spinnaker 和 Argo CD 是为不同的目的而设计的。Argo 主要用于仅部署到 Kubernetes 的 DevOps 团队。Spinnaker 被设计为一个企业平台,可以处理对所有类型目标的部署,并简化和自动化损坏的软件发布流程。