Kubernetes K8S之Helm部署ELK/EFK日志分析系统
Kubernetes K8S之Helm部署ELK/EFK日志分析系统
主机配置规划
服务器名称(hostname) | 系统版本 | 配置 | IP | |
---|---|---|---|---|
k8s-master | CentOS8 | 2C/4G/20G | 192.168.137.22 | |
k8s-node01 | CentOS7 | 2C/4G/20G | 192.168.137.18 | |
k8s-node02 | CentOS7 | 2C/4G/20G | 192.168.137.14 |
备注:由于EFK部署比较消耗内存;所以每台机器的内存最好大于等于4G。
ELK概述
ELK是Elasticsearch、Logstash、Kibana的简称,这三者是核心套件,但并非全部。
Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等接口,提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。
Logstash是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。
Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己数据定制仪表板的视图,还允许他们以特殊的方式查询和过滤数据。
由于Logstash比较消耗资源,因此本次我们使用Fluentd实现日志收集(EFK)。
在实际使用中,相关软件,最好是一样的版本。
1,这里要使用helm工具,下载安装比较简单。
[root@k8smaster ~]# wget https://get.helm.sh/helm-v2.16.9-linux-amd64.tar.gz
[root@k8smaster ~]# cp helm-v2.16.9-linux-amd64.tar.gz /opt/
[root@k8smaster ~]# cd /opt/
[root@k8smaster ~]# tar zxvf helm-v2.16.9-linux-amd64.tar.gz
[root@k8smaster ~]# mv linux-amd64 helm-v2.16.9
[root@k8smaster ~]# ln -s /opt/helm-v2.16.9/helm /usr/sbin/helm
[root@k8smaster ~]# vi rbac-helm.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: tiller
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: tiller
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: tiller
namespace: kube-system
[root@k8smaster ~]# kubectl apply -f rbac-helm.yaml
[root@k8smaster ~]# helm init --upgrade --tiller-image registry.cn-beijing.aliyuncs.com/google_registry/tiller:v2.16.9
到这里就已经把helm安装完了。
2,按以下方法添加repo仓库。
[root@k8smaster ~]# helm repo remove stable
[root@k8smaster ~]# helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
总计添加如下:
[root@k8smaster ~]# helm repo list
NAME URL
local http://127.0.0.1:8879/charts
stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
elastic https://helm.elastic.co
t3n https://storage.googleapis.com/t3n-helm-charts
stakater https://stakater.github.io/stakater-charts
gitlab https://charts.gitlab.io/
3,提取 elasticsearch,fluentd-elasticsearch,kibana软件包到本机。
[root@k8smaster ~]# helm fetch elastic/elasticsearch --version 6.8.9
[root@k8smaster ~]# helm fetch stakater/fluentd-elasticsearch --version 1.5.0
[root@k8smaster ~]# helm fetch elastic/kibana --version 6.8.9
4,解压相关软件,要修改相关配置,
[root@k8smaster ~]# vi elasticsearch/values.yaml ,
注意以下是我修改的,国内镜像,版本,另外就是资源信息根据自己情况修改。
最后是要添加存储 storageClassName: nfs22 ,我这里是NFS,存储PV名是 nfs22,根据自己情况修改。
image: "docker.elastic.co/elasticsearch/elasticsearch"
imageTag: "6.8.9"
imagePullPolicy: "IfNotPresent"
podAnnotations: {}
# iam.amazonaws.com/role: es-cluster
# additionals labels
labels: {}
esJavaOpts: "-Xmx512m -Xms512m"
resources:
requests:
cpu: "300m"
memory: "1Gi"
limits:
cpu: "300m"
memory: "1Gi"
initResources: {}
# limits:
# cpu: "25m"
# # memory: "128Mi"
# requests:
# cpu: "25m"
# memory: "128Mi"
sidecarResources: {}
# limits:
# cpu: "25m"
# # memory: "128Mi"
# requests:
# cpu: "25m"
# memory: "128Mi"
networkHost: "0.0.0.0"
volumeClaimTemplate:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 3Gi
storageClassName: nfs22
5,安装前要建好一个namespache,
[root@k8smaster ~]# kubectl create namespace efk
6,使用helm安装elasticsearch v6.8.9,安装完成后,可以看到有三个pods与service,使用9200与9300端口。
[root@k8smaster ~]# helm install --name es01 --namespace=efk elasticsearch/
[root@k8smaster elasticsearch]# kubectl get pods --namespace=efk
NAME READY STATUS RESTARTS AGE
elasticsearch-master-0 1/1 Running 0 5h
elasticsearch-master-1 1/1 Running 0 5h
elasticsearch-master-2 1/1 Running 0 5h
[root@k8smaster elasticsearch]#
[root@k8smaster elasticsearch]# kubectl get svc --namespace=efk
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
elasticsearch-master ClusterIP 10.10.85.60 <none> 9200/TCP,9300/TCP 5h
elasticsearch-master-headless ClusterIP None <none> 9200/TCP,9300/TCP 5h
7,测试elasticsearch 接口,会有信息返回如下。至此,elasticsearch部署完毕。
[root@k8smaster ~]# curl 10.122.249.60:9200
8,Fluentd部署,
[root@k8smaster ~]# helm fetch stakater/fluentd-elasticsearch --version 1.5.0
[root@k8smaster ~]# tar zxvf fluentd-elasticsearch-1.5.0.tgz
[root@k8smaster ~]# vi fluentd-elasticsearch/vaules.yaml
此配置文件修改如下,主要是 镜像,版本与host 主机名称。
另外 templates/daemonset.yaml 也有需要修改:
apiVersion: apps/v1bate2 此行可能需要修改成 apiVersion: apps/v1
如果不修改可能会导致下面命令安装fluentd时不能正常安装。
[root@k8smaster ~]# helm install --name fluentd-es01 --namespace=efk fluentd-elasticsearch/
9,kibana部署
步骤如下:
[root@k8smaster ~]# helm fetch elastic/kibana --version 6.8.9
[root@k8smaster ~]# tar zxvf kibana-6.8.9.tgz
安装kibana时,先根据自己情况修改 values.yaml文件与外网访问端口或是ingress配置
[root@k8smaster ~]# helm install --name kibana01 --namespace=efk kibana
10,最后使用浏览器访问kibana的web地址。
http://kibana.99.com/ 我这里使用的是ingress。
创建索引
11,最后查看数据,注意 左边要有 kubernetes相关的内容,不然可能是fluentd配置有误:
目录 返回
首页