1-基础篇-使用ArgoCD基于K8s持续构建的流程和价值介绍

举报
可以交个朋友 发表于 2024/06/15 19:55:22 2024/06/15
【摘要】 使用ArgoCD基于K8s持续构建的流程和价值介绍

一 背景&挑战

在 Kubernetes 兴起之前,大多数应用程序团队都使用 Jenkins等工具实现 CD持续部署过程。 由于 Kubernetes 架构的复杂性,这些传统CD工具无法高效部署到 Kubernetes 集群中。这些问题使得使用 Jenkins 等CD工具与 Kubernetes 合作变得困难。Kubernetes 场景下传统 CD 面临的挑战:

  1. 工具的安装和管理: 例如需要安装“Kubectl”和“Helm”等工具,这些都增加了维护成本。
  2. Kubernetes集群的访问: 必须在 传统CD 工具中配置K8s apiserver的访问管理,以启用对 Kubernetes 集群的授权并执行变更。如果使用的是云厂商的 Kubernetes 集群,则还可能在在集群外部配置和共享这些集群凭据。
  3. 安全和维护挑战:传统CD工具的配置将随着集群的增加而成比例增加,从而增加维护开销。虽然增加的维护开销可能并不具有挑战性,但当集群凭据与集群外部服务和工具共享时,会降低Kubernetes集群的安全系数。
  4. 多集群操作的复杂性:当使用 Jenkins 等传统CD工具操作 多个Kubernetes集群时,部署到多个Kubernetes集群时需要为每个集群再次进行配置。
  5. 缺乏可视化: 当 传统CD 工具在没有 GitOps 情况下将应用程序部署到 Kubernetes 中时,该工具无法提供对部署后的可见性。例如执行 kubectl 命令后,对执行情况的不确定性,等待有人报告事件才知道部署是否成功。

ArgoCD 是一种持续交付 (CD) 工具,在 DevOps 中广受欢迎,用于在 Kubernetes 上执行应用程序交付。它依赖于一种称为 GitOps 的部署方法。 GitOps 是一种可以从最后已知的 Git 提交版本中提取最新代码和应用程序配置并将其直接部署到 Kubernetes 资源中的机制。广泛采用和流行是因为 ArgoCD 帮助开发人员在一个平台上管理基础设施和应用程序生命周期。


二 ArgoCD工作流程

image.png

ArgoCD使用的是 pull 拉取模式,Git 仓库是 pull 模式的核心,它存储应用程序和配置文件。开发人员将更新的代码推送到 Git 代码库,CI 工具获取更改并最终构建 成 Docker 镜像,然后在 Git 配置仓库中更新其 YAML。ArgoCD 检测到集群状态已过期,则从配置库中提取已更改的清单,并将新版本部署到集群中。

  1. 开发者将代码推到代码存储库,例如GitHub,Gitlab,Bitbucket等
  2. 代码在 Jenkins、GitLab CI、GitHub Actions 等 CI 平台中执行构建和测试
  3. 代码被打包成 Docker镜像并推送到镜像仓库
  4. CI 流水线提交新版本变更(修改deployment配置)并将其推送到git代码存储库
  5. ArgoCD拉取变更触发同步机制,新代码自动部署到目标 Kubernetes 集群

基于ArgoCD上述能力的描述,我们再结合开源代码仓库如Bitbucket、开源CI工具TEKTON,可以较为方便的构建出一个简单的基于云原生的devops平台,大致的示意图如下:
image.png


三 ArgoCD工作机制

image.png
Argo CD 简化并自动化了 Kubernetes 环境中应用程序的部署和管理。它提高了一致性,减少了人工干预,并使开发人员能够专注于构建应用程序而不是管理基础设施细节。

  1. Application Definition:开发人员使用清单或声明性文件在 Git 存储库中定义应用程序的所需状态。这些清单指定应用程序组件(例如 Pod、服务和部署)所需的配置。
  2. Git Repository Changes: 当 Git 存储库中的应用程序清单发生更改时,Webhook 会触发 Argo CD 启动同步过程
  3. Cluster Reconciliation: Argo CD 将 Git 存储库中的所需状态与 Kubernetes 集群的实际状态进行比较。它会识别任何差异并生成所需更改的列表
  4. Kubernetes Controller: Argo CD 充当 Kubernetes 控制器,对集群资源应用必要的更改,使它们符合所需的状态。这包括根据清单创建、更新和删除 Kubernetes 对象
  5. Continuous Monitoring: Argo CD 持续监控集群并将更新的状态与期望的状态进行比较。如果存在任何差异,它会自动应用必要的更改以保持同步状态。
  6. Status Reporting:Argo CD 提供可视化仪表板和状态报告,指示应用程序的当前状态,以及任何差异或待处理的同步操作。

四 使用ArgoCD的价值体现

  1. K8s配置清单(各种yaml)可以被定义为git存储库中的代码,便于回滚,方便审核,例如谁提交了更改。
  2. K8s配置(各种yaml)不再是开发/维护人员个人所持有,全部在git仓库中管理
  3. 修改集群配置的入口保持唯一性,即所有人员下发更新负载都得通过ArgoCD调用kubernetes API进行创建
  4. Git仓库中的配置作为唯一事实来源,其他手动修改的配置不作为集群负载更新的依据,例如当集群的管理员在不通过 GitOps 工作流程(也就是将变更提交到 Git)的情况下更改资源的时候,Kubernetes 资源可能会和 Git 仓库存储的资源出现漂移。这是 GitOps 中的一个很常见的问题,但 ArgoCD 可以自动检测这些配置漂移,还可以自动将资源恢复为 Git 仓库里定义的状态。不过,在 ArgoCD 控制台的应用配置中,你可以设置是否执行自动恢复策略。
  5. 避免了Kubectl执行命令控制集群行为导致无法追踪和审计的场景,比如谁在后台使用kubectl进行了增删改导致了生产问题,无法定责等
  6. 带审计跟踪的版本控制变更
  7. 支持多种代码仓库,例如GitLab, GitHub, 和BitBucket等
  8. 多集群管理部署,ArgoCD 可以在它所运行的 Kubernetes 集群上同步应用,同时也可以管理外部集群。其他集群的 API Server 的凭证会作为 Secret 对象存储在 ArgoCD 命名空间中,你可以很轻松地在 Dashboard 里管理多集群。在部署应用时,你可以选择不同集群进行部署,ArgoCD 内置的 RBAC 机制还可以控制用户对不同环境的访问权限。
  9. ArgoCD 内置了开发者友好的 Dashboard。通过 Dashboard,可以很方便地创建一个应用,看到应用部署的状态。当集群资源和 Git 仓库的资源不一致的时候,Dashboard 还会发出提示。同时还可以在 Dashboard 进行手动的刷新和同步应用操作。一旦应用被创建,Dashboard 还会提供应用的拓扑图,你可以非常方便地查看应用包含哪些资源,了解大致的流量拓扑等。

五 最佳实践 - Argo CD实战篇

  1. Argo CD对接CCE完成不同测试、生产环境业务部署: https://bbs.huaweicloud.com/blogs/429577
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。