海联网: 使用Fluentd和ElasticSearch Stack实现Kubernetes的集群Logging

来源:来自网络    作者:海联网    人气:    发布时间:2017-03-03    

在本篇文章中,我们担任来说Kubernetes。

经过一段时间的探究,我们先后完成了Kubernetes集群搭建, DNS 、 Dashboard 、Heapster等插件安装,集群安详配置,搭建 作为Persistent Volume的CephRBD ,以及处事更新等探究和实现事情。此刻Kubernetes 集群层面的Logging 需求逐渐浮上水面了。

随着一些小应用在我们的Kubernetes集群上的部署上线,集群的运行迈上了正轨。但题目随之而来,那就是如何查找和诊断集群自身的题目以及运行于Pod中应用的题目。日志,没错!我们也只能依靠Kubernetes组件以及Pod中应用输出的日志。不过今朝我们仅能通过kubectl logs呼吁或Kubernetes Dashboard来查察Log。在没有cluster level logging的环境下,我们需要别离查察各个Pod的日志,节制繁琐,海联网,进程低效。我们急切地需要为Kubernetes集群搭建一套集群级此外会合日志收集和阐明办法法子。

对付任何基本办法法子或后端处事系统,日志都是极其重要的。对付受Google内部容器打点系统Borg启示而催生出的Kubernetes项目来说,天然少不了对Logging的支持。在“ Logging Overview “中,官方提要介绍了Kubernetes上的几个条理的Logging方案,并给出Cluster-level logging的参考架构:

海联网: 使用Fluentd和ElasticSearch Stack实现Kubernetes的集群Logging

Kubernetes还给出了参考实现:

– Logging Backend: Elastic Search stack(包罗: Kibana )

– Logging-agent: fluentd

ElasticSearch stack实现的cluster level logging的一个上风在于其对Kubernetes集群中的Pod没有侵入性,Pod无需做任何共同性窜改。同时EFK/ELK方案在业内也是相对成熟不乱的。

在本文中,我将为我们的Kubernetes 1.3.7集群安装ElasticSearch、Fluentd和Kibana。因为1.3.7版本略有些old,EFK可否在其上面run起来,我也是心中未知。可否像《 生化危机:终章 》那样有一个完美的了局,我们还需要一步一步“打怪升级”慢慢看。

一、Kubernetes 1.3.7集群的 “漏网之鱼”

Kubernetes 1.3.7集群是通过kube-up.sh搭建并初始化的。凭据 K8s官方文档 有关elasticsearch logging的介绍,在kubernetes/cluster/ubuntu/config-default.sh中,我也发明了下面几个配置项:

// kubernetes/cluster/ubuntu/config-default.sh # Optional: Enable node logging. ENABLE_NODE_LOGGING=false LOGGING_DESTINATION=${LOGGING_DESTINATION:-elasticsearch} # Optional: When set to true, Elasticsearch and Kibana will be setup as part of the cluster bring up. ENABLE_CLUSTER_LOGGING=false ELASTICSEARCH_LOGGING_REPLICAS=${ELASTICSEARCH_LOGGING_REPLICAS:-1}

显然,当初如果搭建集群伊始时要是知道这些配置的意义,大概那个时候就会将elastic logging集成到集群中了。此刻为时已晚,集群上已经跑了良多应用,无法从头通过kube-up.sh中断集群运行并安装elastic logging了。我只能手工举办安装了!

二、镜像预备

1.3.7源码中kubernetes/cluster/addons/fluentd-elasticsearch下的manifest已经较量old了,我们直接使用kubernetes最新源码中的 manifest文件 :

k8s.io/kubernetes/cluster/addons/fluentd-elasticsearch$ ls *.yaml es-controller.yaml es-service.yaml fluentd-es-ds.yaml kibana-controller.yaml kibana-service.yaml

阐明这些yaml,我们需要三个镜像:

gcr.io/google_containers/fluentd-elasticsearch:1.22 gcr.io/google_containers/elasticsearch:v2.4.1-1 gcr.io/google_containers/kibana:v4.6.1-1

显然镜像都在墙外。因为生产情况下的Docker引擎并没有配置加速器代劳署理,因此我们需要手工下载一下这三个镜像。我采用的要领是通过另外一台配置了加速器的呆板上的Docker引擎将三个image下载,并从头打tag,上传到我在hub.docker.com上的账号下,以elasticsearch:v2.4.1-1为例:

# docker pull gcr.io/google_containers/elasticsearch:v2.4.1-1 # docker tag gcr.io/google_containers/elasticsearch:v2.4.1-1 bigwhite/elasticsearch:v2.4.1-1 # docker push bigwhite/elasticsearch:v2.4.1-1

下面是我们在后续安装进程中真正要使用到的镜像:

bigwhite/fluentd-elasticsearch:1.22 bigwhite/elasticsearch:v2.4.1-1 bigwhite/kibana:v4.6.1-1 三、启动fluentd

fluentd是以 DaemonSet 的形式跑在K8s集群上的,这样k8s可以担保每个k8s cluster node上城市启动一个fluentd(寄望:将image改为上述镜像地点,如果你配置了加速器,那天然就不必了)。

# kubectl create -f fluentd-es-ds.yaml --record daemonset "fluentd-es-v1.22" created

查察daemonset中的Pod的启动环境,我们发明:

kube-system fluentd-es-v1.22-as3s5 0/1 CrashLoopBackOff 2 43s 172.16.99.6 10.47.136.60 kube-system fluentd-es-v1.22-qz193 0/1 CrashLoopBackOff 2 43s 172.16.57.7 10.46.181.146

fluentd Pod启动失败,fluentd的日志可以通过/var/log/fluentd.log查察:

# tail -100f /var/log/fluentd.log 2017-03-02 02:27:01 +0000 [info]: reading config file path="/etc/td-agent/td-agent.conf" 2017-03-02 02:27:01 +0000 [info]: starting fluentd-0.12.31 2017-03-02 02:27:01 +0000 [info]: gem 'fluent-mixin-config-placeholders' version '0.4.0' 2017-03-02 02:27:01 +0000 [info]: gem 'fluent-mixin-plaintextformatter' version '0.2.6' 2017-03-02 02:27:01 +0000 [info]: gem 'fluent-plugin-docker_metadata_filter' version '0.1.3' 2017-03-02 02:27:01 +0000 [info]: gem 'fluent-plugin-elasticsearch' version '1.5.0' 2017-03-02 02:27:01 +0000 [info]: gem 'fluent-plugin-kafka' version '0.4.1' 2017-03-02 02:27:01 +0000 [info]: gem 'fluent-plugin-kubernetes_metadata_filter' version '0.24.0' 2017-03-02 02:27:01 +0000 [info]: gem 'fluent-plugin-mongo' version '0.7.16' 2017-03-02 02:27:01 +0000 [info]: gem 'fluent-plugin-rewrite-tag-filter' version '1.5.5' 2017-03-02 02:27:01 +0000 [info]: gem 'fluent-plugin-s3' version '0.8.0' 2017-03-02 02:27:01 +0000 [info]: gem 'fluent-plugin-scribe' version '0.10.14' 2017-03-02 02:27:01 +0000 [info]: gem 'fluent-plugin-td' version '0.10.29' 2017-03-02 02:27:01 +0000 [info]: gem 'fluent-plugin-td-monitoring' version '0.2.2' 2017-03-02 02:27:01 +0000 [info]: gem 'fluent-plugin-webhdfs' version '0.4.2' 2017-03-02 02:27:01 +0000 [info]: gem 'fluentd' version '0.12.31' 2017-03-02 02:27:01 +0000 [info]: adding match pattern="fluent.**" type="null" 2017-03-02 02:27:01 +0000 [info]: adding filter pattern="kubernetes.**" type="kubernetes_metadata" 2017-03-02 02:27:02 +0000 [error]: config error file="/etc/td-agent/td-agent.conf" error="Invalid Kubernetes API v1 endpoint https://192.168.3.1:443/api: 401 Unauthorized" 2017-03-02 02:27:02 +0000 [info]: process finished code=256 2017-03-02 02:27:02 +0000 [warn]: process died within 1 second. exit.

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

责任编辑:海联网

频道精选

最火资讯