4000-520-616
欢迎来到免疫在线!(蚂蚁淘生物旗下平台)  请登录 |  免费注册 |  询价篮
主营:原厂直采,平行进口,授权代理(蚂蚁淘为您服务)
咨询热线电话
4000-520-616
当前位置: 首页 > 新闻动态 >
新闻详情
Helm简介_迷途的攻城狮-CSDN博客_helm是什么
来自 : CSDN技术社区 发布时间:2021-03-24
[root k8s-master charts]# helm install --debug --dry-run mychart-3/[debug] Created tunnel using local port: 40227 [debug] SERVER: 127.0.0.1:40227 [debug] Original chart version: [debug] CHART PATH: /root/charts/mychart-3NAME: maudlin-yakREVISION: 1RELEASED: Mon Mar 12 17:28:58 2018CHART: mychart-3-0.1.0USER-SUPPLIED VALUES:COMPUTED VALUES:favorite: drink: coffee food: pizzaHOOKS:MANIFEST:# Source: mychart-3/templates/configmap.yamlapiVersion: v1kind: ConfigMapmetadata: name: maudlin-yak-configmapdata: myvalue: Hello World drink: coffeecoffeecoffeecoffeecoffee food: PIZZA game: NFS

With将默认的命名空间改变为”.Values.favorite” 使with块内部可以方便的引用变量。

With块内部不能在访问其他任何命令空间的内容 比如下面的写法将得到一个异常

[root k8s-master charts]# vi mychart-3/templates/configmap.yaml apiVersion: v1kind: ConfigMapmetadata: name: {{ .Release.Name }}-configmapdata: myvalue: Hello World  {{- with .Values.favorite }} drink: {{ .drink | repeat 5 | quote }} food: {{ .food | upper | quote }} game: {{ .game | default NFS | quote }} release: {{ .Release.Name }} {{- end }}[root k8s-master charts]# helm install --debug --dry-run mychart-3/[debug] Created tunnel using local port: 38400 [debug] SERVER: 127.0.0.1:38400 [debug] Original chart version: [debug] CHART PATH: /root/charts/mychart-3Error: render error in mychart-3/templates/configmap.yaml : template: mychart-3/templates/configmap.yaml:11:22: executing mychart-3/templates/configmap.yaml at .Release.Name : can t evaluate field Name in type interface {}

可以修改为

apiVersion: v1kind: ConfigMapmetadata: name: {{ .Release.Name }}-configmapdata: myvalue: Hello World  {{- with .Values.favorite }} drink: {{ .drink | repeat 5 | quote }} food: {{ .food | upper | quote }} game: {{ .game | default NFS | quote }} {{- end }} release: {{ .Release.Name }}
4.4.1.4、循环控制语句

Helm使用range来实现循环。

[root k8s-master charts]# vi mychart-3/values.yamlpizzaToppings: - mushrooms - cheese - peppers - onions[root k8s-master charts]# vi mychart-3/templates/configmap.yamlapiVersion: v1kind: ConfigMapmetadata: name: {{ .Release.Name }}-configmapdata: toppings: |- {{- range .Values.pizzaToppings }} - {{ . | title | quote }} {{- end }}[root k8s-master charts]# helm install --debug --dry-run mychart-3/[debug] Created tunnel using local port: 38008 [debug] SERVER: 127.0.0.1:38008 [debug] Original chart version: [debug] CHART PATH: /root/charts/mychart-3NAME: illocutionary-mollyREVISION: 1RELEASED: Mon Mar 12 17:43:35 2018CHART: mychart-3-0.1.0USER-SUPPLIED VALUES:COMPUTED VALUES:pizzaToppings:- mushrooms- cheese- peppers- onionsHOOKS:MANIFEST:# Source: mychart-3/templates/configmap.yamlapiVersion: v1kind: ConfigMapmetadata: name: illocutionary-molly-configmapdata: toppings: |- - Mushrooms  - Cheese  - Peppers  - Onions 

Range块中 ”.“表示当前值 title是一个首字母大写的function toppings后面的”|”表示后面的内容是一个可择行的大字符串 在之后的”-“表示去掉末尾的空白字符。

迭代元祖
 sizes: |- {{- range tuple small medium large }} - {{ . }} {{- end }}
 sizes: |- - small - medium - large
4.4.2、自定义变量

使用自定义变量可以更好的使用 with 和 range 。在上面的例子中 我们使用下面的内容会出现异常

 {{- with .Values.favorite }} drink: {{ .drink | default tea | quote }} food: {{ .food | upper | quote }} release: {{ .Release.Name }} {{- end }}

因为Release.Name不再with块范围内 一种可以避免错误的办法就是在with块之外定义一个变量 然后将Release.Name的值赋给这个变量

[root k8s-master charts]# vi mychart-3/values.yamlfavorite: drink: coffee food: pizza[root k8s-master charts]# vi mychart-3/templates/configmap.yaml apiVersion: v1kind: ConfigMapmetadata: name: {{ .Release.Name }}-configmapdata: {{- $relname : .Release.Name -}} {{- with .Values.favorite }} drink: {{ .drink | default tea | quote }} food: {{ .food | upper | quote }} release: {{ $relname }} {{- end }}[root k8s-master charts]# helm install --debug --dry-run mychart-3/[debug] Created tunnel using local port: 40191 [debug] SERVER: 127.0.0.1:40191 [debug] Original chart version: [debug] CHART PATH: /root/charts/mychart-3NAME: moldy-labradoodleREVISION: 1RELEASED: Mon Mar 12 17:58:56 2018CHART: mychart-3-0.1.0USER-SUPPLIED VALUES:COMPUTED VALUES:favorite: drink: coffee food: pizzaHOOKS:MANIFEST:# Source: mychart-3/templates/configmap.yamlapiVersion: v1kind: ConfigMapmetadata: name: moldy-labradoodle-configmapdata: drink: coffee  food: PIZZA  release: moldy-labradoodle

另外一个例子 定义循环下标

[root k8s-master charts]# vi mychart-3/values.yamlpizzaToppings: - mushrooms - cheese - peppers - onions[root k8s-master charts]# vi mychart-3/templates/configmap.yaml apiVersion: v1kind: ConfigMapmetadata: name: {{ .Release.Name }}-configmapdata: {{- range $index, $topping : .Values.pizzaToppings }} {{ $index }}: {{ $topping }} {{- end }}[root k8s-master charts]# helm install --debug --dry-run mychart-3/[debug] Created tunnel using local port: 40932 [debug] SERVER: 127.0.0.1:40932 [debug] Original chart version: [debug] CHART PATH: /root/charts/mychart-3NAME: wobbly-macawREVISION: 1RELEASED: Mon Mar 12 18:02:04 2018CHART: mychart-3-0.1.0USER-SUPPLIED VALUES:COMPUTED VALUES:pizzaToppings:- mushrooms- cheese- peppers- onionsHOOKS:MANIFEST:# Source: mychart-3/templates/configmap.yamlapiVersion: v1kind: ConfigMapmetadata: name: wobbly-macaw-configmapdata: 0: mushrooms 1: cheese 2: peppers 3: onions

同理

apiVersion: v1kind: ConfigMapmetadata: name: {{ .Release.Name }}-configmapdata: myvalue: Hello World  {{- range $key, $val : .Values.favorite }} {{ $key }}: {{ $val | quote }} {{- end}}

将得到

# Source: mychart/templates/configmap.yamlapiVersion: v1kind: ConfigMapmetadata: name: eager-rabbit-configmapdata: myvalue: Hello World  drink: coffee  food: pizza 
4.4.3、命名模版

命名模版允许我们定义模版块 从而将完整的大模版拆分成数个小模版。将重复的部门抽取来定义成命名模版使我们的模版文件看起来更清晰。模版的命名规范如下

大多数包含kubernetes对象定义的模版文件都存放在templates目录下 install时会被部署到kubernetes上NOTES.txt 是一个例外 它并不包含kubernetes对象定义以”_“开头的文件不对被传递给kubernetes 即使它包含kubernetes对象定义。这类文件通常会被其他模版引用 4.4.3.1、定义和引用模版
{{ define MY_NAME }} # body of template here{{ end }}
[root k8s-master charts]# vi mychart-3/templates/configmap.yaml{{- define my_labels }} labels: generator: helm date: {{ now | htmlDate }}{{- end }}apiVersion: v1kind: ConfigMapmetadata: name: {{ .Release.Name }}-configmap {{- template my_labels }}data: {{- range $index, $topping : .Values.pizzaToppings }} {{ $index }}: {{ $topping }} {{- end }}[root k8s-master charts]# helm install --debug --dry-run mychart-3/[debug] Created tunnel using local port: 39896 [debug] SERVER: 127.0.0.1:39896 [debug] Original chart version: [debug] CHART PATH: /root/charts/mychart-3NAME: yucky-tuataraREVISION: 1RELEASED: Tue Mar 13 09:26:51 2018CHART: mychart-3-0.1.0USER-SUPPLIED VALUES:COMPUTED VALUES:pizzaToppings:- mushrooms- cheese- peppers- onionsHOOKS:MANIFEST:# Source: mychart-3/templates/configmap.yamlapiVersion: v1kind: ConfigMapmetadata: name: yucky-tuatara-configmap labels: generator: helm date: 2018-03-13data: 0: mushrooms 1: cheese 2: peppers 3: onions
说明
通过 define 定义模版通过 template 引用模版

Helm建议我们将这类用来引用的模版定义到 _helpers.tpl 文件中

[root k8s-master charts]# vi mychart-3/templates/_helpers.tpl{{- define my_labels }} labels: generator: helm date: {{ now | htmlDate }}{{- end }}[root k8s-master charts]# vi mychart-3/templates/configmap.yamlapiVersion: v1kind: ConfigMapmetadata: name: {{ .Release.Name }}-configmap {{- template my_labels }}data: {{- range $index, $topping : .Values.pizzaToppings }} {{ $index }}: {{ $topping }} {{- end }}[root k8s-master charts]# helm install --debug --dry-run mychart-3/
4.4.3.2、为模版指定命名空间

默认情况下 命名模版不能够使用任何参数或者内建对象 如 Release、Values等 但是可以调用function 比如下面的例子

[root k8s-master charts]# vi mychart-3/templates/_helpers.tpl{{/* Generate basic labels */}}{{- define my_labels }} labels: generator: helm date: {{ now | htmlDate }} chart: {{ .Chart.Name }} version: {{ .Chart.Version }}{{- end }}[root k8s-master charts]# vi mychart-3/templates/configmap.yamlapiVersion: v1kind: ConfigMapmetadata: name: {{ .Release.Name }}-configmap {{- template my_labels }}data: {{- range $index, $topping : .Values.pizzaToppings }} {{ $index }}: {{ $topping }} {{- end }}[root k8s-master charts]# helm install --debug --dry-run mychart-3/[debug] Created tunnel using local port: 44449 [debug] SERVER: 127.0.0.1:44449 [debug] Original chart version: [debug] CHART PATH: /root/charts/mychart-3NAME: nonplussed-toucanREVISION: 1RELEASED: Tue Mar 13 11:03:16 2018CHART: mychart-3-0.1.0USER-SUPPLIED VALUES:COMPUTED VALUES:pizzaToppings:- mushrooms- cheese- peppers- onionsHOOKS:MANIFEST:# Source: mychart-3/templates/configmap.yamlapiVersion: v1kind: ConfigMapmetadata: name: nonplussed-toucan-configmap labels: generator: helm date: 2018-03-13 chart:  version: data: 0: mushrooms 1: cheese 2: peppers 3: onions

可以正常使用now和管道 但是 {{ .Chart.Name }} 和 {{ .Chart.Version }} 的值为空

解决这个问题的方案就是在引用模版时 为其传递一个命名空间 将上述事例做如下改动

[root k8s-master charts]# vi mychart-3/templates/configmap.yamlapiVersion: v1kind: ConfigMapmetadata: name: {{ .Release.Name }}-configmap {{- template my_labels . }}data: {{- range $index, $topping : .Values.pizzaToppings }} {{ $index }}: {{ $topping }} {{- end }}[root k8s-master charts]# helm install --debug --dry-run mychart-3/[debug] Created tunnel using local port: 35723 [debug] SERVER: 127.0.0.1:35723 [debug] Original chart version: [debug] CHART PATH: /root/charts/mychart-3NAME: dinky-wormREVISION: 1RELEASED: Tue Mar 13 11:06:57 2018CHART: mychart-3-0.1.0USER-SUPPLIED VALUES:COMPUTED VALUES:pizzaToppings:- mushrooms- cheese- peppers- onionsHOOKS:MANIFEST:# Source: mychart-3/templates/configmap.yamlapiVersion: v1kind: ConfigMapmetadata: name: dinky-worm-configmap labels: generator: helm date: 2018-03-13 chart: mychart-3 version: 0.1.0data: 0: mushrooms 1: cheese 2: peppers 3: onions

将 {{- template my_labels }} 修改为 {{- template my_labels . }} ”.” 表示顶级命名空间 你也可以更具需要传递 .Values 或者 .Values.favorite 等任何你想要传递的范围。

4.4.3.3、使用INCLUDE引用模版

使用include引用模版允许我们使用管道和函数 看下面的例子

### 假设有如下模版 ###[root k8s-master charts]# vi mychart-3/templates/_helpers.tpl{{- define mychart_app -}}app_name: {{ .Chart.Name }}app_version: {{ .Chart.Version }} {{ .Release.Time.Seconds }} {{- end -}}### 引用 ###[root k8s-master charts]# vi mychart-3/templates/configmap.yamlapiVersion: v1kind: ConfigMapmetadata: name: {{ .Release.Name }}-configmap labels: {{ template mychart_app .}}data: myvalue: Hello World ### 测试 ###[root k8s-master charts]# helm install --debug --dry-run mychart-3/[debug] Created tunnel using local port: 38909 [debug] SERVER: 127.0.0.1:38909 [debug] Original chart version: [debug] CHART PATH: /root/charts/mychart-3NAME: kind-giraffeREVISION: 1RELEASED: Tue Mar 13 11:15:34 2018CHART: mychart-3-0.1.0USER-SUPPLIED VALUES:COMPUTED VALUES:pizzaToppings:- mushrooms- cheese- peppers- onionsHOOKS:MANIFEST:# Source: mychart-3/templates/configmap.yamlapiVersion: v1kind: ConfigMapmetadata: name: kind-giraffe-configmap labels: app_name: mychart-3app_version: 0.1.0 1520910934 data: myvalue: Hello World [root k8s-master charts]# 

输出与预期有些出入 app_version: 0.1.0 1520910934 没有对齐 因为模版中的内容是没有左边的空白符的 而我们也不能在定义模版时添加空白字符 并且 template 不支持函数 一种解决办法是

### 修改上例引用 ###[root k8s-master charts]# vi mychart-3/templates/configmap.yaml apiVersion: v1kind: ConfigMapmetadata: name: {{ .Release.Name }}-configmap labels:{{ include mychart_app . | indent 4 }}data: myvalue: Hello World [root k8s-master charts]# helm install --debug --dry-run mychart-3/

注意 {{ include mychart_app . | indent 4 }} 要顶格写 左边不要有空格

4.4.4、文件访问

除了命名模版 helm还可以直接应用文件。Helm提供 .Files 对象来支持文件访问 并给出以下建议

可以在你的Chart中添加额外的文件 这些文件会被发送到kubernetes 但是要小心 一个Chart必须要小于1M 因为这是kubernetes对象大小的限制。因为某些安全因素 有些文件无法通过 .Files 访问
templates/ 目录下的文件无法访问使用 .helmignore 排除的文件无法访问Charts do not preserve UNIX mode information, so file-level permissions will have no impact on the availability of a file when it comes to the .Files object. 4.4.4.1、基本事例
[root k8s-master charts]# vi mychart-3/config1.tomlmessage Hello from config 1[root k8s-master charts]# vi mychart-3/config2.tomlmessage This is config 2[root k8s-master charts]# vi mychart-3/config3.tomlmessage Goodbye from config 3[root k8s-master charts]# vi mychart-3/templates/configmap.yaml apiVersion: v1kind: ConfigMapmetadata: name: {{ .Release.Name }}-configmapdata: {{- $files : .Files }} {{- range tuple config1.toml config2.toml config3.toml }} {{ . }}: |- {{ $files.Get . }} {{- end }}[root k8s-master charts]# helm install --debug --dry-run mychart-3/[debug] Created tunnel using local port: 42465 [debug] SERVER: 127.0.0.1:42465 [debug] Original chart version: [debug] CHART PATH: /root/charts/mychart-3NAME: loopy-mastiffREVISION: 1RELEASED: Tue Mar 13 12:14:13 2018CHART: mychart-3-0.1.0USER-SUPPLIED VALUES:COMPUTED VALUES:pizzaToppings:- mushrooms- cheese- peppers- onionsHOOKS:MANIFEST:# Source: mychart-3/templates/configmap.yamlapiVersion: v1kind: ConfigMapmetadata: name: loopy-mastiff-configmapdata: config1.toml: |- message Hello from config 1 config2.toml: |- message This is config 2 config3.toml: |- message Goodbye from config 3
4.4.4.2、路径匹配
### 修改上面的事例 ###[root k8s-master charts]# vi mychart-3/templates/configmap.yamlapiVersion: v1kind: ConfigMapmetadata: name: {{ .Release.Name }}-configmapdata: {{- $files : .Files }} {{ range $path, $bytes : .Files.Glob **.toml }} {{ $path }}: |- {{ $files.Get $path }} {{ end }}[root k8s-master charts]# helm install --debug --dry-run mychart-3/

官网上的例子

{{ range $path : .Files.Glob **.yaml }}{{ $path }}: |{{ .Files.Get $path }}{{ end }}

是有问题的 此时$path为文件内容的字节码 而非路径 而且在循环内部不能使用 .Files 当然也不排除我做实验时姿势不对的原因

4.4.4.3、CONFIGMAP 和 SECRETS函数
### 两个便利的函数 ###[root k8s-master charts]# vi mychart-3/templates/configmap.yaml apiVersion: v1kind: ConfigMapmetadata: name: {{ .Release.Name }}-configmapdata:{{ (.Files.Glob **.toml ).AsConfig | indent 2 }}{{ (.Files.Glob **.toml ).AsSecrets | indent 2 }}[root k8s-master charts]# helm install --debug --dry-run mychart-3/[debug] Created tunnel using local port: 40984 [debug] SERVER: 127.0.0.1:40984 [debug] Original chart version: [debug] CHART PATH: /root/charts/mychart-3NAME: mangy-antelopeREVISION: 1RELEASED: Tue Mar 13 12:26:12 2018CHART: mychart-3-0.1.0USER-SUPPLIED VALUES:COMPUTED VALUES:pizzaToppings:- mushrooms- cheese- peppers- onionsHOOKS:MANIFEST:# Source: mychart-3/templates/configmap.yamlapiVersion: v1kind: ConfigMapmetadata: name: mangy-antelope-configmapdata: config1.toml: | message Hello from config 1 config2.toml: | message This is config 2 config3.toml: | message Goodbye from config 3 config1.toml: bWVzc2FnZSA9IEhlbGxvIGZyb20gY29uZmlnIDEK config2.toml: bWVzc2FnZSA9IFRoaXMgaXMgY29uZmlnIDIK config3.toml: bWVzc2FnZSA9IEdvb2RieWUgZnJvbSBjb25maWcgMwo 
4.4.4.4、ENCODING
### 有一个便利的函数 ###[root k8s-master charts]# vi mychart-3/templates/configmap.yamlapiVersion: v1kind: ConfigMapmetadata: name: {{ .Release.Name }}-configmapdata: token: |- {{ .Files.Get config1.toml | b64enc }}[root k8s-master charts]# helm install --debug --dry-run mychart-3/[debug] Created tunnel using local port: 40126 [debug] SERVER: 127.0.0.1:40126 [debug] Original chart version: [debug] CHART PATH: /root/charts/mychart-3NAME: mortal-warthogREVISION: 1RELEASED: Tue Mar 13 12:28:25 2018CHART: mychart-3-0.1.0USER-SUPPLIED VALUES:COMPUTED VALUES:pizzaToppings:- mushrooms- cheese- peppers- onionsHOOKS:MANIFEST:# Source: mychart-3/templates/configmap.yamlapiVersion: v1kind: ConfigMapmetadata: name: mortal-warthog-configmapdata: token: |- bWVzc2FnZSA9IEhlbGxvIGZyb20gY29uZmlnIDEK
4.4.4.5、逐行读取文件
[root k8s-master charts]# vi mychart-3/config1.tomlmessage Hello from config 1message Hello from config 2message Hello from config 3message Hello from config 4message Hello from config 5message Hello from config 6message Hello from config 7message Hello from config 8[root k8s-master charts]# vi mychart-3/templates/configmap.yamlapiVersion: v1kind: ConfigMapmetadata: name: {{ .Release.Name }}-configmapdata: some-file.txt: | {{- range .Files.Lines config1.toml }} {{ . }} {{- end }}[root k8s-master charts]# helm install --debug --dry-run mychart-3/[debug] Created tunnel using local port: 43350 [debug] SERVER: 127.0.0.1:43350 [debug] Original chart version: [debug] CHART PATH: /root/charts/mychart-3NAME: giddy-ratREVISION: 1RELEASED: Tue Mar 13 12:32:59 2018CHART: mychart-3-0.1.0USER-SUPPLIED VALUES:COMPUTED VALUES:pizzaToppings:- mushrooms- cheese- peppers- onionsHOOKS:MANIFEST:# Source: mychart-3/templates/configmap.yamlapiVersion: v1kind: ConfigMapmetadata: name: giddy-rat-configmapdata: some-file.txt: | message Hello from config 1 message Hello from config 2 message Hello from config 3 message Hello from config 4 message Hello from config 5 message Hello from config 6 message Hello from config 7 message Hello from config 8
4.4.5、创建NOTE.txt文件

NOTE.txt是一个文本文件 文件内容会在 chart install 或者 chart upgrade 之后输出到屏幕上 因此我们可以给出一些提示信息

[root k8s-master charts]# vi mychart-3/templates/NOTE.txtThank you for installing {{ .Chart.Name }}.Your release is named {{ .Release.Name }}.To learn more about the release, try: $ helm status {{ .Release.Name }} $ helm get {{ .Release.Name }}[root k8s-master charts]# helm install --debug --dry-run mychart-3/[debug] Created tunnel using local port: 34825 [debug] SERVER: 127.0.0.1:34825 [debug] Original chart version: [debug] CHART PATH: /root/charts/mychart-3Error: YAML parse error on mychart-3/templates/NOTE.txt: error converting YAML to JSON: yaml: line 4: mapping values are not allowed in this context# Source: mychart-3/templates/configmap.yamlapiVersion: v1kind: ConfigMapmetadata: name: whopping-wolf-configmapdata: some-file.txt: | message Hello from config 1 message Hello from config 2 message Hello from config 3 message Hello from config 4 message Hello from config 5 message Hello from config 6 message Hello from config 7 message Hello from config 8

本文链接: http://helm.immuno-online.com/view-681584.html

发布于 : 2021-03-24 阅读(0)
公司介绍
联络我们
服务热线:4000-520-616
(限工作日9:00-18:00)
QQ :1570468124
手机:18915418616