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 2021-08-15 21:52  运维开发玄德公  阅读(24)  评论(0编辑  收藏  举报  来源

导航