一、部署环境:
• K8s nodes:1个master(2CPU\2GB内存)、2个worker node(2CPU\3GB内存)
• Centos 7.8(5.8.5-1.el7.elrepo.x86_64)
• Kubernetes v1.19.0
• Docker 19.03.12
• Elasticsearch镜像版本:elasticsearch:6.8.8
• Fluentd镜像版本:fluent/fluentd-kubernetes-daemonset:v1-debian-elasticsearch
• Kibana镜像版本:kibana:6.8.8
二、部署注意事项(填坑):
1、确认Kubernetes的环境是正常的:查看kube-DNS、kube-proxy、kube-apiserver等组件的日志有无异常,因我初次部署时Centos内核是3.10.x,该内核运行k8s有网络bug,经常出现网络异常,因此强烈建议将Centos升级到4.4.x以上的内核.
2、Elasticsearch拥有的内存权限至少需要262144,因此在部署前,在每个Node节点上执行:
sysctl -w vm.max_map_count=262144
sysctl -a|grep vm.max_map_count #查看
上述方法修改之后,如果重启虚拟机将失效,所以需要在 /etc/sysctl.conf文件最后添加一行:
vm.max_map_count=262144
3、出现“kibana server is not ready yet”,是因Kibana的ELASTICSERACH_URL地址配置错误,或elasticsearch部署有问题(如内存资源不够、内存权限不够、许可失效等);
4、注意EFK软件版本的匹配,Elasticsearch与Kibana的软件版本一定要相同,还有Fluentd的版本一定要能适配Kubernetes的;我开始几次部署都是Kibana抓不到Elasticsearch数据,创建不了Index Patterns索引,原因就是Fluentd版本匹配不了;
5、部署ELK组件后检查运行状态(192.168.100.1是我master节点的外网IP,可以换成你的node IP+定义的端口):
5.1、检查Elasticsearch集群工作状态:
http://192.168.100.1:31200/_cluster/health?pretty
5.2、检查Elasticsearch各组件的工作状态:
http://192.168.100.1:31200/_xpack?pretty