当前位置: 首页 > news >正文

GitOps实战:Helm一键部署ArgoCD

GitOps 实践:用 Helm 在 K8s 集群安装 Argo CD(含模板生成与配置要点)

在 GitOps 架构中,Argo CD 是核心的 “持续部署工具”—— 它通过监控 Git 仓库中的资源清单,自动将 K8s 集群状态同步为 Git 中定义的 “期望状态”,实现 “代码即配置、配置即部署”。而 Helm 作为 K8s 的 “包管理工具”,能将 Argo CD 的多组件(如服务器、控制器、CLI)打包为 “Helm 图表”,简化安装、版本控制与配置管理。本文将基于实际任务,详解用 Helm 安装 Argo CD 的完整流程,以及关键配置的底层逻辑。

一、前置知识:理解 Argo CD 与 Helm 的核心关联

在动手前,先明确两个工具的核心作用,避免操作中 “知其然不知其所以然”:

1. Argo CD 的核心组件(Helm 图表会自动部署)

Argo CD 的 Helm 图表(argo-cd)会默认部署以下关键组件,无需手动配置:

组件

作用

argocd-server

提供 UI 界面与 API 服务,用于管理应用部署

argocd-repo-server

拉取 Git 仓库 / Helm 仓库的资源清单,为同步提供数据支持

argocd-application-controller

监控 Git 与集群状态差异,自动触发同步(核心控制组件)

argocd-dex-server

(可选)负责身份认证,支持 LDAP、OAuth2 等登录方式

2. 为什么用 Helm 安装 Argo CD?

相比 “手动创建 YAML 清单”,Helm 有 3 个核心优势:

  • 简化多组件部署:Argo CD 包含多个 Deployment、Service、ConfigMap,Helm 图表已预定义所有资源,一行命令即可安装;
  • 配置可定制:通过--set参数或自定义values.yaml,可灵活调整组件参数(如禁用 CRD 安装、修改资源限制);
  • 版本可控:指定固定的 Helm 图表版本(如任务中的 5.5.22),避免不同环境因版本差异导致的兼容性问题。

3. 关键前提:CRD 预安装的意义

任务明确 “Argo CD CRD 已在集群中预安装”——CRD(CustomResourceDefinition,自定义资源定义)是 Argo CD 的 “基础数据结构”,用于定义Application(应用)、AppProject(应用项目)等 Argo CD 专属资源。若重复安装 CRD,可能导致版本冲突,因此需在 Helm 配置中禁用 CRD 安装(核心配置点)。

二、实操步骤:用 Helm 安装 Argo CD(任务版)

本次任务目标:通过 Helm 添加 Argo CD 官方仓库→生成模板→安装,关键约束:图表版本 5.5.22、命名空间argocd、禁用 CRD 安装。

步骤 1:添加 Argo CD 官方 Helm 仓库

Helm 仓库是 “Helm 图表的存储地址”,需先添加官方仓库,才能拉取argo-cd图表。

1.1 执行仓库添加命令
 
helm repo add argo https://argoproj.github.io/argo-helm
  • 命令解析
    • helm repo add:Helm 添加仓库的固定子命令;
    • argo:为仓库起的 “别名”(后续操作可通过别名引用仓库,无需重复输入长 URL);
    • https://argoproj.github.io/argo-helm:Argo CD 官方 Helm 仓库地址(确保拉取的是官方认证的图表,避免第三方镜像风险)。
1.2 更新仓库索引(确保获取最新图表版本)

添加仓库后,需更新本地 Helm 的仓库索引,确保能查到目标版本(5.5.22):

 
helm repo update
  • 作用:同步远程仓库的图表版本信息到本地,避免因本地索引过时导致 “找不到指定版本” 的错误。
1.3 验证仓库添加成功
 
helm repo list | grep argo
  • 预期输出:若能看到argo仓库的别名与 URL,说明添加成功:
 
argo https://argoproj.github.io/argo-helm

步骤 2:生成 Argo CD Helm 模板并保存到文件

“生成模板” 是 Helm 的重要功能 —— 在实际安装前,先将 Helm 图表渲染为 K8s 原生 YAML 清单(模板),可用于:

  1. 检查配置是否正确(如是否禁用 CRD、组件参数是否符合预期);
  1. 版本控制(将模板文件存入 Git,便于追溯配置变更);
  1. 离线部署(若集群无外网,可将模板文件拷贝到集群内执行kubectl apply)。
2.1 执行模板生成命令
 
helm template argocd argo/argo-cd \--version 5.5.22 \--namespace argocd \--create-namespace \--set installCRDs=false \> ~/argo-helm.yaml
  • 命令参数逐段解析

参数

含义

helm template

生成 Helm 图表的 YAML 模板(仅渲染,不实际安装)

argocd

后续安装时的 “发布名称”(Release Name),需与安装命令保持一致,用于标识 Helm 管理的资源组

argo/argo-cd

图表来源:仓库别名/图表名称(argo是步骤 1 添加的仓库别名,argo-cd是 Argo CD 的 Helm 图表名)

--version 5.5.22

指定 Helm 图表版本(任务要求,避免使用最新版导致兼容性问题)

--namespace argocd

指定资源部署的命名空间(argocd,用于资源隔离,避免与其他应用冲突)

--create-namespace

若argocd命名空间不存在,自动创建(避免手动执行kubectl create ns argocd)

--set installCRDs=false

核心配置:禁用 CRD 安装(因集群已预安装 Argo CD CRD,防止冲突)

> ~/argo-helm.yaml

将生成的模板输出到~/argo-helm.yaml文件(~表示当前用户的家目录)

2.2 验证模板生成结果
 
# 检查文件是否存在,以及文件大小(非空即成功)ls -lh ~/argo-helm.yaml# 查看模板中是否包含关键组件(如argocd-server)grep -A 5 "kind: Deployment" ~/argo-helm.yaml | grep "name: argocd-server"
  • 预期结果:能看到argocd-server的 Deployment 定义,且模板文件大小通常在 100KB 以上(包含多个 K8s 资源)。

步骤 3:用 Helm 安装 Argo CD

模板验证无误后,执行安装命令,使用与模板相同的配置(确保 “模板预览” 与 “实际安装” 的配置一致)。

3.1 执行安装命令
 
helm install argocd argo/argo-cd \--version 5.5.22 \--namespace argocd \--create-namespace \--set installCRDs=false
  • 注意:此命令的参数与步骤 2 的helm template完全一致,仅将helm template替换为helm install—— 确保安装的资源与模板预览的完全相同。
3.2 理解安装过程的底层逻辑

执行helm install后,Helm 会完成 3 件事:

  1. 检查argocd命名空间,不存在则创建;
  1. 基于argo/argo-cd:5.5.22图表,结合--set installCRDs=false的配置,渲染出 K8s YAML 清单(与步骤 2 生成的模板一致);
  1. 调用 K8s API,创建所有资源(Deployment、Service、ConfigMap 等),并记录 “发布记录”(后续可通过helm list -n argocd查看)。

三、验证安装:确保 Argo CD 组件正常运行

安装后需验证核心组件的状态,避免因资源不足、镜像拉取失败等问题导致部署异常。

3.1 查看 Helm 发布状态

 
helm list -n argocd
  • 预期输出:STATUS列显示deployed,表示安装成功:
 
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSIONargocd argocd 1 2024-XX-XXTXX:XX:XXZ deployed argo-cd-5.5.22 v2.9.3

3.2 查看 Argo CD Pod 状态

 
kubectl get pods -n argocd
  • 关键检查点
    1. 所有 Pod 的STATUS为Running(无Pending、Error状态);
    1. 核心组件 Pod(argocd-server-xxx、argocd-repo-server-xxx、argocd-application-controller-xxx)均正常启动;
    1. 若有argocd-dex-server-xxx(默认启用),也需处于Running状态。

3.3 查看 Argo CD Service 状态

 
kubectl get svc -n argocd
  • 预期输出:能看到argocd-server服务(默认是ClusterIP类型,任务无需配置 UI 访问,因此无需修改为NodePort或LoadBalancer)。

四、常见问题与排查技巧

在安装过程中,可能遇到以下问题,需针对性排查:

1. 问题 1:“找不到 Helm 图表版本 5.5.22”

  • 报错信息:Error: chart "argo-cd" version "5.5.22" not found in argo repository
  • 排查步骤
    1. 执行helm repo update,确保本地索引同步最新版本;
    1. 查看仓库中可用的版本:helm search repo argo/argo-cd --versions | grep 5.5.22;
    1. 若仍无结果,检查仓库地址是否正确(官方地址为https://argoproj.github.io/argo-helm,而非其他第三方地址)。

2. 问题 2:Pod 处于 Pending 状态

  • 排查步骤
    1. 查看 Pod 事件,定位原因:kubectl describe pod <pod-name> -n argocd;
    1. 常见原因及解决:
      • 资源不足:Pod 请求的 CPU / 内存超过节点剩余资源,需扩容节点或修改 Helm 配置(通过--set resources.limits.cpu=500m降低资源限制);
      • 镜像拉取失败:检查集群是否能访问 Docker Hub(Argo CD 镜像默认存储在 Docker Hub),若需代理,需配置 Pod 的环境变量(--set env[0].name=HTTP_PROXY --set env[0].value=http://proxy-ip:port)。

3. 问题 3:CRD 冲突(若未禁用安装)

  • 报错信息:Error: failed to create CRD applications.argoproj.io: already exists
  • 解决:必须在安装命令中添加--set installCRDs=false,因集群已预安装 CRD,重复创建会触发冲突。

五、总结:Helm 安装 Argo CD 的核心要点

本次任务的核心是 “用 Helm 标准化 Argo CD 的安装流程”,关键知识点可归纳为 3 点:

  1. Helm 仓库管理:通过helm repo add/update确保能拉取官方图表,避免第三方镜像风险;
  1. 模板预览先行:helm template可在安装前验证配置,尤其适合生产环境(避免 “安装后才发现配置错误” 的返工);
  1. 配置一致性:模板生成与实际安装的参数必须完全一致(如发布名称、版本、禁用 CRD),确保 “预览即最终结果”。

后续若需定制 Argo CD(如修改 UI 端口、配置 Git 仓库凭据),可通过自定义values.yaml文件(而非--set参数)实现更复杂的配置,例如:

 
# 基于官方values.yaml修改后安装helm install argocd argo/argo-cd \--version 5.5.22 \--namespace argocd \--set installCRDs=false \-f ~/my-argocd-values.yaml

通过 Helm 安装 Argo CD 后,即可进入 GitOps 实践的核心环节 —— 在 Git 仓库中定义应用清单,通过 Argo CD 实现 “Git 变更→自动同步到集群” 的闭环,真正实现 “代码即基础设施”。

http://www.dtcms.com/a/427592.html

相关文章:

  • 聊城冠县网站建设无锡seo公司哪家好
  • 一个专业做设计的网站软件工程师前景及待遇
  • 为 CPU 减负:数据中心网络卸载技术的演进
  • phpstudy配置网站北京网站建设公司哪家最好
  • 《考研408数据结构》第三章(3.1 栈)复习笔记
  • 徐州网站排名工地模板图片大全
  • ARM Cortex-X 与 Cortex-A 命名正式退役,推出C1 CPU和G1 GPU
  • 南昌汉邦网站建设网页设计论文题目大全
  • 上市公司环境信息披露质量评分数据-王婉菁版(2008-2023)
  • 网站底部悬浮一个网站怎么绑定很多个域名
  • 极简全营养三食材组合:土豆 + 鸡蛋 + 绿叶菜
  • Java【代码 24】AOI数据获取(通过地址名称获取UID在获取AOI数据)
  • 提升 HarmonyOS 开发效率:DevEco Studio 6.0 热更新调试模式全指南
  • 桌面预测类开发,桌面%性别,姓名预测%系统开发,基于python,scikit-learn机器学习算法(sklearn)实现,分类算法,CSV无数据库
  • 用自己服务器做网站2023营业执照年检
  • QCustomPlot 高级扩展与实战案例
  • C语言形式参数和实际参数的区别(附带示例)
  • 医疗领域的数智化转型与智能化变革研究报告:技术驱动、模式创新与政策协同
  • 在 C# 中,如何使 $““ 字符串支持换行
  • 2025年精选单北斗GNSS水库形变监测系统对比推荐
  • Java 在Word 文档中添加批注:高效文档协作的利器
  • 代做效果图网站项目管理软件的作用
  • 广东省高水平建设专业网站北京大兴网站建设
  • 使用 HBuilderX 将网页打包为安卓 APP详细步骤
  • MinerU2.5:一种用于高效高分辨率文档解析的解耦视觉-语言模型
  • Redis三大命令分类详解
  • 饼状图修复总结
  • npm 最新镜像,命令导致下载错误
  • 济宁做公司网站中职电子商务专业就业方向
  • JVM深入研究--JHSDB (jvm 分析工具)