有没有一种方法可以为Kubernetes Pod创建一个包含多个文件的configMap?

4
我想使用Kubernetes部署Grafana,但我不知道如何将配置好的仪表板附加到Pod上。像在这个例子https://github.com/do-community/doks-monitoring/blob/master/manifest/dashboards-configmap.yaml中一样将它们作为键值对数据存储在configMap中似乎是一场噩梦——在我的情况下,会有更多的JSON仪表板——所以这是一个很严厉的意见。
对于我来说,配置Grafana设置、数据源和仪表板提供程序作为configMaps没有问题,因为它们被定义在单个文件中,但仪表板的情况对我来说有点棘手。
我的所有仪表板都存储在“/files/dashboards/”下的代码库中,我想知道除了之前描述的方式外,如何使它们可用于Pod。曾经想过使用hostPath对象,但在不同主机上进行多节点部署并不合理。
也许这很容易,但我对Kubernetes相当新手,不能弄清楚,所以任何帮助都将不胜感激。谢谢!
2个回答

8
您可以从目录中的文件集自动生成ConfigMap。每个文件将成为ConfigMap中的一个键值对,其中文件名是键,文件内容是值(就像您链接示例中手动完成的那样,但这次是自动完成)。
假设您的仪表板文件存储为以下格式:
files/dashboards/
├── k8s-cluster-rsrc-use.json
├── k8s-node-rsrc-use.json
└── k8s-resources-cluster.json

您可以运行以下命令直接在集群中创建ConfigMap:
kubectl create configmap my-config --from-file=files/dashboards

如果你只想生成ConfigMap的YAML清单,你可以这样做:

kubectl create configmap my-config --from-file=files/dashboards --dry-run -o yaml >my-config.yaml

2
您可以考虑以下选项:
  • 使用持久卷

  • 将仪表板的JSON文件存储在代码仓库(如Git)、文件仓库(如Nexus)或普通Web服务器中,并使用init容器在应用程序(Grafana)容器启动之前获取文件,并将它们放置在一个共享卷上,该卷由init容器和应用程序(Grafana)容器共享。 这个示例可能是一个很好的起点。

    请注意,这不需要持久卷。请参见示例-它使用类型为emptyDir的卷。


谢谢你的建议,但我选择了configMaps - 感谢你的帮助! - notadev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接