> 文档中心 > 【kubernetes】新版helm3的三大概念+快速指南+自定义charts模板

【kubernetes】新版helm3的三大概念+快速指南+自定义charts模板

文章目录

  • 概述
    • Helm的三大概念
    • 简单来说!!
    • 还不理解吗??
  • 环境准备
  • 支持的版本
  • 安装Helm
  • Helm的基本操作(快速指南)
  • 自定义Charts模板
      • **1. 创建一个chart模板**
      • **2. Helm chart的目录结构如下:**
      • **3. templates/ 目录下,会注意到一些文件:**
      • **4. helm upgrade升级 release**
      • **5. helm rollback回滚**
  • 卸载一个版本

概述

Helm 是 Kubernetes 的包管理器

Helm的三大概念

  • chart:代表helm包,包含在 Kubernetes 集群内部运行应用程序,工具或服务所需的所有资源定义。
  • Repository(仓库):用来存放和共享 charts 的地方。
  • Release :运行在 Kubernetes 集群中的 chart 的实例,一个 chart 通常可以在同一个集群中安装多次,每一次安装都会创建一个新的 release。

简单来说!!

其实我们可以对比yum来理解

chart看作linux中rpm包,repository看作repo仓库,release就是我们的yum install安装启动后的软件

还不理解吗??

还可以,这样

chart看作docker镜像,release看作docker镜像运行的容器,而Repository看作我们的docker Hub镜像仓库

环境准备

  • 一个 Kubernetes 集群

支持的版本

Helm的版本用 x.y.z 描述,x是主版本,y是次版本,z是补丁版本,遵循 语义化版本 术语
【kubernetes】新版helm3的三大概念+快速指南+自定义charts模板

安装Helm

helm官方下载地址

两种方式安装Helm,按需选择。这里使用二进制安装。

方式1:使用二进制版本安装

tar -zxf helm-v3.7.0-linux-amd64.tar.gzcp linux-amd64/helm /usr/local/bin/helm  或者 mv linux-amd64/helm /usr/local/bin/helmhelm version

方式二:使用脚本安装
这是官方提供的脚本,自动拉取最新的Helm版本并安装在本地。

$ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3$ chmod 700 get_helm.sh$ ./get_helm.sh

Helm的基本操作(快速指南)

下列所有操作以nginx为例

Helm 自带一个强大的搜索命令,可以从两种来源中进行搜索:

  • helm search hub 从 Artifact Hub 中查找并列出 helm charts。 Artifact Hub中存放了大量不同的仓库。
  • helm search repo 从你添加(使用 helm repo add)到本地 helm 客户端中的仓库中进行查找。该命令基于本地数据进行搜索,无需连接互联网。
  1. 从 Artifact Hub 中搜索所有的 nginx charts。
$ helm search hub nginxURL    CHART VERSION   APP VERSIONDESCRIPTION  https://artifacthub.io/packages/helm/wiremind/n...      2.1.1 An NGINX HTTP serverhttps://artifacthub.io/packages/helm/zrepo-test...      5.1.5    1.16.1     Chart for the nginx server https://artifacthub.io/packages/helm/mirantis/n...      0.1.0    1.16.0     A NGINX Docker Community based Helm chart for K......
  1. 使用 helm repo add 命令,添加gitlab仓库。
$ helm repo add bitnami https://charts.bitnami.com/bitnami"bitnami" has been added to your repositories
  1. 使用 helm search repo 命令,你可以从你所添加的仓库中查找chart的名字。
$ helm search repo nginxNAME CHART VERSION   APP VERSION     DESCRIPTIONbitnami/nginx      10.2.1   1.21.6   NGINX Open Source is a web server that can be a...bitnami/nginx-ingress-controller 9.1.27   1.2.0    NGINX Ingress Controller is an Ingress controll...bitnami/nginx-intel1.0.5    0.4.7    NGINX Open Source for Intel is a lightweight se...bitnami/kong5.0.2    2.7.0    Kong is a scalable, open source API layer (aka ...
  1. 一旦你找到你想安装的 helm 包,便可以通过使用helm install命令来安装它。

Helm 安装 charts 到 Kubernetes 集群中,每次安装都会创建一个新的 release。你可以在 Helm 的 chart repositories 中寻找新的 chart。

$ helm install my-nginx bitnami/nginx --version 10.2.1 NAME: my-nginxLAST DEPLOYED: Fri May  6 11:06:07 2022NAMESPACE: defaultSTATUS: deployedREVISION: 1TEST SUITE: NoneNOTES:CHART NAME: nginxCHART VERSION: 10.2.1APP VERSION: 1.21.6...
  1. 使用 helm status 来追踪 release 的状态、信息。
$ helm status my-nginxNAME: my-nginxLAST DEPLOYED: Fri May  6 11:06:07 2022NAMESPACE: defaultSTATUS: deployedREVISION: 1TEST SUITE: NoneNOTES:CHART NAME: nginxCHART VERSION: 10.2.1APP VERSION: 1.21.6...
  1. 查看helm安装,releases的列表
[root@master helm]# helm listNAME     NAMESPACEREVISION UPDATED     STATUS   CHART    APP VERSIONmy-nginx default  1 2022-05-06 11:06:07.215433713 +0800 CST deployed nginx-10.2.1    1.21.6
  1. 浏览器访问,验证nginx服务

查看nginx的svc

[root@master ~]# kubectl get svcNAME  TYPE    CLUSTER-IPEXTERNAL-IP   PORT(S) AGEkubernetes   ClusterIP      10.96.0.1 <none> 443/TCP 115dmy-nginx     LoadBalancer   10.102.231.181   <pending>     80:30769/TCP   25m

【kubernetes】新版helm3的三大概念+快速指南+自定义charts模板

自定义Charts模板

上述nginx安装只是使用仓库chart的默认配置。不利于个性化需求和生成环境的使用。我们也可以修改chart默认配置,也可以自己创建Charts模板。

1. 创建一个chart模板

# helm create testnginxCreating testnginx

2. Helm chart的目录结构如下:

# tree testnginx/testnginx/├── charts├── Chart.yaml├── templates│   ├── deployment.yaml│   ├── _helpers.tpl│   ├── hpa.yaml│   ├── ingress.yaml│   ├── NOTES.txt│   ├── serviceaccount.yaml│   ├── service.yaml│   └── tests│└── test-connection.yaml└── values.yaml
  • templates/目录是我们资源清单的yaml文件。
  • values.yaml文件内容,定义一些template目录下yaml文件所引用的字段
  • Chart.yaml文件是该chart的描述信息。charts/目录 可以 包含其他的chart(称之为 子chart)。

3. templates/ 目录下,会注意到一些文件:

  • NOTES.txt: chart的"帮助文本"。这会在你的用户执行helm install时展示给他们。
  • _helpers.tpl: 放置可以通过chart复用的模板辅助对象

我们删除templates/目录下的文件:

# rm -rf testnginx/templates/*

修改values.yaml文件

# cat values.yamlname: app-nginximage:  repository: 192.168.200.11/library/nginx

创建deploy.yaml文件,并引用values.yaml文件的字段,之后只要我们修改values.yaml文件,就可以达到改变templates/deploy.yaml文件的效果。

# cat templates/deploy.yamlkind: DeploymentapiVersion: apps/v1metadata:  name: {{ .Values.name  }}spec:  replicas: 1  selector:    matchLabels:      app: nginx  template:    metadata:      labels: app: nginx    spec:      containers: - name: web-nginx   image: {{ .Values.image.repository  }}   ports:     - name: httpcontainerPort: 80---kind: ServiceapiVersion: v1metadata:  name: svc-nginxspec:  ports:    - name: http      port: 80      targetPort: 80  selector:    app: nginx  type: NodePort

使用helm install 创建release

# helm install test-nginx testnginx/NAME: test-nginxLAST DEPLOYED: Fri May  6 14:52:43 2022NAMESPACE: defaultSTATUS: deployedREVISION: 1TEST SUITE: None

检查服务

# helm listNAME     NAMESPACEREVISION UPDATED     STATUS   CHART    APP VERSIONtest-nginx      default  1 2022-05-06 14:52:43.081379354 +0800 CST deployed testnginx-0.1.0 1.16.0# kubectl get deploy,podNAME   READY   UP-TO-DATE   AVAILABLE   AGEdeployment.apps/app-nginx   1/1     1     1    5m14sNAME READY   STATUS    RESTARTS   AGEpod/app-nginx-57fbfbd5c5-g2sjq   1/1     Running   0   5m14sNAME   TYPE CLUSTER-IP      EXTERNAL-IP   PORT(S) AGEservice/kubernetes   ClusterIP   10.96.0.1<none> 443/TCP 115dservice/svc-nginx    NodePort    10.106.42.241   <none> 80:32755/TCP   5m14s

【kubernetes】新版helm3的三大概念+快速指南+自定义charts模板

4. helm upgrade升级 release

当我们想给我们的服务升级版本时,就需要使用到helm upgrade 命令非常简便快捷

  • 修改values.yaml文件切换版本
# cat testnginx/values.yamlname: app-nginximage:  #repository: 192.168.200.11/library/nginx  repository: 192.168.200.11/library/nginx-2
# helm upgrade test-nginx testnginx/Release "test-nginx" has been upgraded. Happy Helming!NAME: test-nginxLAST DEPLOYED: Fri May  6 15:26:08 2022NAMESPACE: defaultSTATUS: deployedREVISION: 2TEST SUITE: None

【kubernetes】新版helm3的三大概念+快速指南+自定义charts模板

5. helm rollback回滚

假如在一次发布过程中,发生了不符合预期的事情,就需要使用 helm rollback 命令回滚到之前的发布版本。

  • 查看test-nginx历史版本:
[root@master helm]# helm history test-nginxREVISION UPDATED    STATUS   CHART    APP VERSION     DESCRIPTION1 Fri May  6 15:28:12 2022 superseded      testnginx-0.1.0 1.16.0   Install complete2 Fri May  6 15:28:56 2022 superseded      testnginx-0.1.0 1.16.0   Upgrade complete
  • 回滚到版本1:
# helm rollback test-nginx 1Rollback was a success! Happy Helming!

【kubernetes】新版helm3的三大概念+快速指南+自定义charts模板

卸载一个版本

新版helm3卸载后不会保留历史版本,如果您在执行 helm uninstall 的时候提供 --keep-history 选项, Helm将会保存版本历史。

# helm uninstall test-nginxrelease "test-nginx" uninstalled

------------------------------------------------------------------------------------------END------------------------------------------------------------------------------------------