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

时间:2018-07-10 14:59:04

标签: kubernetes google-cloud-platform kubectl google-kubernetes-engine

如何用yaml格式描述此命令?

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

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

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

有什么主意吗?

3 个答案:

答案 0 :(得分:10)

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

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

--dry-run标志将仅在stdout上显示您的更改,而不在服务器上进行更改。这将输出有效的configmap,因此,如果将其通过管道传输到文件,则可以使用它:

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

答案 1 :(得分:4)

近 3 年前的问题,答案已被接受,但仅适用于来访的新人。

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

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

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

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

答案 2 :(得分:0)

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