有没有办法为 Kubernetes Pod 创建一个包含多个文件的 configMap?

Is there a way to create a configMap containing multiple files for a Kubernetes Pod?

我想使用 Kubernetes 部署 Grafana,但我不知道如何将配置的仪表板附加到 Pod。将它们作为键值数据存储在 configMap 中对我来说就像一场噩梦 - 这里的示例 https://github.com/do-community/doks-monitoring/blob/master/manifest/dashboards-configmap.yaml - 在我的情况下,它会给我更多 JSON 仪表板 - 因此是严厉的意见。

我没有将 Grafana 设置、数据源和仪表板提供程序配置为 configMaps,因为它们是在单个文件中定义的,但仪表板的情况对我来说有点棘手。

我所有的仪表板都存储在“/files/dashboards/”下的 repo 中,我想知道除了前面描述的方式之外,如何让它们对 Pod 可用。暂时想知道如何使用 hostPath 对象,但对于不同主机上的多节点部署没有意义。

也许这很简单 - 但我对 Kubernetes 还很陌生,无法理解 - 所以非常感谢任何帮助。谢谢!

您可以查看这些选项:

  • 使用 persistent volume.

  • 将仪表板的 JSON 文件存储在 git 等代码库、nexus 等文件库或纯 Web 服务器中,然后使用 init container to get the files before the application (Grafana) container is started and put them on a volume shared between the init container and the application (Grafana) container. This example可能是一个很好的起点。

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

  • 类型的卷

您可以从目录中的一组文件自动生成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