# Helm3部署
Helm是一个Kubernetes的包管理工具，就像Linux下的包管理器，如yum/apt等，可以很方便地将之前打包好的yaml文件部署到kubernetes上，而Helm3是Helm的一个常用且稳定的版本。
部署服务提供了使用Helm部署、升级kubernetes集群的功能。
1. 参考[新建应用](https://support.huaweicloud.com/usermanual-deployman/deployman_hlp_00004.html#deployman_hlp_00004__section1514163217456)，完成应用创建。
2. 根据业务场景，在"部署步骤"页面，添加该部署步骤。
3. 对步骤进行配置，详细参数配置如下所示。 
   表1参数说明 
   | 参数项               | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   |:---|:---|
   | 步骤显示名称         | 必填。步骤添加后在部署步骤显示的名称。仅支持汉字、英文字母、数字、空格、或-_,;:./()（）符号，其中空格不可在名称开头或结尾使用，长度为1-128。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   | 集群类型            | 默认，自定义集群。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
   | Kubernetes接入点 | 必选。可选用CCE集群或您自己的Kubernetes集群： - 华为云CCE集群 1. 创建CCE集群。  2. 创建命名空间。  3. 选择需要部署的集群。    - 您自己的Kubernetes集群 [配置kubeconfig文件](https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/)，选择需要部署的集群。    |
   | 请选择Helm版本       | 必选。请选择Helm版本，默认为"helm-3.4.1"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   | Helm命令         | 必填。目前提供 install、upgrade、uninstall三种。 当执行upgrade时，若发布名称不存在，可设置自动改为install执行。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
   | 命名空间名称           | 必填。填写命名空间名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
   | 发布名称             | 必填。自定义发布名称，对同一个发布名称可做upgrade操作。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   | Chart包来源       | 必选。选择需要安装的Chart包来源，目前支持"**制品仓库** "和"**代码仓库**"。 当选择"代码仓库"，则需要指定仓库和分支。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
   | 选择Chart包      | Chart包来源选择"制品仓库"时，此项必选。 填写具有Chart文件结构的目录或Gzip格式压缩包。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
   | Chart包路径      | Chart包来源选择"代码仓库"时，需填写此项。 填写具有Chart文件结构的目录或Gzip格式压缩包的路径。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   | Values文件路径    | 当Chart包来源选择"制品仓库"时，这里可以选择来自制品仓库的Values文件和包含Values文件的文件夹。 当Chart包来源选择"代码仓库"时，这里可以通过切换"Values来源"，来填写对应的Values文件或文件夹路径。 例如指定'Myvalues.yaml'将在helm命令参数中添加' -f Myvalues.yaml'。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
   | 指定Values文件       | 若Values文件路径为文件夹，可以通过填写文件的相对路径来指定具体的Values文件。多个文件路径通过英文逗号分隔，例如：'values1.yaml,values2.yaml'                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   | 设置Values         | 在命令行上设置值，若指定'key1=val1,key2=val2'(多个值用逗号分隔)，将在helm命令参数中添加' --set key1=val1,key2=val2'。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
   | Helm命令参数      | 在helm命令参数中添加其它内容。 可参考： [helm install](https://helm.sh/zh/docs/helm/helm_install/)、[helm upgrade](https://helm.sh/zh/docs/helm/helm_upgrade/)、[helm uninstall](https://helm.sh/zh/docs/helm/helm_uninstall/)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
   | 控制选项           | 当前步骤部署失败后，应用是否继续部署后续的步骤。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
      
   
   
#### Helm3部署示例的环境准备
本节作为后续三个示例的环境准备，以环境准备中的chart目录为例，将使用如下模板，对CCE集群进行部署，在代码托管代码仓中，创建如下目录。
![](https://support.huaweicloud.com/usermanual-deployman/zh-cn_image_0000001605069214.png)
configmap.yaml**部分片段：**
```
metadata:
  name: {{ .Values.configmapname }}
```
deployment.yaml**部分片段**：
```
spec:
  template:
    spec:
      containers:
        - image: '{{ .Values.imagename }}:{{ .Values.imagetag }}'
```
values.yaml**部分片段**：
```
configmapname: valuesfromfile
imagename: httpd
imagetag: latest
```
{{ .Values.xxxx }} 对应Chart内values.yaml定义的变量。
以下三个示例，是在本节基础上进行的。参考：[Values文件使用说明](https://helm.sh/zh/docs/chart_template_guide/values_files/)。
1. **示例1：使用Chart包或Chart文件结构目录部署**
   如果Chart中已有缺省values文件，则不需要指定制品仓库values文件，可直接部署。
   其部署结果为：
   ![](https://support.huaweicloud.com/usermanual-deployman/zh-cn_image_0000001506956917.png "点击放大")
   对应CCE生成的configMap为：
   ![](https://support.huaweicloud.com/usermanual-deployman/zh-cn_image_0000001507276837.png "点击放大")
   对应CCE生成的deployment为：
   ![](https://support.huaweicloud.com/usermanual-deployman/zh-cn_image_0000001507197141.png "点击放大")
   
2. **示例2：通过指定制品仓库中的Values文件部署**
   本示例将演示，指定制品仓库中的Values文件进行部署。外部values文件中定义的值将会覆盖Chart中values文件定义值。
   外部Values的片段，本示例命名为values123.yaml：
   ```
   configmapname: valuesfile-releasenman
   imagename: nginx
   imagetag: stable
   ```
   如下图，在"选择Values文件"中，选择制品仓库中的Values文件：
   ![](https://support.huaweicloud.com/usermanual-deployman/zh-cn_image_0000001457037424.png "点击放大")
   其部署结果为：
   ![](https://support.huaweicloud.com/usermanual-deployman/zh-cn_image_0000001507037897.png "点击放大")
   对应CCE控制台的configMap为：
   ![](https://support.huaweicloud.com/usermanual-deployman/zh-cn_image_0000001457517044.png "点击放大")
   对应CCE控制台的deployment为：
   ![](https://support.huaweicloud.com/usermanual-deployman/zh-cn_image_0000001545979005.png "点击放大")
   
3. **示例3：通过设置Values值进行部署**
   当设置了Values的值，其优先级会是最高的，会覆盖Chart内values文件设置值以及外部values文件内的设置值。
   下面将以设置镜像版本的操作为例：
   ![](https://support.huaweicloud.com/usermanual-deployman/zh-cn_image_0000001999512221.png "点击放大")
   Chart内values文件片段：
   ```
   imagetag: latest
   ```
   制品仓库values文件片段：
   ```
   imagetag: stable
   ```
   在设置values，填入：
   ```
   imagetag=perl
   ```
   其部署结果为：
   ![](https://support.huaweicloud.com/usermanual-deployman/zh-cn_image_0000001962951380.png "点击放大")
   对应CCE控制台的deployment为：
   ![](https://support.huaweicloud.com/usermanual-deployman/zh-cn_image_0000001999471625.png "点击放大")
   
 
