chart进阶语法(更新中)
1. 变量的批量引用
1.1 思路
大量变量可以在 values.yaml中定义,然后templates下的yml文件批量引用。
1.2 使用场景:
- 场景一
多个pod中要引用一批相同变量
如果在每个pod的yml文件定义效率低,更改麻烦。
- 场景二
变量数量较多,且部署时需要更改变量值
如果在templates下的yml文件中定义,交付给用户部署时,这个更改工作将变得很麻烦。因此我们把这些变量写在values.yml中。
1.3 使用
- 定义变量
在 values.yaml 中定义变量如下
environment:
SVC_IOT_MICRONAMEPREFIX: iot-v2-0
MICRO_REGISTRY: etcd
MICRO_REGISTRY_ADDRESS: 192.168.25.28:31000
MICRO_REGISTER_INTERVAL: 5
MICRO_REGISTER_TTL: 10
........
- 引用变量
templates下的yml文件用引用变量写法如下:
env: {{- range $key,$val := .Values.environment }}
- name: {{ $key | toString }}
value: {{ $val | quote }} {{- end}}
注意
{{- range $key,$val := .Values.environment }}和{{- end}} 不能单独写一行,否则打印出的结果会有空行,且不符合kubernetes的要求。
2. if 用法
- 语法
{{- if eq .Values.xxx.xxx "值" }}
……
{{- else if eq .Values.xxx.xxx "值" }}
……
{{- else }}
……
{{- end }}
2.1 基本用法示例
- values.yaml中定义变量如下
mysql:
type: NodePort
#type: ClusterIP
nodePort: 30759
- if语句判断
在templates下yml文件中判断,
.Values.mysql.type
变量值是什么就执行对应的那一段代码。
---
apiVersion: v1
kind: Service
metadata:
name: mysql-iot
namespace: {{ .Values.global.namespace }}
labels:
name: mysql-iot
{{- if eq .Values.mysql.type "NodePort" }}
spec:
type: NodePort
ports:
- port: 3306
targetPort: 3306
nodePort: {{ .Values.mysql.nodePort }}
name: mysql-port
selector:
name: mysql-iot
{{- else }}
spec:
ports:
- port: 3306
targetPort: 3306
name: mysql-port
selector:
name: mysql-iot
{{- end }}
2.2 逻辑和
- 语法
{{- if and 条件1 条件2 }}
……
{{- end }}
- 示例
{{- if and .Values.persistence.enabled (eq .Values.global.mode "standalone") }}
volumeClaimTemplates:
- metadata:
name: datadir
spec:
{{- toYaml .Values.persistence.data | nindent 6 }}
{{- end }}