Kubernetes集群日志管理

Kubernetes开发了一个Elasticsearch附加组件来实现集群的日志管 理。这是Elasticsearch、Fluentd和Kibana的组合。Elasticsearch是一个 搜索引擎,负责存储日志并提供查询接口;Fluentd负责从Kubernetes 搜集日志并发送给Elasticsearch;Kibana提供了一个Web GUI,用户可 以浏览和搜索存储在Elasticsearch中的日志,如图下所示:

image.png

1.部署

Elasticsearch附加组件本身会作为Kubernetes的应用在集群里运行,其YAML配置文件可从 https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/fluentd-elasticsearch获取

image.png

下载文件,切换分支(我们的k8s版本是1.12)

由于github上克隆文件的地址都是一样的,我们是1.12版本肯定和master版本有区别,需要切换分支

git clone https://github.com/kubernetes/kubernetes.git
#查看所有分支
git branch -a  
#切换到远端1.12分支
git checkout remotes/origin/release-1.12

填坑

坑1:需要部署Fluentd的节点必须添加标签beta.kubernetes.io/fluentd-ds-ready=true

#显示节点标签
kubectl get node --show-labels 
#给节点添加标签
kubectl label node kube-node-1 beta.kubernetes.io/fluentd-ds-ready=true

坑2:修改默认的镜像源以及让kibana和es的大版本保持对应

先修改镜像k8s.gcr.io为gcrxio

cd  /root/kubernetes/cluster/addons/fluentd-elasticsearch
sed -i 's#k8s.gcr.io#gcrxio#g' es-statefulset.yaml 
sed -i 's#k8s.gcr.io#gcrxio#g' fluentd-es-ds.yaml 

在k8s1.12版本中需要修改es的版本号和kibana对应

sed -i 's/v6.2.5/v6.3.0/g' es-statefulset.yaml 

坑3 需要修改docker的日志引擎,否则k8s的log查询不到文件

sed -i 's/journald/json-file/g' /etc/sysconfig/docker 

或者直接写入

OPTIONS='--selinux-enabled --log-driver=json-file --signature-verification=false'

填坑4 fluentd-es无法启动,报错

failed to read data from plugin storage file path="/var/log/journald-docker.pos/worker0/storage.json" 
error_class=Fluent::ConfigError error="Invalid contents (not object) in plugin storage file: '/var/log/journald-docker.pos/worker0/storage.json'"
config error file="/etc/fluent/fluent.conf" error_class=Fluent::ConfigError error="Unexpected error: failed to read data from plugin storage file: '/var/log/journald-docker.pos/worker0/storage.json'"

解决如下:删除节点机上的日志文件即可

[root@kube-node-2 ~]# rm -rf /var/log/journald-*
[root@kube-node-2 ~]# rm -rf /var/log/kernel.pos/*

原因应该是docker的日志引擎没修改时候使用journald类型启动的,更换类型后并没有删除这些日志文件

部署

这里有一点需要注意:后面我们会通过NodePort访问Kibana,需要注释掉kibana-deployment.yaml中的环境变量 SERVER_BASEPATH,否则无法访问

[root@kube-master fluentd-elasticsearch]# kubectl apply -f ./
service/elasticsearch-logging created
serviceaccount/elasticsearch-logging created
clusterrole.rbac.authorization.k8s.io/elasticsearch-logging created
clusterrolebinding.rbac.authorization.k8s.io/elasticsearch-logging created
statefulset.apps/elasticsearch-logging created
configmap/fluentd-es-config-v0.1.6 created
serviceaccount/fluentd-es created
clusterrole.rbac.authorization.k8s.io/fluentd-es created
clusterrolebinding.rbac.authorization.k8s.io/fluentd-es created
daemonset.apps/fluentd-es-v2.2.1 created
deployment.apps/kibana-logging created
service/kibana-logging created
image.png
[root@kube-master fluentd-elasticsearch]# kubectl -n kube-system get pod  -l "k8s-app=fluentd-es"
NAME                      READY   STATUS    RESTARTS   AGE
fluentd-es-v2.2.0-96t57   1/1     Running   0          14m
fluentd-es-v2.2.0-kcknt   1/1     Running   0          14m

DaemonSet fluentd-es从每个节点收集日志,然后发送给 Elasticsearch


[root@kube-master fluentd-elasticsearch]# kubectl -n kube-system get statefulset
NAME                    DESIRED   CURRENT   AGE
elasticsearch-logging   2         2         16m
[root@kube-master fluentd-elasticsearch]# kubectl -n kube-system get pod
NAME                                  READY   STATUS    RESTARTS   AGE
elasticsearch-logging-0               1/1     Running   0          16m
elasticsearch-logging-1               1/1     Running   0          15m
fluentd-es-v2.2.0-96t57               1/1     Running   0          16m
fluentd-es-v2.2.0-kcknt               1/1     Running   0          16m
kibana-logging-76ff7dbb49-s5mbt       1/1     Running   0          16m
[root@kube-master fluentd-elasticsearch]# kubectl -n kube-system get service                
NAME                    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
elasticsearch-logging   NodePort    10.98.113.35    <none>        9200:32607/TCP   19m
kibana-logging          NodePort    10.107.158.36   <none>        5601:30319/TCP   19m

修改nodeport暴露端口供外部访问,或者给服务加代理

nohup kubectl proxy --address='10.0.0.146' --port=8080 --accept-hosts='^*$' &

可通过http://10.0.0.146:32607/验证Elasticsearch已正常工作;
通过http://10.0.0.146:30319/访问Kibana

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容