kubernetes configmap 在 yaml 配置中设置源文件

Posted

技术标签:

【中文标题】kubernetes configmap 在 yaml 配置中设置源文件【英文标题】:kubernetes configmap set from-file in yaml configuration 【发布时间】:2018-12-18 11:48:17 【问题描述】:

如何用 yaml 格式描述这个命令?

kubectl create configmap somename --from-file=./conf/nginx.conf

我希望做类似以下 yaml 的事情,但它不起作用

apiVersion: v1
kind: ConfigMap
metadata:
  name: somename
  namespace: default
fromfile: ./conf/nginx.conf

有什么想法吗?

【问题讨论】:

如果你使用 helm,有一些特殊功能可以做到这一点helm.sh/docs/chart_template_guide/accessing_files/… 【参考方案1】:

这是行不通的,因为 kubernetes 不知道本地文件的路径。您可以通过执行以下操作来模拟它:

kubectl create configmap --dry-run=client somename --from-file=./conf/nginx.conf --output yaml

--dry-run 标志只会在标准输出上显示您的更改,而不是在服务器上进行更改。这将输出一个有效的 configmap,所以如果你将它传送到一个文件,你可以使用它:

kubectl create configmap --dry-run=client somename --from-file=./conf/nginx.conf --output yaml | tee somename.yaml

【讨论】:

优雅的解决方案 所以我们不能用yaml的方式写上面的命令方式吗? 这实际上并没有回答 OP 的问题。试运行将文件的全部内容输出到 yaml 中,这首先违背了将其放在单独文件中的目的。我们想要一个对 yaml 中文件(其路径)的 reference。这适用于本地开发配置图。【参考方案2】:

您可以使用 kustomize,它不仅可以轻松管理配置映射,还可以轻松管理其他资源。我认为您想从 yaml 中的文件创建 configmap,因此您可以在 kustomization.yaml 文件中执行以下操作:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
configMapGenerator:
- files:
  - ./conf/nginx.conf
  name: nginx-config

此外,kustomize 可以非常方便地管理所有部署(特别是对于声明式管理非常方便),您可以将所有内容都放在一个 kustomize 文件中,如下所示:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
secretGenerator:
- envs:
  - .env
  name: my-secrets
configMapGenerator:
- files:
  - ./conf/nginx.conf
  name: nginx-config
resources:
- ./nginx-deployment.yaml

部署一切你可以像这样运行它:

$ kustomize build | kubectl apply -f -

更多信息请参考here

【讨论】:

【参考方案3】:

差不多 3 年的问题,答案已被接受,但只针对那些正在访问的新人。

这也可以通过 helm chart 来实现。如果您使用的是 helm chart,您可以将这些文件放在图表中的files/ 目录下,并将这些文件从 YAML 中引用为

 .Files.Get "files/filename.ext" 

这个包含也可以根据go中可用的函数进行编码,比如

 .Files.Get "files/filename.ext" | b64enc 

【讨论】:

以上是关于kubernetes configmap 在 yaml 配置中设置源文件的主要内容,如果未能解决你的问题,请参考以下文章

Kubernetes存储之ConfigMap

Kubernetes中使用ConfigMap大全

ConfigMap 数据(yml 格式) - Kubernetes

Kubernetes集群Configmap配置存储资源(三十六)

Kubernetes之ConfigMap和Secret

Kubernetes(k8s)之Configmap配置管理