记录日常工作关于系统运维,虚拟化云计算,数据库,网络安全等各方面问题。

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/

image.png


 [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

 image.png



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 主机名称。

image.png


另外 templates/daemonset.yaml 也有需要修改:


apiVersion: apps/v1bate2  此行可能需要修改成 apiVersion: apps/v1

如果不修改可能会导致下面命令安装fluentd时不能正常安装。

 [root@k8smaster ~]#  helm install --name fluentd-es01 --namespace=efk  fluentd-elasticsearch/

image.png


image.png


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


image.png


10,最后使用浏览器访问kibana的web地址。

http://kibana.99.com/   我这里使用的是ingress。  


创建索引

 



11,最后查看数据,注意 左边要有 kubernetes相关的内容,不然可能是fluentd配置有误:


image.png



转载请标明出处【Kubernetes K8S之Helm部署ELK/EFK日志分析系统】。

《www.micoder.cc》 虚拟化云计算,系统运维,安全技术服务.

网站已经关闭评论