当前位置: 移动技术网 > 科技>操作系统>Linux > 集群管理之日志管理

集群管理之日志管理

2020年04月11日  | 移动技术网科技  | 我要评论

一 统一日志管理

1.1 日志管理

在kubernetes集群环境中,一个完整的应用或服务都会涉及为数众多的组件运行,各组件所在的node及实例数量都是可变的。日志子系统如果不做集中化管理,则会给系统的运维支撑造成很大的困难,因此建议在集群层面对日志进行统一收集和检索等工作。
在容器中输出到控制台的日志,都会以*-json.log的命名方式保存在/var/lib/docker/containers/目录下。
kubernetes推荐采用fluentd+elasticsearch+kibana完成对系统和容器日志的采集、查询和展现工作。
部署统一的日志管理系统,需要以下两个前提条件。
  • api server正确配置了ca证书。
  • dns服务启动、运行。

1.2 efk简介

kubernetes 开发了一个 elasticsearch 附加组件来实现集群的日志管理。这是一个 elasticsearch、fluentd 和 kibana 的组合。
  • elasticsearch 是一个搜索引擎,负责存储日志并提供查询接口;
  • fluentd 负责从 kubernetes 搜集日志,每个node节点上面的fluentd监控并收集该节点上面的系统日志,并将处理过后的日志信息发送给elasticsearch;
  • kibana 提供了一个 web gui,用户可以浏览和搜索存储在 elasticsearch 中的日志。
通过在每台node上部署一个以daemonset方式运行的fluentd来收集每台node上的日志。fluentd将docker日志目录/var/lib/docker/containers和/var/log目录挂载到pod中,然后pod会在node节点的/var/log/pods目录中创建新的目录,可以区别不同的容器日志输出,该目录下有一个日志文件链接到/var/lib/docker/contianers目录下的容器日志输出。
clipboard
在各node上都运行了一个fluentd容器,采集本节点/var/log和/var/lib/docker/containers两个目录下的日志进程,将其汇总到elasticsearch集群,最终通过kibana完成和用户的交互工作。因此fluentd必须在每个node上运行。为了满足这一需求,可通过以下几种方式部署fluentd。
  • 直接在node主机上部署fluentd。
  • 利用kubelet的--config参数, 为每个node都加载fluentd pod。
  • 利用daemonset让fluentd pod在每个node上运行。

二 efk部署

2.1 获取efk yaml

lasticsearch 附加组件本身会作为 kubernetes 的应用在集群里运行,其 yaml 配置文件可从kubernetes官方github仓库获取:
https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/fluentd-elasticsearch
[root@k8smaster01 ~]# mkdir efk
[root@k8smaster01 ~]# cd efk
[root@k8smaster01 efk]# ll *.yaml
clipboard

2.2 修改镜像

对于部分镜像,建议通过修改镜像从国内源进行下载,国内相关源参考:
[root@k8smaster01 efk]# sed -i "s/quay.io/quay.azk8s.cn/g" `grep quay.io -rl ./*`
提示:国内相关源参考:https://blog.csdn.net/networken/article/details/84571373。
2.3 部署elasticsearch
[root@k8smaster01 efk]# vi es-statefulset.yaml
  1 ……
  2         resources:
  3           # need more cpu upon initialization, therefore burstable class
  4           limits:
  5             cpu: 1000m
  6             memory: 600mi			#建议将内存调小,避免node节点资源不够
  7           requests:
  8             cpu: 100m
  9             memory: 600mi			#建议将内存调小,避免node节点资源不够
 10 ……
[root@k8smaster01 efk]# kubectl create -f es-statefulset.yaml

2.4 部署elasticsearch svc

[root@k8smaster01 efk]# kubectl create -f es-service.yaml

2.5 部署fluentd

[root@k8smaster01 efk]# kubectl create -f fluentd-es-configmap.yaml #创建fluentd configmap
[root@k8smaster01 efk]# kubectl create -f fluentd-es-ds.yaml #部署fluentd

2.6 部署kibana

[root@k8smaster01 efk]# vi kibana-deployment.yaml
  1 ……
  2         env:
  3           - name: elasticsearch_hosts
  4             value: http://elasticsearch-logging:9200
  5 #          - name: server_name
  6 #            value: kibana-logging
  7 #          - name: server_basepath
  8 #            value: /api/v1/namespaces/kube-system/services/kibana-logging/proxy
  9 #          - name: server_rewritebasepath
 10 #            value: "false"
 11 ……
提示:kibana使用nodeport之后,若直接使用nodeport连接,会报404 status 错误,因为启动参数中添加了server.basepath,那么一般是需要在前端做一个反向代理来重定向。因此在kibana的yaml文件中删除server_basepath该环境变量后,才可以正常访问。
[root@k8smaster01 efk]# kubectl create -f kibana-deployment.yaml

2.7 部署kibana svc

[root@k8smaster01 efk]# vi kibana-service.yaml
  1 apiversion: v1
  2 kind: service
  3 metadata:
  4   name: kibana-logging
  5   namespace: kube-system
  6   labels:
  7     k8s-app: kibana-logging
  8     kubernetes.io/cluster-service: "true"
  9     addonmanager.kubernetes.io/mode: reconcile
 10     kubernetes.io/name: "kibana"
 11 spec:
 12   type: nodeport              #模式为nodeport
 13   ports:
 14   - port: 5601
 15     protocol: tcp
 16     targetport: ui
 17   selector:
 18     k8s-app: kibana-logging
[root@k8smaster01 efk]# kubectl create -f kibana-service.yaml

2.8 查看资源

[root@k8smaster01 efk]# kubectl get pods -n kube-system -o wide | grep -e 'name|elasticsearch|fluentd|kibana'
clipboard
[root@k8smaster01 efk]# kubectl get svc -n kube-system -o wide | grep -e 'name|kibana' #查看保留的svc
name type cluster-ip external-ip port(s) age selector
kibana-logging nodeport 10.105.239.129 <none> 5601:30008/tcp 2m59s k8s-app=kibana-logging

2.9 测试访问

浏览器直接访问:http://172.24.8.71:30008/
clipboard

clipboard
尝试查找error关键字日志。

clipboard


转自:https://www.cnblogs.com/itzgr/p/12678198.html

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网