You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

安装Bitnami Elasticsearch Helm Chart后无法获取节点锁求助

问题:Bitnami Elasticsearch 搭配 NFS-CSI 存储时节点锁获取失败

背景

此前已成功使用 NFS-CSI 驱动为 bitnami/kafka 提供持久化存储,但在为 bitnami/elasticsearch 配置相同存储方案时启动失败。

当前存储类信息

$ kubectl get sc
NAME                PROVISIONER       RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
nfs-csi (default)   nfs.csi.k8s.io    Delete          Immediate           false                  43d

安装步骤

$ kubectl create ns elk2

$ helm pull oci://registry-1.docker.io/bitnamicharts/elasticsearch

$ vim elasticsearch/values.yaml

修改后的values.yaml核心配置:

global:
  imageRegistry: ""
  imagePullSecrets: []
  storageClass: "nfs-csi"   
  elasticsearch:
    service:
      name: elasticsearch
      ports:
        restAPI: 9200
  kibanaEnabled: false

执行安装:

$ helm install elasticsearch ./ -f values.yaml -n elk2 

$ helm list -n elk2
NAME            NAMESPACE   REVISION    UPDATED                                 STATUS      CHART                   APP VERSION
elasticsearch   elk2        1           2023-07-28 22:26:03.468994841 +0800 CST deployed    elasticsearch-19.10.6   8.9.0    

错误日志

$ kubectl logs -f elasticsearch-master-1 -n elk2
.....
.....
[2023-07-28T14:29:08,437][INFO ][o.e.p.PluginsService     ] [elasticsearch-master-1] loaded module [vector-tile]
[2023-07-28T14:29:08,437][INFO ][o.e.p.PluginsService     ] [elasticsearch-master-1] loaded module [lang-expression]
[2023-07-28T14:29:08,437][INFO ][o.e.p.PluginsService     ] [elasticsearch-master-1] loaded module [x-pack-eql]
[2023-07-28T14:29:10,660][ERROR][o.e.b.Elasticsearch      ] [elasticsearch-master-1] fatal exception while booting Elasticsearch java.lang.IllegalStateException: failed to obtain node locks, tried [/bitnami/elasticsearch/data]; maybe these locations are not writable or multiple nodes were started on the same data path?
    at org.elasticsearch.server@8.9.0/org.elasticsearch.env.NodeEnvironment.<init>(NodeEnvironment.java:292)
    at org.elasticsearch.server@8.9.0/org.elasticsearch.node.Node.<init>(Node.java:490)
    at org.elasticsearch.server@8.9.0/org.elasticsearch.node.Node.<init>(Node.java:334)
    at org.elasticsearch.server@8.9.0/org.elasticsearch.bootstrap.Elasticsearch$2.<init>(Elasticsearch.java:234)
    at org.elasticsearch.server@8.9.0/org.elasticsearch.bootstrap.Elasticsearch.initPhase3(Elasticsearch.java:234)
    at org.elasticsearch.server@8.9.0/org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:72)
Caused by: java.io.IOException: failed to obtain lock on /bitnami/elasticsearch/data
    at org.elasticsearch.server@8.9.0/org.elasticsearch.env.NodeEnvironment$NodeLock.<init>(NodeEnvironment.java:237)
    at org.elasticsearch.server@8.9.0/org.elasticsearch.env.NodeEnvironment$NodeLock.<init>(NodeEnvironment.java:205)
    at org.elasticsearch.server@8.9.0/org.elasticsearch.env.NodeEnvironment.<init>(NodeEnvironment.java:284)
    ... 5 more
Caused by: java.nio.file.NoSuchFileException: /bitnami/elasticsearch/data/node.lock
    at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:92)
    at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:106)
    at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
    at java.base/sun.nio.fs.UnixPath.toRealPath(UnixPath.java:825)
    at org.apache.lucene.core@9.7.0/org.apache.lucene.store.NativeFSLockFactory.obtainFSLock(NativeFSLockFactory.java:94)
    at org.apache.lucene.core@9.7.0/org.apache.lucene.store.FSLockFactory.obtainLock(FSLockFactory.java:43)
    at org.apache.lucene.core@9.7.0/org.apache.lucene.store.BaseDirectory.obtainLock(BaseDirectory.java:44)
    at org.elasticsearch.server@8.9.0/org.elasticsearch.env.NodeEnvironment$NodeLock.<init>(NodeEnvironment.java:230)
    ... 7 more
    Suppressed: java.nio.file.AccessDeniedException: /bitnami/elasticsearch/data/node.lock
        at java.base/sun.nio.fs.UnixException.translateToIOException(UnixException.java:90)
        at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:106)
        at java.base/sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111)
        at java.base/sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:218)
        at java.base/java.nio.file.Files.newByteChannel(Files.java:380)
        at java.base/java.nio.file.Files.createFile(Files.java:658)
        at org.apache.lucene.core@9.7.0/org.apache.lucene.store.NativeFSLockFactory.obtainFSLock(NativeFSLockFactory.java:84)
        ... 10 more

ERROR: Elasticsearch did not exit normally - check the logs at /opt/bitnami/elasticsearch/logs/elastic.log

ERROR: Elasticsearch exited unexpectedly

已完成排查

  • 确认 NFS 服务器端目录权限配置正常

解决方案

1. 替换 Elasticsearch 文件锁实现

NFS 对NativeFSLockFactory的支持存在兼容性问题,改用SimpleFSLockFactory规避:
在values.yaml中添加配置:

elasticsearch:
  config:
    env.lock_factory: "simplefs"

2. 调整 NFS 挂载参数

修改 NFS-CSI 存储类的挂载参数,添加文件锁相关配置:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-csi
provisioner: nfs.csi.k8s.io
parameters:
  server: <你的NFS服务器地址>
  share: <你的NFS共享路径>
  mountOptions: "nolock"  # 若NFS版本为v4可尝试改为"lock"
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: false

3. 确认容器内目录权限

Bitnami Elasticsearch 默认以1001用户运行,在 NFS 服务器上调整目录权限:

chown -R 1001:1001 /path/to/nfs/share/elasticsearch-pvc
chmod -R 755 /path/to/nfs/share/elasticsearch-pvc

临时排查可尝试以 root 用户启动容器(不建议生产环境使用):

elasticsearch:
  master:
    securityContext:
      runAsUser: 0
      runAsGroup: 0

4. 确保节点使用独立 PVC

验证每个 Elasticsearch 节点都分配了独立的 PVC,检查values.yaml配置:

elasticsearch:
  master:
    persistence:
      enabled: true
      storageClass: "nfs-csi"
  data:
    persistence:
      enabled: true
      storageClass: "nfs-csi"

内容的提问来源于stack exchange,提问作者Wei Yu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 23:23:11