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 }}
标签:
k8s
, kubernetes
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?