首页 > 解决方案 > Kubernetes - 为数据库部署初始化持久卷的最佳方式

问题描述

我有一个 Neo4j 服务,但是在部署启动之前,我需要用数据预先填充它(大约 2GB 的数据)。目前,我编写了一个 KubernetesJob来将数据从 CSV 转换并使用该neo4j-admin工具为数据库格式化。它将格式化的数据保存到持久卷中。等待作业完成后,我将卷挂载到 Neo4j 容器中,并且容器在其剩余生命周期内有效地只读此数据。

有没有更好的方法可以更自动地做到这一点?

我不想等待作业完成来运行另一个命令来创建 Neo4j 部署。我查看了 initContainers,但这不合适,因为我不想在重新创建 pod 时重做数据填充。我只希望后续的 pod 从同一个持久卷中读取。有没有办法等待作业先完成?

标签: kubernetes

解决方案


由于 Jobs 无法在完成后本地生成新对象(如果正常退出,使用PreStop调用进一步的操作将不起作用),您可能希望改为监视 API 对象。

以编程方式访问 API以确定 Job 何时完成,然后创建 Deployment 对象可能是一种可行的自动化方式。

这样做,您不必担心使用 initContainers 重做数据处理,因为您实际上可以调用部署并重新安装已经存在的卷。

此外,使用官方 Go 库允许您在集群内、pod 中或外部运行


推荐阅读