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 资源配置细节。

相关推荐
DeepFlow 零侵扰全栈可观测2 小时前
金山办公基于 DeepFlow docker 模式的可观测性实践
运维·docker·容器
珂玥c2 小时前
Rook部署——k8s集群中使用ceph
运维·ceph·kubernetes
qianshuaiblog.cn12 小时前
Kubernetes安装部署
云原生·容器·kubernetes
Empty_77715 小时前
K8S-中的优先级
云原生·容器·kubernetes
❀͜͡傀儡师17 小时前
Docker部署Rustscan端口扫描工具
运维·docker·容器
一只懒鱼a18 小时前
docker搭建rabbit集群
docker·容器·rabbitmq
java_logo19 小时前
Onlyoffice Documentserver Docker 容器化部署指南
运维·人工智能·docker·容器·onlyoffice·milvus·documentserver
Heavydrink19 小时前
华为云EulerOS 2.0安装redis详细教程
docker·容器·华为云
总有刁民想爱朕ha19 小时前
银河麒麟v10服务器版Docker部署.NET 8 WebAPI教程
docker·容器·.net·银河麒麟v10服务器版