我有Neo4j服务,但是在开始部署之前,我需要预填充数据(大约2GB数据)。目前,我编写了一个Kubernetes Job
,用于从CSV转换数据并使用neo4j-admin
工具将其格式化为数据库。它将格式化的数据保存到永久卷。等待作业完成后,我将卷安装在Neo4j容器中,并且该容器在余下的时间里实际上是只读的。
是否有更好的方法可以更自动地执行此操作?
我不想等待作业完成就可以运行另一个命令来创建Neo4j部署。我调查了initContainers,但这不合适,因为我不想在重新创建Pod时重做数据填充。我只希望后续的pod从相同的持久卷中读取。有没有办法等到工作先完成?
答案 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,气流。
在部署中,您可以通过持久卷声明引用对象存储。