在YAML配置中使用Kubernetes ConfigMap从文件设置

42

我该如何用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,那么有特殊的函数来完成此操作。https://helm.sh/docs/chart_template_guide/accessing_files/#configmap-and-secrets-utility-functions - Jarno
3个回答

29

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

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

--dry-run 标记只会在标准输出中显示更改内容,而不会在服务器上进行更改。 这将输出一个有效的配置映射,因此如果将其重定向到文件,则可以使用该文件:

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

优雅的解决方案 - Will
2
那么我们没有办法以yaml的方式编写上述命令吗? - Tushar Seth
4
这实际上没有回答 OP 的问题。Dry run 将文件的整个内容输出到 yaml 中,这就失去了将其放在单独文件中的目的。我们希望在 yaml 中有一个指向该文件(其路径)的 引用。这是为了本地开发配置映射。 - Stevey
1
我相信这个回答已经表明了 "你所要求的不受支持"。ConfigMap架构不支持 fromfile 属性。然后解释了一个可能的替代方案。 - Michael R

14

你可以使用Kustomize,它不仅可以轻松管理ConfigMaps,还可以管理其他资源。我想你想要从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 -

了解更多信息,请参考此处


7

虽然这是一个三年前的问题,但对于新来的人可能仍有用处。

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

{{ .Files.Get "files/filename.ext" }}

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接