通过它我们可以创建一个链接到外部文件的配置映射。
kubectl create configmap database-config --from-file=database.properties
但是当我们编辑 yaml 时,它将显示文件的完整内容被转储在那里。
有没有办法只指向 yaml 中的一个文件,这样我将属性文件保存在与 configmap yaml 相同的文件夹中,并将所有 yaml 应用于该文件夹:
kubectl apply -f target_folder\
请提出建议。
答案1
什么configmap
是
ConfigMap 是一个 API 对象,用于以键值对的形式存储非机密数据。Pod 可以将 ConfigMap 作为环境变量、命令行参数或卷中的配置文件使用。
ConfigMap 允许您将特定于环境的配置与容器映像分离,以便您的应用程序易于移植。
换句话说,当configmap
从外部文件(如您的情况)或其他值创建时,API 服务器将验证一切是否正确,然后将其保存到etcd
。这也解释了为什么您edit
会configmap
看到其整个上下文。发生这种情况是因为configmap
从读取etcd
,而不是从任何外部源读取。
这也是不建议将大文件存储为 configmaps 或 secrets 的原因之一——它会影响 kubernetes 集群的性能,因为所有集群的对象都存储在其中etcd
。
Kustomize
configmap
这是实现基于同一目录中的文件运行一条命令进行创建/配置需求的方法之一。它是一个独立的工具,可通过 kustomization 文件自定义 Kubernetes 对象。
我创建了一个简短而简单的例子来解释这个想法:
$ tree
.
├── application.properties
└── kustomization.yaml
0 directories, 2 files
$ cat kustomization.yaml
generatorOptions:
disableNameSuffixHash: true # this flag is used to avoid creation of new configmap, instead it will be modified when file context is changed
configMapGenerator:
- name: application-config
files:
- application.properties
$ cat application.properties
listen.url=localhost:9010
client.url=some_url:3000
测试一下,这个命令将仅渲染configmap,它还不会创建它:
$ kubectl kustomize application.settings/
apiVersion: v1
data:
application.properties: |
listen.url=localhost:9010
client.url=some_url:3000
kind: ConfigMap
metadata:
name: application-config
最后一步是申请它:
$ kubectl apply -k application.settings/
configmap/application-config created
$ kubectl get cm
NAME DATA AGE
application-config 1 23s
对上述命令的简要解释:
要应用这些资源,请运行带有 --kustomize 或 -k 标志的 kubectl apply。