0

我的 Kubernetes 集群中有一个通用 helm 图表,它采用带有环境变量(由 KEY=VALUE 标识)的多行文本字段,将它们转换为 deployment.yaml,如下所示:

在 Rancher 对话框中: 在此处输入图像描述

在 deployment.yaml 中:

{{- if .Values.envAsMultiline }}
{{- range (split "\n" .Values.envAsMultiline) }}
            - name: "{{ (split "=" .)._0 }}"
              value: "{{ (split "=" .)._1 }}"
{{- end }}
{{- end }}

到目前为止,这工作正常。但现在的问题是:如果我的环境变量中有一个“=”(就像上面的 JAVA_OPTS 中一样),它会在该行的第二个“=”处拆分环境变量值:

JAVA_OPTS=-Xms1024m -Xmx2048m -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=512m

被翻译成

-Xms1024m -Xmx2048m -XX:MetaspaceSize

这里缺少“=256M -XX:MaxMetaspaceSize=512m”。

如何相应地更正我的 deployment.yaml 模板?

4

1 回答 1

1

计划一:

最简单的实现方法之一

可以直接使用yaml文件注入的方式,把env部分原封不动的放在这里,这样就可以将kv表单值和ref表单值写入到需要的格式的values中。

如下:

值.yaml

env:
  - name: ENVIRONMENT1
    value: "testABC"
  - name: JAVA_OPTS
    value: "-Xms1024m -Xmx2048m -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=512M"
  - name: TZ
    value: "Europe/Berlin"

部署.yaml

containers:
  - name: {{ .Chart.Name }}
    env:
      {{ toYaml .Values.env | nindent xxx }}

(ps: xxx --> 实际缩进)

计划二:

env以kv的形式定义,迭代渲染

值.yaml

env:
  ENVIRONMENT1: "testABC"
  JAVA_OPTS: "-Xms1024m -Xmx2048m -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=512M"
  TZ: "Europe/Berlin"

部署.yaml

containers:
- name: {{ .Chart.Name }}
  env: 
    {{- range $k, $v := .Values.env }}
    - name: {{ $k | quote }}
      value: {{ $v | quote }}
    {{- end }}

计划3:

如果你仍然需要按照你之前的写作,那么你可以这样做

值.yaml

env: |
  ENVIRONMENT1=testABC
  JAVA_OPTS=-Xms1024m -Xmx2048m -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=512M
  TZ=Europe/Berlin

部署.yaml

containers:
- name: {{ .Chart.Name }}
  {{- if .Values.env }}
  env:
  {{- range (split "\n" .Values.env) }}
  - name: {{ (split "=" .)._0 }}
    value: {{ . | trimPrefix (split "=" .)._0 | trimPrefix "=" | quote }}
  {{- end }}
  {{- end }}

输出:

env:
- name: ENVIRONMENT1
  value: "testABC"
- name: JAVA_OPTS
  value: "-Xms1024m -Xmx2048m -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=512M"
- name: TZ
  value: "Europe/Berlin"

于 2021-08-25T03:02:45.340 回答