1. 使用Fluentd收集控制台日志
1.1 架构说明
Kubernetes官方提出了EFK(Elasticsearch + Fluentd + Kibana)的日志收集解决方案,相对于ELK中的Logstash,Fluentd采用“一锅端”的形式,可以直接将某些日志文件中的内容存储至Elasticsearch,然后通过Kibana进行展示。
Tips:Fluentd只能收集控制台日志(程序直接输出到控制台的日志),不能收集非控制台日志。
1.2 部署EFK
部署 Elasticsearch+Fluentd+Kibana,项目地址:https://github.com/dotbalo/k8s.git ,将该目录下载下来。
提前下载镜像推送到本地Harbor仓库
docker pull alpine:3.6
docker pull quay.io/fluentd_elasticsearch/elasticsearch:v7.10.2
docker pull registry.cn-beijing.aliyuncs.com/dotbalo/kibana-oss:7.10.2
创建 EFK 所用的命名空间
kubectl create -f create-logging-namespace.yaml
创建 Elasticsearch 集群
#提前修改本地镜像地址
[root@k8s-master01 efk-7.10.2]# grep -n "image:" es-statefulset.yaml
70: - image: 10.0.0.190/yinjay/elasticsearch:v7.10.2
115: - image: 10.0.0.190/yinjay/alpine:3.6
#创建Service
kubectl create -f es-service.yaml
#创建Statefulset
kubectl create -f es-statefulset.yaml
创建 Kibana
#提前修改本地镜像地址
[root@k8s-master01 fluentd-elasticsearch]# grep -n "image:" kibana-deployment.yaml
24: image: 10.0.0.190/yinjay/kibana-oss:7.10.2
#创建Service
kubectl create -f kibana-service.yaml
#创建Deployment
kubectl create -f kibana-deployment.yaml
由于在 Kubernetes 集群中,我们可能并不需要对所有的机器都采集日志,所以可以更改Fluentd 的部署文件如下,添加一个 NodeSelector,只部署至需要采集的主机即可。
之后给需要采集日志的节点打上一个标签
kubectl label node k8s-master01 fluentd=true
kubectl label node k8s-master02 fluentd=true
kubectl label node k8s-master03 fluentd=true
查询打上该label的节点
创建 Fluentd
kubectl create -f fluentd-es-ds.yaml -f fluentd-es-configmap.yaml
1.3 Kibana使用
查看全部Pod已经running
接下来查看 Kibana 暴露的端口号,访问 Kibana。访问格式:节点IP:暴露的端口号/kibana
添加数据