如何从 helm 中的文件创建配置映射?

And*_*ndy 6 google-cloud-platform kubernetes google-kubernetes-engine kubernetes-helm

我有一个在 pod 中运行的容器,它需要一个配置文件。部署/服务等是使用 helm 部署的,理想情况下我想使用相同的方法来设置配置,如果可能的话,我想使用 helm 的模板引擎来模板化配置文件。

我遇到了这个: https: //www.nclouds.com/blog/simplify-kubernetes-deployments-helm-part-3-creating-configmaps-secrets/

我有以下文件结构:

/chart
  /templates
    my-config-map.yaml
  /config
    application.config
Run Code Online (Sandbox Code Playgroud)

my-config-map.yaml 包含以下内容:

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-config
  labels:
    app: {{ template "app.prefix" . }}
data:
  {{ (tpl (.Files.Glob "config/*").AsConfig . ) | indent 2 }}
Run Code Online (Sandbox Code Playgroud)

当我运行这个命令时:

kubectl get configmaps my-config -n my-namespace -o yaml
Run Code Online (Sandbox Code Playgroud)

我得到:

apiVersion: v1
kind: ConfigMap
metadata:
  creationTimestamp: 2019-07-26T11:11:05Z
  labels:
    app: my-app
  name: my-config
  namespace: my-namespace
  resourceVersion: "2697856"
  selfLink: <selflink>
  uid: 0fe63ba8-af96-11e9-a73e-42010af00273
Run Code Online (Sandbox Code Playgroud)

请注意,其中似乎没有任何数据。但是,如果我使用以下命令从命令行创建它:

kubectl --namespace my-namespace create configmap my-config --from-file=application.conf
Run Code Online (Sandbox Code Playgroud)

我明白了,它似乎包含数据:

apiVersion: v1
data:
  application.conf: |-
    conf {
      ...
kind: ConfigMap
metadata:
  creationTimestamp: 2019-07-26T11:00:59Z
  name: my-config
  namespace: my-namespace
  resourceVersion: "2695174"
  selfLink: <selflink>
Run Code Online (Sandbox Code Playgroud)

我到底做错了什么?

Pjo*_*erS 7

背景

\n

这个教程和问题已经很老了(1年零4个月前问过)。当前使用的Helm版本是3. 它不需要Tiller

\n

正如您在问题中所述,您必须使用Glob并将文件放入正确的目录中。我已经在我的GKE集群上使用Helm3.

\n
$ helm version\nversion.BuildInfo{Version:"v3.2.1"\n
Run Code Online (Sandbox Code Playgroud)\n

解决方案 - 步骤

\n

1. 创建test-chart

\n

我已经在我的/home/user目录中创建了它

\n
$ helm create test-chart\nCreating test-chart\n$ ls\npostgress test-chart\n
Run Code Online (Sandbox Code Playgroud)\n

2. 创建用于放置/下载配置文件的目录

\n
$ cd test-chart/\n$ ls\ncharts  Chart.yaml  templates  values.yaml\n$ mkdir configmap\n$ ls\ncharts  Chart.yaml  configmap  templates  values.yaml\n$ cd configmap/\n
Run Code Online (Sandbox Code Playgroud)\n

我使用了Kubernetes 文档中的示例。

\n
\n$ wget https://kubernetes.io/examples/configmap/ui.properties\n...\nui.properties                               100%[===========================================================================================>]      83  --.-KB/s    in 0s\n\n2020-12-14 15:14:14 (687 KB/s) - \xe2\x80\x98ui.properties\xe2\x80\x99 saved [83/83]\n...\nuser@cloudshell:~/test-chart/configmap (project)$ cat ui.properties\ncolor.good=purple\ncolor.bad=yellow\nallow.textmode=true\nhow.nice.to.look=fairlyNice\n
Run Code Online (Sandbox Code Playgroud)\n

3.在目录下创建ConfigMap文件templates

\n
$ cd ~/test-chart/templates\n
Run Code Online (Sandbox Code Playgroud)\n

创建configmapyaml 如下所示。

\n
apiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: test-config\ndata:\n  {{- (.Files.Glob "configmap/*").AsConfig | nindent 2 }}\n
Run Code Online (Sandbox Code Playgroud)\n

4.安装图表/使用--dry-run

\n

转到主目录~/test-chart,其中有如下文件

\n
charts  Chart.yaml  configmap  templates  values.yaml\n
Run Code Online (Sandbox Code Playgroud)\n

现在,您可以之前helm install绘制图表或使用--dry-run选项来检查配置 YAML 的外观。

\n

5、输出

\n
$ helm install test . --dry-run\nNAME: test\nLAST DEPLOYED: Mon Dec 14 15:24:38 2020\nNAMESPACE: default\nSTATUS: pending-install\nREVISION: 1\nHOOKS:\n---\n# Source: test-chart/templates/tests/test-connection.yaml\n...\n---\n# Source: test-chart/templates/configmap.yaml\napiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: test-config\ndata:\n  ui.properties: |\n    color.good=purple\n    color.bad=yellow\n    allow.textmode=true\n    how.nice.to.look=fairlyNice\n---\n# Source: test-chart/templates/service.yaml\n
Run Code Online (Sandbox Code Playgroud)\n

结论

\n

作为基础的文件必须位于目录中,该目录与目录 和configmap处于同一级别。您还必须使用并提供配置文件的正确路径。templateChart.yamlFiles.Glob

\n


cec*_*ami 0

我的猜测是 Helm 正在“templates”文件夹下寻找“config”。

尝试将 config 文件夹移动到模板下:

/chart
  /templates
    my-config-map.yaml
    /config
      application.config
Run Code Online (Sandbox Code Playgroud)

或改变

(.Files.Glob "config/*") 
Run Code Online (Sandbox Code Playgroud)

(.Files.Glob "../config/*")
Run Code Online (Sandbox Code Playgroud)

另外,请记住tpl函数是在 Helm 2.5 中引入的。

希望有帮助!