几个月前,我在Kubernetes (GCP)上部署了Elastic-Search (version - 8.0.1)作为外部负载均衡器的服务。
现在,我无法对ElasticSearch执行任何读或写操作。我检查了日志,发现节点的内存几乎满了。
下面是一些支持这种分析的日志:
洪水水位[95%]超过[hulk-es-default-0][/usr/share/elasticsearch/data] free: 18.5mb[1.8%],该节点上的所有索引将被标记为只读
集群健康状态从[YELLOW]变为[RED] (reason: [shards failed [[1][0]]]).
此节点不健康:health check failed on [/usr/share/elasticsearch/data]. '
以下是执行任何读/写操作时出现的错误:
elasticsearch.exceptions。TransportError: TransportError(503, 'master_not_discovered_exception', None)
elasticsearch.exceptions。ConnectionTimeout: ReadTimeoutError(httpconnectionpool (host='…', port=****):读取超时。(读取超时= 30))
我增加了我的elasticsearch持久卷声明(PVC)的容量,但无法用新卷创建pod。
我遵循以下步骤-
-
在StorageClass对象中设置allowVolumeExpansion字段为true
-
伸缩ElasticSearch操作符部署到0个副本。
-
使用
删除未删除pod的statfulset Object
kubectl delete sts <statefulset-name> --cascade=orphan
在删除之前,我使用
保存了状态集的yaml。kubectl get sts <statefulset-name> -o yaml
- 增加了PVC的yaml文件的存储容量。
- 用我使用 保存的yaml文件用新的存储请求重新创建StatefulSet
kubectl apply -f file-name.yml
- 将操作员部署缩减到1
但是,当我重新创建有状态集时,每次都显示CrashLoopBackOff
错误。
以下是一些日志
- 就绪探测失败
- 可能的根本原因:java.io.IOException: No space left on device
- 使用数据路径,mount [[/usr/share/elasticsearch/data (/dev/sdb)]], net usable_space [0b], net total_space [975.8mb], types [ext4]
ES pod正在访问的持久磁盘的卷增加了,但pod仍然无法启动。谁能指点我一下,这里有什么问题吗?
似乎是磁盘空间(/usr/share/elasticsearch/data)的问题。验证所需大小的持久卷是否可用,并通过PVC对象绑定到elasticsearch pod。
由于某些原因,Pod似乎没有看到新的卷大小。您是否尝试过GKE卷扩展?
如果Pod始终处于CrashLoopBackOff
状态,您可以使用例如:kubectl debug mypod -it --image=busybox
,因此您将附加一个调试容器到您的Pod并检查安装的卷发生了什么。
您还可以做的其他事情是创建卷的快照/备份,并将其恢复到新的更大的卷上,以查看问题是否仍然存在。