1、环境介绍:
- centos7.3
- k8s 1.10.0
- elastricsearch 5.6.4镜像
- kibana 5.6.4镜像
- fluentd 2.0.4镜像
基于EFK环境的日志收集架构也是官方默认推行的,这些配置的文件可以在官方的github仓库中找到。仓库地址:官方仓库EFK
注意:es和fluentd两个镜像比较特殊需要使用k8s仓库中的dockerfile来进行封装,这里奉上封装好的镜像:
- docker pull hugow/public_docker:fluentd-elasticsearch-v2.0.4
- docker pull hugow/public_docker:elasticsearch-v5.6.4
2、下载EFK的配置文件:
注意!注意!先不要急kubectl create -f ...
就算你倔执行了,反正也是不能成功的^ _ ^!!,皮下很开心?
因为:
- 1:fluentd-es.ds.yaml配置中pod有对node的label进行选择调度,而我们集群中的node 是没有这个label,所以需要我们手工添加每个节点的label来保证调度的成功,执行如下命令:
kubectl label nodes 节点名称 beta.kubernetes.io/fluentd-ds-ready=true
节点名可以通过 kubectl get nodes 来获取
- 2:kibana-deployment.yaml中的指定资源使用的api和的路劲和我这个版本的api的路径不一样,导致后面访问不了ui(kibana)的界面,不知道的可以执行如下命令来获取自己相应版本的大致路径,然后修改下就可以了(看了下官方现在默认的是和我k8s是对的上的):
[root@k8s-master2 ~]# kubectl cluster-info
Kubernetes master is running at https://ip:6443
KubeDNS is running at https://ip:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
3、安装EFK
$ kubectl apply -f fluentd-es-configmap.yaml
$ kubectl apply -f fluentd-es-ds.yaml
$ kubectl apply -f es-statefulset.yaml
$ kubectl apply -f es-service.yaml
$ kubectl apply -f kibana-deployment.yaml
$ kubectl apply -f kibana-service.yaml
## 查看每个应用的pod是否正常启用,都是处于run的状态
$ kubectl get pods -n kube-system|grep -E 'elasticsearch|fluentd|kibana'
kibana应用在启动初始化的时候会花点时间十几分钟左右吧!喝杯茶(佛系养身)慢慢等会就好了。
可以查看kibana的日志看下初始化情况:
- 再次执行下cluster-info可以看到kibana的访问地址如下:
[root@k8s-master1 yaml]# kubectl cluster-info
Kubernetes master is running at https://ip:6443
Elasticsearch is running at https://ip:6443/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy
Kibana is running at https://ip:6443/api/v1/namespaces/kube-system/services/kibana-logging/proxy
KubeDNS is running at https://ip:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
如果我们直接访问kibana的https会提示是使用的匿名账户访问会出错
这里我们先临时开启一个非https的端口来测试下kibana
$ kubectl proxy --address='ip' --port=5601 --accept-hosts='^*$' &
访问该url格式即可:
http://ip:5601/api/v1/proxy/namespaces/kube-system/services/kibana-logging/
这里我们先使用时间作为索引好了
总结:
- kibana基于https的访问我们可以使用api-server的RBAC来进行授权,RBAC的具体权限体系怎么操作还处在探索中,若有大牛了解可以提点下^ _ ^,小弟在此谢过!
- 测试下来基于docker化后的EFK的平台在做检索需要的日志信息会有点慢,尤其在积累了大量的日志后,个人觉得像EFK这样的有状态而且性能要求稍微较高的,因独立部署,可以将ES和kibana平台单独部署,而fluentd的组件容器化部署会较容易部署而且效率也高。
- 官方提供的es的配置是使用的是emptyDir来提供存储,该存储会随pod生命周期的结束而结束,所以要是要在生产环境中使用容器化后的es来部署需要提供持久化的存储,使用NFS可能存在读写较慢的情况建议使用ceph作为后端分布式存储,既能保障数据的多副本和数据的读写效率。
在网上找了有关es的持久化存储的资料发现这位大神是比较全面的(膜拜):