Elastic及Bitnami的Elasticsearch Helm Chart在k3s v1.21.3部署失败求助
问题根因与解决方案
1 存储目录权限报错问题
根因
k3s默认内置的local-path存储类创建的PV,挂载后默认所有者为root用户,权限为755,而Elasticsearch官方及Bitnami的镜像均默认使用UID为1000的非root用户运行进程,无挂载目录写入权限。Minikube默认的存储类会自动适配Pod的securityContext.fsGroup配置调整PV权限,因此不会触发该问题。
解决方案
- 方案一:部署Chart时显式配置安全上下文参数
对于bitnami/elasticsearch,添加如下values配置:
对于elastic/elasticsearch,添加如下values配置:securityContext: enabled: true fsGroup: 1000 runAsUser: 1000 volumePermissions: enabled: true # fsGroup配置不生效时保留即可podSecurityContext: fsGroup: 1000 securityContext: runAsUser: 1000 allowPrivilegeEscalation: false - 方案二:多节点k3s集群可更换支持fsGroup自动适配的存储类(如Longhorn、nfs-subdir-external-provisioner)替代默认local-path。
2 集群内部域名解析失败、节点无法发现问题
根因
开启volumePermissions.enabled=true后,bitnami Chart的init容器默认未继承主容器的DNS策略,同时k3s默认关闭IPv6支持,Elasticsearch的JVM默认优先查询AAAA(IPv6)解析记录,会导致解析超时,无头服务域名解析失败后无法完成节点发现。
解决方案
- 部署时添加环境变量强制JVM优先使用IPv4,同时显式指定集群发现地址,bitnami/elasticsearch配置参考:
注:内存配置可根据集群实际资源调整,需保持Xms与Xmx数值一致,最大不超过31G。master: extraEnvVars: - name: ES_JAVA_OPTS value: "-Djava.net.preferIPv4Stack=true -Xms2g -Xmx2g" data: extraEnvVars: - name: ES_JAVA_OPTS value: "-Djava.net.preferIPv4Stack=true -Xms2g -Xmx2g" discovery: seedHosts: "{{ .Release.Name }}-elasticsearch-headless.{{ .Release.Namespace }}.svc.cluster.local" - 若k3s节点
/etc/resolv.conf存在无效DNS服务器,可在部署k3s时显式指定集群DNS参数:k3s server --kubelet-arg cluster-dns=10.43.0.10 --kubelet-arg cluster-domain=cluster.local
10.43.0.10为k3s默认coredns服务IP,若集群有自定义配置替换为对应IP即可。 - 单节点k3s集群可直接配置单节点发现模式,跳过DNS发现流程:
esConfig: elasticsearch.yml: | discovery.type: single-node
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

