K8S helm3
# 一、helm介绍
## 为什么要用helm?
* 一个复杂应用中涉及到多个YAML文件,如: deployment,service,configmap,pv,pvc等。
* 如果需要更新或回滚,那么要修改的YAML文件很多,管理起来比较痛苦。
> 所以,我们需要将这些YAML文件作为一个**整体**管理,并高效复用。
## 什么是helm?
> 参考官方: https://helm.sh/
![](http://www.icode9.com/i/li/?n=4&i=images/blog/202106/06/359a86860b9b63261b4a8388d3613be6.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
> * Helm(舵柄; 舵轮)是一个Kubernetes的包管理工具,就像Linux下的包管理器,如yum/apt等。
>
> * 可以很方便的将之前打包好的yaml文件部署到kubernetes上。
>
> * 对于应用发布者而言,可以通过Helm打包应用,管理应用依赖关系,管理应用版本并发布应用到软件仓库。
>
> * 对于使用者而言,使用Helm后不用需要了解Kubernetes的Yaml语法并编写应用部署文件,可以通过Helm下载并在kubernetes上安装需要的应用。
>
> * 除此以外,Helm还提供了kubernetes上的软件部署,删除,升级,回滚应用的强大功能。
## 基础概念
> **helm:**一个命令行客户端工具,主要用于Kubernetes应用chart的创建、打包、发布和管理。
> **Chart:**Helm 的软件包(项目资源清单yaml文件的集合),采用 TAR 格式,类似rpm包。
> **Release:**基于Chart的部署实例,一个 chart 被 Helm 运行后将会生成对应的一个 release
> **Tiller:** Tiller是Helm的服务端,部署在Kubernetes集群中, 降低了其安全性和可用性。 **helm3中已经移除了该组件**,直接采用Kubernetes CRD 资源来进行管理。
# 二、helm部署
> 下载地址:https://github.com/kubernetes/helm/releases
> wget https://get.helm.sh/helm-v3.4.1-linux-amd64.tar.gz
> tar xvf helm-v3.4.1-linux-amd64.tar.gz
> mv linux-amd64/helm /bin/helm
> helm version
![](http://www.icode9.com/i/li/?n=4&i=images/blog/202106/07/ef8f23525b0a1000a92f8d07669b7477.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
# 三、Helm基础使用
## 添加仓库
>helm repo list #查看
![](http://www.icode9.com/i/li/?n=4&i=images/blog/202106/07/6260703700c1f6751ca5e1ef824a1bd5.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
### 添加新的仓库地址
> 阿里源,helm3使用不了,有坑(未更新)
>helm repo add stable https://kubernetes.oss-cn-shenzhen.aliyuncs.com/charts
### 微软源(目前建议使用)
> helm repo add stable
### 更新仓库
> helm repo update
![](http://www.icode9.com/i/li/?n=4&i=images/blog/202106/07/e55e7617f5d3d1a2b279694694b6e9f0.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
再查看
> helm repo list
![](http://www.icode9.com/i/li/?n=4&i=images/blog/202106/07/938a548fd4c4ab89f3813a03d4b1f96c.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
补充: 可用`helm repo remove stable`删除仓库。
## 查看charts
使用`helm search repo 关键字`可以查看相关charts
> helm search repo stable
![](http://www.icode9.com/i/li/?n=4&i=images/blog/202106/07/1ccdf500e9ba434f6c4b605960977915.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
> helm search repo nginx
![](http://www.icode9.com/i/li/?n=4&i=images/blog/202106/07/574b3a300362edd9382e1b450fb81e77.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
> helm search repo tomcat
![](http://www.icode9.com/i/li/?n=4&i=images/blog/202106/07/e8b99d0cbbf18cf3ec963e851235e6d4.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
## 下载chart资源
> helm pull stable/mysql # 默认下载最新版
> helm pull stable/mysql --version 1.6.8 # 指定下载某一个版本
> tar xf mysql-1.6.8.tgz
> ls mysql
![](http://www.icode9.com/i/li/?n=4&i=images/blog/202106/07/1b70637ba3b2c3c1355cfc268493fe8e.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
## 部署应用
比如我们现在安装一个 `mysql` 应用:
> helm install stable/mysql --generate-name
![](http://www.icode9.com/i/li/?n=4&i=images/blog/202106/07/c62dcb834b468042a4fce4225dcd8a83.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
--generate-name会产生随机名称
也可以通过下载到本地的chart包进行安装
> helm install mysql-1.6.8.tgz --generate-name
> 一个 chart 包是可以多次安装到同一个集群中的,每次安装都会产生一个release, 每个release都可以独立管理和升级。
> helm install stable/mysql --generate-name
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210609/1623196664205997.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
> helm ls
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210609/1623196684401094.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
## 查看chart资源
> kubectl get all -l release=mysql-1605192239
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210609/1623196738306715.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
> 因为存储卷问题启不来,先忽略
**我们也可以 `helm show chart` 命令来了解 MySQL 这个 chart 包的一些特性**
> helm show chart stable/mysql
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210609/1623196769564832.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
**如果想要了解更多信息,可以用 `helm show all` 命令**
> helm show all stable/mysql
## 删除charts
> 如果需要删除这个 release,也很简单,只需要使用 `helm uninstall`或`helm delete` 命令即可
> helm uninstall mysql-1623196571
>`uninstall` 命令会从 Kubernetes 中删除 release,也会删除与 release 相关的所有 Kubernetes 资源以及 release 历史记录。
> helm ls
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210609/1623197035607976.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
> 在删除的时候使用 `--keep-history` 参数,则会保留 release 的历史记录,该 release 的状态就是 `UNINSTALLED`
[root@master ~]# helm uninstall mysql-1-1623196546 --keep-history
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210609/1623197123366707.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
> helm ls -a
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210609/1623197252123823.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
> 状态为uninstalled
**审查历史时甚至可以取消删除`release`。**
`Usage: helm rollback [REVISION] [flags]`
> helm rollback mysql-1605192239 1
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210609/1623197349481404.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
> helm ls
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210609/1623197330975802.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210609/1623197373649411.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
**rollback后,又回到deployed状态**
## 定制参数部署应用
==上面我们都是直接使用的 `helm install` 命令安装的 chart 包,这种情况下只会使用 chart 的默认配置选项,但是更多的时候,是各种各样的需求,索引我们希望根据自己的需求来定制 chart 包的配置参数。
我们可以使用 `helm show values` 命令来查看一个 chart 包的所有可配置的参数选项:==
> helm show values stable/mysql
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210609/1623197409422632.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
**上面我们看到的所有参数都是可以用自己的数据来覆盖的,可以在安装的时候通过 YAML 格式的文件来传递这些参数**
### 1,准备参数文件
> vim mysql-config.yml
```
mysqlUser: daniel
mysqlPassword: "123" # 密码纯数字需要引起来,否则报类型错误
mysqlDatabase: helm
persistence:
enabled: false # 前面就是因为这里为True,启不来pod。现在没有存储卷,改为false
```
### 2, 安装应用并覆盖参数
> helm install mysql -f mysql-config.yml stable/mysql
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210609/1623197530782765.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
> 指定release名字为mysql
### 3, 查看覆盖的参数
> helm get values mysql
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210609/1623197577120170.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)USER-SUPPLIED VALUES:
### 4, 查看部署的相关资源
> kubectl get all -l release=mysql
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210609/1623197603370917.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
### 5, 查看pod的IP
> kubectl get pod -o wide -l release=mysql
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210609/1623197625911243.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
**得到pod的IP为172.20.166.182**
### 6, 安装mysql客户端并连接测试
> yum install mariadb -y
> mysql -h 172.20.166.182 -u daniel -p123 -e 'show databases'
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210609/1623197813808449.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
> mysql -h 10.68.205.204 -u daniel -p123 -e 'show databases'
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210609/1623197885982763.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
### 7, mysql管理员连接测试
> kubectl get secret --namespace default mysql -o jsonpath="{.data.mysql-root-password}" | base64 --decode; echo
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210609/1623198005844958.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)55xYBxBiCq
> mysql -h 172.20.166.182 -u root -pctI3VOxkeH -e 'show databases'
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210609/1623198046792159.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
[root@master ~]# mysql -h 10.68.205.204 -u root -pctI3VOxkeH -e 'show databases'
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210609/1623198084953770.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
## 升级和回滚
> 当新版本的 chart 包发布的时候,或者当你要更改 release 的配置的时候,你可以使用 `helm upgrade` 命令来操作。升级需要一个现有的 release,并根据提供的信息对其进行升级。因为 Kubernetes charts 可能很大而且很复杂,Helm 会尝试以最小的侵入性进行升级,它只会更新自上一版本以来发生的变化.
### 1, 升级前查看版本
> mysql -h 172.20.166.182 -u root -pctI3VOxkeH -e 'select version()'
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210610/1623281862438387.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
> kubectl get deployment mysql -o wide
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210610/1623282124131336.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
images版本为5.7.30
### 2,修改配置并升级
> vim mysql-config.yml
```
mysqlUser:
daniel
mysqlPassword: "456" # 密码修改为456
mysqlDatabase: helm
persistence:
enabled: false
```
**升级并且加一个`--set imageTag=5.7.31`参数设置为5.7.31版本**
> helm upgrade mysql -f mysql-config.yml --set imageTag=5.7.31 stable/mysql
### 3, 升级后确认版本
> kubectl get deployment mysql -o wide
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210610/1623282652363025.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
**可以看到images升级为5.7.31**
> kubectl get pods -o wide
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210610/1623282802192686.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
>mysql -h 172.20.166.183 -u daniel -p456 -e 'select version()' # 密码升级为456
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210610/1623282968266345.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
**版本升级为5.7.31**
### 4, 回滚
> helm history mysql
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210610/1623283040409835.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
> helm rollback mysql 1
### 5, 验证
> kubectl get deployment mysql -o wide
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210610/1623283096285914.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
**image回到5.7.30**
> helm history mysql
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210610/1623283156996320.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
## 更多安装方式
**和yum命令类似**
- chart 仓库
- 本地 chart 压缩包
> helm pull stable/mysql
> ls mysql-1.6.8.tgz
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210610/1623283290964833.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
> helm install mysql2 mysql-1.6.8.tgz
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210610/1623283341787004.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
- 在线的 URL(helm install fool https://example.com/charts/foo-1.2.3.tgz)
# 四、自定义chart
## Chart 目录结构
![](http://www.icode9.com/i/li/?n=4&i=images/blog/202106/06/7fcf79ae9e859c550783b2a1aab6858e.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
> helm pull stable/mysql
> tar xf mysql-1.6.8.tgz
> ls mysql
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210610/1623283466964194.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)Chart.yaml README.md templates values.yaml
> ls mysql/templates/ -l
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210610/1623283502862806.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
| 文件 | 说明 |
| ----------------- | ------------------------------------------------------------ |
| Chart.yaml | 用于描述Chart的基本信息; `helm show chart stable/mysql`命令查看的内容就是此文件内容 |
| values.yaml | Chart的默认配置文件; `helm show values stable/mysql`命令查看的内容就是此文件内容 |
| README.md | [可选] 当前Chart的介绍 |
| LICENS | [可选] 协议 |
| requirements.yaml | [可选] 用于存放当前Chart依赖的其它Chart的说明文件 |
| charts/ | [可选]: 该目录中放置当前Chart依赖的其它Chart |
| templates/ | [可选]: 部署文件模版目录 |
## 创建不可配置的chart
### 1, 创建目录与chart.yaml
> mkdir -p /helm/nginx/templates
> cd /helm/nginx
> vim Chart.yaml
```
name: helm-nginx
version: 1.0.0
```
### 2, 创建deployment.yaml
> vim templates/deployment.yaml
```
apiVersion: apps/v1
kind: Deployment
metadata:
name: helm-nginx
spec:
replicas: 1
selector:
matchLabels:
app: helm-nginx
template:
metadata:
labels:
app: helm-nginx
spec:
containers:
- name: c1
image: nginx:1.15-alpine
imagePullPolicy: IfNotPresent
```
### 3, 创建service.yaml
> vim templates/service.yaml
```
apiVersion: v1
kind: Service
metadata:
name: helm-nginx
spec:
selector:
app: helm-nginx
ports:
- port: 80
targetPort: 80
protocol: TCP
```
### 4, 使用chart安装应用
> helm install /helm/nginx --generate-name
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210610/1623283650547572.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
### 5, 查看与验证
> kubectl get pod,services
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210610/1623283720364320.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210610/1623283679384345.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
> curl 10.68.189.144
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210610/1623283745746035.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
### 6, 删除
> helm delete nginx-1623283625
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210610/1623283885467438.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
## 创建可配置的Release
### 官方的预定义变量
- Release.Name:发布的名称(不是chart)
- Release.Time:chart发布上次更新的时间。这将匹配Last ReleasedRelease对象上的时间。
- Release.Namespace:chart发布到的名称空间。
- Release.Service:进行发布的服务。
- Release.IsUpgrade:如果当前操作是升级或回滚,则设置为true。
- Release.IsInstall:如果当前操作是安装,则设置为true。
- Release.Revision:修订号。它从1开始,每个都递增helm upgrade。
- Chart:内容Chart.yaml。因此,chart版本可以Chart.Version和维护者一样获得 Chart.Maintainers。
- Files:类似于chart的对象,包含chart中的所有非特殊文件。这不会授予您访问模板的权限,但可以访问存在的其他文件(除非使用它们除外.helmignore)。可以使用{{index .Files "file.name"}}或使用{{.Files.Get name}}或 {{.Files.GetStringname}}函数访问文件。您也可以访问该文件的内容,[]byte使用{{.Files.GetBytes}}
- Capabilities:类似于地图的对象,包含有关Kubernetes({{.Capabilities.KubeVersion}},Tiller({{.Capabilities.TillerVersion}}和支持的Kubernetes API)版本({{.Capabilities.APIVersions.Has "batch/v1")的版本的信息
### 新增values.yaml文件
> pwd
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210611/1623417708231451.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
> vim values.yaml
```
image:
repository: nginx
tag: '1.15-alpine'
replicas: 2
```
### 配置deploy引用values的值
> vim templates/deployment.yaml
```
apiVersion: apps/v1
kind: Deployment
metadata:
name: helm-nginx
spec:
replicas: {{ .Values.replicas }}
selector:
matchLabels:
app: helm-nginx
template:
metadata:
labels:
app: helm-nginx
spec:
containers:
- name: helm-nginx
image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
imagePullPolicy: IfNotPresent
```
### 测试
>使用`--dry-run`选项来打印出生成的清单文件内容,而不执行部署
> helm install helm-nginx --set replicas='3' /helm/nginx/ --dry-run
```
NAME: helm-nginx
LAST DEPLOYED: Fri Jun 11 21:23:20 2021
NAMESPACE: default
STATUS: pending-install #状态表示是测试,不是真的部署了
REVISION: 1
TEST SUITE: None
HOOKS:
MANIFEST:
---
#Source: helm-nginx/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: helm-nginx
spec:
selector:
app: helm-nginx
ports:
- port: 80
targetPort: 80
protocol: TCP
---
#Source: helm-nginx/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: helm-nginx
spec:
replicas: 3 #副本数量3传参成功
selector:
matchLabels:
app: helm-nginx
template:
metadata:
labels:
app: helm-nginx
spec:
containers:
- name: helm-nginx
image: nginx:1.15-alpine #镜像名:TAG 传参成功
imagePullPolicy: IfNotPresent
```
### 部署
> helm install helm-nginx --set replicas='3' /helm/nginx/
NAME: helm-nginx
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210611/1623418140418674.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
### 查看部署结果
> helm ls |grep helm-nginx
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210611/1623418207379329.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
> kubectl get pod,svc |grep helm
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210611/1623418352291810.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
### 打包
> helm package . #将chart打包成一个压缩文件。
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210611/1623418386209081.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
> ls
![image.png](http://www.icode9.com/i/li/?n=2&i=images/20210611/1623418407883584.png?,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)Chart.yaml helm-nginx-1.0.0.tgz templates values.yaml
**打包出mychart-0.1.0.tgz文件**
### 安装
> helm install helm-nginx2 /helm/nginx/helm-nginx-1.0.0.tgz