1. 使用Fluentd收集控制台日志

1.1 架构说明

十二、kubernetes日志收集之Fluentd收集控制台日志_Kubernetes

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,只部署至需要采集的主机即可。

十二、kubernetes日志收集之Fluentd收集控制台日志_Kubernetes_02

之后给需要采集日志的节点打上一个标签

kubectl label node k8s-master01 fluentd=true
kubectl label node k8s-master02 fluentd=true
kubectl label node k8s-master03 fluentd=true


查询打上该label的节点

十二、kubernetes日志收集之Fluentd收集控制台日志_Kubernetes_03


创建 Fluentd

kubectl create -f fluentd-es-ds.yaml -f fluentd-es-configmap.yaml


1.3 Kibana使用

查看全部Pod已经running

十二、kubernetes日志收集之Fluentd收集控制台日志_Kubernetes_04


接下来查看 Kibana 暴露的端口号,访问 Kibana。访问格式:节点IP:暴露的端口号/kibana

十二、kubernetes日志收集之Fluentd收集控制台日志_Kubernetes_05

十二、kubernetes日志收集之Fluentd收集控制台日志_Kubernetes_06


添加数据

十二、kubernetes日志收集之Fluentd收集控制台日志_Kubernetes_07

十二、kubernetes日志收集之Fluentd收集控制台日志_Kubernetes_08

十二、kubernetes日志收集之Fluentd收集控制台日志_Kubernetes_09

十二、kubernetes日志收集之Fluentd收集控制台日志_Kubernetes_10

十二、kubernetes日志收集之Fluentd收集控制台日志_Kubernetes_11