1-基础篇-使用ArgoCD基于K8s持续构建的流程和价值介绍
一 背景&挑战
在 Kubernetes 兴起之前,大多数应用程序团队都使用 Jenkins等工具实现 CD持续部署过程。 由于 Kubernetes 架构的复杂性,这些传统CD工具无法高效部署到 Kubernetes 集群中。这些问题使得使用 Jenkins 等CD工具与 Kubernetes 合作变得困难。Kubernetes 场景下传统 CD 面临的挑战:
工具的安装和管理
: 例如需要安装“Kubectl”和“Helm”等工具,这些都增加了维护成本。Kubernetes集群的访问
: 必须在 传统CD 工具中配置K8s apiserver的访问管理,以启用对 Kubernetes 集群的授权并执行变更。如果使用的是云厂商的 Kubernetes 集群,则还可能在在集群外部配置和共享这些集群凭据。安全和维护挑战
:传统CD工具的配置将随着集群的增加而成比例增加,从而增加维护开销。虽然增加的维护开销可能并不具有挑战性,但当集群凭据与集群外部服务和工具共享时,会降低Kubernetes集群的安全系数。多集群操作的复杂性
:当使用 Jenkins 等传统CD工具操作 多个Kubernetes集群时,部署到多个Kubernetes集群时需要为每个集群再次进行配置。缺乏可视化
: 当 传统CD 工具在没有 GitOps 情况下将应用程序部署到 Kubernetes 中时,该工具无法提供对部署后的可见性。例如执行 kubectl 命令后,对执行情况的不确定性,等待有人报告事件才知道部署是否成功。
ArgoCD 是一种持续交付 (CD) 工具,在 DevOps 中广受欢迎,用于在 Kubernetes 上执行应用程序交付。它依赖于一种称为 GitOps 的部署方法。 GitOps 是一种可以从最后已知的 Git 提交版本中提取最新代码和应用程序配置并将其直接部署到 Kubernetes 资源中的机制。广泛采用和流行是因为 ArgoCD 帮助开发人员在一个平台上管理基础设施和应用程序生命周期。
二 ArgoCD工作流程
ArgoCD使用的是 pull 拉取模式,Git 仓库是 pull 模式的核心,它存储应用程序和配置文件。开发人员将更新的代码推送到 Git 代码库,CI 工具获取更改并最终构建 成 Docker 镜像,然后在 Git 配置仓库中更新其 YAML。ArgoCD 检测到集群状态已过期,则从配置库中提取已更改的清单,并将新版本部署到集群中。
- 开发者将代码推到代码存储库,例如GitHub,Gitlab,Bitbucket等
- 代码在 Jenkins、GitLab CI、GitHub Actions 等 CI 平台中执行构建和测试
- 代码被打包成 Docker镜像并推送到镜像仓库
- CI 流水线提交新版本变更(修改deployment配置)并将其推送到git代码存储库
- ArgoCD拉取变更触发同步机制,新代码自动部署到目标 Kubernetes 集群
基于ArgoCD上述能力的描述,我们再结合开源代码仓库如Bitbucket、开源CI工具TEKTON,可以较为方便的构建出一个简单的基于云原生的devops平台,大致的示意图如下:
三 ArgoCD工作机制
Argo CD 简化并自动化了 Kubernetes 环境中应用程序的部署和管理。它提高了一致性,减少了人工干预,并使开发人员能够专注于构建应用程序而不是管理基础设施细节。
Application Definition
:开发人员使用清单或声明性文件在 Git 存储库中定义应用程序的所需状态。这些清单指定应用程序组件(例如 Pod、服务和部署)所需的配置。Git Repository Changes
: 当 Git 存储库中的应用程序清单发生更改时,Webhook 会触发 Argo CD 启动同步过程Cluster Reconciliation
: Argo CD 将 Git 存储库中的所需状态与 Kubernetes 集群的实际状态进行比较。它会识别任何差异并生成所需更改的列表Kubernetes Controller
: Argo CD 充当 Kubernetes 控制器,对集群资源应用必要的更改,使它们符合所需的状态。这包括根据清单创建、更新和删除 Kubernetes 对象Continuous Monitoring
: Argo CD 持续监控集群并将更新的状态与期望的状态进行比较。如果存在任何差异,它会自动应用必要的更改以保持同步状态。Status Reporting
:Argo CD 提供可视化仪表板和状态报告,指示应用程序的当前状态,以及任何差异或待处理的同步操作。
四 使用ArgoCD的价值体现
- K8s配置清单(各种yaml)可以被定义为git存储库中的代码,便于回滚,方便审核,例如谁提交了更改。
- K8s配置(各种yaml)不再是开发/维护人员个人所持有,全部在git仓库中管理
- 修改集群配置的入口保持唯一性,即所有人员下发更新负载都得通过ArgoCD调用kubernetes API进行创建
- Git仓库中的配置作为唯一事实来源,其他手动修改的配置不作为集群负载更新的依据,例如当集群的管理员在不通过 GitOps 工作流程(也就是将变更提交到 Git)的情况下更改资源的时候,Kubernetes 资源可能会和 Git 仓库存储的资源出现漂移。这是 GitOps 中的一个很常见的问题,但 ArgoCD 可以自动检测这些配置漂移,还可以自动将资源恢复为 Git 仓库里定义的状态。不过,在 ArgoCD 控制台的应用配置中,你可以设置是否执行自动恢复策略。
- 避免了Kubectl执行命令控制集群行为导致无法追踪和审计的场景,比如谁在后台使用kubectl进行了增删改导致了生产问题,无法定责等
- 带审计跟踪的版本控制变更
- 支持多种代码仓库,例如GitLab, GitHub, 和BitBucket等
- 多集群管理部署,ArgoCD 可以在它所运行的 Kubernetes 集群上同步应用,同时也可以管理外部集群。其他集群的 API Server 的凭证会作为 Secret 对象存储在 ArgoCD 命名空间中,你可以很轻松地在 Dashboard 里管理多集群。在部署应用时,你可以选择不同集群进行部署,ArgoCD 内置的 RBAC 机制还可以控制用户对不同环境的访问权限。
- ArgoCD 内置了开发者友好的 Dashboard。通过 Dashboard,可以很方便地创建一个应用,看到应用部署的状态。当集群资源和 Git 仓库的资源不一致的时候,Dashboard 还会发出提示。同时还可以在 Dashboard 进行手动的刷新和同步应用操作。一旦应用被创建,Dashboard 还会提供应用的拓扑图,你可以非常方便地查看应用包含哪些资源,了解大致的流量拓扑等。
五 最佳实践 - Argo CD实战篇
- Argo CD对接CCE完成不同测试、生产环境业务部署: https://bbs.huaweicloud.com/blogs/429577
- 点赞
- 收藏
- 关注作者
评论(0)