051.Kubernetes集群管理日志管理
一 统一日志管理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目录下的容器日志输出。在各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 *.yaml2.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.yaml2.4 部署Elasticsearch SVC
[root@k8smaster01 efk]# kubectl create -f es-service.yaml2.5 部署fluentd
[root@k8smaster01 efk]# kubectl create -f fluentd-es-configmap.yaml #创建fluentd ConfigMap[root@k8smaster01 efk]# kubectl create -f fluentd-es-ds.yaml #部署fluentd2.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.yaml2.7 部署Kibana SVC
[root@k8smaster01 efk]# vi kibana-service.yaml 1 apiVersion: v1 2 kind: Service
3 metadata:
4name: 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.yaml2.8 查看资源
[root@k8smaster01 efk]# kubectl get pods -n kube-system -o wide | grep -E "NAME|elasticsearch|fluentd|kibana"[root@k8smaster01 efk]# kubectl get svc -n kube-system -o wide | grep -E "NAME|kibana" #查看保留的SVCNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTORkibana-logging NodePort 10.105.239.129 <none> 5601:30008/TCP 2m59s k8s-app=kibana-logging2.9 测试访问
浏览器直接访问:http://172.24.8.71:30008/
尝试查找error关键字日志。
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 *.yaml2.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.yaml1 ……[root@k8smaster01 efk]# kubectl create -f es-statefulset.yaml2 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 ……
2.4 部署Elasticsearch SVC
[root@k8smaster01 efk]# kubectl create -f es-service.yaml2.5 部署fluentd
[root@k8smaster01 efk]# kubectl create -f fluentd-es-configmap.yaml #创建fluentd ConfigMap[root@k8smaster01 efk]# kubectl create -f fluentd-es-ds.yaml #部署fluentd2.6 部署Kibana
[root@k8smaster01 efk]# vi kibana-deployment.yaml1 ……提示:kibana使用Nodeport之后,若直接使用Nodeport连接,会报404 status 错误,因为启动参数中添加了server.basePath,那么一般是需要在前端做一个反向代理来重定向。因此在kibana的yaml文件中删除SERVER_BASEPATH该环境变量后,才可以正常访问。[root@k8smaster01 efk]# kubectl create -f kibana-deployment.yaml2 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 ……
2.7 部署Kibana SVC
[root@k8smaster01 efk]# vi kibana-service.yaml1 apiVersion: v1[root@k8smaster01 efk]# kubectl create -f kibana-service.yaml2 kind: Service
3 metadata:
4name: 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
2.8 查看资源
[root@k8smaster01 efk]# kubectl get pods -n kube-system -o wide | grep -E "NAME|elasticsearch|fluentd|kibana"[root@k8smaster01 efk]# kubectl get svc -n kube-system -o wide | grep -E "NAME|kibana" #查看保留的SVCNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTORkibana-logging NodePort 10.105.239.129 <none> 5601:30008/TCP 2m59s k8s-app=kibana-logging2.9 测试访问
浏览器直接访问:http://172.24.8.71:30008/尝试查找error关键字日志。
以上是 051.Kubernetes集群管理日志管理 的全部内容, 来源链接: utcz.com/z/515355.html