您需要先创建.env 文件。理想情况下,即使创建配置映射也应该基于现有文件(以下是 kustomize 和 kubectl --from-file 的示例)。
那么如何创建一个configmap有两种选择:
- 创建带有环境变量的
.env 文件(这是您的示例配置图)
- 使用来自
.env 文件的环境变量创建一个配置映射(每个变量都是一个单独的键)
测试结构:
$ tree -a
.
├── .env
└── kustomization.yaml
$ cat .env # same as your test data
NEXT_PUBLIC_API_URL=http://my.domain.com
API_URL=http://my.domain.com
带有.env 文件的configmap,里面有envvars:
kustomization.yaml 带有附加选项:
$ cat kustomization.yaml
configMapGenerator:
- name: frontend-configmap
files: # using files here as we want to create a whole file
- .env
generatorOptions:
disableNameSuffixHash: true # use a static name
disableNameSuffixHash - 禁止将内容哈希后缀附加到生成资源的名称,请参阅generator options。
剩下的就是运行它:
$ kustomize build .
apiVersion: v1
data:
.env: | # you can see it's a file with context within
NEXT_PUBLIC_API_URL=http://my.domain.com
API_URL=http://my.domain.com
kind: ConfigMap
metadata:
name: frontend-configmap
使用--from-file选项运行可以达到同样的效果:
$ kubectl create cm test-configmap --from-file=.env --dry-run=client -o yaml
apiVersion: v1
data:
.env: |
NEXT_PUBLIC_API_URL=http://my.domain.com
API_URL=http://my.domain.com
kind: ConfigMap
metadata:
creationTimestamp: null
name: test-configmap
以 envvars 作为键的配置映射:
$ cat kustomization.yaml
configMapGenerator:
- name: frontend-configmap
envs: # now using envs to create a configmap with envvars as keys inside
- .env
generatorOptions:
disableNameSuffixHash: true # use a static name
运行它以查看输出:
$ kustomize build .
apiVersion: v1
data: # you can see there's no file and keys are created directly
API_URL: http://my.domain.com
NEXT_PUBLIC_API_URL: http://my.domain.com
kind: ConfigMap
metadata:
name: frontend-configmap
与kubectl 和--from-env-file 选项相同:
$ kubectl create cm test-configmap --from-env-file=.env --dry-run=client -o yaml
apiVersion: v1
data:
API_URL: http://my.domain.com
NEXT_PUBLIC_API_URL: http://my.domain.com
kind: ConfigMap
metadata:
creationTimestamp: null
name: test-configmap
更多详情:
编辑 - 使用现有的 configmap.yaml
如果configmap 已经存在,那么可以从kustomization.yaml 引用它(正如评论中提到的,kustomize 是一个模板引擎,并且仅在没有任何转换的情况下直接使用它并没有真正使感觉。Here 是您需要使用 kustomize 的示例之一。
$ tree
.
├── cm.yaml
└── kustomization.yaml
cm.yaml 与问题中的配置完全相同。
$ cat kustomization.yaml
resources:
- cm.yaml
namePrefix: test- # used namePrefix for demo purpose (you can omit it as well)
构建这个并获得与 .env 相同的 configmap 文件:
$ kustomize build .
apiVersion: v1
data:
.env: |-
NEXT_PUBLIC_API_URL=http://my.domain.com
API_URL=http://my.domain.com
kind: ConfigMap
metadata:
name: test-frontend-configmap # name with prefix as it was setup for demo
namespace: default