在Minikube的Kubernetes环境部署ELK栈后遇组件启动异常
看起来你在Ubuntu 18.04的Minikube(none驱动)上用Helm部署ELK时遇到了几个连锁问题,我来帮你一步步拆解解决:
1. 先搞定Pending的Pod:Elasticsearch Data节点和Logstash
你的elk-elasticsearch-data-0和elk-logstash-0一直处于Pending状态,虽然没有资源不足的报错,但这大概率是后续组件异常的根源之一。先做这两步:
- 执行
kubectl describe pod elk-elasticsearch-data-0,重点看Events板块。很多时候Helm的ES chart会给data节点设置节点标签要求,而Minikube none驱动的节点可能没打对应标签;或者是存储卷绑定出了问题——虽然你已经有两个PV绑定了master节点,但data节点的PVC可能没正确创建或绑定。 - 用同样的命令检查
elk-logstash-0的事件信息,确认是不是资源限制、调度规则或者存储配置的问题。
2. 解决Filebeat的DNS解析失败问题
Filebeat报的lookup elk-elasticsearch-client.elk.svc on 10.96.0.10:53: no such host是典型的K8s DNS解析异常,按这个顺序排查:
第一步:确认目标Service是否存在
先执行kubectl get svc -n elk(如果你的ELK没部署在elk命名空间,就去掉-n elk),看看有没有elk-elasticsearch-client这个Service。如果找不到,说明Helm部署时这个Service没正确生成,得检查你的Helm values配置,或者重新部署ES的chart。
第二步:检查集群DNS状态
Minikube默认用CoreDNS做DNS服务,执行kubectl get pods -n kube-system | grep coredns,看看CoreDNS的Pod是不是正常Running。要是CoreDNS挂了,整个集群的DNS解析都会出问题。
第三步:在正常Pod里测试连通性
找一个状态正常的Pod,比如elk-elasticsearch-master-0,进入Pod内部:kubectl exec -it elk-elasticsearch-master-0 -- /bin/bash,然后执行nslookup elk-elasticsearch-client.elk.svc。如果能解析到IP,说明Filebeat的Pod本身DNS配置有问题;如果也解析不到,那就是Service或者CoreDNS的问题。
第四步:核对Filebeat的ES地址配置
打开你的Filebeat Helm values文件,确认Elasticsearch的地址是不是写错了。比如如果你的ES部署在default命名空间,那地址应该是http://elk-elasticsearch-client.default.svc:9200,而不是elk.svc结尾。
3. 修复Kibana未就绪的问题
Kibana未就绪基本都是因为连不上Elasticsearch,等前面的ES集群问题解决后,它大概率会自动恢复。你可以先看一下Kibana的日志确认原因:kubectl logs elk-kibana-77b97d7c69-d4jzz,应该能看到类似连接ES失败的报错。
4. 额外的验证小步骤
- 检查ES集群健康状态:进入
elk-elasticsearch-master-0Pod,执行curl localhost:9200/_cluster/health,看看集群状态是green、yellow还是red。如果是red,说明集群有严重故障,得优先修复。 - 确认Curator的执行情况:虽然Curator的Pod是Completed状态,但可以看日志确认任务是否正常执行:
kubectl logs elk-elasticsearch-curator-1582107120-4f2wm。
针对Minikube none驱动的快速优化建议
因为none驱动的Minikube资源本来就有限,Helm chart的默认资源请求可能太高,导致Pod无法调度。你可以修改values.yaml降低资源要求,比如:
elasticsearch: data: resources: requests: cpu: "250m" memory: "512Mi" logstash: resources: requests: cpu: "250m" memory: "512Mi"
然后执行helm upgrade elk your-chart-name -f your-values.yaml(替换成你实际的chart名称)重新部署。
内容的提问来源于stack exchange,提问作者Tobbes

