helm

发布时间 2023-12-08 11:57:51作者: 老夫聊发少年狂88

一. Helm基本概念

1.1 为何需要Helm

1.2 什么是Helm

1.3 Helm核心概念

1.4 Helm安装

二. Helm仓库管理

2.1 查看仓库

2.2 添加仓库

2.3 更新仓库

2.4 删除仓库

三. Helm基本使用

3.1 搜索chart应用

3.2 部署chart应用

3.3 删除chart应用

3.4 定制参数部署应用

3.5 chart应用升级

3.6 chart应用回滚

四. chart基本介绍

4.1 什么是chart

4.2 chart目录结构

4.3 chart.yaml文件

五. 创建不可配置Chart

5.1 创建Chart

5.2 安装Chart

六. 创建可配置的Chart

6.1 修改Chart

6.2 测试chart

6.3 打包chart

===============================================================

一. helm基本概念

1.1 为何需要helm

在早期的Linux系统中,维护和安装软件包是一件极其麻烦的事情。为了安装一个应用程序,我们需要使用到编译的方式,而编译软件包,首先有一定的技术门槛,同时对于一些比较挑剔的应用程序,它可能在编译的过程中对内核版本或系统环境有特定的要求。为了解决这个问题,就引入了包管理工具rpm,虽然rpm能在一定程度上减轻安装应用的压力,但仍然会面临应用程序依赖关系的困扰。直到yum的出现,我们才能轻松的解决依赖关系,实现一键安装应用程序。
然而当我们将应用迁移到kubernetes系统时,我们部署应用通常需要编写一份配置清单文件。每个清单文件对对应集群中的一个资源,如Deployment、Service、Ingress等。但在实际生产环境中,我们需要部署和维护大量的应用,且每个应用都需要多个YAML资源清单。这意味着我们需要编写和维护大量的YAML清单文件。
因此我们迫切需要再Kubernetes中引入一个类似yum这样的工具,通过一条特定的命令就可以在系统上完成应用的安装、升级、以及后期的维护,而这个工具就是Helm。

1.2 什么是Helm

Helm是CNCF学院毕业的项目,它是Kubernetes中的应用管理工具,它能让我们在Kubernetes中非常方便的安装、升级、卸载我们的应用。
Helm的工作原理与yum非常相似。首先helm会将应用所需要yaml配置清单文件打包成一个单元,称为chart。而这个chart通常是保存在helm仓库中,当需要时进行调用。而每个chart都包含了部署一个应用所需要的所有资源和配置,包括但不限于Deployment、Service、Ingress、ConfigMap等。因此借助Helm工具,我们就可以使用一条命令来部署和管理一个完整的应用。

值得注意的是: Helm Chart中的资源清单文件并非是固定的,而是采用了模版的形式。在应用部署过程中,我们还需要借助values.yaml这个配置文件来渲染这些模版文件,从而生成真正要部署的资源清单。也就是说helm它需要将模版文件与用户定义的values.yaml配置文件结合起来,从而生成一份完整的应用部署清单,最后将这个清单部署到Kubernetes集群上

1.3 Helm核心概念

Helm的核心组成部分包括Chart、Repository和Release,我们可以将其分别理解为应用程序包,应用程序商店和已经安装的应用。

  • Chart(应用程序包): chart是Helm的一种打包格式,就像APK文件一样。它包含了部署一个应用所有的必要资源清单文件和配置。
  • Repository(应用商店): Repository是存储和分享Chart的地方,就像一个应用商店一样。可以在这里找到并下载需要的Chart,然后进行安装。
  • Release(已安装的应用): 当用Chart在Kubernetes集群上部署一个应用或服务,这就产生了一个Release,就像在手机上安装了一个APP。也可以根据一份Chart在集群上部署多次,每次都会生成一个新的Release,就像同一个APK可以在手机上安装多次(例如安装多个微信,淘宝,京东)

1.4 Helm安装

1.访问github,搜索helm,然后获取对应下载地址

2.下载对应的helm包,然后解压

wget https://get.helm.sh/helm-v3.13.2-linux-amd64.tar.gz
tar xf helm-v3.13.2-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/

3.helm命令补全

helm completion bash > /etc/bash_completion.d/helm
source /etc/bash_completion.d/helm

4.检查当前helm的版本

]# helm version
version.BuildInfo{Version:"v3.13.2", GitCommit:"2a2fb3b98829f1e0be6fb18af2f6599e0f4e8243", GitTreeState:"clean", GoVersion:"go1.20.10"}

二. Helm仓库管理

2.1 查看仓库

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

2.2 添加仓库

# azure软件源
helm repo add azure http://mirror.azure.cn/kubernetes/charts/
# 阿里软件源
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
# bitnami软件源
helm repo add https://charts.bitnami.com/bitnami

2.3 更新仓库

helm repo update

2.4 删除仓库

helm repo remove azure

三.Helm基本使用

3.1 搜索chart应用

使用 helm search repo 关键字可以查看相关charts

helm search repo nginx
helm search repo tomcat

3.2 部署chart应用

1.部署一个MySQL的应用(需要提前部署动态存储,nfs-provisioner-storage)

helm install stable/mysql --generate-name \
--set persistence.storageClass="nfs-provisioner-storage" \
--set mysqlRootPassword=yangtao \
--set livenessProbe.initialDelaySeconds=100 \
--set readinessProbe.initialDelaySeconds=100 \
--namespace default

由于节点硬件配置较差,MySQL数据库启动的时间相对较长。为了防止在数据库还未完全启动成功,探针就开始进行健康检查,从而造成数据库检测失败而导致重启,我们将initialDelaySeconds设置为200秒。这样可以确保数据库有足够的时间来完成启动过程,从而保证数据库能够正常运行

  • livenessProbe: 用来检查容器是否还在正常运行,如果livenessProbe失败,Kubernetes会杀死容器
  • readinessProbe: 用来检查容器是否准备好对外提供服务。只有当Pod中所有容器的readinessProbe都成功时
    2、检查部署的应用,例如Pod、Deployment、Service等
[root@MF-01 dashboard]# kubectl get pod,deployment,service,svc 
NAME                             READY   STATUS    RESTARTS   AGE
pod/helm-nginx-f9b5b77fc-6txmv   1/1     Running   0          16m
pod/helm-nginx-f9b5b77fc-nxlr6   1/1     Running   0          16m
pod/helm-nginx-f9b5b77fc-qx5l7   1/1     Running   0          16m
pod/helm-nginx-f9b5b77fc-rvb28   1/1     Running   0          16m

NAME                         READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/helm-nginx   4/4     4            4           16m

NAME                 TYPE           CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
service/helm-nginx   LoadBalancer   10.0.0.218   <pending>     80:30081/TCP   16m
service/kubernetes   ClusterIP      10.0.0.1     <none>        443/TCP        12d

3、访问页面验证是否部署成功

[root@MF-01 dashboard]# curl 10.0.0.218
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

3.3 删除chart应用

1.如果需要删除部署的nginx release,可以通过 helm uninstall 命令

[root@MF-01 dashboard]# helm list
NAME      	NAMESPACE	REVISION	UPDATED                                	STATUS  	CHART       	APP VERSION
helm-nginx	default  	1       	2023-12-04 15:55:07.026793923 +0800 CST	deployed	nginx-15.4.3	1.25.3    
[root@MF-01 dashboard]# helm uninstall helm-nginx
release "helm-nginx" uninstalled 

2.也可以在卸载时指定--keep-history参数,这样后期还可以撤销删除

[root@MF-01 dashboard]# helm uninstall helm-nginx --keep-history
release "helm-nginx" uninstalled

[root@MF-01 dashboard]# kubectl get pod 
No resources found in default namespace.

[root@MF-01 dashboard]# helm rollback helm-nginx 1
Rollback was a success! Happy Helming!

[root@MF-01 dashboard]# kubectl get pod 
NAME                         READY   STATUS    RESTARTS   AGE
helm-nginx-f9b5b77fc-2rbs5   0/1     Running   0          3s
helm-nginx-f9b5b77fc-f49xr   0/1     Running   0          3s
helm-nginx-f9b5b77fc-skqhg   0/1     Running   0          3s
helm-nginx-f9b5b77fc-ss4wt   0/1     Running   0          3s

3.4 定制参数部署应用

直接使用 helm install 命令安装的 chart包,通过--set进行参数传递,但是如果有很多参数需要传递调整,使用--set参数可能会变得比较复杂和不易管理。这时可以选择通过一个特定的values.yaml配置文件来传递参数。
1、准备values.yaml值参数文件

~]# cat values.yaml
mysqlDatabase: helm
persistence:
    enabled: false    #没有存储卷情况下,改为false
mysqlRootPassword: xxxx

2.使用-f values.yaml安装应用并覆盖参数

helm install --generate-name azure/mysql -f values.yaml

WARNING: This chart is deprecated
NAME: mysql-1701679772
LAST DEPLOYED: Mon Dec  4 16:49:33 2023
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
MySQL can be accessed via port 3306 on the following DNS name from within your cluster:
mysql-1701679772.default.svc.cluster.local

To get your root password run:

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

To connect to your database:
  1. 查看该release传递的参数
[root@MF-01 mysql]# helm get values mysql-1701679772 
USER-SUPPLIED VALUES:
persistence:
  accessMode: ReadWriteOnce
  annotations: {}
  enabled: false
mysqlRootPassword: xxxxx

4.查看部署的相关资源

[root@MF-01 mysql]# kubectl get all -l release=mysql-1701679772
NAME                                    READY   STATUS    RESTARTS   AGE
pod/mysql-1701679772-6cdb4d5c54-qxjws   1/1     Running   0          10m

NAME                       TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
service/mysql-1701679772   ClusterIP   10.0.0.53    <none>        3306/TCP   10m

NAME                               READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/mysql-1701679772   1/1     1            1           10m

NAME                                          DESIRED   CURRENT   READY   AGE
replicaset.apps/mysql-1701679772-6cdb4d5c54   1         1         1       10m

5.验证

~]# docker run -it --rm mysql:5.7 bash
bash-4.2# exit
exit
[root@MF-01 mysql]# docker run -it --rm mysql:5.7 sh
sh-4.2# mysql -h 10.244.76.212 -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.7.30 MySQL Community Server (GPL)

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> exit
Bye

3.5 chart应用升级

Helm 可以使用 helm upgrade命令来进行操作,更新的情况同创包括两种:

  • 1、当需要更新或修改已有的release的配置时;
  • 2、当应用的chart包有新的版本需要更新时
    Helm 升级,会尽量将应用的影响降到最低。它只会对发生改动的部分进行更新,而不是完全替换整个应用,这及时所讲的“最小侵入性”升级。
    1、升级前先查看当前版本
bash-4.2# mysql -h 10.0.0.53 -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 302
Server version: 5.7.30 MySQL Community Server (GPL)

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.30    |
+-----------+
1 row in set (0.00 sec)

[root@MF-01 mysql]# kubectl get deployments.apps mysql-1701679772 -o wide
NAME               READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS         IMAGES         SELECTOR
mysql-1701679772   1/1     1            1           27m   mysql-1701679772   mysql:5.7.30   app=mysql-1701679772,release=mysql-1701679772

2.修改value.yaml值文件(更新镜像的tag),然后进行升级

##
image: "mysql"
imageTag: "5.7.31"

3.执行升级操作

helm upgrade mysql-1701679772 -f values.yaml azure/mysql

升级输出的结果

[root@MF-01 mysql]# helm upgrade mysql-1701679772 -f values.yaml azure/mysql
WARNING: This chart is deprecated
Release "mysql-1701679772" has been upgraded. Happy Helming!
NAME: mysql-1701679772
LAST DEPLOYED: Mon Dec  4 17:19:07 2023
NAMESPACE: default
STATUS: deployed
REVISION: 2
NOTES:
MySQL can be accessed via port 3306 on the following DNS name from within your cluster:
mysql-1701679772.default.svc.cluster.local

4.确认镜像版本是否升级成功

[root@MF-01 mysql]# kubectl get deployment mysql-1701679772 -o wide
NAME               READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS         IMAGES         SELECTOR
mysql-1701679772   1/1     1            1           34m   mysql-1701679772   mysql:5.7.31   app=mysql-1701679772,release=mysql-1701679772

数据库验证

[root@MF-01 mysql]# docker run -it --rm mysql:5.7 bash
bash-4.2# mysql -h 10.0.0.53 -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 5.7.31 MySQL Community Server (GPL)

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.31    |
+-----------+
1 row in set (0.01 sec)

3.6 chart应用回滚

1.查看此前myql的charts部署记录

[root@MF-01 mysql]# helm history mysql-1701679772 
REVISION	UPDATED                 	STATUS    	CHART      	APP VERSION	DESCRIPTION     
1       	Mon Dec  4 16:49:33 2023	superseded	mysql-1.6.9	5.7.30     	Install complete
2       	Mon Dec  4 17:19:07 2023	deployed  	mysql-1.6.9	5.7.30     	Upgrade complete

2.将mysql的chart回退到REVISON版本1

[root@MF-01 mysql]# helm  rollback mysql-1701679772 1
Rollback was a success! Happy Helming!

3.验证回滚

[root@MF-01 mysql]# helm history mysql-1701679772 
REVISION	UPDATED                 	STATUS    	CHART      	APP VERSION	DESCRIPTION     
1       	Mon Dec  4 16:49:33 2023	superseded	mysql-1.6.9	5.7.30     	Install complete
2       	Mon Dec  4 17:19:07 2023	superseded	mysql-1.6.9	5.7.30     	Upgrade complete
3       	Mon Dec  4 17:27:23 2023	deployed  	mysql-1.6.9	5.7.30     	Rollback to 1   
  1. 查看应用的镜像是否回退
[root@MF-01 mysql]# kubectl get deployments.apps mysql-1701679772 -o wide
NAME               READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS         IMAGES         SELECTOR
mysql-1701679772   1/1     1            1           39m   mysql-1701679772   mysql:5.7.30   app=mysql-1701679772,release=mysql-1701679772

4.chart基本介绍

4.1 什么是chart

Helm 部署的应用都是以“chart”包的形式存在的。每个chart包都包含了应用所需要的清单文件(Deployment、Servcie、Ingress、ConfigMap等)。这些清单文件被保存为模板文件。当我们部署应用时,这些模板文件会被转化为Kubernetes资源清单文件。

4.2 chart目录结构

helm chart的目录结构是预先定义好的,而每个chart都应该至少包含chart.yaml文件和templates目录

[root@MF-01 mysql]# tree 
.
├── Charts                #其他chart的依赖,存储于此目录下
├── Chart.yaml            #包含了关于这个chart的基本信息,比如chart名称、chart版本、描述等       
├── README.md
├── templates             #这个目录包含了模板文件,当与 values文件结合是,将会生成有效的`kubernetes`清单文件
│   ├── configurationFiles-configmap.yaml
│   ├── deployment.yaml
│   ├── _helpers.tpl      #公共模板文件,用于定义chart中重复使用的模板函数和变量,以便charts在其他模板文件中使用,减少重复的代码并提高代码的可维护性
│   ├── initializationFiles-configmap.yaml
│   ├── NOTES.txt
│   ├── pvc.yaml
│   ├── secrets.yaml
│   ├── serviceaccount.yaml
│   ├── servicemonitor.yaml
│   ├── svc.yaml
│   └── tests
│       ├── test-configmap.yaml
│       └── test.yaml
└── values.yaml          #为模板提供对应的配置信息

4.3 chart.yaml文件

对于chart包来说 chart.yaml这个文件是必须的,它包含下面的这些字段:

apiVersion: v1          # chart API 版本(必须)
name: mysql             # chart包名称
version: 1.6.9          # chart包的版本,最终chart包的名称为 mysql-1.6.9.tgz   
appVersion: 5.7.30      # 镜像的tag
deprecated: true        # chart描述信息
description: DEPRECATED - Fast, reliable, scalable, and easy to use open-source relational
  database system.
home: https://www.mysql.com/    # 当前项目的url
icon: https://www.mysql.com/common/logos/logo-mysql-170x115.png   # 当前应用的logo

keywords:
- mysql
- database
- sql

sources:
- https://github.com/kubernetes/charts
- https://github.com/docker-library/mysql

五. 创建不可配置Chart

5.1 创建Chart

  1. 创建chart目录结构
mkdir nginx/templates -p
  1. 编写Chart.yaml文件
cat nginx/Chart.yaml
apiVersion: v2
name: nginx-app
version: 1.0.0
appVersion: "1.20"
description: A Helm Chart Nginx
  1. templates目标中新建一个deployment.yaml清单文件
cat nginx/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deploy-helm
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: nginx
        image: nginx:1.20
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80 
  1. templates目标中新建一个service.yaml清单文件
cat nginx/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx-svc-helm
spec:
  selector:
    app: web
  ports:
  - port: 80
    targetPort: 80

5.2 安装Chart

  1. 部署编写Chart应用
helm install --generate-name ./nginx

NAME: app-1691466629
LAST DEPLOYED: Tue Aug 8 11:50:29 2023
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None

  1. 检查Chart应用是否部署成功
[root@k8s-master01 helm]# helm ls
NAME             NAMESPACE REVISION   UPDATED                              STATUS CHART APP VERSION
nginx-1691467490 default      1     2023-08-08 12:04:50.70262335 +0800 CST deployed nginx-app-1.0.0 1.20

3.检查Pod和对应的service

[root@k8s-master01 helm]# kubectl get pod,service |grep nginx
pod/nginx-dploy-helm-5986d85b8-cz92q 1/1 Running 0        102s
service/nginx-svc-helm ClusterIP 10.96.8.38 <none> 80/TCP 102s

4.测试是否能正常访问到对应的应用

[root@k8s-master01 helm]# curl -I 10.96.8.38
HTTP/1.1 200 OK
Server: nginx/1.20.2
Date: Tue, 08 Aug 2023 04:06:55 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 16 Nov 2021 14:44:02 GMT
Connection: keep-alive
ETag: "6193c3b2-264"
Accept-Ranges: bytes

6. 创建可配置的Chart

6.1 修改chart

  1. 为之前的chart添加values.yaml文件,然后定义对应的属性
cat nginx/values.yaml
replicas: 2
labels: web
image:
  name: uhub.service.ucloud.cn/oldxu/nginx
  tags: "1.20"
  pullpolicy: {}
container_port: 80
  1. 修改deployment.yaml清单文件,然后引用values的配置
[root@k8s-master01 helm]# cat nginx/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deploy-helm
spec:
  replicas: {{ .Values.replicas }}
  selector:
    matchLabels:
      app: {{ .Values.labels }}
  template:
    metadata:
      labels:
        app: {{ .Values.labels }}
    spec:
      containers:
      - name: nginx
        image: {{ .Values.image.name }}:{{ .Values.image.tags }}
        imagePullPolicy: {{ .Values.image.pullpolicy | default "IfNotPresent" }} # 如果image.pullpolicy为空,则默认给定⼀个IfNotPresent
        ports:
        - containerPort: {{ .Values.container_port }}
  1. 通过helm template命令,将模板和配置文件结合起来渲染成真正的部署清单
---
# Source: nginx-app/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx-svc-helm
spec:
  selector:
    app: web
  ports:
  - port: 80
    targetPort: 80
---
# Source: nginx-app/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-dploy-helm
spec:
  replicas: 2
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: nginx
        image: uhub.service.ucloud.cn/oldxu/nginx:1.20
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80

6.2 测试chart

方式1: 直接应用当前chart

[root@k8s-master01 helm]# helm install --generate-name ./nginx/
NAME: nginx-1691479494
LAST DEPLOYED: Tue Aug 8 15:24:54 2023
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None

⽅式2:使⽤ --set 选项,在命令⾏为 deployment.yaml 赋值,使⽤ --dryrun 选项来打印出⽣成的清单⽂件内容,但是不执⾏部署

helm install nginx-demo \
  --set replicas=5 \
  --set image.tags=1.18 \
  ./nginx/ \
  --dry-run -n ops
---
# Source: nginx-app/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx-svc-helm
spec:
  selector:
    app: web
  ports:
  - port: 80
    targetPort: 80
---
# Source: nginx-app/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-dploy-helm
spec:
  replicas: 5
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: nginx
        image: uhub.service.ucloud.cn/oldxu/nginx:1.18
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80

6.3 打包chart

  1. 将chart打包为一个压缩包文件,然后安装
[root@k8s-master01 helm]# cd nginx/
[root@k8s-master01 nginx]# helm package .
Successfully packaged chart and saved it to: /root/helm/nginx/nginx-app-1.0.0.tgz

2.基于chart包进行应用的部署

[root@k8s-master01 nginx]# helm install nginx-demo2 nginx-app-1.0.0.tgz