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

Create configmap with outside yaml files for kubernetes

我对 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 模板;

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

我遇到的唯一问题是无法获取整个文件数据。

欢迎来到社区!

我已经为 configmap 创建了一个 helm 模板。它以这种方式工作:您可以传递 configmap 名称 - name 和文件名 - fname 存储数据的地方 and/or 它可以从特定文件夹读取文件。

请找到模板(前 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 我共享文件示例和 configmap 的地方。

要使用 userfiles 目录中的 cars2.yaml 和 with/without 文件呈现模板:

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

要仅使用 userfiles 目录中的文件渲染同一模板:

helm template . 

P.S。使用了 helm v3.5.4


有用的链接: