使用外部 yaml 文件为 kubernetes 创建 configmap

时间:2021-06-29 22:20:06

标签: kubernetes kubernetes-helm

我对 kubernetes 很陌生。我正在尝试使用用户定义的 yaml 文件创建 configmap。

helm upgrade --install test --namespace test --create-namespace . -f xxx/user-defined.yaml

用户可以使用 'f' 选项添加任何 yaml 文件。 例如;

cars.yaml
cars:
  - name: Mercedes
    model: E350

所以命令将是;

helm upgrade --install test --namespace test --create-namespace . -f xxx/cars.yaml

我的问题是,我想创建名为 'mercedes-configmap' 的 configmap 我需要从cars.yaml 中读取这些值并使用cars.yaml 的名称和数据自动创建configmap

更新, 我创建了下面的 configmap 模板;

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Values.cars.name }}-configmap
data:
  {{- range .Files }}
    {{ .Files.Get . | toYaml | quote }}
  {{- end }}

我面临的唯一问题,我无法获取整个文件数据。

1 个答案:

答案 0 :(得分:0)

欢迎来到社区!

我为 configmap 创建了一个 helm 模板。它是这样工作的:您可以传递配置映射名称 - name 和文件名 - fname 存储数据的位置和/或它可以从特定文件夹读取文件。

请找到模板(前 3 行已注释,这是检查现有值的两个工作逻辑实现):

{{/*
{{ if not (or (empty .Values.name) (empty .Values.fname)) }}
*/}}

{{ if and (not (empty .Values.name)) (not (empty .Values.fname)) }}
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Values.name }}-configmap
data:
  {{- ( .Files.Glob .Values.fname ).AsConfig | nindent 2 }}
---
{{ end }}
{{ $currentScope := .}}
{{ range $path, $_ :=  .Files.Glob  "userfiles/*.yaml" }}
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ base $path | trimSuffix ".yaml" }}-configmap
data:
  {{- with $currentScope}}
  {{ base $path }}: |
    {{- ( .Files.Get $path ) | nindent 4 }}
  {{- end }}
---
{{ end }}

template 的第一部分检查是否设置了 configmap 名称和文件名,如果是,则呈现它。第二部分转到 userfiles 目录并获取其中的所有 yamls

您发现 github repo 是我共享文件示例和配置映射的地方。

要在 cars2.yaml 目录中呈现带有/不带有 userfiles 文件的模板:

helm template . --set name=cars2 --set fname=cars2.yaml

要渲染仅包含 userfiles 目录中的文件的相同模板:

helm template . 

附言使用 helm v3.5.4


有用的链接:

相关问题