Kubernetes实录-第一篇-集群部署配置(29) Kubernetes日志方案-使用EFK实现日志管理(6)-集群内配置所有日志服务组件

Kubernetes实录系列记录文档完整目录参考: Kubernetes实录-目录

相关记录链接地址 :

Kubernetes集群信息

主机名称ip地址操作系统角色软件版本备注
ejucsmaster-shqs-110.99.12.201CentOS 7.8proxy, master
ejucsmaster-shqs-210.99.12.202CentOS 7.8proxy, master
ejucsmaster-shqs-310.99.12.203CentOS 7.8proxy, master
ejucsnode-shqs-110.99.12.204CentOS 7.8worker
ejucsnode-shqs-210.99.12.205CentOS 7.8worker
ejucsnode-shqs-310.99.12.206CentOS 7.8worker

一、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相关文档。这里的配置还有如下问题。

  1. elasticsearch使用的存储卷volume是emptydir重启,迁移等操作存储的日志信息也就没有了,如果需要在集群内部署es可以满足需求,需要配置存储卷
  2. 时间产线中es应该是单独一个物理服务器集群,那么fluentd-configmap.yaml文件内es的地址根据实际情况进行修改

参考文档:

  1. https://kubernetes.io/docs/concepts/cluster-administration/logging/
  2. https://blog.csdn.net/networken/article/details/85775371
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值