设为首页 收藏本站
查看: 1275|回复: 0

[经验分享] 在kubernetes集群中部署efk-ylw6006

[复制链接]

尚未签到

发表于 2018-9-15 13:19:57 | 显示全部楼层 |阅读模式
  本文将介绍在kubernetes 1.9集群下配置elasticsearch、fluentd、kibana集中收集k8s集群日志信息。俗称EFK,其中elasticsearch负责存储日志。fluentd负责将集群中docker主机上的日志发送给elasticsearch,因此fluentd在k8s集群中需要以daemonset的方式运行。kibana负责图形化展示日志信息。
  一、环境介绍
  软件环境:
  K8s版本:1.9.0
  docker版本:17.03.2-ce
  Elasticsearch版本及镜像下载地址:k8s.gcr.io/elasticsearch:v5.6.4
  Kibana版本及镜像下载地址:docker.elastic.co/kibana/kibana:5.6.4
  Fluentd版本及镜像下载地址:gcr.io/google-containers/fluentd-elasticsearch:v2.0.4
  Master节点:
  主机名:vm1
  IP地址:192.168.115.5/24
  Node节点:
  主机名:vm2
  IP地址:192.168.115.6/24
DSC0000.jpg

DSC0001.jpg

  二、下载yaml文件和elasticsearch、fluentd、kibana对应版本的镜像。
  镜像的下载需要使用科学上网方式实现。
  Yaml文件下载地址:
  https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/fluentd-elasticsearch
  

# mkdir efk  
# cd efk/
  
# wget  \
  
https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/fluentd-elasticsearch/es-statefulset.yaml
  
# wget  \
  
https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/fluentd-elasticsearch/es-service.yaml
  
# wget  \
  
https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/fluentd-elasticsearch/fluentd-es-configmap.yaml
  
# wget  \
  
https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/fluentd-elasticsearch/fluentd-es-ds.yaml
  
# wget  \
  
https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/fluentd-elasticsearch/kibana-service.yaml
  
# wget  \
  
https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/fluentd-elasticsearch/kibana-deployment.yaml
  

  三、通过下载好的yaml文件创建configmap、service、serviceaccount、clusterrole以及deployment等
DSC0002.jpg

  通过dashboard面板上可以看到fluentd在vm1和vm2上都有运行。
DSC0003.jpg

  到这里为止,看上去一切好像都挺正常的。可是过来一会elasticsearch-loggin-0、elasticsearch-loggin-1两个pod不断的restart, vmware的终端console上可以看出是因为java的oom引起的
DSC0004.jpg

  此时笔记本的内存已消耗90%、磁盘活动时间已达100%。即使硬盘是pcie的ssd也经不起这样折腾。
DSC0005.jpg

  如果把es-statefulset.yaml的replicas参数修改为1,内存是将将够,但是elasticsearch集群又是断腿的,运行不起来。
  

# kubectl logs elasticsearch-logging-0  -n kube-system  

DSC0006.jpg

  既然笔记本资源不足,为了完成这个实验。只好选择使用台式机了,幸好我的台式机有16G的内存,SSD硬盘也够放的下虚拟机文件。
  四、将vm1和vm2虚拟机文件从笔记本中复制到台式机后启动k8s集群,并进行重建。
DSC0007.jpg

  观察了一会,发现所有的pod状态都正常,不会出现oom问题自动restart
DSC0008.jpg

DSC0009.jpg

  五、访问kibana和elasticsearch验证
  接下来我们临时开启api-server http协议的8888端口,用于测试kibana的访问
  

# kubectl  proxy --address='192.168.115.5' --port=8888 --accept-hosts='^*$' &  

DSC00010.jpg

  访问地址:
  http://192.168.115.5:8888/api/v1/proxy/namespaces/kube-system/services/kibana-logging/
DSC00011.jpg

DSC00012.jpg

  通过curl查看elasticsearch容器中信息,这里可以运行一个curl容器,或者直接用elasticsearch-logging-1容器
  

# kubectl exec -it curl -n kube-system /bin/sh  
# curl http://elasticsearch-logging:9200
  
# curl -XGET http://elasticsearch-logging:9200/_cat
  

DSC00013.jpg

  查看elasticsearch集群的健康状态、索引和节点信息
  

# curl -XGET http://elasticsearch-logging:9200/_cluster/health?pretty=true  
# curl -XGET http://elasticsearch-logging:9200/_cat/indices?v
  
# curl -XGET http://elasticsearch-logging:9200/_cat/nodes?v
  

DSC00014.jpg

  到目前为止,我们实现了在k8s集群中使用efk进行日志的集中管理。
  六、一些问题
  1、Elasticsearch java oom问题
  这个在前文已经说明过了,解决方案只有加资源一条路。
  这问题一般出现在我们学习和测试环境中,生产环境一般不会遇到这种问题。
  通过查看elasticsearch容器可以看到实际上每个pod上的jvm参数设置启动内存和最大内存均为2g,加上metaspace等,建议在生产环境,运行elasticsearch的节点至少要保证elasticsearch pod有3g以上的内存。
  2、软件版本兼容性问题
  由于gcr.io网站被墙,***下载又不是很快,因此在实验过程中有尝试过使用其他的镜像搭配github上下载的yaml文件,最终证明了一切都是徒劳。
  Kibana和elasticsearch的版本要能对应的上,在本文中使用的都是5.6.4版本
DSC00015.jpg

  通过访问kibana的地址,看样子是没找到索引文件。
  实际上此问题的原因是fluentd镜像的版本不配合,无法往elasticsearch集群中写入数据。
DSC00016.jpg

  网络上有五花八门的配置文档,在这里建议使用github上最新版本的yaml文件搭配yaml文件中的镜像,可以少走一些弯路。如果实在无法下载到gcr.io上的镜像,可以使用github上配套的dockerfile,自己build镜像。
  3、安全性问题
  在本文中,elasticsearch的数据是通过emptyDir方式保存的,如果要在生产环境中使用,需要将数据存储修改成其他的存储方案。
  Kibana的访问形式在本文中是使用api-server的http接口,在生产环境中,需要使用其他方式实现。
  4、耐心等待
  需要足够的耐心,在下载image或者使用dockerfile build都需要较长的时间。elasticsearch和kibana初始化也需要20分钟左右的等待时间。可以通过观察pod的日志查看整个过程是否存在异常。
  镜像及yaml文件百度云下载地址
  链接:https://pan.baidu.com/s/1snt75Pr
  密码:wu3s



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-583591-1-1.html 上篇帖子: 在kubernetes集群中部署php应用 下篇帖子: kubernetes集群中使用ingress发布服务
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表