八 Kubernetes学习Helm应用包管理器( 二 )


实际上 , 这已经是一个可安装的Chart包了 , 通过 helm 命令来进行安装:
[root@master chart]# helm install demo-nginx demo-nginx/NAME: demo-nginxLAST DEPLOYED: Tue Mar 21 11:44:34 2023NAMESPACE: defaultSTATUS: deployedREVISION: 1TEST SUITE: None[root@master chart]#
但是这样部署 , 其实与直接apply没什么两样 。
内置对象
常用的内置对象:
.Name
名称
.Time
的时间
.
的 (如果清单未覆盖)
.
服务的名称
.
此的修订版本号 , 从1开始累加
.
如果当前操作是升级或回滚 , 则将其设置为 true 。
.
如果当前操作是安装 , 则设置为 true 。
对象是为Chart模板提供值 , 这个对象的值有4个来源:
chart 的 .yaml 提供的值可以被用户提供的文件覆盖 , 而该文件同样可以被 --set提供的参数所覆盖 。
[root@master demo-nginx]# cat values.yaml replicaCount: 2image:repository: nginxtag: 1.17[root@master demo-nginx]# cat templates/deployment.yaml apiVersion: apps/v1kind: Deploymentmetadata:name: {{ .Release.Name }}spec:replicas: {{ .Values.replicaCount }}selector:matchLabels:app: {{ .Release.Name }}template:metadata:labels:app: {{ .Release.Name }}spec:containers:- name: {{ .Release.Name }}image: {{ .Values.image.repository }}:{{ .Values.image.tag }}resources:limits:memory: "128Mi"cpu: "500m"[root@master demo-nginx]#
管道与函数
模板引擎还支持对数据进行二次处理 。
例如从中读取的值变成字符串 , 可以使用quote函数实现:
app: {{ quote .Values.label.app }}
quote ..label.app 将后面的值作为参数传递给quote函数 。
【八Kubernetes学习Helm应用包管理器】模板函数调用语法为: arg1 arg2...
另外还会经常使用一个函数 , 该函数允许在模板中指定默认值 , 以防止该值被忽略掉 。
例如忘记定义 , 执行helm会因为缺少字段无法创建资源 , 这时就可以定义一个默认值 。
spec:replicas: {{ .Values.replicas | default 2 }}
其他函数:
缩进:{{ .. |12 }}
大写:{{ upper .. }}
首字母大写:{{ title .. }}
流程控制
流程控制是为模板提供了一种能力 , 满足更复杂的数据逻辑处理 。
Helm模板语言提供以下流程控制语句:
if
if/else块是用于在模板中有条件地包含文本块的方法 , 条件块的基本结构如下:
{{ if PIPELINE }}# Do something{{ else if OTHER PIPELINE }}# Do something else{{ else }}# Default case{{ end }}
条件判断就是判断条件是否为真 , 如果值为以下几种情况则为false:
除了上面的这些情况外 , 其他所有条件都为 真 。
例如 , 如果..env.hello值为world , 则值为hello: true
# cat values.yaml replicas: 2label:project: msapp: productenv:hello: "world"# cat templates/deploymemt.yamlenv:{{ if eq .Values.env.hello "world" }}- name: hellovalue: 123{{ end }}
其中运算符 eq是判断是否相等的操作 , 除此之外 , 还有 ne、 lt、 gt、 and、 or等运算符 。
通过模板引擎来渲染一下 , 会得到如下结果:
# helm install --dry-run web ../mychart/ ...env:- name: hellovalue: 123
可以看到渲染出来会有多余的空行 , 这是因为当模板引擎运行时 , 会将控制指令删除 , 所有之前占的位置也就空白了 , 需要使用{{- if ...}} 的方式消除此空行: