Kubernetes实录系列记录文档完整目录参考: Kubernetes实录-目录
相关记录链接地址 :
- 第一篇-集群部署配置(24) Kubernetes日志方案-使用EFK实现日志管理(1)-介绍与架构概要
- 第一篇-集群部署配置(25) Kubernetes日志方案-使用EFK实现日志管理(2)-配置外部ELK服务
- 第一篇-集群部署配置(26) Kubernetes日志方案-使用EFK实现日志管理(3)-配置外部Kafka服务
- 第一篇-集群部署配置(27) Kubernetes日志方案-使用EFK实现日志管理(4)-配置Fluentd-agent
- 第一篇-集群部署配置(28) Kubernetes日志方案-使用EFK实现日志管理(5)-日志服务使用场景
- 第一篇-集群部署配置(29) Kubernetes日志方案-使用EFK实现日志管理(6)-集群内配置所有日志服务组件
Kubernetes集群信息
主机名称 | ip地址 | 操作系统 | 角色 | 软件版本 | 备注 |
---|---|---|---|---|---|
ejucsmaster-shqs-1 | 10.99.12.201 | CentOS 7.8 | proxy, master | ||
ejucsmaster-shqs-2 | 10.99.12.202 | CentOS 7.8 | proxy, master | ||
ejucsmaster-shqs-3 | 10.99.12.203 | CentOS 7.8 | proxy, master | ||
ejucsnode-shqs-1 | 10.99.12.204 | CentOS 7.8 | worker | ||
ejucsnode-shqs-2 | 10.99.12.205 | CentOS 7.8 | worker | ||
ejucsnode-shqs-3 | 10.99.12.206 | CentOS 7.8 | worker |
一、Kubernetes集群集成部署EFK日志系统
1.1 ElasticSearch集成部署
ElasticSearch集群对于存储容量以及CPU等资源消耗比较大,特别是集群大、应用多、日志量大存储时间长,查询搜索需求多的情况下,一般产线环境将ElasticSearch部署在Kubernetes集群外的物理服务器上。
这里主要是为了测试以及方案集成,将ElasticSearch集成部署在Kubernetes集群内部,而且存储暂时使用emptyDir挂载
1.1.1 准备es部署定义文件
从github下载原始文件在根据需要进行修改。原始文件中的image在国内下载不来(需要梯子),我们需要改成国内可以访问的镜像源(可以使用es官方源),我这里是将器下载下来,上传到私有地址。版本使用6.5.4 [ 最新版本6.6.1,我测试时kibana服务有问题 ]
mkdir -p logging/elasticsearch
cd logging/elasticsearch
wget https://github.com/kubernetes/kubernetes/raw/master/cluster/addons/fluentd-elasticsearch/es-statefulset.yaml
wget https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/fluentd-elasticsearch/es-service.yaml
tree
├── es-service.yaml
└── es-statefulset.yam
# image替换
k8s.gcr.io/elasticsearch:v6.3.0 --> csrepo.ejuops.com/library/elasticsearch:6.5.4
# labels将版本6.3.0 修改为6.5.4
sed -i 's/6.3.0/6.5.4/g' es-statefulset.yam
1.1.2 部署配置ES
kubectl apply -f es-statefulset.yaml
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
kubectl apply -f es-service.yaml
service/elasticsearch-logging created
kubectl get -f es-statefulset.yaml
NAME SECRETS AGE
serviceaccount/elasticsearch-logging 1 2m35s
NAME AGE
clusterrole.rbac.authorization.k8s.io/elasticsearch-logging 2m35s
NAME AGE
clusterrolebinding.rbac.authorization.k8s.io/elasticsearch-logging 2m35s
NAME READY AGE
statefulset.apps/elasticsearch-logging 2/2 2m35s
kubectl get -f es-service.yaml
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
elasticsearch-logging ClusterIP 10.106.75.217 <none> 9200/TCP 2m
1.2 Fluentd部署
Fluentd在每个节点配置,这里采用daemonset模式部署到每个节点作为 logging-agent 收集日志,并将收集的日志推送给后端的Elasticsearch集群。
1.2.1 准备Fluentd部署定义文件
从github下载原始文件,根据实际情况进行修改。
- image下载问题,修改为国内可以访问的源,我这里修改为企业内部局域网源 csrepo.ejuops.com/library/fluentd-elasticsearch:v2.4.0
mkdir logging/fluentd
cd logging/fluentd
wget https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/fluentd-elasticsearch/fluentd-es-configmap.yaml
wget https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/fluentd-elasticsearch/fluentd-es-ds.yaml
tree
├── fluentd-configmap.yaml
└── fluentd-daemonset.yaml
# 修改镜像源
image: csrepo.ejuops.com/library/fluentd-elasticsearch:v2.4.0
# 节点选择,我这里直接所有节点部署。
#nodeSelector:
# beta.kubernetes.io/fluentd-ds-ready: "true"
tolerations:
- key: "node-role.kubernetes.io/master"
effect: "NoSchedule"
1.2.2 部署配置fluentd
kubectl apply -f fluentd-configmap.yaml
configmap/fluentd-es-config-v0.2.0 created
kubectl apply -f fluentd-daemonset.yaml
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.4.0 created
kubectl get -f fluentd-configmap.yaml
NAME DATA AGE
fluentd-es-config-v0.2.0 6 42s
kubectl get -f fluentd-daemonset.yaml
NAME SECRETS AGE
serviceaccount/fluentd-es 1 13s
NAME AGE
clusterrole.rbac.authorization.k8s.io/fluentd-es 13s
NAME AGE
clusterrolebinding.rbac.authorization.k8s.io/fluentd-es 13s
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
daemonset.apps/fluentd-es-v2.4.0 6 6 6 6 6 <none> 13s
1.3 kibana部署
1.3.1 准备Kibana部署定义文件
从Github下载原始文件,根据需要修改
- 镜像修改为私有地址(局域网地址,如果需要请修改为环境可以访问的地址),版本使用6.5.4
- 本环境是用ingress(traefik),而不是应用apiserver进行代理,因此注释掉环境变量 SERVER_BASEPATH以及其值/api/v1/namespaces/kube-system/services/kibana-logging/proxy
- 配置ingress(treafik)定义文件(如果环境里面没有ingress,可以采用apiserver代理,或者Nodeport类型就不需要ingress定义文件了.
mkdir logging/kibana
cd logging/kibana
wget https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/fluentd-elasticsearch/kibana-service.yaml
wget https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/fluentd-elasticsearch/kibana-deployment.yaml
# kibana-deployment.yaml 修改image源以及版本
image: csrepo.ejuops.com/library/kibana:6.5.4
# kibana-deployment.yaml 注释环境变量
#- name: SERVER_BASEPATH
#value: /api/v1/namespaces/kube-system/services/kibana-logging/proxy
# 创建kibana-traefik-ingress.yaml 配置如下
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: kibana-logging
namespace: kube-system
spec:
rules:
- host: kibana.ejuops.com
http:
paths:
- path: /
backend:
serviceName: kibana-logging
servicePort: 5601
tree
├── kibana-deployment.yaml
├── kibana-service.yaml
└── kibana-traefik-ingress.yaml
1.3.2 配置部署kibana
kubectl apply -f kibana-deployment.yaml
deployment.apps/kibana-logging created
kubectl apply -f kibana-service.yaml
service/kibana-logging created
kubectl apply -f kibana-traefik-ingress.yaml
ingress.extensions/kibana-logging created
kubectl get -f kibana-deployment.yaml
NAME READY UP-TO-DATE AVAILABLE AGE
kibana-logging 1/1 1 1 1m59s
kubectl get -f kibana-service.yaml
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kibana-logging ClusterIP 10.104.34.159 <none> 5601/TCP 1m
kubectl get -f kibana-traefik-ingress.yaml
NAME HOSTS ADDRESS PORTS AGE
kibana-logging kibana.ejuops.com 80 30s
备注:这里ingress配置的域名 kibana.ejuops.com 是一个假域名,配置hosts方式访问
二、Kibana访问与基础测试
2.1 域名配置
这里没有申请域名,直接采用在客户端配置hosts文件的方式。其中10.99.12.201是traefik的一个地址
10.99.12.201 kibana.ejuops.com
2.2 kibana访问
浏览器 http://kibana.ejuops.com,访问
点击 “Discover”,提示警告:Warning No default index pattern. You must select or create one to continue.
需要创建一个index-pattern索引,点击导航栏 “Management” 进入 “index pattern”, Index pattern默认 logstash-* 即可:
Time-field name” 默认 @timestamp,最后点击“Create index pattern”,即可
再次点击 “Discover”,可以看到类似如下日志输出。也就是Kibana可以从ES获取日志信息了。
到这里,Kubernetes日志方案-使用EFK实现日志管理(1)-集成配置EFK日志系统就配置完成了,具体的使用请参考kibana相关文档。这里的配置还有如下问题。
- elasticsearch使用的存储卷volume是emptydir重启,迁移等操作存储的日志信息也就没有了,如果需要在集群内部署es可以满足需求,需要配置存储卷
- 时间产线中es应该是单独一个物理服务器集群,那么fluentd-configmap.yaml文件内es的地址根据实际情况进行修改
参考文档:
- https://kubernetes.io/docs/concepts/cluster-administration/logging/
- https://blog.csdn.net/networken/article/details/85775371