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 }}

在这里插入图片描述

posted on   运维开发玄德公  阅读(28)  评论(0编辑  收藏  举报  

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示