1-helm

参考文档

网友关于helm的笔记
https://www.cnblogs.com/maiblogs/p/16771609.html

helm官方文档
https://helm.sh/zh/docs/

artifactHUB (chart模板下载)
https://artifacthub.io/packages/search?kind=0

helm中文文档
http://www.coderdocument.com/docs/helm/v2/helm_commands/helm_delete.html

helm介绍

  • helm相当于linux的yum,它提供了一个应用所需要的所有清单文件,helm仓库里面只有配置清单文件,而没有镜像,镜像还是由镜像仓库来提供

  • Chart的实质只是一个模板,我们可以对这个模板进行赋值(value),形成我们自定义的清单文件,从而实现个性化的需求,这样的仓库叫Chart仓库。

  • Helm把Kubernetes资源打包到一个chart中,而chart被保存到chart仓库,通过chart仓库可用来存储和分享chart。helm工作在k8s集群之外,helm不直接操作apiserver,而是和Tiller交互,Tlller再和apiserver交互,最后由Apiserver把chart使用config赋值,最后部署成为release。

  • helm是tiller的客户端,管理本地的chart仓库,作用:发送chart、实例安装、查询、卸载等.

  • helm先去检查chart是否存在,如果存在就把chart下载到helm本机当前用户的家目录下,然后helm把Chart和Config交给tiller,tiller和api server交互,api server把chart部署在k8s集群上,部署在K8S集群中的chart叫release;一个chart赋值不同,完全可以部署出多个release出来,所以可以把chart看做是一个安装包的模板,如果发现chart更新了,helm会自动滚动更新,还支持一键回滚的操作.

主要概念

  • Chart:一个Helm包,其中包含运行一个应用所需要的工具和资源定义,还可能包含Kubernetes集群中的服务定义。可以理解为包含了一组定义 Kubernetes 资源相关的YAML文件。
  • Release:在Kubernetes集群上运行的一个Chart实例。在同一个集群上,一个Chart可以被安装多次。例如有一个MySQL Chart,如果想在服务器上运行两个MySQL数据库,就可以基于这个Chart安装两次。每次安装都会生成新的Release,会有独立的Release名称。
  • Repository:Helm chart的仓库,Repository本质上是一个Web服务器,该服务器保存了一系列的Chart软件包以供用户下载,并且提供了一个该Repository的Chart包的清单文件以供查询。Helm可以同时管理多个不同的Repository。
  • 简单来说,Helm整个系统的主要任务就是,在仓库中查找需要的Chart,然后将Chart以Release的形式安装到Kubernetes集群中。

helm架构图

  • Helm v2是C/S架构,主要分为客户端helm和服务端Tiller。
  • Helm v3移除了Tiller,只有helm。
  • V2版本的架构中,Tiller在Kubernetes集群中,Helm Client发请求给Tiller需要经过RBAC认证。而V3版本是Helm通过kubeconfig连接kube-apiserver,避免了使用者去配置RBAC权限

ecae3ca2d96f34dd29d52f60240eb5c1.png

安装helm v3

使用二进制包安装helm
wget https://get.helm.sh/helm-v3.8.2-linux-amd64.tar.gz
tar zvfx helm-v3.8.2-linux-amd64.tar.gz

# helm是一个命令行工具,拷贝到/usr/local/bin/
cp linux-amd64/helm /usr/local/bin/

# 查看版本
helm version

#查看帮助
helm --help

helm的基本使用

# helm --help
Common actions for Helm:(Helm的常见动作)
  helm search:搜索图charts
  helm pull:下载charts到本地目录
  helm install:将charts部署到Kubernetes
  helm list:查看已经部署的charts的实例
Environment variables:(环境变量)
  $HELM_CACHE_HOME:设置存储缓存文件的位置。
  $HELM_CONFIG_HOME:设置配置文件。
  $HELM_DATA_HOME:设置数据的存储位置
  $HELM_DEBUG:是否在调试模式下运行
  $HELM_DRIVER:设置后端的存储驱动。取值为:configmap、secret、memory、sql。
  $HELM_DRIVER_SQL_CONNECTION_STRING:设置SQL存储驱动程序应该使用的连接字符串。
  $HELM_MAX_HISTORY:设置helm release history的最大次数。
  $HELM_NAMESPACE:设置命名空间。
  $HELM_NO_PLUGINS:禁用插件。设置HELM_NO_PLUGINS=1禁用插件。
  $HELM_PLUGINS:将路径设置为plugins目录
  $HELM_REGISTRY_CONFIG:设置注册表(registry)配置文件的路径。
  $HELM_REPOSITORY_CACHE:设置仓库(repository)缓存目录的路径。
  $HELM_REPOSITORY_CONFIG:设置仓库(repositories)文件的路径。
  $KUBECONFIG:设置Kubernetes认证配置文件(default "~/.kube/config")
  $HELM_KUBEAPISERVER:设置Kubernetes API服务器端点进行身份验证。
  $HELM_KUBECAFILE:设置Kubernetes证书颁发机构文件(CA)。
  $HELM_KUBEASGROUPS:使用逗号分隔的列表设置要用于模拟的组。
  $HELM_KUBEASUSER:设置用户名以模拟操作。
  $HELM_KUBECONTEXT:设置kubeconfig上下文(context)的名称。
  $HELM_KUBETOKEN:设置用于认证的不记名KubeToken。
Helm根据以下配置顺序存储缓存、配置和数据:
  如果设置了HELM_*_HOME环境变量,则将使用它
  否则,在支持XDG基本目录规范的系统上,将使用XDG变量
  当没有设置其他位置时,将根据操作系统使用默认位置
默认情况下,默认目录依赖于操作系统。默认值如下所示:
    Operating System     Cache Path                    Configuration Path                 Data Path               |
|------------------|---------------------------|--------------------------------|-------------------------|
    Linux                $HOME/.cache/helm             $HOME/.config/helm                 $HOME/.local/share/helm |
    macOS                $HOME/Library/Caches/helm     $HOME/Library/Preferences/helm     $HOME/Library/helm      |
    Windows              %TEMP%\helm                   %APPDATA%\helm                     %APPDATA%\helm          |
Usage:
  helm [command]
Available Commands:
  completion  为指定的shell生成自动完成脚本
  create      创建一个具有给定名称的新chart
  dependency  管理chart的依赖关系
  env         管理客户端环境信息
  get         查看指定release(实例)的扩展信息
  help        关于任何命令的帮助
  history     获取releases历史
  install     安装一个chart
  lint        检查chart中可能出现的问题
  list        releases列表
  package     将chart目录打包到chart存档中
  plugin      安装,列出,或卸载Helm插件
  pull        从仓库下载chart,并(可选)将其解压到本地目录中
  push        将chart推送到仓库
  registry    登录到注册中心或从注册中心注销
  repo        添加、列出、删除、更新和索引本地chart仓库
  rollback    将release回滚到以前的修订release
  search      在chart仓库中搜索chart
  show        显示chart的信息
  status      显示命名release的状态
  template    本地呈现模板
  test        为发行版运行测试
  uninstall   卸载一个release
  upgrade     升级一个release
  verify      验证给定路径上的chart是否已签名且有效
  version     打印客户端版本信息
Flags:
    --debug                       启用详细输出
  -h, --help                        帮助
      --kube-apiserver string       Kubernetes API server的地址和端口
      --kube-as-group stringArray   指定用户组。可以重复使用该参数以指定多个组。
      --kube-as-user string         指定用户
      --kube-ca-file string         Kubernetes API服务器连接的证书颁发机构文件(CA)
      --kube-context string         要使用的kubeconfig上下文的名称
      --kube-token string           用于身份验证的承载令牌
      --kubeconfig string           kubeconfig文件的路径
  -n, --namespace string            指定命名空间
      --registry-config string      注册表(registry)配置文件的路径(default "/root/.config/helm/registry/config.json")
      --repository-cache string     包含缓存仓库(repository)索引的文件的路径(default "/root/.cache/helm/repository")
      --repository-config string    包含仓库名称和url的文件的路径(default "/root/.config/helm/repositories.yaml")
Use "helm [command] --help" for more information about a command.

release的相关操作

helm ls/list                 # 列出已经部署的release
helm ls/list -a              # 列出所有release
helm ls/list -q              # 只列出release名称
helm ls/list --deleted       # 列出删除的release
helm history release_name                # 查看release的历史版本
helm status release_name                 # 查询指定release的状态
helm delete release_name                 # 删除release
helm upgrade release_name .              # 升级release,在chart的目录中执行
helm delete release_name --purge         # 彻底删除release
helm upgrade -f values.yaml release_name .      # 只升级这个文件中的变动项,在chart目录中执行
helm rollback release_name release_version      # 将release回滚到指定版本
helm package chart_name --debug

chart仓库(repository)

helm repo --help             # 查看帮助
helm repo list               # 列出本地chart仓库
helm repo remove kaiyuanshe  # 删除本地chart仓库
helm repo update             # 更新本地chart仓库

# 添加chart仓库到本地(文件加载到了${HOME}/.cache/helm/repository/)
helm repo add kaiyuanshe http://mirror.kaiyuanshe.cn/kubernetes/charts/

# 查看描述信息,yaml文件怎么写的,一些注释的字段可以让用户自定义
helm inspect stable/mariadb

chart的相关操作

# 搜索Chart
helm search --help
Usage:
  helm search [command]
Available Commands:
  hub         在公网上的chart仓库中搜索chart,默认chart仓库是https://hub.helm.sh
  repo        在本地chart仓库中搜索chart,不需要连接公网。

# 搜索mongodb
helm search repo mongodb
helm search hub mongodb

# 查看Chart的信息
helm show -h
Usage:
  helm show [command]
Aliases:
  show, inspect
Available Commands:
  all         显示chart的所有信息
  chart       显示chart的定义(definition)
  crds        显示chart的CRDs
  readme      显示chart的README
  values      显示chart的values

# 下载、上传chart
# 从仓库下载chart
helm pull [chart URL | repo/chartname] [...] [flags]

# 将chart推送到仓库
helm push [chart] [remote] [flags]

# 下载mongodb的chart到本地当前目录
 helm pull bitnami/mongodb

运行并管理release

1、运行/安装release
# 使用仓库直接运行release(文件加载到了${HOME}/.cache/helm/repository/xxx.tgz))
helm install mongodb-name1 bitnami/mongodb

helm install mongodb-name2 mongodb-13.1.7.tgz   # 使用压缩包运行release
helm install mongodb-name3 mongodb/             # 使用解压后的目录运行release
helm install https://example.com/charts/foo-1.2.3.tgz    # 从指定URL安装


2、查看已经运行的release
]# helm list
NAME            NAMESPACE   REVISION    UPDATED                                 STATUS      CHART           APP VERSION
mongodb-name1   default     1           2022-10-09 17:54:13.504601252 +0800 CST deployed    mongodb-13.1.7  6.0.2

3、获取release的状态
]# helm status mongodb-name1

4、删除releases
]# helm uninstall mongodb-name1

5、获取releases部署历史
]# helm history mongodb-name2
REVISION    UPDATED                     STATUS      CHART           APP VERSION DESCRIPTION    
1           Sun Oct  9 17:54:13 2022    deployed    mongodb-13.1.7  6.0.2       Install complete

6、升级和回滚
# 升级一个release
helm upgrade [RELEASE] [CHART] [flags]
# 回滚release
helm rollback <RELEASE> [REVISION] [flags]

7、调试
# 检查chart格式是否正确,在chart的上级目录运行
helm lint chart_name

只测试不安装

helm install --debug --dry-run my-rellease ./mychart

自定义chart

1.创建chart框架,命令在本地生成如下目录结构
helm crate template-chart

template-chart目录结构如下:
|--charts                # 包含该chart所依赖的其他chart
|--Chart.yaml            # 用于描述chart信息,包括名字、描述信息及版本等
|--values.yaml           # 用于存储templates目录中模板文件中用到的变量值
|--templates             # 存放模板yaml文件
  |--_helpers.tpl        # 放置模板助手的地方,可以在整个 chart 中重复使用
  |--NOTES.txt           # 用于介绍 Chart 帮助信息,helm install 部署后展示给用户
  |--ingress.yaml        # ingress配置文件
  |--deployment.yaml     # deployment配置文件
  |--service.yaml        # service配置文件

2.修改values.yaml文件和引用其中变量的文件(ingress.yaml  deployment.yaml service.yaml)
values.yaml内容示例:
replicas: 1
image: nginx
tag: 1.16

deployment内容示例:
- name: {{ .Chart.Name }}
  image: "{{ .Values.image.repository }}:{{ .Chart.AppVersion }}"
  imagePullPolicy: {{ .Values.image.pullPolicy }}
  env:
  - name: USERNAME
    value: {{ .Values.Username }}

3.校验打包
helm lint --strict template-chart      # 校验
helm package template-chart            # 打包

4.修改values.yaml中的默认参数(拿到模板后修改为适合自己的参数值)
在安装命令后接-f 指定文件名来额外配置,多个文件,最后一个优先生效,多个文件中重复的value会进行覆盖操作,不同值会叠加生效
echo "DBname: testdb" > my-values.yaml
echo "DBpwd: 1234563" > my-new-values.yaml

helm install my-app my-hello-world-0.1.0.tgz --set Username="Cloud Native"
helm install my-app1 my-hello-world-0.1.0.tgz -f my-values.yaml -f my-new-values.yaml
helm upgrade my-app1 my-hello-world-0.1.0.tgz -f my-new-values.yaml

快速制作自定义chart的思路

1.下载Chart,使用helm fetch stable/mariadb命令下载这一Chart的压缩包。
2.编辑Chart。
  -利用tar解压之后,将目录重新命名为mymariadb。
  -修改templates中的deployment.yaml,将image字段改为需要的镜像(或者以变量的方式在values中进行设置)
  -将Chart.yaml中的版本号修改为0.1.1,name为mymariadb。
  -使用helm lint mymariadb 检查chart配置是否正常
  -使用helm package mymariadb --debug 打包Chart,并列出调试信息,会生成一个名为mymariadb-0.1.1.tgz的压缩包。
3.安装Chart,通过helm install mymariadb-0.1.1.tgz命令安装

Chart.yaml文件内容说明

Chart.yaml文件(注意首字母大写)是个必要文件,包含如下内容

name// Chart的名称,必选
version:        // SemVer 2规范的版本号,必选
name// 管理员的名字,必选
email:          // 管理员的邮件,必选
description:    // 项目的描述,可选
keywords:       // 一个用于描述项目的关键字列表,可选
home:           // 项目的主页,可选
sources:        // 一个URL列表,说明项目的源代码位置,可选
maintainers:    // 维护者列表,可选
engine:         // 模板引擎的名称,默认是gotpl,可选
icon:           // 一个指向svg或png图像的URL,作为Chart的图标,可选
appVersion:     // 在Chart中包含的应用的版本,无须遵循SemVer规范,可选
deprecated// 布尔值,该Chart是否标注为“弃用”,可选
tillerVersion:  // 可选,该Chart所需的Tiller版本。取值应该是一个SemVer的范围,例如“>2.0.0”
posted @   立勋  阅读(26)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示