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



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

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

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

也许这很容易 - 但我对 Kubernetes 相当陌生,无法弄清楚 - 所以任何帮助将不胜感激。谢谢!

您可以从目录中的一组文件自动生成配置映射。每个文件都是 ConfigMap 中的一个键值对,文件名是键,文件内容是值(如链接示例所示,但自动完成而不是手动完成(。

假设您的仪表板文件存储为,例如:

files/dashboards/
├── k8s-cluster-rsrc-use.json
├── k8s-node-rsrc-use.json
└── k8s-resources-cluster.json

您可以运行以下命令,直接在集群中创建配置映射:

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

你可以看看这些选项:

  • 使用永久性卷。

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

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

相关内容

最新更新