RKE集群部署ECK Elasticsearch就绪探针失败curl返回码7问题咨询
问题根因
- 代理规则配置错误:集群节点、ES容器的全局代理配置未将127.0.0.0/8网段、0.0.0.0、集群Pod网段、Service网段加入
no_proxy例外列表,导致curl访问本地9200端口时被强制转发到代理服务器,返回503或连接失败错误,直接触发就绪探针返回码7的报错。 - JVM SIGSEGV崩溃触发原因:
- ES容器的内存资源限制设置不合理,JVM堆内存未配置为容器内存limit的50%,触发内存越界
- RKE集群使用的容器运行时(Docker/containerd)版本与ES内置JDK版本存在兼容性bug
- 预配置的PV挂载权限错误,ES进程无数据目录写入权限,导致JVM本地文件操作触发崩溃
解决方案
1. 修复代理配置
- 调整RKE集群节点的全局代理配置,将
127.0.0.0/8,0.0.0.0,localhost,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,.svc,.cluster.local加入no_proxy环境变量,重启节点的kubelet、容器运行时服务 - 在ES的资源清单中添加容器级代理例外配置,参考示例:
apiVersion: elasticsearch.k8s.elastic.co/v1 kind: Elasticsearch metadata: name: quickstart spec: version: 你实际部署的ES版本号 nodeSets: - name: default count: 1 podTemplate: spec: containers: - name: elasticsearch env: - name: HTTPS_PROXY value: 你的代理服务地址 - name: NO_PROXY value: "127.0.0.0/8,0.0.0.0,localhost,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,.svc,.cluster.local" - name: ES_JAVA_OPTS value: "-Xms2g -Xmx2g" resources: requests: memory: 2Gi cpu: 1 limits: memory: 4Gi volumeClaimTemplates: - metadata: name: elasticsearch-data spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: 你预配置PV对应的存储类名称
2. 修复JVM崩溃问题
- 保持JVM堆内存
Xms和Xmx参数数值一致,且总大小不超过容器内存limit的50%,避免堆内存动态调整触发异常 - 配置Pod安全上下文,确保ES进程有权限读写PV挂载目录,在
podTemplate.spec下添加如下配置:
securityContext: runAsUser: 1000 fsGroup: 1000
- 若以上配置正常仍出现SIGSEGV错误,升级RKE集群的containerd/Docker版本到对应ES版本兼容的运行时版本,或在
ES_JAVA_OPTS中添加-XX:SignalHandling=legacy参数规避内核信号处理兼容性问题
验证步骤
- 重新应用ES资源配置后进入容器,执行
curl -k https://127.0.0.1:9200,返回正常的ES节点信息即表示代理配置修复成功 - 查看Pod事件,就绪探针状态变为正常、无异常重启即说明问题解决
内容的提问来源于stack exchange,提问作者Michal
相关产品推荐
相关产品推荐

