一、Helm使用方式和工作流程

1.1 Helm在线使用示例

1.1.1 chartmuseum访问方式

1、添加Bitnami仓库

helm repo add bitnami https://charts.bitnami.com/bitnami

添加完成后进行验证

$ helm repo list
NAME    URL                               
bitnami https://charts.bitnami.com/bitnami

2、使用Bitnami安装

# 这里--version 2..0.1指定的是Helm Chart本身的版本
helm install my-mysql bitnami/mysql --version 2..0.1

拓展-如何查询到应用版本

# 输出内容中APP VERSION字段会显示应用版本
helm search repo bitnami/mysql --versions

3、更改Mysql镜像

helm install my-mysql bitnami/mysql --version 2..0.1 --set global.imageRegistry=xxx

1.1.2 OCI访问方式

以OCI访问方式下载my-release

helm install my-release oci://registry-2.docker.io/bitnamicharts/schema-registry

1.2 Helm离线使用示例(推荐使用)

1.2.1 chartmuseum访问方式

1、添加Bitnami仓库

helm repo add bitnami https://charts.bitnami.com/bitnami

添加完成后进行验证

$ helm repo list
NAME    URL                               
bitnami https://charts.bitnami.com/bitnami

2、下载安装包

helm pull bitnami/mysql -version 2.0.1

3、解压后安装

helm install my-mysql .

1.2.2 OCI访问方式

通过OCI访问方式下载仓库到本地

helm pull oci://registry-2.docker.io/bitnamicharts/schema-registry

二、Helm项目结构

1.创建一个Chart

$ helm create helm-test

2.查看Helm目录层级

[root@k8s-master01 ~]# tree helm-test/
helm-test/
├── charts
├── Chart.yaml
├── templates
   ├── deployment.yaml
   ├── _helpers.tpl
   ├── hpa.yaml
   ├── ingress.yaml
   ├── NOTES.txt
   ├── serviceaccount.yaml
   ├── service.yaml
   └── tests
       └── test-connection.yaml
└── values.yaml

上面文件说明:

  • charts/目录: 可以包含其他的chart(称之为子chart)
  • Chart.yaml 文件包含了该chart的描述。你可以从模板中访问它
  • apiVersion:Chart的apiVersion,目前默认都是v2
  • name:Chart的名称
  • description:Chart描述信息
  • type:图表的类型[可选]
  • version:Chart自己的版本号
  • appVersion:Chart内应用的版本号[可选]
  • description:Chart描述信息[可选]

  • templates/ 目录:包括了模板文件。当Helm评估chart时,会通过模板渲染引擎将所有文件发送到templates/目录中。 然后收集模板的结果并发送给Kubernetes

  • deployment.yaml:创建Kubernetes 工作负载的基本清单
  • _helpers.tpl: 放置可以通过chart复用的模板辅助对象,可以理解成自定义的模板或者函数
  • NOTES.txt: chart的"帮助文本"。这会在你的用户执行helm install时展示给他们
  • service.yaml: 为你的工作负载创建一个 service终端基本清单
  • tests:测试文件

  • values.yaml 文件也导入到了模板。这个文件包含了chart的默认值。这些值会在用户执行helm installhelm upgrade时被覆盖,一般配置全局变量或者一些参数,其中优先级为values.yaml最低,--set参数最高

如果没有tree命令,可执行以下命令进行下载

$ yum install -y tree

三、Helm仓库、Chart、Release管理

3.1 Helm仓库管理

Helm官方仓库链接:https://artifacthub.io/

3.1.1 增

添加仓库命令格式

helm repo add [仓库名字] [仓库地址]

添加bitnami仓库

helm repo add bitnami https://charts.bitnami.com/bitnami

添加阿里云仓库

helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

添加rancher仓库

helm repo add rancher-mirror https://rancher-mirror.rancher.cn/server-charts/latest

3.1.2 删

删除仓库命令格式

helm repo remove [仓库名字]

删除rancher仓库

helm repo remove rancher-mirror 

3.1.3 改

更新仓库命令格式

helm repo update [仓库名字]

更新单个仓库

helm repo update bitnami 

更新全部仓库

helm repo update

3.1.4 查

验证仓库是否添加,观察到仓库已经添加

[root@k8s-master01 ~]# helm repo list
NAME            URL                                                   
bitnami         https://charts.bitnami.com/bitnami                    
aliyun          https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
rancher-mirror  https://rancher-mirror.rancher.cn/server-charts/latest

查看添加仓库后的保存位置

[root@k8s-master01 ~]# cat /root/.config/helm/repositories.yaml 
apiVersion: ""
generated: "0001-01-01T00:00:00Z"
repositories:
- caFile: ""
  certFile: ""
  insecure_skip_tls_verify: false
  keyFile: ""
  name: bitnami
  pass_credentials_all: false
  password: ""
  url: https://charts.bitnami.com/bitnami
  username: ""

3.2 Helm Chart管理

3.2.1 搜索Chart

搜索Chart命令格式

helm search repo [Chart名字]

搜索Chart

[root@k8s-master01 ~]# helm search repo nginx
NAME                                CHART VERSION   APP VERSION DESCRIPTION                                       
aliyun/nginx-ingress                0.9.5           0.10.2      An nginx Ingress controller that uses ConfigMap...
aliyun/nginx-lego                   0.3.1                       Chart for nginx-ingress-controller and kube-lego  
bitnami/nginx                       19.0.3          1.27.4      NGINX Open Source is a web server that can be a...
bitnami/nginx-ingress-controller    11.6.12         1.12.1      NGINX Ingress Controller is an Ingress controll...
bitnami/nginx-intel                 2.1.15          0.4.9       DEPRECATED NGINX Open Source for Intel is a lig...
aliyun/gcloud-endpoints             0.1.0                       Develop, deploy, protect and monitor your APIs ...

搜索某个仓库

# 这里默认展示的是最新版本
[root@k8s-master01 ~]# helm search repo bitnami/nginx
NAME                                CHART VERSION   APP VERSION DESCRIPTION                                       
bitnami/nginx                       19.0.3          1.27.4      NGINX Open Source is a web server that can be a...
bitnami/nginx-ingress-controller    11.6.12         1.12.1      NGINX Ingress Controller is an Ingress controll...
bitnami/nginx-intel                 2.1.15          0.4.9       DEPRECATED NGINX Open Source for Intel is a lig...

查看某个Chart的版本

[root@k8s-master01 ~]# helm search repo bitnami/nginx -l
NAME                                CHART VERSION   APP VERSION DESCRIPTION                                       
bitnami/nginx                       19.0.3          1.27.4      NGINX Open Source is a web server that can be a...
bitnami/nginx                       19.0.2          1.27.4      NGINX Open Source is a web server that can be a...
bitnami/nginx                       19.0.1          1.27.4      NGINX Open Source is a web server that can be a...
bitnami/nginx                       19.0.0          1.27.4      NGINX Open Source is a web server that can be a...
bitnami/nginx                       18.3.6          1.27.4      NGINX Open Source is a web server that can be a...
bitnami/nginx                       18.3.5          1.27.3      NGINX Open Source is a web server that can be a...
bitnami/nginx                       18.3.4          1.27.3      NGINX Open Source is a web ser
...
...

3.2.2 下载Chart

下载最新版,这里显示下载失败,原因是最新版的不是采用chartmuseum访问方式,而是采用OCI访问方式

[root@k8s-master01 ~]# helm pull bitnami/nginx
Error: failed to do request: Head "https://registry-1.docker.io/v2/bitnamicharts/nginx/manifests/19.0.3": dial tcp 31.13.83.2:443: i/o timeout

# 采用OCI方式拉取最新版的nginx
[root@k8s-master01 helm]# helm pull oci://docker.kubeasy.com/bitnamicharts/nginx --version 19.0.3
Pulled: docker.kubeasy.com/bitnamicharts/nginx:19.0.3
Digest: sha256:9257bbe06aca3500dc5274ee7e380a7b5022fa73bb407ef4d3af725ef75a6cf7

下载指定版本

[root@k8s-master01 ~]# mkdir helm
[root@k8s-master01 ~]# cd helm/
[root@k8s-master01 helm]# helm pull bitnami/nginx --version 18.2.4
[root@k8s-master01 helm]# ls
nginx-18.2.4.tgz

3.3 Helm Release管理

3.3.1 增

1.创建一个新的 Helm Chart 项目

$ helm create <chart-name>

示例说明:

$ helm create helm-test 

2.安装Helm Chart

$ helm install <release-name> <chart> [flags]
  • <release-name>:指定要安装的 Helm Release 的名称。
  • <chart>:指定要安装的 Helm Chart,可以是本地的 Chart 包文件路径或 Chart 存储库中的名称。

示例说明---下载myapp下的mychart:

$ helm install myapp ./mychart

3.添加一个 Helm 存储库

$ helm repo add <repo-name> <repo-url>
  • <repo-name>:指定要添加的 Helm 存储库的名称。这是你为存储库选择的标识符。
  • <repo-url>:指定要添加的 Helm 存储库的 URL。这是存储库的地址,通常是一个 HTTP 或 HTTPS URL

示例说明---添加一个名为 "stable" 的 Helm 存储库,并指定 URL 为 "https://charts.helm.sh/stable"

$ helm repo add stable https://charts.helm.sh/stable

4.下载一个包,可以通过指定--version参数下载指定版本

$ helm pull bitnami/kafka --version 12.19.2

3.3.2 删

1.删除Helm Release

$ helm uninstall <release-name> [flags]
  • <release-name>:指定要卸载的 Helm Release 的名称

示例说明---卸载名为myapp的Helm Release:

$ helm uninstall myapp

2.删除已安装的 Helm Release,也通过添加 --purge 标志来完全清理与 Release 相关的资源和持久化卷

$ helm delete <release-name> [flags] --purge
  • <release-name>:指定要删除的 Helm Release 的名称

示例说明---删除已安装的kafka和zookeeper

$ helm delete kafka zookeeper  -n public-service

3.3.3 改

1.更新(升级)Helm Release

$ helm upgrade <release-name> <chart> [flags]
  • <release-name>:指定要升级的 Helm Release 的名称。
  • <chart>:指定要升级使用的新 Helm Chart,可以是本地的 Chart 包文件路径或 Chart 存储库中的名称

示例说明:

$ helm upgrade myapp ./newchart
$ helm upgrade myapp stable/mysql

3.3.4 查

1.查看安装参数

$ helm get values <release-name> [flags]
  • <release-name>:指定要获取值文件的 Helm Release 的名称

示例说明---查看kafka安装参数

[root@k8s-master01 zookeeper]# helm get values kafka -n  public-service
USER-SUPPLIED VALUES:
externalZookeeper:
  servers: zookeeper
persistence:
  enabled: false
replicaCount: 3
zookeeper:
  enabled: false

2.查看仓库列表

$ helm repo list

3.搜索 Helm 存储库中的可用 Helm Charts

$ helm search repo <chart-name>
  • <chart-name>:指定要搜索的 Helm Chart 的名称

示例说明---搜索BitNami仓库有哪些可用的Chart

$ helm search repo nginx

4.查看helm版本

$ helm version

5.使用Helm检索版本并查看实际加载的模板

$  helm get manifest test1(发布名称)