实战:helm包管理-2022.4.4

实战:helm包管理-2022.4.4_第1张图片

目录

文章目录

    • 目录
    • 1、什么是Helm
      • 0.Kubernetes 包管理工具
      • 1.chart是什么?
      • 2.values.yaml文件
      • 3.helm可理解如下
      • 4.repository、release、chart关系
    • 2、 实验:helm安装-2022.1.17(测试成功)
      • 背景知识
      • 实验软件
      • 安装环境
      • 1.下载helm软件包
      • 2.解压到相应路径
      • 3.验证
      • 4.添加微软charts仓库
      • 5.用 search 命令来搜索可以安装的 chart 包
      • 6.其它
    • 3、 实验:helm安装应用-2022.4.4(测试成功)
      • 实验环境
      • 实验软件(无)
      • 1.更新仓库
      • 2.安装一个mysql应用
      • 3.查看release安装后对应的k8s资源状态
      • 4.查看chart包的特性
      • 5.查看已经安装的release
      • 6.删除release
      • 7.helm charts包更多安装方式
    • 4、 实验:helm定制charts包-2022.4.4(测试成功)
      • 实验环境
      • 实验软件(无)
      • 1.查看一个 chart 包的所有可配置的参数选项
      • 2.定制yaml文件用来覆盖原来的数据
      • 3.安装
      • 4.查看
      • 5.两种传递配置数据的方法
    • 6、 实验:helm升级和回滚-2022.4.4(测试成功)
      • 实验环境
      • 实验软件(无)
      • 1.升级
      • 2.回滚
      • 技巧
      • 其它选项
    • 7、 实战:补全helm命令-2022.4.1(测试成功)
    • Q&A
      • 注意:helm charts包结构
      • 注意:如果使用helm安装包报无法下载charts时,多尝试几次就好了。
      • 注意:helm卸载掉实例后,其pvc是不会自动被删除的!
    • 关于我
    • 最后

1、什么是Helm

0.Kubernetes 包管理工具

Helm 可以帮助我们管理 Kubernetes 应用程序 - Helm Charts 可以定义、安装和升级复杂的 Kubernetes 应用程序Charts 包很容易创建、版本管理、分享和分布。Helm 对于 Kubernetes 来说就相当于 yum 对于 Centos 来说,如果没有 yum 的话,我们在 Centos 下面要安装一些应用程序是极度麻烦的,同样的,对于越来越复杂的 Kubernetes 应用程序来说,如果单纯依靠我们去手动维护应用程序的 YAML 资源清单文件来说,成本也是巨大的。接下来我们就来了解了 Helm 的使用方法。

charts包,你就可以把它理解为一个安装包!(例如windows里面的exe应用程序。)

Helm相当于linux环境下的yum包管理工具。helm是k8s中的一个命令行客户端工具,helm是tiller的客户端,tiller是一个守护进程,接收helm的请求,helm把请求交给tiller,tiler和apiserver交互,由apiserver负责完成创建,我们用哪个chart需要下载到本地,基于本地这个chart部署实例,这个部署的实例叫做release

1.chart是什么?

一个helm程序包,比方说我们部署nginx,需要deployment的yaml,需要service的yaml,这两个清单文件就是一个helm程序包,在k8s中把这些yaml清单文件叫做chart图表

2.values.yaml文件

values.yaml文件为模板中的文件赋值,可以实现我们自定义安装,如果是chart开发者需要自定义模板,如果是chart使用者只需要修改values.yaml即可。

3.helm可理解如下

helm把kubernetes资源打包到一个chart中,制作并完成各个chart和chart本身依赖关系并利用chart仓库实现对外分发,而helm还可实现可配置的对外发布通过values.yaml文件完成可配置的发布,如果chart版本更新了,helm自动支持滚更更新机制,还可以一键回滚但是不是适合在生产环境使用,除非具有定义自制chart的能力,helm属于kubernetes一个项目,下载地址:

https://github.com/helm/helm/releases

找这个checksum的,解压之后按下面解压即可

helm官方网站:

https://helm.sh/

helm 官方的chart站点:

https://hub.kubeapps.com/

4.repository、release、chart关系

repository:存放chart图表的仓库,提供部署k8s应用程序需要的那些yaml清单文件

release:特定的chart部署于目标集群上的一个实例

chart—>通过values.yaml这个文件赋值–>生成release实例

helm也是go语言开发的。

2、 实验:helm安装-2022.1.17(测试成功)

背景知识

首先当然需要一个可用的 Kubernetes 集群,然后在我们使用 Helm 的节点上已经配置好可以通过 kubectl 访问集群,因为 Helm 其实就是读取的 kubeconfig 文件来访问集群的

由于 Helm V2 版本必须在 Kubernetes 集群中安装一个 Tiller 服务进行通信,这样大大降低了其安全性和可用性,所以在 V3 版本中移除了服务端,采用了通用的 Kubernetes CRD 资源来进行管理,这样就只需要连接上 Kubernetes 即可,而且 V3 版本已经发布了稳定版,所以我们这里来安装最新的 v3.8.0 版本,软件包下载地址为:https://github.com/helm/helm/releases,我们可以根据自己的节点选择合适的包,比如我这里是 Mac,就下载 MacOS amd64 的版本。

实验软件

helm-v3.7.2-linux-amd64.tar.gz

image-20220404131638732

安装环境

k8s v1.22.2(containerd://1.5.5)
helm-v3.7.2-linux-amd64

安装时间:2022年1月17日19:59:41

1.下载helm软件包

我们现在都是用v3版本:

helm如何安装?(安装挺简单的,就是装一个二进制文件就好(go写的程序);)

来到helm官网:

https://helm.sh/

实战:helm包管理-2022.4.4_第2张图片

点击Installing Helmrtelease

实战:helm包管理-2022.4.4_第3张图片

[root@xyy admin]#wget https://get.helm.sh/helm-v3.7.2-linux-amd64.tar.gz #我们选择linuxamd64下载即可!

实战:helm包管理-2022.4.4_第4张图片

下载后的软件如下:

[root@master1 ~]#ll -h helm-v3.7.2-linux-amd64.tar.gz 
-rw-r--r-- 1 root root 14M Dec  9 04:32 helm-v3.7.2-linux-amd64.tar.gz

2.解压到相应路径

下载到本地解压后,将 helm 二进制包文件移动到任意的 PATH 路径下即可:

[root@master1 ~]#tar xf helm-v3.7.2-linux-amd64.tar.gz 
[root@master1 ~]#cd linux-amd64/
[root@master1 linux-amd64]#ls
helm  LICENSE  README.md
[root@master1 linux-amd64]#cp helm /usr/bin/
[root@master1 linux-amd64]#chmod +x  /usr/bin/helm

这个是go开发都 软件包,直接放到PATH路径下就可以使用了!完美。

3.验证

[root@master1 linux-amd64]#helm version
version.BuildInfo{Version:"v3.7.2", GitCommit:"663a896f4a815053445eec4153677ddc24a0a361", GitTreeState:"clean", GoVersion:"go1.16.10"}

看到上面的版本信息证明已经成功了。

4.添加微软charts仓库

  • 添加微软charts仓库

一旦 Helm 客户端准备成功后,我们就可以添加一个 chart 仓库,当然最常用的就是官方的 Helm stable charts 仓库,但是由于官方的 charts 仓库地址需要科学上网,我们可以使用微软的 charts 仓库代替:

➜ helm repo add stable http://mirror.azure.cn/kubernetes/charts/
➜ helm repo list
NAME            URL
stable          http://mirror.azure.cn/kubernetes/charts/

一般情况下:我们先需要使用helm repo update更新一下仓库
➜ helm repo update

5.用 search 命令来搜索可以安装的 chart 包

安装完成后可以用 search 命令来搜索可以安装的 chart 包:

➜ helm search repo stable
NAME                                    CHART VERSION   APP VERSION                     DESCRIPTION
stable/acs-engine-autoscaler            2.2.2           2.1.1                           DEPRECATED Scales worker nodes within agent pools
stable/aerospike                        0.3.1           v4.5.0.5                        A Helm chart for Aerospike in Kubernetes
stable/airflow                          5.2.1           1.10.4                          Airflow is a platform to programmatically autho...
stable/ambassador                       5.1.0           0.85.0                          A Helm chart for Datawire Ambassador
stable/anchore-engine                   1.3.7           0.5.2                           Anchore container analysis and policy evaluatio...
stable/apm-server                       2.1.5           7.0.0                           The server receives data from the Elastic APM a...
......

6.其它

helm和kubectl一样,都是去读取的这个/.kube/config文件

image-20220101225149298

也就是说你的kubectl在哪个地方可以使用,那么你的heml就可以在哪个地方使用。

实战:helm包管理-2022.4.4_第5张图片

结束。

3、 实验:helm安装应用-2022.4.4(测试成功)

实验环境

1、win10,vmwrokstation虚机;
2、k8s集群:3台centos7.6 1810虚机,1个master节点,2个node节点
   k8s version:v1.22.2
   containerd://1.5.5
3、helm v3.7.2   

实验软件(无)

为了安装一个 chart 包,我们可以使用 helm install 命令,Helm 有多种方法来找到和安装 chart 包,但是最简单的方法当然是使用官方的 stable 这个仓库直接安装:

1.更新仓库

首先从仓库中将可用的 charts 信息同步到本地,可以确保我们获取到最新的 charts 列表:

[root@master1 ~]#helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "stable" chart repository
Update Complete. ⎈ Happy Helming!

2.安装一个mysql应用

比如我们现在安装一个 mysql 应用:

[root@master1 ~]#helm install stable/mysql --generate-name
WARNING: This chart is deprecated
NAME: mysql-1649031212
LAST DEPLOYED: Mon Apr  4 08:13:37 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
MySQL can be accessed via port 3306 on the following DNS name from within your cluster:
mysql-1649031212.default.svc.cluster.local

To get your root password run:

    MYSQL_ROOT_PASSWORD=$(kubectl get secret --namespace default mysql-1649031212 -o jsonpath="{.data.mysql-root-password}" | base64 --decode; echo)

To connect to your database:

1. Run an Ubuntu pod that you can use as a client:

    kubectl run -i --tty ubuntu --image=ubuntu:16.04 --restart=Never -- bash -il

2. Install the mysql client:

    $ apt-get update && apt-get install mysql-client -y

3. Connect using the mysql cli, then provide your password:
    $ mysql -h mysql-1649031212 -p

To connect to your database directly from outside the K8s cluster:
    MYSQL_HOST=127.0.0.1
    MYSQL_PORT=3306

    # Execute the following command to route the connection:
    kubectl port-forward svc/mysql-1649031212 3306

    mysql -h ${MYSQL_HOST} -P${MYSQL_PORT} -u root -p${MYSQL_ROOT_PASSWORD}

我们可以看到 stable/mysql 这个 chart 已经安装成功了,我们将安装成功的这个应用叫做一个 release,由于我们在安装的时候指定了--generate-name 参数,所以生成的 release 名称是随机生成的,名为 mysql-1649031212

#查看helm install 帮助用法
[root@master1 ~]#helm install stable/mysql
Error: "helm install" requires at least 1 argument

Usage:  helm install [NAME] [CHART] [flags]

[root@master1 ~]#helm install stable/mysql
Error: INSTALLATION FAILED: must either provide a name or specify --generate-name

3.查看release安装后对应的k8s资源状态

我们可以用下面的命令来查看 release 安装以后对应的 Kubernetes 资源的状态:

[root@master1 ~]#kubectl get all -l release=mysql-1649031212
NAME                                   READY   STATUS    RESTARTS   AGE
pod/mysql-1649031212-9df8c986b-8tj8z   1/1     Running   0          2m3s

NAME                       TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
service/mysql-1649031212   ClusterIP   10.105.125.254   <none>        3306/TCP   2m4s

NAME                               READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/mysql-1649031212   1/1     1            1           2m4s

NAME                                         DESIRED   CURRENT   READY   AGE
replicaset.apps/mysql-1649031212-9df8c986b   1         1         1       2m3s

[root@master1 ~]#kubectl get pvc
NAME               STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
mysql-1649031212   Bound    pvc-83c54562-5984-47f2-b1ab-c49c1dd25d53   8Gi        RWO            nfs-client     2m32s

4.查看chart包的特性

我们也可以 helm show chart 命令来了解 MySQL 这个 chart 包的一些特性:

[root@master1 ~]#helm show chart stable/mysql
apiVersion: v1
appVersion: 5.7.30
deprecated: true
description: DEPRECATED - Fast, reliable, scalable, and easy to use open-source relational
  database system.
home: https://www.mysql.com/
icon: https://www.mysql.com/common/logos/logo-mysql-170x115.png
keywords:
- mysql
- database
- sql
name: mysql
sources:
- https://github.com/kubernetes/charts
- https://github.com/docker-library/mysql
version: 1.6.9
  • 如果想要了解更多信息,可以用 helm show all 命令:
➜ helm show all stable/mysql #可以看一些定制特性!
......

需要注意的是无论什么时候安装 chart,都会创建一个新的 release,所以一个 chart 包是可以多次安装到同一个集群中的,每个都可以独立管理和升级。

5.查看已经安装的release

同样我们也可以用 Helm 很容易查看到已经安装的 release:

[root@master1 ~]#helm ls
NAME                    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
mysql-1649031212        default         1               2022-04-04 08:13:37.857671626 +0800 CST deployed        mysql-1.6.9     5.7.30

6.删除release

如果需要删除这个 release,也很简单,只需要使用 helm uninstall 命令即可:

[root@master1 ~]#helm uninstall mysql-1649031212 -ndefault
release "mysql-1649031212" uninstalled

[root@master1 ~]#kubectl get all -l release=mysql-1649031212
No resources found in default namespace.

[root@master1 ~]#helm status mysql-1649031212
Error: release: not found

uninstall 命令会从 Kubernetes 中删除 release,也会删除与 release 相关的所有 Kubernetes 资源以及 release 历史记录。

也可以在删除的时候使用 --keep-history 参数,则会保留 release 的历史记录,可以获取该 release 的状态就是 UNINSTALLED,而不是找不到 release了:

➜ helm uninstall mysql-1575619811 --keep-history
release "mysql-1575619811" uninstalled

➜ helm status mysql-1575619811
helm status mysql-1575619811
NAME: mysql-1575619811
LAST DEPLOYED: Fri Dec  6 16:47:14 2019
NAMESPACE: default
STATUS: uninstalled
...

➜ helm ls -a
NAME                NAMESPACE   REVISION    UPDATED                                 STATUS      CHART       APP VERSION
mysql-1575619811    default     1           2019-12-06 16:47:14.415214 +0800 CST    uninstalled mysql-1.5.0 5.7.27

因为 Helm 会在删除 release 后跟踪你的 release,所以你可以审查历史甚至取消删除 release(使用 helm rollback 命令)。

7.helm charts包更多安装方式

helm install 命令可以从多个源进行安装:

  • chart 仓库(类似于上面我们提到的)

  • 本地 chart 压缩包(helm install foo-0.1.1.tgz)

    这里我们可以使用helm fetch stable/mysql命令将包下载下来。

    [root@master1 ~]#helm fetch stable/mysql
    [root@master1 ~]#ll -h mysql-1.6.9.tgz 
    -rw-r--r-- 1 root root 12K Apr  4 12:25 mysql-1.6.9.tgz
    
  • 本地解压缩的 chart 目录(helm install foo path/to/foo)

  • 在线的 URL(helm install fool https://example.com/charts/foo-1.2.3.tgz)

实验结束。

4、 实验:helm定制charts包-2022.4.4(测试成功)

实验环境

1、win10,vmwrokstation虚机;
2、k8s集群:3台centos7.6 1810虚机,1个master节点,2个node节点
   k8s version:v1.22.2
   containerd://1.5.5
3、helm v3.7.2   

实验软件(无)

上面我们都是直接使用的 helm install 命令安装的 chart 包,这种情况下只会使用 chart 的默认配置选项,但是更多的时候,是各种各样的需求,所以我们希望根据自己的需求来定制 chart 包的配置参数。

一般情况,charts包会有相关文档来说明如何使用的,但有的没的话,就可以使用如下命令来查看!

1.查看一个 chart 包的所有可配置的参数选项

  • 我们可以使用 helm show values 命令来查看一个 chart 包的所有可配置的参数选项:
[root@master1 ~]#helm show values stable/mysql
## mysql image version
## ref: https://hub.docker.com/r/library/mysql/tags/
##
image: "mysql"
imageTag: "5.7.30"

strategy:
  type: Recreate #mysql的滚动更新升级策略可能会有一些问题!

busybox:
  image: "busybox"
  tag: "1.32"

testFramework:
  enabled: true
  image: "bats/bats"
  tag: "1.2.1"
  imagePullPolicy: IfNotPresent
  securityContext: {}

## Specify password for root user
##
## Default: random 10 character string
# mysqlRootPassword: testing

## Create a database user
##
# mysqlUser:
## Default: random 10 character string
# mysqlPassword:

## Allow unauthenticated access, uncomment to enable
##
# mysqlAllowEmptyPassword: true

## Create a database
##
# mysqlDatabase:

## Specify an imagePullPolicy (Required)
## It's recommended to change this to 'Always' if the image tag is 'latest'
## ref: http://kubernetes.io/docs/user-guide/images/#updating-images
##
imagePullPolicy: IfNotPresent
……

2.定制yaml文件用来覆盖原来的数据

  • 上面我们看到的所有参数都是可以用自己的数据来覆盖的,可以在安装的时候通过 YAML 格式的文件来传递这些参数:
#创建01-config.yamlcat config.yaml
mysqlUser:
  user0
mysqlPassword: user0pwd
mysqlDatabase: user0db
persistence:
  enabled: false

3.安装

[root@master1 ~]#helm install mysql stable/mysql -f 01-config.yaml
WARNING: This chart is deprecated
NAME: mysql
LAST DEPLOYED: Mon Apr  4 10:32:28 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
MySQL can be accessed via port 3306 on the following DNS name from within your cluster:
mysql.default.svc.cluster.local
......

4.查看

  • release 安装成功后,可以查看对应的 Pod 信息:
[root@master1 ~]#kubectl get all -l release=mysql
NAME                        READY   STATUS    RESTARTS   AGE
pod/mysql-94d45966d-v75mj   1/1     Running   0          19s

NAME            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
service/mysql   ClusterIP   10.107.72.252   <none>        3306/TCP   19s

NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/mysql   1/1     1            1           19s

NAME                              DESIRED   CURRENT   READY   AGE
replicaset.apps/mysql-94d45966d   1         1         1       19s

#这里可以看到,没有使用pvc了,因为我们前面将persistence设置为false了;
[root@master1 ~]#kubectl get pvc
NAME               STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
mysql-1649037426   Bound    pvc-f69ac145-ad32-47c5-bea0-bf966e4877fa   8Gi        RWO            nfs-client     35m
[root@master1 ~]#


➜ kubectl describe pod  mysql-ddd798f48-gnrzd
......
Environment:
      MYSQL_ROOT_PASSWORD:  <set to the key 'mysql-root-password' in secret 'mysql'>  Optional: false
      MYSQL_PASSWORD:       <set to the key 'mysql-password' in secret 'mysql'>       Optional: false
      MYSQL_USER:           user0
      MYSQL_DATABASE:       user0db
......

可以看到环境变量 MYSQL_USER=user0,MYSQL_DATABASE=user0db 的值和我们上面配置的值是一致的。

5.两种传递配置数据的方法

在安装过程中,有两种方法可以传递配置数据:

  • --values(或者 -f):指定一个 YAML 文件来覆盖 values 值,可以指定多个值,最后边的文件优先

    -f, --values strings specify values in a YAML file or a URL (can specify multiple)

  • --set:在命令行上指定覆盖的配置

如果同时使用这两个参数,--values(-f) 将被合并到具有更高优先级的 --set;使用 --set 指定的值将持久化在 ConfigMap 中;对于给定的 release,可以使用 helm get values 来查看已经设置的值;已设置的值也通过允许 helm upgrade 并指定 --reset 值来清除。

 --set stringArray              set values on the command line (can specify multiple or separate values with commas: key1=val1,key2=val2)
  • --set 选项接收零个或多个 name/value 对,最简单的用法就是 --set name=value,相当于 YAML 文件中的:
name: value
  • 多个值之间用字符串“,”隔开,用法就是 --set a=b,c=d,相当于 YAML 文件中的:
a: b
c: d
  • 也支持更加复杂的表达式,例如 --set outer.inner=value,对应 YAML:
outer:
  inner: value
  • 对于列表数组可以用 {} 来包裹,比如 --set name={a, b, c},对应 YAML:
name:
 - a
 - b
 - c
  • 从 Helm 2.5.0 开始,就可以使用数组索引语法来访问列表中某个项,比如 --set servers[0].port=80,对应的 YAML 为:
servers:
 - port: 80
  • 也可以这样设置多个值,比如 --set servers[0].port=80,servers[0].host=example,对应的 YAML 为:
servers
  - port: 80
    host: example
  • 有时候你可能需要在 --set 选项中使用特殊的字符,这个时候可以使用反斜杠来转义字符,比如 --set name=value1\,value2,对应的 YAML 为:
name: "value1,value2"
  • 类似的,你还可以转义.,当 chart 模板中使用 toYaml 函数来解析 annotations、labels 以及 node selectors 之类的时候,这非常有用,比如 --set nodeSelector."kubernetes\.io/role"=master,对应的 YAML 文件:
nodeSelector:
  kubernetes.io/role: master

⚠️ 深度嵌套的数据结构可能很难使用 --set 来表示,所以一般推荐还是使用 YAML 文件来进行覆盖,当然在设计 chart 模板的时候也可以结合考虑到 --set 这种用法,尽可能的提供更好的支持。

6、 实验:helm升级和回滚-2022.4.4(测试成功)

实验环境

1、win10,vmwrokstation虚机;
2、k8s集群:3台centos7.6 1810虚机,1个master节点,2个node节点
   k8s version:v1.22.2
   containerd://1.5.5
3、helm v3.7.2   

实验软件(无)

1.升级

当新版本的 chart 包发布的时候,或者当你要更改 release 的配置的时候,你可以使用 helm upgrade 命令来操作。升级需要一个现有的 release,并根据提供的信息对其进行升级。因为 Kubernetes charts 可能很大而且很复杂,Helm 会尝试以最小的侵入性进行升级,它只会更新自上一版本以来发生的变化:

  • 首先,我们来将上面那个01-config.yaml文件修改下
[root@master1 ~]#vim 01-config.yaml 
mysqlUser:
  user0
mysqlPassword: user0pwd
mysqlDatabase: user0db
mysqlRootPassword: passw0rd #我们这里 `mysql` 这个 release 用相同的 chart 包进行升级,但是新增了一个配置项:
persistence:
  enabled: false
  • 查看下当前release环境
[root@master1 ~]#helm ls 
NAME                    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
kruise                  default         1               2022-03-10 21:09:20.025171806 +0800 CST deployed        kruise-1.0.1    1.0.1
mysql                   default         1               2022-04-04 10:32:28.96570004 +0800 CST  deployed        mysql-1.6.9     5.7.30
mysql-1649037426        default         1               2022-04-04 09:57:10.810152931 +0800 CST deployed        mysql-1.6.9     5.7.30

[root@master1 ~]#helm get values mysql
USER-SUPPLIED VALUES:
mysqlDatabase: user0db
mysqlPassword: user0pwd
mysqlUser: user0
persistence:
  enabled: false
  • 升级
[root@master1 ~]#helm upgrade mysql stable/mysql -f 01-config.yaml 
WARNING: This chart is deprecated
Release "mysql" has been upgraded. Happy Helming!
NAME: mysql
LAST DEPLOYED: Mon Apr  4 12:51:42 2022
NAMESPACE: default
STATUS: deployed
REVISION: 2
NOTES:
MySQL can be accessed via port 3306 on the following DNS name from within your cluster:
mysql.default.svc.cluster.local

...
  • 验证

我们可以使用 helm get values 来查看新设置是否生效:

[root@master1 ~]#helm get values mysql

helm get 命令是查看集群中 release 的非常有用的命令,正如我们在上面看到的,它显示了 01-config.yaml 中的新配置值被部署到了集群中,现在如果某个版本在发布期间没有按计划进行,那么可以使用 helm rollback [RELEASE] [REVISION] 命令很容易回滚到之前的版本:

实战:helm包管理-2022.4.4_第6张图片

[root@master1 ~]#helm history mysql
REVISION        UPDATED                         STATUS          CHART           APP VERSION     DESCRIPTION     
1               Mon Apr  4 10:32:28 2022        superseded      mysql-1.6.9     5.7.30          Install complete
2               Mon Apr  4 12:51:42 2022        deployed        mysql-1.6.9     5.7.30          Upgrade complete

2.回滚

[root@master1 ~]#helm rollback mysql 1
Rollback was a success! Happy Helming!
  • 验证
[root@master1 ~]#helm ls
NAME                    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
kruise                  default         1               2022-03-10 21:09:20.025171806 +0800 CST deployed        kruise-1.0.1    1.0.1
mysql                   default         3               2022-04-04 12:54:28.584028226 +0800 CST deployed        mysql-1.6.9     5.7.30
mysql-1649037426        default         1               2022-04-04 09:57:10.810152931 +0800 CST deployed        mysql-1.6.9     5.7.30

[root@master1 ~]#helm get values mysql
USER-SUPPLIED VALUES:
mysqlDatabase: user0db
mysqlPassword: user0pwd
mysqlUser: user0
persistence:
  enabled: false
  
[root@master1 ~]#helm history mysql
REVISION        UPDATED                         STATUS          CHART           APP VERSION     DESCRIPTION     
1               Mon Apr  4 10:32:28 2022        superseded      mysql-1.6.9     5.7.30          Install complete
2               Mon Apr  4 12:51:42 2022        superseded      mysql-1.6.9     5.7.30          Upgrade complete
3               Mon Apr  4 12:54:28 2022        deployed        mysql-1.6.9     5.7.30          Rollback to 1  

可以看到 values 配置已经回滚到之前的版本了。上面的命令回滚到了 release 的第一个版本,每次进行安装、升级或回滚时,修订号都会加 1,第一个修订号始终为1,我们可以使用 helm history [RELEASE] 来查看某个版本的修订号。

注意:这里和k8s的滚动升级一样,版本号都是会增加的!

技巧

  • 工作流里一般使用如下命令

helm upgrade --install --create-namespace --namespace kube-test

#说明
upgrade --install #你不知道是一次部署还是进行升级操作
--create-namespace --namespace #你不确定次命名空间是否存在

其它选项

除此之外我们还可以指定一些有用的选项来定制 install/upgrade/rollback 的一些行为,要查看完整的参数标志,我们可以运行 helm --help 来查看,这里我们介绍几个有用的参数:

  • --timeout: 等待 Kubernetes 命令完成的时间,默认是 300(5分钟)

    image-20220404124241625

  • --wait: 等待直到所有 Pods 都处于就绪状态、PVCs 已经绑定、Deployments 具有处于就绪状态的最小 Pods 数量(期望值减去 maxUnavailable)以及 Service 有一个 IP 地址,然后才标记 release 为成功状态。它将等待与 --timeout 值一样长的时间,如果达到超时,则 release 将标记为失败。注意:在 Deployment 将副本设置为 1 并且作为滚动更新策略的一部分,maxUnavailable 未设置为0的情况下,--wait 将返回就绪状态,因为它已满足就绪状态下的最小 Pod 数量

  • --no-hooks: 将会跳过命令的运行 hooks

  • --recreate-pods: 仅适用于 upgrade 和 rollback,这个标志将导致重新创建所有的 Pods。(Helm3 中启用了)

7、 实战:补全helm命令-2022.4.1(测试成功)

实战:helm包管理-2022.4.4_第7张图片

  • 实验环境
k8s v1.22.2(containerd://1.5.5)
helm-v3.7.2-linux-amd64
Available Commands:
  completion  generate autocompletion scripts for the specified shell
  • 配置方法
[root@master1 ~]#echo "source <(helm completion bash)" >> ~/.bashrc
[root@master1 ~]#source ~/.bashrc
  • 验证
[root@master1 ~]#helm list #tab测试补全即可

~/.bashrc文件内容如下:

[root@master1 ~]#cat .bashrc 
# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/bin:/usr/local/sbin
source <(kubectl completion bash)
source <(helm completion bash)

实验结束!

Q&A

注意:helm charts包结构

注意:如果使用helm安装包报无法下载charts时,多尝试几次就好了。

实战:helm包管理-2022.4.4_第8张图片

注意:helm卸载掉实例后,其pvc是不会自动被删除的!

关于我

我的博客主旨:我希望每一个人拿着我的博客都可以做出实验现象,先把实验做出来,然后再结合理论知识更深层次去理解技术点,这样学习起来才有乐趣和动力。并且,我的博客内容步骤是很完整的,也分享源码和实验用到的软件,希望能和大家一起共同进步!

各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人免费帮您解决问题:

  1. 个人微信二维码:x2675263825 (舍得), qq:2675263825。

    实战:helm包管理-2022.4.4_第9张图片

  2. 个人微信公众号:云原生架构师实验

    实战:helm包管理-2022.4.4_第10张图片

  3. 个人博客地址:www.onlyonexl.cn

    实战:helm包管理-2022.4.4_第11张图片

  4. 个人csdn

    https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421

    实战:helm包管理-2022.4.4_第12张图片

  5. 个人已开源干货

    名称 链接
    01 实验:打造一款王者云笔记:typora+坚果云+阿里云oss & 定制宇宙中最美的typora主题皮肤(永久开源) https://www.jianguoyun.com/p/DXS6qiIQvPWVCRiS0qoE
    02 玩转vscode(永久开源) https://www.jianguoyun.com/p/DZe8gmsQvPWVCRid0qoE
    03 陈果的幸福哲学课 https://www.jianguoyun.com/p/Db0kM7gQvPWVCRj2q6YE

最后

好了,关于Helm包管理实验就到这里了,感谢大家阅读,最后贴上我女神的photo,祝大家生活快乐,每天都过的有意义哦,我们下期见!

实战:helm包管理-2022.4.4_第13张图片

你可能感兴趣的:(k8s,helm,k8s)