K8S-Helm

Helm:Kubernetes 应用管理的利器

在 Kubernetes 生态系统中,应用部署和管理曾是一件繁琐的事情。开发者需要手动编写大量 YAML 配置文件,涉及 Deployment、Service 等众多资源对象,且在多环境部署和版本管理时面临诸多挑战。而 Helm 的出现,为这些问题提供了完美的解决方案。

Helm 核心概念

Helm 作为 Kubernetes 的包管理工具,有三个核心概念:

  • Chart:Helm 的软件包,采用 TAR 格式,包含一组定义 Kubernetes 资源相关的 YAML 文件,且有特定的目录结构。
  • Release :使用 helm install 命令在 Kubernetes 集群中部署的 Chart 称为 Release。
  • Repository:本质是一个 Web 服务器,保存一系列 Chart 软件包供用户下载,并提供清单文件供查询,Helm 可管理多个不同 Repository。

此外,Helm 包含客户端工具 helm 和服务端 Tiller(Helm v3 中已移除 Tiller,简化了架构)。客户端负责 Chart 的创建、打包等操作,服务端则处理请求并与 Kubernetes 交互完成应用部署等功能。

Helm 工作原理

  1. Chart Install 过程:Helm 解析 Chart 结构信息,将其与 Values 信息传递给 Tiller,Tiller 生成 Release 并发送给 Kubernetes 以完成部署。
  2. Chart Update 过程:Helm 解析更新的 Chart 信息,传递给 Tiller,Tiller 生成新 Release 并更新对应 Release 的历史,再发送给 Kubernetes 完成升级。
  3. Chart Rollback 过程:Helm 将需回滚的 Release 名称传递给 Tiller,Tiller 查找该 Release 历史,获取上一版本并发送给 Kubernetes 完成回滚。

Helm 部署步骤

  1. 安装 Helm 客户端

    复制代码
    mkdir helm
    wget https://get.helm.sh/helm-v3.14.0-linux-amd64.tar.gz
    tar -zxvf helm-v3.14.0-linux-amd64.tar.gz
    cd linux-amd64/
    cp helm /usr/local/bin/
    echo "source <(helm completion bash)" >> ~/.bashrc
    source ~/.bashrc
  2. 配置 Chart 库

    • 搜索官方 Helm hub chart 库:helm search hub nginx

    • 添加第三方 Chart 库:

      复制代码
      helm repo add aliyun  https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts 
      helm repo add bitnami https://charts.bitnami.com/bitnami
    • 查看 Chart 库:helm repo list

    • 从仓库查找指定 chart:helm search repo nginx

常用 Helm 命令

命令字 作用
create 使用给定的名称创建新图表
install 安装图表
upgrade 升级发布
rollback 将发布回滚到先前版本
uninstall 卸载发布
list 列出发布
history 获取发布历史记录
repo 添加、列出、删除、更新和索引图表存储库
search 在图表中搜索关键字

Helm Chart 详解

目录结构

通过 helm create 命令可创建一个新的 chart 包,其典型目录结构如下:

复制代码
nginx/
├── charts  # 依赖其他包的 charts 文件
├── Chart.yaml # 该 chart 的描述文件,包括版本等信息
├── templates  # 存放 k8s 模板文件目录
│   ├── deployment.yaml # 创建 k8s 资源的 yaml 模板
│   ├── _helpers.tpl # 可被其他模板引用的文件
│   ├── hpa.yaml # 弹性扩缩容配置
│   ├── ingress.yaml # ingress 配置
│   ├── NOTES.txt # 安装后展示给用户的说明
│   ├── serviceaccount.yaml # 服务账号配置
│   ├── service.yaml # Service 模板
│   └── tests # 测试模块
│       └── test-connection.yaml
└── values.yaml # 给模板文件使用的变量

Chart.yaml

包含 chart 的基本信息,如 API 版本、名称、版本、描述、依赖等,是 chart 的重要描述文件。

Helm 部署案例:部署 Nginx 应用

  1. 拉取 Nginx chart 并解压:

    复制代码
    helm pull bitnami/nginx --version 15.3.5
    tar xf nginx-15.3.5.tgz 
    cd nginx
  2. 修改 values.yaml 配置(如服务类型等)。

  3. 安装 chart:

    复制代码
    helm install nginx-server .
  4. 查看部署结果:

    • 查看 deployments:kubectl get deployments.apps
    • 查看 pods:kubectl get pod
    • 查看 services:kubectl get svc
  5. 测试访问:通过 service 的 ClusterIP 进行 curl 测试。

升级与回滚

  1. 修改配置文件(如调整副本数)。
  2. 执行升级:helm upgrade nginx-server .
  3. 查看升级历史:helm history nginx-server
  4. 回滚到指定版本:helm rollback nginx-server 1
  5. 卸载应用:helm uninstall nginx-server

Helm 极大地简化了 Kubernetes 应用的部署、升级、回滚等管理操作,提高了开发和运维效率,是 Kubernetes 生态中不可或缺的工具。通过 Helm,开发者可以更专注于应用本身,而无需过多关注复杂的 Kubernetes 资源配置细节。

相关推荐
极客先躯12 小时前
高级java每日一道面试题-2026年05月03日-实战篇[Docker]-如何实现容器化环境的数据加密?
java·运维·docker·容器·金融·加解密·高级面试
ChaITSimpleLove15 小时前
SimpleIdServer 6.0.4 Docker Compose 实战部署指南
运维·docker·容器·身份认证·id-server·simpleidserver
程序喵大人17 小时前
【C++进阶】STL容器与迭代器 - 05 map 和 set 为什么按键保持有序
开发语言·c++·容器·迭代器·stl
风曦Kisaki19 小时前
Kubernetes(K8s)笔记Day03: Pod命名空间,标签,Pod 的调度,污点与容忍度,Pod 常见状态和重启策略,Pod 生命周期
linux·运维·笔记·docker·云原生·容器·kubernetes
张忠琳19 小时前
【NVIDIA】NVIDIA k8s-device-plugin v0.19.3 资源管理器模块深度分析之三
云原生·容器·架构·kubernetes·nvidia
Chengbei1120 小时前
云安全漏洞挖掘SKILL、一站式云漏洞挖掘工具,支持S3爆破、IMDS探测、K8s检测与AK/SK权限利用
前端·人工智能·网络安全·云原生·容器·kubernetes·系统安全
Ai拆代码的曹操1 天前
K8s 调度器 predicate 阶段揭秘:为什么你的 Pod 总是堆在同一台机器
后端·容器
Ai拆代码的曹操1 天前
手摸手排查:Pod CrashLoopBackOff 日志丢失问题,3 层兜底方案
后端·容器
张忠琳1 天前
【NVIDIA】k8s-device-plugin v0.19.3 — CDI / MIG / vGPU 模块超深度代码分析之五
云原生·容器·架构·kubernetes·nvidia
冷莫溪1 天前
Docker——3.Harbor 核心架构与原理详解
docker·容器·架构