Azure 通过Kubernetes安装卷时Neo4j关闭
我为neo4j创建了一个自定义dockerfile,用于导入必要的插件。接下来,我创建了一个部署yaml,我正在Azure上的Kubernetes上运行它。部署工作得很好,我可以在预期的URL上访问浏览器,效果非常好。但是,在我装入卷的那一刻,neo4j就无法使用下面提供的错误堆栈启动。Azure似乎正在使用干扰neo4j的必需目录?然而,我不知道如何解决这个问题 有什么想法吗 注二:Azure 通过Kubernetes安装卷时Neo4j关闭,azure,kubernetes,neo4j,persistent-volumes,Azure,Kubernetes,Neo4j,Persistent Volumes,我为neo4j创建了一个自定义dockerfile,用于导入必要的插件。接下来,我创建了一个部署yaml,我正在Azure上的Kubernetes上运行它。部署工作得很好,我可以在预期的URL上访问浏览器,效果非常好。但是,在我装入卷的那一刻,neo4j就无法使用下面提供的错误堆栈启动。Azure似乎正在使用干扰neo4j的必需目录?然而,我不知道如何解决这个问题 有什么想法吗 注二: 注意,挂载的目录是空的,因此还没有数据库 持久卷(声明)已经在一个简单的映像(如nginx)上进行了测试,效果
apiVersion: v1
kind: Service
metadata:
name: myservice
spec:
selector:
app: mygraph
ports:
- name: bolt
protocol: TCP
port: 7687
targetPort: 7687
nodePort: 30076
- name: http
protocol: TCP
port: 7474
targetPort: 7474
nodePort: 30074
- name: https
protocol: TCP
port: 7473
targetPort: 7473
nodePort: 30073
type: LoadBalancer
loadBalancerIP: 40.118.172.46
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mygraph-deployment
labels:
app: mygraph
spec:
replicas: 1
selector:
matchLabels:
app: mygraph
template:
metadata:
labels:
app: mygraph
spec:
containers:
- name: mygraph
image: mycontainer.azurecr.io/mygraph:dev
securityContext:
privileged: true
ports:
- containerPort: 7687
- containerPort: 7474
- containerPort: 7473
env:
- name: NEO4J_dbms_jvm_additional
value: "-Xms512m -Xmx6g"
# When adding the below lines the deployment failes. Without it, it works great!
volumeMounts:
- name: neo4jdata
mountPath: /data
volumes:
- name: neo4jdata
persistentVolumeClaim:
claimName: azurefile
以及相应的错误堆栈
2019-09-05 07:02:12.522+0000 INFO ======== Neo4j 3.3.9 ========
2019-09-05 07:02:12.560+0000 INFO Starting...
2019-09-05 07:02:14.122+0000 INFO Bolt enabled on 0.0.0.0:7687.
2019-09-05 07:02:14.274+0000 ERROR Failed to start Neo4j: Starting Neo4j failed: Component 'org.neo4j.server.database.LifecycleManagingDatabase@149dd36b' was successfully initialized, but failed to start. Please see the attached cause exception "Unable to create directory path [/var/lib/neo4j/data/databases/graph.db] for Neo4j store.". Starting Neo4j failed: Component 'org.neo4j.server.database.LifecycleManagingDatabase@149dd36b' was successfully initialized, but failed to start. Please see the attached cause exception "Unable to create directory path [/var/lib/neo4j/data/databases/graph.db] for Neo4j store.".
org.neo4j.server.ServerStartupException: Starting Neo4j failed: Component 'org.neo4j.server.database.LifecycleManagingDatabase@149dd36b' was successfully initialized, but failed to start. Please see the attached cause exception "Unable to create directory path [/var/lib/neo4j/data/databases/graph.db] for Neo4j store.".
at org.neo4j.server.exception.ServerStartupErrors.translateToServerStartupError(ServerStartupErrors.java:68)
at org.neo4j.server.AbstractNeoServer.start(AbstractNeoServer.java:220)
at org.neo4j.server.ServerBootstrapper.start(ServerBootstrapper.java:111)
at org.neo4j.server.ServerBootstrapper.start(ServerBootstrapper.java:79)
at org.neo4j.server.CommunityEntryPoint.main(CommunityEntryPoint.java:32)
Caused by: org.neo4j.kernel.lifecycle.LifecycleException: Component 'org.neo4j.server.database.LifecycleManagingDatabase@149dd36b' was successfully initialized, but failed to start. Please see the attached cause exception "Unable to create directory path [/var/lib/neo4j/data/databases/graph.db] for Neo4j store.".
at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:466)
at org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:107)
at org.neo4j.server.AbstractNeoServer.start(AbstractNeoServer.java:212)
... 3 more
Caused by: java.lang.RuntimeException: Error starting org.neo4j.kernel.impl.factory.GraphDatabaseFacadeFactory, /var/lib/neo4j/data/databases/graph.db
at org.neo4j.kernel.impl.factory.GraphDatabaseFacadeFactory.initFacade(GraphDatabaseFacadeFactory.java:211)
at org.neo4j.kernel.impl.factory.GraphDatabaseFacadeFactory.newFacade(GraphDatabaseFacadeFactory.java:126)
at org.neo4j.server.CommunityNeoServer.lambda$static$0(CommunityNeoServer.java:58)
at org.neo4j.server.database.LifecycleManagingDatabase.start(LifecycleManagingDatabase.java:88)
at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:445)
... 5 more
Caused by: org.neo4j.kernel.lifecycle.LifecycleException: Component 'org.neo4j.kernel.internal.locker.StoreLockerLifecycleAdapter@134d26af' was successfully initialized, but failed to start. Please see the attached cause exception "Unable to create directory path [/var/lib/neo4j/data/databases/graph.db] for Neo4j store.".
at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:466)
at org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:107)
at org.neo4j.kernel.impl.factory.GraphDatabaseFacadeFactory.initFacade(GraphDatabaseFacadeFactory.java:207)
... 9 more
Caused by: org.neo4j.kernel.StoreLockException: Unable to create path for store dir: /var/lib/neo4j/data/databases/graph.db. Please ensure no other process is using this database, and that the directory is writable (required even for read-only access)
at org.neo4j.kernel.internal.locker.StoreLocker.storeLockException(StoreLocker.java:116)
at org.neo4j.kernel.internal.locker.StoreLocker.checkLock(StoreLocker.java:79)
at org.neo4j.kernel.internal.locker.GlobalStoreLocker.checkLock(GlobalStoreLocker.java:60)
at org.neo4j.kernel.internal.locker.StoreLockerLifecycleAdapter.start(StoreLockerLifecycleAdapter.java:36)
at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:445)
... 11 more
Caused by: java.io.IOException: Unable to create directory path [/var/lib/neo4j/data/databases/graph.db] for Neo4j store.
at org.neo4j.io.fs.DefaultFileSystemAbstraction.mkdirs(DefaultFileSystemAbstraction.java:124)
at org.neo4j.kernel.internal.locker.StoreLocker.checkLock(StoreLocker.java:73)
... 14 more
2019-09-05 07:02:14.317+0000 INFO Neo4j Server shutdown initiated by request
发现这是一个向Azure写入数据的权限问题。特别是在
StorageClass
的设置中,您可以设置附加的mountOptions
。其中之一是uid
,它应该设置为100-用于neo4j的用户id
StorageClass yaml的示例:
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: azurefile-neo4j
provisioner: kubernetes.io/azure-file
reclaimPolicy: Retain
mountOptions:
- dir_mode=0755
- file_mode=0755
- uid=100 # Allow write access for neo4j
- gid=1000
parameters:
skuName: Standard_LRS
但奇怪的是,文件
/data/dbms
以前编写成功,而/data/databases
无法编写。dbms和数据库似乎是由不同的用户创建的?但这将是一个单独的问题。发现这是一个向Azure写入数据的权利问题。特别是在StorageClass
的设置中,您可以设置附加的mountOptions
。其中之一是uid
,它应该设置为100-用于neo4j的用户id
StorageClass yaml的示例:
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: azurefile-neo4j
provisioner: kubernetes.io/azure-file
reclaimPolicy: Retain
mountOptions:
- dir_mode=0755
- file_mode=0755
- uid=100 # Allow write access for neo4j
- gid=1000
parameters:
skuName: Standard_LRS
但奇怪的是,文件
/data/dbms
以前编写成功,而/data/databases
无法编写。dbms和数据库似乎是由不同的用户创建的?但这将是一个单独的问题。在创建卷时,您在卷的规范中设置了什么访问模式?@Pablisimo PersistentVolume和PersistentVolumeClaim的访问模式设置为RWX。我想这是意料之中的吧?此外,我在Azure文件中看到/data/dbms文件夹已成功创建,但/data/databases文件夹未成功创建。我想是因为dbms是在容器初始化期间创建的,而docker映像创建中已经存在/data/databases文件夹。创建卷时,您在卷的规范中设置了什么accessMode?@Pablissimo accessMode用于PersistentVolume和PersistentVolumeClaim设置为RWX。我想这是意料之中的吧?此外,我在Azure文件中看到/data/dbms文件夹已成功创建,但/data/databases文件夹未成功创建。我想是因为dbms是在容器初始化期间创建的,而/data/databases文件夹已经存在于docker映像创建中。