Kubernetes部署并管理EFK Stack

news2024/11/15 3:25:14

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: 2
  selector:
    matchLabels:
      component: elasticsearch
  template:
    metadata:
      labels:
        component: elasticsearch
    spec:
      containers:
      - name: elasticsearch
        image: docker.elastic.co/elasticsearch/elasticsearch:7.9.3
        ports:
        - containerPort: 9200

部署Fluentd

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

apiVersion: v1
kind: ConfigMap
metadata:
  name: fluentd-config
data:
  fluent.conf: |
    <match **>
      @type elasticsearch
      host elasticsearch
      port 9200
      logstash_format true
    </match>
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluentd
  labels:
    app: fluentd
spec:
  selector:
    matchLabels:
      name: fluentd
  template:
    metadata:
      labels:
        name: fluentd
    spec:
      containers:
      - name: fluentd
        image: fluent/fluentd-kubernetes-daemonset:v1.14.6-debian-elasticsearch7-1.0
        volumeMounts:
        - name: fluentd-config
          mountPath: /fluentd/etc/fluent.conf
          subPath: fluent.conf
        - name: varlog
          mountPath: /var/log
      volumes:
      - name: fluentd-config
        configMap:
          name: fluentd-config
      - name: varlog
        hostPath:
          path: /var/log

部署Kibana

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

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

在 Kubernetes 上部署 Elasticsearch

设置StatefulSet

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

创建StatefulSet

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

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: elasticsearch
spec:
  serviceName: "elasticsearch"
  replicas: 3
  selector:
    matchLabels:
      app: elasticsearch
  template:
    metadata:
      labels:
        app: elasticsearch
    spec:
      containers:
      - name: elasticsearch
        image: docker.elastic.co/elasticsearch/elasticsearch:7.9.3
        ports:
        - containerPort: 9200
          name: es-http
        volumeMounts:
        - name: es-data
          mountPath: /usr/share/elasticsearch/data
  volumeClaimTemplates:
  - metadata:
      name: es-data
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 10Gi

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

配置PV

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

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

设置SVC

apiVersion: v1
kind: Service
metadata:
  name: elasticsearch
spec:
  selector:
    app: elasticsearch
  ports:
  - port: 9200
    targetPort: es-http
  type: ClusterIP

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

在 Kubernetes 上部署 Fluentd

通过DaemonSet部署Fluentd

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

创建配置

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

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

fluentd-daemonset.yaml

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluentd
  namespace: kube-system
spec:
  selector:
    matchLabels:
      name: fluentd
  template:
    metadata:
      labels:
        name: fluentd
    spec:
      containers:
      - name: fluentd
        image: fluent/fluentd-kubernetes-daemonset:v1.11-debian-elasticsearch
        env:
        - name: FLUENT_ELASTICSEARCH_HOST
          value: "elasticsearch.default.svc.cluster.local"
        - name: FLUENT_ELASTICSEARCH_PORT
          value: "9200"
        volumeMounts:
        - name: varlog
          mountPath: /var/log
        - name: dockercontainers
          mountPath: /var/lib/docker/containers
          readOnly: true
      volumes:
      - name: varlog
        hostPath:
          path: /var/log
      - name: dockercontainers
        hostPath:
          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 elasticsearch
 host elasticsearch.default.svc.cluster.local
 port 9200
 logstash_format true
</match>

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

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

在 Kubernetes 上部署 Kibana

部署Kibana

apiVersion: apps/v1
kind: Deployment
metadata:
  name: kibana
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kibana
  template:
    metadata:
      labels:
        app: kibana
    spec:
      containers:
      - name: kibana
        image: docker.elastic.co/kibana/kibana:7.10.0
        env:
          - name: ELASTICSEARCH_HOSTS
            value: "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: NodePort
  ports:
  - port: 5601
    targetPort: 5601
    nodePort: 30001
  selector:
    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/v1
   kind: ServiceMonitor
   metadata:
     name: elasticsearch-exporter
     labels:
       team: backend
   spec:
     selector:
       matchLabels:
         app: elasticsearch-exporter
     endpoints:
     - port: http
  • Fluentd Metrics可以使用内置的 Prometheus 插件公开。
   <source>
     @type prometheus
     port 24231
   </source>
  • Kibana 本身并不导出 Prometheus Metrcis,但可以使用 kibana-prometheus-exporter 插件。

Grafana可视化

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: grafana-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: grafana
  name: grafana
spec:
  selector:
    matchLabels:
      app: grafana
  template:
    metadata:
      labels:
        app: grafana
    spec:
      securityContext:
        fsGroup: 472
        supplementalGroups:
          - 0
      containers:
        - name: grafana
          image: grafana/grafana:latest
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 3000
              name: http-grafana
              protocol: TCP
          readinessProbe:
            failureThreshold: 3
            httpGet:
              path: /robots.txt
              port: 3000
              scheme: HTTP
            initialDelaySeconds: 10
            periodSeconds: 30
            successThreshold: 1
            timeoutSeconds: 2
          livenessProbe:
            failureThreshold: 3
            initialDelaySeconds: 30
            periodSeconds: 10
            successThreshold: 1
            tcpSocket:
              port: 3000
            timeoutSeconds: 1
          resources:
            requests:
              cpu: 250m
              memory: 750Mi
          volumeMounts:
            - mountPath: /var/lib/grafana
              name: grafana-pv
      volumes:
        - name: grafana-pv
          persistentVolumeClaim:
            claimName: grafana-pvc
---
apiVersion: v1
kind: Service
metadata:
  name: grafana
spec:
  ports:
    - port: 3000
      protocol: TCP
      targetPort: http-grafana
  selector:
    app: grafana
  sessionAffinity: None
  type: LoadBalancer

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

配置Alerting

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

   groups:
   - name: elasticsearch-alerts
     rules:
     - alert: ElasticsearchHighHeapUsage
       expr: elasticsearch_jvm_memory_used_bytes / elasticsearch_jvm_memory_max_bytes > 0.9
       for: 5m
       labels:
         severity: critical
       annotations:
         summary: "High Heap Usage (instance {{ $labels.instance }})"
         description: "Elasticsearch node {{ $labels.node }} heap usage is above 90%."

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2081733.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

初赛试题:2022年CSP-J1

先言 本次试卷 一&#xff1a;单项选择题&#xff08;15题&#xff0c;每题2分&#xff0c;共30分&#xff09; 1. 【答案】A 【解析】 类、结构体相关的都是C的面对对象&#xff0c;例如struct,union,string,vector等STL标准库 2. 【答案】C 【解析】 ABCD全部模拟一遍…

azure-search-openai-demo-csharp does not deploy correctly to azure clooad

题意&#xff1a;“azure-search-openai-demo-csharp 无法正确部署到 Azure 云中” 问题背景&#xff1a; I want to try the sample, which Microsoft provided about the azure search. “我想尝试微软提供的关于 Azure 搜索的示例。”GitHub - Azure-Samples/azure-searc…

SpringBoot日常:MySQL数据库与达梦适配

文章目录 简介安装下载连接配置pom文件application.yml配置 代码适配注意事项1、创建表结构语法2、索引名唯一问题3、新增字段4、切换模式名5、工具客户端更新数据6、group by语法7、加解密函数替换8、删除符号9、separator分隔替换成LISTAGG函数10、函数now()替换成SYSDATE()1…

ADAS汽车芯片LPDDR4 SIPI联合仿真案列

目前LPDDRn/DDRn用于许多汽车应用,如高级驾驶员感知系 统(ADAS)、信息娱乐、自动驾驶汽车系统、平视显示器和仪表控制台等显示器,这些应用需要强大的处理器,需要带宽和内存容量来生成大量数据。这就需要电源和信号设计足够的健壮来适应不同的应用场景。上一篇文章中(LPDD…

冲压厂ERP常见功能是什么

在现代制造业中&#xff0c;特别是在冲压行业&#xff0c;高效的管理对于企业的竞争力至关重要。企业资源计划(ERP)系统作为一种集成化的管理工具&#xff0c;为冲压厂提供了诸多便利。本文将探讨冲压厂ERP系统的几个常见功能&#xff0c;并以万达宝ERP为例&#xff0c;分析其在…

紫光同创——PLL IP 的使用(Logos2)

本文档主要针对 Logos2 系列的 PLL 配置&#xff0c;至于 Logos 系列的 PLL&#xff0c;可以参考《PLLIP 的使用(Logos)》的文档。 一、PLL IP 介绍 1、PLL 基本配置模式 Basic Configurations PLL IP 是紫光同创基于 PLL 及时钟网络资源设计的 IP&#xff0c;通过不同的参数配…

2024年【山东省安全员A证】新版试题及山东省安全员A证模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年山东省安全员A证新版试题为正在备考山东省安全员A证操作证的学员准备的理论考试专题&#xff0c;每个月更新的山东省安全员A证模拟考试祝您顺利通过山东省安全员A证考试。 1、【多选题】《建设工程安全生产管理…

Kafka简单搭建及常用命令

一、Kafka的服务搭建 1. 安装包下载 这里我下载的是目前最新的版本&#xff0c;在3.X版本及之后的版本中&#xff0c;Kafka已经移除了Zookeeper的强依赖&#xff0c;虽然依旧支持以Zookeeper的方式启动&#xff0c;但本文仅介绍无Zookeeper的启动方式&#xff0c;即kraft模式。…

003、架构_详解(重点)

GoldenDB 分布式数据库框架 DN和RDB增加了备节点;引入新模块CM,且GTM、MDS、PM、CM都增加备节点;MDS、PM、CM、RDB被统一在了管理节点之中;GTM和MDS间多了一条连线,因为GTM的切换由MDS把控;初步系统架构mysqld:一般称为DB节点,负责单个节点的数据处理; dbproxy:一般…

【文心智能体】通过低代码工作流编排创建应用《挑战奥运问答拿奖牌》

欢迎来到《小5讲堂》 这是《文心智能体平台》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 背景整体界面大模型链提示词模型 工具链HTTP请求工具 逻辑…

多语言跨领域迁移学习的新框架:MAD-X

人工智能咨询培训老师叶梓 转载标明出处 多语言模型如mBERT和XLM-R通过零样本或少样本跨语言迁移极大地推动了低资源语言的NLP应用。但这些模型由于容量限制&#xff0c;对低资源语言和未见语言的迁移性能并不理想。为了解决这一问题&#xff0c;来自德国达姆施塔特工业大学、…

【docker】docker学习笔记

docker学习笔记 0. docker 基本命令1. docker存储1.1 目录挂载1.2 卷映射 2. docker 网络2.1 机器ip访问2.2 容器ip访问2.3 域名访问 3. docker compose&#xff08;批量管理&#xff09;3.1 编写一个yml文件:3.2 docker compose 命令 4. 制作docker 镜像 0. docker 基本命令 …

【JAVA】jdk下载与安装、配置环境

【JAVA】jdk下载与安装、配置环境 一、下载jdk二、安装jdk三、配置环境四、测试环境变量是否设置成功五、特殊情况六、idea官网 一、下载jdk Oracle官网: https://www.oracle.com/点击 “ Products ” “ 下滑 ”&#xff0c;点击 “ Java ” 点击 “ Download Java ” 先选择…

智慧公厕:城市公共卫生间智慧之选@卓振思众

在现代城市生活中&#xff0c;公共设施的智能化已经成为提升市民生活质量的重要一环。而智慧公厕作为公共卫生设施的创新代表&#xff0c;正逐步改变我们对传统公共厕所的认知&#xff0c;为城市管理带来了前所未有的便捷与舒适。【卓振思众】 环境智能调控&#xff0c;提升使用…

【逐行注释】一维EKF滤波的MATLAB代码|*不需要下载*,直接复制到MATLAB即可运行

文章目录 介绍完整代码运行结果各模块含义介绍 这是一个状态量为一维的MATLAB下的滤波程序,使用的滤波方法是EKF(扩展卡尔曼滤波),滤波后,显示滤波值的曲线、滤波误差曲线、滤波误差的最大值、平均值、标准差的输出。 模型是非线性的(状态方程和观测方程都是非线性的),…

RuoYi-Vue 最新 SpringBoot3 前后端分离版本源码分析

RuoYi-Vue 最新 SpringBoot3 前后端分离版本源码分析 RuoYi-Vue 本地环境部署权限管理SpringSecurity 配置登录接口(认证管理)Authentication 认证token的生成 权限控制 异步任务管理操作日志数据权限 RuoYi-Vue 本地环境部署 直接去 gitee 上拉取最新版本即可&#xff0c;分支…

comfyUI好在哪?为啥大家都在用?

前言 comfyUI自从面世以来&#xff0c;就以一种潜力股的姿态快速流行了起来&#xff0c;越来越多的小伙伴开始使用comfyUI。也许你一开始会被comfyUI密密麻麻的“线路”吓到&#xff0c;但其实comfyUI也没那么复杂&#xff0c;并且好处多多。 本文将带大家一起&#xff0c;快…

2024年8月31日(星期六)骑行瓦恭村

2024年8月31日 (星期六&#xff09;骑行瓦恭村&#xff08;向日葵&#xff0c;谷花鱼&#xff09;&#xff0c;早8:30到9:00&#xff0c; 昆明氧气厂门囗集合&#xff0c;9:00准时出发【因迟到者&#xff0c;骑行速度快者&#xff0c;可自行追赶偶遇。】 偶遇地点:昆明氧气厂…

华为Huawei路由器交换机SSH配置

华为设备的SSH登录配置需要5个步骤&#xff0c;示例如下&#xff1a; 一、配置命令 使能SSH功能 stelnet server enable生成公钥 rsa local-key-pair create 1024配置AAA用户密码及相应授权 aaalocal-user xxx password cipher xxxyyy1234local-user xxx privilege level …

RAG必备知识:OpenAI官宣结构化输出|结构化输出工具大汇总

官宣:根据非常普遍的需求,OpenAI的API 中开始支持结构化输出。 在 API 中引入结构化输出 - 模型输出现在遵循开发人员提供的 JSON 模式。让大型语言模型(Large Language Models, LLMs)进行结构化输出是自然语言处理(NLP)领域中的一个重要目标。结构化输出指的是将自然语…