如何将 configmap 链接到外部文件?

如何将 configmap 链接到外部文件?

通过它我们可以创建一个链接到外部文件的配置映射。

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。这也解释了为什么您editconfigmap看到其整个上下文。发生这种情况是因为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。

相关内容