k8s集群之日志收集EFK架构

k8s集群之日志收集EFK架构

参考文档

http://tonybai.com/2017/03/03/implement-kubernetes-cluster-level-logging-with-fluentd-and-elasticsearch-stack/

https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/fluentd-elasticsearch

https://t.goodrain.com/t/k8s/242

http://logz.io/blog/kubernetes-log-analysis/

http://blog.csdn.net/gsying1474/article/details/52426366

http://www.cnblogs.com/zhangjiayong/p/6203025.html

http://stackoverflow.com/questions/41686681/fluentd-es-v1-22-daemonset-doesnt-create-any-pod

下列文档简单的系统的测试了k8s 1.5.x系列:包括部署集群、创建POD、域名解析、仪表盘、监控、反向代理、存储、日志,另外双向认证自己建证书不太实用就没有列出。本系列文档环境部署使用二进制程序绿色安装,适用于1.5.2、1.5.3、1.5.4及后续版本,只是记得随时更新github上样例url即可。

k8s集群安装部署

http://jerrymin.blog.51cto.com/3002256/1898243

k8s集群RC、SVC、POD部署

http://jerrymin.blog.51cto.com/3002256/1900260 

k8s集群组件kubernetes-dashboard和kube-dns部署

http://jerrymin.blog.51cto.com/3002256/1900508

k8s集群监控组件heapster部署

http://jerrymin.blog.51cto.com/3002256/1904460

k8s集群反向代理负载均衡组件部署

http://jerrymin.blog.51cto.com/3002256/1904463 

k8s集群挂载volume之nfs

http://jerrymin.blog.51cto.com/3002256/1906778

k8s集群挂载volume之glusterfs

http://jerrymin.blog.51cto.com/3002256/1907274

k8s集群日志收集ELK架构

http://jerrymin.blog.51cto.com/3002256/1907282

技术实现

本文使用k8s官方推荐方案,就说说集群启动时会在每个机器启动一个Fluentd agent收集日志然后发送给Elasticsearch。 

实现方式是每个agent挂载目录/var/lib/docker/containers使用fluentd的tail插件扫描每个容器日志文件,直接发送给Elasticsearch。

提前下载好镜像

[root@k8s-node1 ~]# docker pull gcr.io/google_containers/elasticsearch:v2.4.1

[root@k8s-node1 ~]# docker pull gcr.io/google_containers/kibana:v4.6.1

[root@k8s-node1 ~]# docker pull gcr.io/google_containers/fluentd-elasticsearch:1.22

[root@k8s-node1 ~]# docker images |grep el

registry.access.redhat.com/rhel7/pod-infrastructure              latest              34d3450d733b        5 weeks ago         205 MB

gcr.io/google_containers/fluentd-elasticsearch                   1.22                7896bdf952bf        8 weeks ago         266.2 MB

gcr.io/google_containers/elasticsearch     

[root@k8s-master fluentd-elasticsearch]# pwd

/usr/local/kubernetes/cluster/addons/fluentd-elasticsearch

[root@k8s-master fluentd-elasticsearch]# ls

es-controller.yaml  es-service.yaml     fluentd-es-image        kibana-image

es-image            fluentd-es-ds.yaml  kibana-controller.yaml  kibana-service.yaml

先创建elasticsearch和kibanan

[root@k8s-master fluentd-elasticsearch]# kubectl create -f es-controller.yaml 

[root@k8s-master fluentd-elasticsearch]# kubectl create -f es-service.yaml

[root@k8s-master fluentd-elasticsearch]# kubectl create -f kibana-controller.yaml 

[root@k8s-master fluentd-elasticsearch]# kubectl create -f kibana-service.yaml 

最后创建fluentd

[root@k8s-master fluentd-elasticsearch]# kubectl create -f fluentd-es-ds.yaml

error: error validating "fluentd-es-ds.yaml": error validating data: found invalid field tolerations for v1.PodSpec; if you choose to ignore these errors, turn 

validation off with --validate=false

且注释这三行

      #tolerations:

      #- key : "node.alpha.kubernetes.io/ismaster"

        #effect: "NoSchedule"

创建fluentd报错,查考解决

I found the solution after studying https://github.com/kubernetes/kubernetes/blob/master/cluster/addons/fluentd-elasticsearch/fluentd-es-ds.yaml

There is nodeSelector: set as alpha.kubernetes.io/fluentd-ds-ready: "true"

But nodes doesn't have a label like that. What I did is add the label as below to one node to check whether it's working.

kubectl label nodes {node_name} alpha.kubernetes.io/fluentd-ds-ready="true"

[root@k8s-master fluentd-elasticsearch]# kubectl label nodes k8s-node1 alpha.kubernetes.io/fluentd-ds-ready="true"

node "k8s-node1" labeled

[root@k8s-master fluentd-elasticsearch]# kubectl label nodes k8s-node2 alpha.kubernetes.io/fluentd-ds-ready="true"

node "k8s-node2" labeled

[root@k8s-master fluentd-elasticsearch]# kubectl label nodes k8s-node3 alpha.kubernetes.io/fluentd-ds-ready="true"

node "k8s-node3" labeled

[root@k8s-master fluentd-elasticsearch]# kubectl get pods -n kube-system |grep fluentd

fluentd-es-v1.22-95ht2                      1/1       Running   0          1m

fluentd-es-v1.22-k905f                      1/1       Running   0          1m

fluentd-es-v1.22-w9q88                      1/1       Running   0          1m

点击创建kibana日志即可

http://172.17.3.20:8080/api/v1/proxy/namespaces/kube-system/services/kibana-logging/app/kibana#

默认index是logstash-*

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT杂记

Windows下jps, jconsole无法查看本地java进程问题解决

先通过本地java代码运行: System.out.println(System.getProperties()); 查看属性java.io.tmpdir=C:...

3026
来自专栏Java后端技术栈

使用Redis存储Nginx+Tomcat负载均衡集群的Session

环境:Cent OS 7.0(虚拟机环境)、Nginx 1.9.8、Redis 3.2.1

1032
来自专栏用户画像

Maven安装与配置

 1、Maven下载 http://maven.apache.org/download.cgi 直接解压到一个目录 即可

922
来自专栏别先生

JSP连接mysql数据库的重点

1:用mysql驱动把mysql与tomcat的连接起来。把mysql驱动包(不用解压)放到Tomcat安装目录中lib文件夹下即可。 ? 2:然后在自己的新...

3188
来自专栏雪胖纸的玩蛇日常

使用Navicat for MySQL把本地数据库上传到服务器

8395
来自专栏雪胖纸的玩蛇日常

使用Navicat for MySQL把本地数据库上传到服务器

4632
来自专栏云计算教程系列

在腾讯云CVM上安装Apache

Apache HTTP服务器是世界上使用最广泛的Web服务器。它提供了许多强大的功能,包括可动态加载的模块,强大的媒体支持以及与其他流行软件的广泛集成。

3657
来自专栏java沉淀

Centos 7下安装mysql

·mysql-5.7.12-linux-glibc2.5-x86_64.tar.gz

90919
来自专栏小樱的经验随笔

Linux目录结构

Linux 目录结构 装完Linux,首先需要弄清Linux 标准目录结构 ? / root —?启动Linux时使用的一些核心文件。如操作系统内核、引导程序G...

4276
来自专栏Dawnzhang的开发者手册

@Component注解的解析

今天在写程序的时候看见一个以前没有见过的注解(@Component),在网上查找过后,经过实践,决定把它记录下来。

1793

扫码关注云+社区

领取腾讯云代金券