Kubernetes-初始化数据库部署的持久卷的最佳方法

时间:2019-07-11 19:03:13

标签: kubernetes

我有Neo4j服务,但是在开始部署之前,我需要预填充数据(大约2GB数据)。目前,我编写了一个Kubernetes Job,用于从CSV转换数据并使用neo4j-admin工具将其格式化为数据库。它将格式化的数据保存到永久卷。等待作业完成后,我将卷安装在Neo4j容器中,并且该容器在余下的时间里实际上是只读的。

是否有更好的方法可以更自动地执行此操作?

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

2 个答案:

答案 0 :(得分:1)

由于作业一旦完成就无法原生生成新对象(如果正常退出,则使用PreStop调用进一步的操作将无法正常工作),您可能希望改为监视API对象。

Programatically accessing the API确定作业何时完成,然后create your Deployment object可能是一种可行的自动化方法。

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

此外,使用official Go library允许您run within the cluster, in a pod or externally

答案 1 :(得分:0)

我假设您说部署会将卷加载为只读,因此您的neo4j部署不会更新neo4j应用程序数据。

如果是这种情况,为什么要让kubernetes进行数据加载?使用诸如s3或天蓝色数据湖之类的对象存储,并确保有一些数据工作流管道可以更新对象存储。有很多工具可以提供数据管道功能,例如oozie,气流。

在部署中,您可以通过持久卷声明引用对象存储。