[REVISION] [flags]`
> helm rollback mysql-1605192239 1

> helm ls


**rollback后,又回到deployed状态**
## 定制参数部署应用
==上面我们都是直接使用的 `helm install` 命令安装的 chart 包,这种情况下只会使用 chart 的默认配置选项,但是更多的时候,是各种各样的需求,索引我们希望根据自己的需求来定制 chart 包的配置参数。
我们可以使用 `helm show values` 命令来查看一个 chart 包的所有可配置的参数选项:==
> helm show values stable/mysql

**上面我们看到的所有参数都是可以用自己的数据来覆盖的,可以在安装的时候通过 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

> 指定release名字为mysql
### 3, 查看覆盖的参数
> helm get values mysql
USER-SUPPLIED VALUES:
### 4, 查看部署的相关资源
> kubectl get all -l release=mysql

### 5, 查看pod的IP
> kubectl get pod -o wide -l release=mysql

**得到pod的IP为172.20.166.182**
### 6, 安装mysql客户端并连接测试
> yum install mariadb -y
> mysql -h 172.20.166.182 -u daniel -p123 -e ‘show databases‘

> mysql -h 10.68.205.204 -u daniel -p123 -e ‘show databases‘

### 7, mysql管理员连接测试
> kubectl get secret --namespace default mysql -o jsonpath="{.data.mysql-root-password}" | base64 --decode; echo
55xYBxBiCq
> mysql -h 172.20.166.182 -u root -pctI3VOxkeH -e ‘show databases‘

[root@master ~]# mysql -h 10.68.205.204 -u root -pctI3VOxkeH -e ‘show databases‘

## 升级和回滚
> 当新版本的 chart 包发布的时候,或者当你要更改 release 的配置的时候,你可以使用 `helm upgrade` 命令来操作。升级需要一个现有的 release,并根据提供的信息对其进行升级。因为 Kubernetes charts 可能很大而且很复杂,Helm 会尝试以最小的侵入性进行升级,它只会更新自上一版本以来发生的变化.
### 1, 升级前查看版本
> mysql -h 172.20.166.182 -u root -pctI3VOxkeH -e ‘select version()‘

> kubectl get deployment mysql -o wide

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

**可以看到images升级为5.7.31**
> kubectl get pods -o wide

>mysql -h 172.20.166.183 -u daniel -p456 -e ‘select version()‘ # 密码升级为456

**版本升级为5.7.31**
### 4, 回滚
> helm history mysql

> helm rollback mysql 1
### 5, 验证
> kubectl get deployment mysql -o wide

**image回到5.7.30**
> helm history mysql

## 更多安装方式
**和yum命令类似**
- chart 仓库
- 本地 chart 压缩包
> helm pull stable/mysql
> ls mysql-1.6.8.tgz

> helm install mysql2 mysql-1.6.8.tgz

- 在线的 URL(helm install fool https://example.com/charts/foo-1.2.3.tgz)
# 四、自定义chart
## Chart 目录结构

> helm pull stable/mysql
> tar xf mysql-1.6.8.tgz
> ls mysql
Chart.yaml README.md templates values.yaml
> ls mysql/templates/ -l

| 文件 | 说明 |
| ----------------- | ------------------------------------------------------------ |
| 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

### 5, 查看与验证
> kubectl get pod,services

> curl 10.68.189.144

### 6, 删除
> helm delete nginx-1623283625

## 创建可配置的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

> 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

### 查看部署结果
> helm ls |grep helm-nginx

> kubectl get pod,svc |grep helm

### 打包
> helm package . #将chart打包成一个压缩文件。

> ls
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.tgzK8S helm3
原文:https://blog.51cto.com/u_13760351/2898442