【问题标题】:Dynamic ConfigMap Helm Template动态 ConfigMap Helm 模板
【发布时间】:2019-06-25 18:18:24
【问题描述】:

我想用一个 helm 模板创建多个 ConfiMaps。因此,我为配置/值创建了一个文件夹,并为每个 ConfigMap 创建了一个配置文件。我已阅读 helm 模板指南,发现对我的问题没有任何帮助。也许我误解了 helm 的可能性。

之后有可能从多个文件创建一个配置映射:

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  {{- $files := .Files }}
  {{- range tuple "file1.yaml" "file2.yaml" }}
  {{ $files.Get . }}
  {{- end }}

任何建议都会有所帮助, 谢谢,

最好的祝福

【问题讨论】:

    标签: templates kubernetes kubernetes-helm


    【解决方案1】:

    感谢您的回复。我有不同的想法。我的新代码使它更清楚一点。

    {{ range $k, $v :=  .Values.configs }}
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: configmap
      namespace: {{ $.Values.namespace }}
      labels:
        app: "{{base $v}}"
    data:
      key: {{$k}}
      value: {{$v}}
    {{ $.Files.Get  $v }}
    {{ end }}
    

    我在 ConfigMap 上有一个循环。我的 values.yaml 看起来像

    configs
       name: configs/file1
       name: configs/file2
    

    这些值位于单独的文件夹 configs 中,每个 configmap 一个文件。

    当前的问题是,结果是一个具有 file2 值的 ConfigMap。我希望有两个 ConfigMap。我的模板有什么问题。

    非常感谢。

    【讨论】:

    • 上述解决方案效果很好。我必须做的唯一改变是键必须不同。 name1 然后 name2 用于第二个 configmap。更改后将生成两个配置图。
    【解决方案2】:

    一般Tiller 会渲染templates/ 目录下的所有模板。 因此,如果我正确理解您的问题 - 您可以从以下简单示例开始:

    1)创建测试图表并删除所有预定义模板

    helm create testchart
    rm -rf testchart/templates/*
    

    2) 在templates/中创建2个Configmaps yaml文件

    configmap1.yaml:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: {{ .Release.Name }}-configmap-1
    data:
      myvalue: "My Drinks:"
      drink1: {{ .Values.config1test.drink1 }}
      drink2: {{ .Values.config1test.drink2 }}
      drink3: {{ .Values.config1test.drink3 }}
    

    configmap2.yaml:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: {{ .Release.Name }}-configmap-2
    data:
      myvalue: "My food:"
      food1: {{ .Values.config2test.food1 }}
      food2: {{ .Values.config2test.food2 }}
      food3: {{ .Values.config2test.food3 }}
    

    3) 创建值文件(1 个或更多,具体取决于您的实现。我创建了 2 个)

    myvals1.yaml:

    config1test:
      drink1: coffee
      drink2: tea
      drink3: juice
    

    myvals2.yaml:

    config2test:
      food1: meat
      food2: fish
      food3: salad
    

    4) 应用前测试模板渲染:

    helm install --dry-run --debug -f ./testchart/myvals1.yaml -f ./testchart/myvals2.yaml ./testchart
    
    [debug] Created tunnel using local port: '37605'
    
    [debug] SERVER: "127.0.0.1:37605"
    
    [debug] Original chart version: ""
    [debug] CHART PATH: /home/vkryvoruchko/testchart
    
    NAME:   tan-frog
    REVISION: 1
    RELEASED: Fri Feb  1 13:10:46 2019
    CHART: testchart-0.1.0
    USER-SUPPLIED VALUES:
    config1test:
      drink1: coffee
      drink2: tea
      drink3: juice
    config2test:
      food1: meat
      food2: fish
      food3: salad
    
    COMPUTED VALUES:
    affinity: {}
    config1test:
      drink1: coffee
      drink2: tea
      drink3: juice
    config2test:
      food1: meat
      food2: fish
      food3: salad
    fullnameOverride: ""
    image:
      pullPolicy: IfNotPresent
      repository: nginx
      tag: stable
    ingress:
      annotations: {}
      enabled: false
      hosts:
      - chart-example.local
      paths: []
      tls: []
    nameOverride: ""
    nodeSelector: {}
    replicaCount: 1
    resources: {}
    service:
      port: 80
      type: ClusterIP
    tolerations: []
    
    HOOKS:
    MANIFEST:
    
    
    ---
    # Source: testchart/templates/configmap1.yaml
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: tan-frog-configmap-1
    data:
      myvalue: "My Drinks:"
      drink1: coffee
      drink2: tea
      drink3: juice
    ---
    # Source: testchart/templates/configmap2.yaml
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: tan-frog-configmap-2
    data:
      myvalue: "My food:"
      food1: meat
      food2: fish
      food3: salad
    

    5) 安装图表

    helm install -f ./testchart/myvals1.yaml -f ./testchart/myvals2.yaml ./testchart
    
    NAME:   unsung-grizzly
    LAST DEPLOYED: Fri Feb  1 13:13:15 2019
    NAMESPACE: default
    STATUS: DEPLOYED
    
    RESOURCES:
    ==> v1/ConfigMap
    NAME                        DATA  AGE
    unsung-grizzly-configmap-1  4     0s
    unsung-grizzly-configmap-2  4     0s
    

    6) 验证 ConfigMap:

    kubectl get configmaps -o wide
    
    NAME                         DATA   AGE
    unsung-grizzly-configmap-1   4      61s
    unsung-grizzly-configmap-2   4      61s
    

    【讨论】:

    • 当然你可以清理 default values.yaml 以避免声明和传递变量。在测试期间忘记为您移除
    猜你喜欢
    • 1970-01-01
    • 2022-08-03
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 2019-03-10
    • 2018-02-06
    • 1970-01-01
    • 2020-01-12
    相关资源
    最近更新 更多