Mao*_*dok 17 google-cloud-platform kubernetes google-kubernetes-engine kubectl
如何以yaml格式描述此命令?
kubectl create configmap somename --from-file=./conf/nginx.conf
Run Code Online (Sandbox Code Playgroud)
我期望做类似下面的yaml,但它不起作用
apiVersion: v1
kind: ConfigMap
metadata:
name: somename
namespace: default
fromfile: ./conf/nginx.conf
Run Code Online (Sandbox Code Playgroud)
任何的想法?
jax*_*orm 15
这不起作用,因为kubernetes不知道本地文件的路径.您可以通过执行以下操作来模拟它:
kubectl create configmap --dry-run somename --from-file=./conf/nginx.conf --output yaml
Run Code Online (Sandbox Code Playgroud)
该--dry-run标志将仅显示您对stdout的更改,而不是在服务器上进行更改.这将输出一个有效的configmap,所以如果你将它传递给一个文件,你可以使用:
kubectl create configmap --dry-run somename --from-file=./conf/nginx.conf --output yaml | tee somename.yaml
Run Code Online (Sandbox Code Playgroud)
近 3 年前的问题,有一个公认的答案,但只是针对那些新来的人。
这也可以通过 Helm Chart 来实现。如果您使用 helm 图表,则可以将这些文件放在files/图表中的目录下,并从 YAML 中引用这些文件:
{{ .Files.Get "files/filename.ext" }}
Run Code Online (Sandbox Code Playgroud)
这种包含也可以根据 go 中可用的函数进行编码,例如
{{ .Files.Get "files/filename.ext" | b64enc }}
Run Code Online (Sandbox Code Playgroud)
您可以使用 kustomize,它不仅可以轻松管理配置映射,还可以轻松管理其他资源。我认为您想从 yaml 中的文件创建 configmap,因此您可以在kustomization.yaml文件中执行以下操作:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
configMapGenerator:
- files:
- ./conf/nginx.conf
name: nginx-config
Run Code Online (Sandbox Code Playgroud)
此外,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
Run Code Online (Sandbox Code Playgroud)
部署您可以像这样运行它的所有内容:
$ kustomize build | kubectl apply -f -
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅此处