k8s-安装[kibana|fluentd]组件/k8s-pod日志展示
k8s集群:
k8s的控制节点
- ip:192.168.1.180/181/182
- 主机名:master01/02/03
- 配置:6vCPU/6Gi内存
k8s的工作节点:
- ip:192.168.1.183
- 主机名:node01
- 配置:6vCPU/8Gi内存
安装kibana可视化UI界面
#下载安装镜像
[root@node01 ~]# docker pull kibana:7.14.0
#更新资源清单文件
[root@master01 kibana]# kubectl apply -f kibana.yaml service/kibana created deployment.apps/kibana created
kibana.yaml文件如下:
[root@master01 kibana]# cat kibana.yaml apiVersion: v1 kind: Service metadata: name: kibana namespace: kube-logging labels: app: kibana spec: ports: - port: 5601 selector: app: kibana --- apiVersion: apps/v1 kind: Deployment metadata: name: kibana namespace: kube-logging labels: app: kibana spec: replicas: 1 selector: matchLabels: app: kibana template: metadata: labels: app: kibana spec: containers: - name: kibana image: kibana:7.14.0 imagePullPolicy: IfNotPresent resources: limits: cpu: 1000m requests: cpu: 100m env: - name: ELASTICSEARCH_URL value: http://elasticsearch.kube-logging.svc.cluster.local:9200 ports: - containerPort: 5601
上面我们定义了两个资源对象,一个 Service 和 Deployment,为了测试方便,我们将 Service 设置为了 NodePort 类型,Kibana Pod 中配置都比较简单,唯一需要注意的是我们使用 ELASTICSEARCH_URL 这个环境变量来设置Elasticsearch 集群的端点和端口,直接使用 Kubernetes DNS 即可,此端点对应服务名称为 elasticsearch,由于是一个 headless service,所以该域将解析为3个 Elasticsearch Pod 的 IP 地址列表。
spec: ports: - port: 5601 nodePort: 30011 targetPort: 5601 protocol: TCP selector: app: kibana type: NodePort
显示如下,看到kibana开头的pod,说明kibana也已经部署成功了
[root@master01 kibana]# kubectl get pod -n kube-logging NAME READY STATUS RESTARTS AGE es-cluster-0 1/1 Running 0 26s es-cluster-1 1/1 Running 0 15s es-cluster-2 1/1 Running 0 9s kibana-69dffcb7c5-6jjvw 1/1 Running 0 97s
[root@master01 kibana]# kubectl get svc -n kube-logging NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE elasticsearch ClusterIP None <none> 9200/TCP,9300/TCP 22h kibana NodePort 10.1.120.129 <none> 5601:30011/TCP 112m
在浏览器中打开http://<任意节点IP>:30011即可,如果看到如下欢迎界面证明 Kibana 已经成功部署到了Kubernetes集群之中。
安装fluentd组件
我们使用daemonset控制器部署fluentd组件,这样可以保证集群中的每个节点都可以运行同样fluentd的pod副本,这样就可以收集k8s集群中每个节点的日志,在k8s集群中,容器应用程序的输入输出日志会重定向到node节点里的json文件中,fluentd可以tail和过滤以及把日志转换成指定的格式发送到elasticsearch集群中。除了容器日志,fluentd也可以采集kubelet、kube-proxy、docker的日志。
#node和master节点
[root@master01 fluentd]# docker load -i fluentd.yaml [root@master02 fluentd]# docker load -i fluentd.yaml [root@node01 fluentd]# docker load -i fluentd.yaml
#更新资源清单文件
[root@master01 fluentd]# kubectl apply -f fluentd.yaml serviceaccount/fluentd created clusterrole.rbac.authorization.k8s.io/fluentd created clusterrolebinding.rbac.authorization.k8s.io/fluentd created daemonset.apps/fluentd created
#查看fluentd是否部署成功
[root@master01 fluentd]# kubectl get pod -n kube-logging NAME READY STATUS RESTARTS AGE es-cluster-0 1/1 Running 1 47m es-cluster-1 1/1 Running 1 47m es-cluster-2 1/1 Running 1 47m fluentd-hfkw4 1/1 Running 0 16s fluentd-kxz4k 1/1 Running 0 16s fluentd-m6cf6 1/1 Running 0 16s kibana-69dffcb7c5-6jjvw 1/1 Running 1 48m
Fluentd 启动成功后,我们可以前往 Kibana 的 Dashboard 页面中
kibana配置展示k8s容器日志
点击左侧的Discover
在这里可以配置我们需要的 Elasticsearch 索引,前面 Fluentd 配置文件中我们采集的日志使用的是 logstash 格式,这里只需要在文本框中输入logstash-*即可匹配到 Elasticsearch 集群中的所有日志数据
点击Next step
选择@timestamp,创建索引
创建好以后,再次点击左侧的discover,可看到如下:
Kibana查询语言KQL官方地址:
https://www.elastic.co/guide/en/kibana/7.2/kuery-query.html

评论