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
上一篇:Kubernetes 1.20.5 helm 安装jenkins


下一篇:浅谈一家全球电商在Kubernetes环境上的CI/CD落地与实践