kubernetes 将yaml(作为数据)放入配置Map

1l5u6lss  于 2023-11-17  发布在  Kubernetes
关注(0)|答案(3)|浏览(119)

有没有办法在配置图中存储yaml数据?
在我的values.yaml中,我有如下内容

config:
  filters:
    - kind: Pod
      apiVersion: v1
...

字符串
在我的配置图中,我目前正在执行

...
data:
  config.yaml: |-
    {{ .Values.config }}


但在结果configmap中,数据是“内联的”,格式如下:

...
data:
  config.yaml: >-
    map[filters:[map[apiVersion:v1...


它不是yaml,因此不能被应用程序阅读。

zujrkrfu

zujrkrfu1#

假设你有一个demo-chart

.
└── demo
    ├── charts
    ├── Chart.yaml
    ├── templates
    │   ├── configmap.yaml
    │   ├── _helpers.tpl
    │   └── NOTES.txt
    └── values.yaml

字符串

values.yaml:

config:
  filters:
    - kind: Pod
      apiVersion: v1

Map.yaml:

{{- if .Values.config }}
apiVersion: v1
kind: ConfigMap
metadata:
  name: demo-name
data:
  config.yml: |- {{- toYaml .Values.config | nindent 4 }}
{{- end }}

说明:toYaml将从值.yaml加载的数据解析为YAML,nindent在每行前放4个空格。
检查:

$ helm template demo
---
# Source: demo/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: demo-name
data:
  config.yml: |-
    filters:
    - apiVersion: v1
      kind: Pod

wkftcu5l

wkftcu5l2#

另一种选择是使用.Files.Get(请参阅documentation):您可以将YAML文件(或基本上任何其他文本文件)存储在template目录外,并将原始内容导入到XMLMap中(只需记住| indent)。
将文本放在单独的文件中的另一个好处是,您的文本编辑器可以识别语言(yaml,python,bash,...),并且您可以利用开发工具的全面支持,当图表的复杂性增加时,这很方便。
例如,给定raw-files目录的图表结构:

mychart
   ├─ raw-files       <<<
   │  ├─ example.yaml <<<
   │  └─ script.sh    <<<
   ├─ templates
   │  ├─ configmap.yaml
   │  └─ ...
   ├─ Chart.yaml
   └─ values.yaml

字符串
您可以导入example.yaml的内容如下:

apiVersion: v1
kind: ConfigMap
metadata:
  name: demo-name
data:
  config.yml: |-
{{ .Files.Get "raw-files/example.yaml" | indent 4 }}  # update the indentation according to your style
$ helm template mychart
---
# Source: test/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: demo-name
data:
  config.yml: |-
    filters:
      - kind: Pod
        apiVersion: v1

的数据

cunj1qz1

cunj1qz13#

这更多的是猜测,而不是答案,但你有没有试过:

data:
  config.yaml: |-
    config:
      filters:
        - kind: Pod
          apiVersion: v1

字符串
yaml中的>-|-之间存在差异。

相关问题