实战:helm包管理-2022.4.4

image-20220331155013669

目录

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 文件来访问集群的

image-20220331160428148

由于 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/

image-20220101224917057

点击Installing Helmrtelease

image-20220117195707310

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

image-20220117195530223

下载后的软件如下:

[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就可以在哪个地方使用。

image-20220101225510659

结束。😘

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 <release-name> 来查看已经设置的值;已设置的值也通过允许 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] 命令很容易回滚到之前的版本:

image-20220404125250907

[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 <command> --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(测试成功)

image-20220331222301818

  • 实验环境
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包结构

image-20220214065833410

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

image-20220222074704843

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

关于我

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

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

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

    image-20211002091450217

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

    image-20211002141739664

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

    image-20211002092057988

  4. 个人csdn

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

    image-20211002092344616

  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,祝大家生活快乐,每天都过的有意义哦,我们下期见!

image-20220404132309484

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值