Kubernetes部署并管理EFK Stack

2024-08-28 17:12

本文主要是介绍Kubernetes部署并管理EFK Stack,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Kubernetes

Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。

主要概念

  • Pod:在 Kubernetes 中创建和管理的、最小的可部署的计算单元。
  • Service: Service 是 将运行在一个或一组 Pod 上的网络应用程序公开为网络服务的方法。
  • Deployment: 管理一组 Pod 的部署和扩展,并向应用程序提供声明性更新。

为什么使用Kubernetes?

  • 可扩展性: 根据需求轻松扩展或缩小应用程序。
  • 高可用性:使用所需数量的实例运行应用程序,并使其在多个节点上运行。
  • 服务发现和负载平衡:Kubernetes 可以使用 DNS 名称或 IP 地址公开容器。如果容器的流量很高,Kubernetes 能够进行负载平衡并分配网络流量。

EFK Stack

EFK Stack结合了 Elasticsearch、Fluentd 和 Kibana,可聚合、存储和可视化 Kubernetes 环境中多个来源的日志。

主要组件

  • Elasticsearch :分布式、RESTful 搜索和分析引擎,能够解决越来越多的用例。
  • Fluentd :用于统一日志记录的开源数据收集器,它允许您统一数据收集和消费,以便更好地使用和理解数据。
  • Kibana :在 Elasticsearch 之上工作的可视化层,提供用户友好的界面来可视化数据。

ELK优势

  • 集中日志记录:聚合集群中所有节点和 Pod 的日志,使监控和故障排除更加容易。
  • 可扩展性:Elasticsearch 可轻松扩展,使能够高效地存储和查询大量数据。
  • 强大的可视化:Kibana 为您的日志数据提供强大且美观的可视化,帮助调试和了解应用程序性能。

在 Kubernetes 上部署 EFK Stack

在 Kubernetes 上部署 EFK Stack涉及设置每个组件用来协作。本文章将遵循使用清单文件的手动部署方法。
在这里插入图片描述

部署Elasticsearch

Elasticsearch - EFK Stack的后端 - 基本上是一个基于文档的 NoSQL 数据库,默认在端口 9200 上运行。
Elasticsearch 不仅存储数据,还通过利用复制来确保数据持久性和故障恢复。为了确保数据的快速可用性,除了复制之外,它还使用分片。
在elasticsearch集群中,它是协调操作和管理更改的主节点。

apiVersion: apps/v1
kind: Deployment
metadata:name: elasticsearch
spec:replicas: 2selector:matchLabels:component: elasticsearchtemplate:metadata:labels:component: elasticsearchspec:containers:- name: elasticsearchimage: docker.elastic.co/elasticsearch/elasticsearch:7.9.3ports:- containerPort: 9200

部署Fluentd

Fluentd - 日志传送器 - 利用各种插件来过滤和转换日志数据。这些插件在 fluidd 配置文件中定义,该文件使用 .conf 扩展名。
Fluentd 使用内存缓冲机制来确保可靠地将日志传送到 Elasticsearch。

apiVersion: v1
kind: ConfigMap
metadata:name: fluentd-config
data:fluent.conf: |<match **>@type elasticsearchhost elasticsearchport 9200logstash_format true</match>
---
apiVersion: apps/v1
kind: DaemonSet
metadata:name: fluentdlabels:app: fluentd
spec:selector:matchLabels:name: fluentdtemplate:metadata:labels:name: fluentdspec:containers:- name: fluentdimage: fluent/fluentd-kubernetes-daemonset:v1.14.6-debian-elasticsearch7-1.0volumeMounts:- name: fluentd-configmountPath: /fluentd/etc/fluent.confsubPath: fluent.conf- name: varlogmountPath: /var/logvolumes:- name: fluentd-configconfigMap:name: fluentd-config- name: varloghostPath:path: /var/log

部署Kibana

Kibana - 可视化 - 通过图形和图表提供广泛的数据呈现功能,默认在端口 5601 上运行。

apiVersion: apps/v1
kind: Deployment
metadata:name: kibana
spec:replicas: 1selector:matchLabels:component: kibanatemplate:metadata:labels:component: kibanaspec:containers:- name: kibanaimage: docker.elastic.co/kibana/kibana:7.9.3ports:- containerPort: 5601

在 Kubernetes 上部署 Elasticsearch

设置StatefulSet

StatefulSet 非常适合 Elasticsearch 等有状态应用程序。它们为每个 Pod 提供稳定、唯一的网络标识符和持久存储。

创建StatefulSet

下面是 Elasticsearch 的 StatefulSet 定义的基本示例。

apiVersion: apps/v1
kind: StatefulSet
metadata:name: elasticsearch
spec:serviceName: "elasticsearch"replicas: 3selector:matchLabels:app: elasticsearchtemplate:metadata:labels:app: elasticsearchspec:containers:- name: elasticsearchimage: docker.elastic.co/elasticsearch/elasticsearch:7.9.3ports:- containerPort: 9200name: es-httpvolumeMounts:- name: es-datamountPath: /usr/share/elasticsearch/datavolumeClaimTemplates:- metadata:name: es-dataspec:accessModes: [ "ReadWriteOnce" ]resources:requests:storage: 10Gi

此 YAML 文件定义了一个名为 elasticsearch 的 StatefulSet,具有三个副本。它指定使用 Elasticsearch 7.9.3 Image
和数据存储的PVC。

配置PV

  • 持久卷 (PV):表示集群中由管理员配置或使用存储类动态配置的一块存储。
  • 持久卷声明 (PVC):用户对存储的请求。它指定大小和访问模式,并且可以链接到特定的 PV。
volumeClaimTemplates:
- metadata:name: es-dataspec:accessModes: [ "ReadWriteOnce" ]resources:requests:storage: 10Gi

此配置为每个 Elasticsearch Pod 请求具有 ReadWriteOnce 访问模式的 10Gi 卷。如果设置了动态配置或将 PVC 绑定到手动创建的 PV,则 Kubernetes 集群会自动配置此存储。

设置SVC

apiVersion: v1
kind: Service
metadata:name: elasticsearch
spec:selector:app: elasticsearchports:- port: 9200targetPort: es-httptype: ClusterIP

此 YAML 文件创建一个名为 elasticsearch 的服务,该服务以标签为 app:elasticsearch 的 Pod 为目标。它使得 Elasticsearch HTTP API 在集群内可以通过服务的集群 IP 进行访问。

在 Kubernetes 上部署 Fluentd

通过DaemonSet部署Fluentd

DaemonSet 确保 pod 的副本在集群中的每个节点上运行。这非常适合日志收集,因为我们希望 Fluentd 从每个节点收集日志。

创建配置

首先,创建一个 Fluentd 配置文件(例如 fluentd-config.conf),指定如何收集和转发日志。

<source>@type forwardport 24224bind 0.0.0.0
</source>
<match **>@type elasticsearchhost elasticsearch.default.svc.cluster.localport 9200logstash_format true
</match>
  • source: 输入源
  • match: 输出地址
  • filter: 事件处理pipeline
  • system: 系统范围配置
  • label: 对输出和过滤器进行分组以进行内部路由
  • worker:限制特定的工作节点
  • @include: 包含其他文件
定义DaemonSet

fluentd-daemonset.yaml

apiVersion: apps/v1
kind: DaemonSet
metadata:name: fluentdnamespace: kube-system
spec:selector:matchLabels:name: fluentdtemplate:metadata:labels:name: fluentdspec:containers:- name: fluentdimage: fluent/fluentd-kubernetes-daemonset:v1.11-debian-elasticsearchenv:- name: FLUENT_ELASTICSEARCH_HOSTvalue: "elasticsearch.default.svc.cluster.local"- name: FLUENT_ELASTICSEARCH_PORTvalue: "9200"volumeMounts:- name: varlogmountPath: /var/log- name: dockercontainersmountPath: /var/lib/docker/containersreadOnly: truevolumes:- name: varloghostPath:path: /var/log- name: dockercontainershostPath:path: /var/lib/docker/containers

配置Fluentd对集群日志进行处理

Fluentd 需要配置为从 Kubernetes 节点和 Pod 收集日志。之前在 fluentd-config.conf 中定义的配置设置 Fluentd 监听日志并将其转发到 Elasticsearch。

Node Logs

DaemonSet 配置将 /var/log 目录从主机挂载到 Fluentd 容器中,允许 Fluentd 从节点访问和收集系统和应用程序日志。

Pod Logs

同样,挂载 /var/lib/docker/containers 使 Fluentd 能够从 Docker 容器收集日志,包括由 Kubernetes Pod 管理的容器。

Forwarding Logs to Elasticsearch

Fluentd 配置指定 Elasticsearch 作为日志的目标。确保 Elasticsearch 正在运行并且可以从 Kubernetes 集群内访问。

<match **>@type elasticsearchhost elasticsearch.default.svc.cluster.localport 9200logstash_format true
</match>

上述配置将所有收集的日志转发到 Elasticsearch,在那里可以对日志进行索引并使其可搜索。

使用了输出插件 Fluent-plugin-elasticsearch,该插件用于将数据转发到 Elasticsearch。匹配部分显示它使用的参数。

在 Kubernetes 上部署 Kibana

部署Kibana

apiVersion: apps/v1
kind: Deployment
metadata:name: kibana
spec:replicas: 1selector:matchLabels:app: kibanatemplate:metadata:labels:app: kibanaspec:containers:- name: kibanaimage: docker.elastic.co/kibana/kibana:7.10.0env:- name: ELASTICSEARCH_HOSTSvalue: "http://elasticsearch:9200"ports:- containerPort: 5601

此 YAML 文件定义了一个名为 kibana 的具有单个副本的部署。它使用官方 Kibana 映像并通过 ELASTICSEARCH_HOSTS 环境变量连接到 Elasticsearch。
Kibana 默认使用端口 5601,并使用 HTTP REST API 与 ELasticsearch 进行通信。为了保护 Kibana,应启用 Elasticsearch 的安全功能。

apiVersion: v1
kind: Service
metadata:name: kibana
spec:type: NodePortports:- port: 5601targetPort: 5601nodePort: 30001selector:app: kibana

Service在 NodePort 上公开 Kibana,以便从集群外部进行访问。

Monitoring && Alerting

监控 EFK Stack有助于确保日志系统以最佳性能运行。以便尽早检测问题,例如 Elasticsearch 存储空间不足或 Fluentd 遇到高延迟。
在这里插入图片描述

Prometheus with EFK

Prometheus 是一个用于收集和存储指标的开源监控解决方案。将 Prometheus 与 EFK Stack集成能够收集有关每个组件的性能和运行状况的指标。
Prometheus 允许每个作业的抓取间隔配置,这在抓取哪些目标以及抓取频率方面提供了极大的灵活性。

设置Prometheus

首先,在 Kubernetes 集群中安装 Prometheus。可以使用 Prometheus Operator 来更轻松地管理。

kubectl create -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/master/bundle.yaml
配置Prometheus监控EFK
  • 使用 elasticsearch-exporter 将 Elasticsearch Metrics公开给 Prometheus
   apiVersion: monitoring.coreos.com/v1kind: ServiceMonitormetadata:name: elasticsearch-exporterlabels:team: backendspec:selector:matchLabels:app: elasticsearch-exporterendpoints:- port: http
  • Fluentd Metrics可以使用内置的 Prometheus 插件公开。
   <source>@type prometheusport 24231</source>
  • Kibana 本身并不导出 Prometheus Metrcis,但可以使用 kibana-prometheus-exporter 插件。

Grafana可视化

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: grafana-pvc
spec:accessModes:- ReadWriteOnceresources:requests:storage: 1Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: grafananame: grafana
spec:selector:matchLabels:app: grafanatemplate:metadata:labels:app: grafanaspec:securityContext:fsGroup: 472supplementalGroups:- 0containers:- name: grafanaimage: grafana/grafana:latestimagePullPolicy: IfNotPresentports:- containerPort: 3000name: http-grafanaprotocol: TCPreadinessProbe:failureThreshold: 3httpGet:path: /robots.txtport: 3000scheme: HTTPinitialDelaySeconds: 10periodSeconds: 30successThreshold: 1timeoutSeconds: 2livenessProbe:failureThreshold: 3initialDelaySeconds: 30periodSeconds: 10successThreshold: 1tcpSocket:port: 3000timeoutSeconds: 1resources:requests:cpu: 250mmemory: 750MivolumeMounts:- mountPath: /var/lib/grafananame: grafana-pvvolumes:- name: grafana-pvpersistentVolumeClaim:claimName: grafana-pvc
---
apiVersion: v1
kind: Service
metadata:name: grafana
spec:ports:- port: 3000protocol: TCPtargetPort: http-grafanaselector:app: grafanasessionAffinity: Nonetype: LoadBalancer

Note: 这是一个示例片段。要尝试执行任务,请使用相应任务语句中提供的 URL。

配置Alerting

Prometheus Alertmanager 可以管理 Prometheus 发送的警报。根据 EFK Metrics定义警报规则。
例如,如果 Elasticsearch 的堆使用率过高,则创建警报。

   groups:- name: elasticsearch-alertsrules:- alert: ElasticsearchHighHeapUsageexpr: elasticsearch_jvm_memory_used_bytes / elasticsearch_jvm_memory_max_bytes > 0.9for: 5mlabels:severity: criticalannotations:summary: "High Heap Usage (instance {{ $labels.instance }})"description: "Elasticsearch node {{ $labels.node }} heap usage is above 90%."

设置 Alertmanager 以在触发警报时通过电子邮件、Slack 或其他渠道发送通知。

   global:resolve_timeout: 5mroute:receiver: 'slack-notifications'receivers:- name: 'slack-notifications'slack_configs:- channel: '#alerts'

这篇关于Kubernetes部署并管理EFK Stack的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1115381

相关文章

闲置电脑也能活出第二春?鲁大师AiNAS让你动动手指就能轻松部署

对于大多数人而言,在这个“数据爆炸”的时代或多或少都遇到过存储告急的情况,这使得“存储焦虑”不再是个别现象,而将会是随着软件的不断臃肿而越来越普遍的情况。从不少手机厂商都开始将存储上限提升至1TB可以见得,我们似乎正处在互联网信息飞速增长的阶段,对于存储的需求也将会不断扩大。对于苹果用户而言,这一问题愈发严峻,毕竟512GB和1TB版本的iPhone可不是人人都消费得起的,因此成熟的外置存储方案开

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略 1. 特权模式限制2. 宿主机资源隔离3. 用户和组管理4. 权限提升控制5. SELinux配置 💖The Begin💖点点关注,收藏不迷路💖 Kubernetes的PodSecurityPolicy(PSP)是一个关键的安全特性,它在Pod创建之前实施安全策略,确保P

软考系统规划与管理师考试证书含金量高吗?

2024年软考系统规划与管理师考试报名时间节点: 报名时间:2024年上半年软考将于3月中旬陆续开始报名 考试时间:上半年5月25日到28日,下半年11月9日到12日 分数线:所有科目成绩均须达到45分以上(包括45分)方可通过考试 成绩查询:可在“中国计算机技术职业资格网”上查询软考成绩 出成绩时间:预计在11月左右 证书领取时间:一般在考试成绩公布后3~4个月,各地领取时间有所不同

安全管理体系化的智慧油站开源了。

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上进行简单的操作,就可以实现全视频的接入及布控。摄像头管理模块用于多种终端设备、智能设备的接入及管理。平台支持包括摄像头等终端感知设备接入,为整个平台提

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

什么是Kubernetes PodSecurityPolicy?

@TOC 💖The Begin💖点点关注,收藏不迷路💖 1、什么是PodSecurityPolicy? PodSecurityPolicy(PSP)是Kubernetes中的一个安全特性,用于在Pod创建前进行安全策略检查,限制Pod的资源使用、运行权限等,提升集群安全性。 2、为什么需要它? 默认情况下,Kubernetes允许用户自由创建Pod,可能带来安全风险。

C++——stack、queue的实现及deque的介绍

目录 1.stack与queue的实现 1.1stack的实现  1.2 queue的实现 2.重温vector、list、stack、queue的介绍 2.1 STL标准库中stack和queue的底层结构  3.deque的简单介绍 3.1为什么选择deque作为stack和queue的底层默认容器  3.2 STL中对stack与queue的模拟实现 ①stack模拟实现

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动