当前位置:职场发展 > Note 23

Note 23

  • 发布:2023-10-06 17:38

Kubernetes 事件收集和检索工具

转载自博客:https://www.sychzs.cn/p/516240617?utm_id=0

Kubernetes 可用于导出指标、日志和事件以实现可观察性。事件是有关您的服务中发生的情况的丰富信息源,并且您可以使用多种工具来充分利用它们。

以下是我要解释的内容的概述:

  • 事件机制
  • Kubernetes API 中的事件结构
  • 需要注意的事件类型
  • 检索事件的可用解决方案

本文末尾有 YouTube 和 Github 上相关教程的链接,您可以直接学习如何收集和检索 Kubernetes 事件。

Kubernetes事件介绍

Kubernetes 生成许多与我们的工作负载部署、调度等相关的事件。这是一个非常丰富的信息源,可以帮助我们了解集群中发生的情况,即回答诸如“为什么这个特定的 pod 被杀死或重新开始了?”

在K8s中查看事件有两种方式:

  • kubectl 描述 pod
  • kubectl 获取事件

当应用程序出现问题时,您应该首先查看其事件及其基础设施操作。将事件保留较长时间也很有用,因为它们可用于事后分析或了解故障是否是由早期事件引起的。

Kubernetes 中有多种类型的事件,因为每个 Kubernetes 对象都会经历多种状态,直到达到所需状态。

主节点和工作节点有几个核心组件,允许 K8 在我们的“服务器”上编排工作负载。调度程序在节点上调度 Pod,控制器管理器检测状态变化以在 Pod 消失时重建 Pod,etcd 将存储各种 K8s 资源的状态(但仅限最后一小时)。

所有这些核心组件使我们能够根据事件编排我们的工作负载。这意味着事件对于理解特定情况很重要。

让我们看一个简单的例子:

部署 Pod 时,调度程序会尝试识别正确的节点来启动 Pod。同时,pod将处于pending状态。一旦调度程序确定了正确的节点,Pod 将处于创建状态。

要启动这个 Pod,我们首先需要拉取容器镜像。事实上,node 从外部 docker 注册表中提取镜像。调度程序还更喜欢将 pod 调度到已有镜像的节点上。

拉取镜像后,Pod 将处于运行状态。

如果由于某种原因 pod 消失,控制器管理器将重新创建 pod。

但是如果 Pod 因同一错误多次重启,Pod 将进入 CrashLoopBackOff 状态。

如果 Pod 处于挂起状态,可能意味着该节点上没有可用资源,或者找不到正确的节点。

Pod 通常具有活性探针或就绪探针来帮助 K8 确定 pod 的状态或运行状况,即 /health 或 /ready。 Kubelet 将调用这些探测器。

还可以使用特定的镜像来定义init容器,这样K8s就会先执行init容器,然后再运行其他容器。

如果部署文件中提供了错误的镜像,或者docker注册中心存在连接问题,则节点无法拉取镜像,因此Pod永远无法达到运行状态。如果执行描述,您将看到 ImagePullBackOff 事件

Kubernetes API 中的事件

可以借助 Kubernetes API 检索所有事件(也可以使用 kubectl)。通常,我们经常使用“kubectl描述”来收集状态、原因等。

与API交互时,您将收集:

  • 留言
  • 原因
  • 类型
  • 事件涉及物品
  • 活动数量
  • 事件根源

这正是您使用 kubectl get events 看到的内容。

Kubernetes 事件有哪些类型?

  • 信息事件:Pod 调度、镜像拉取、节点运行状况、部署更新、副本集调用、容器终止
  • 警告:Pod有错误,PV尚未绑定
  • 错误:节点宕机、PV未找到、无法在云提供商中创建负载均衡器等。

您可以使用 REST API、API 客户端或事件记录器直接发布自己的事件。

最重要的 Kubernetes 事件

Kubernetes 的事件范围非常广泛,以下是一些需要考虑的重要事件:

  • CrashLoopBackOff,当 Pod 启动、崩溃、再次启动、然后再次崩溃时发生
  • ImagePullBackOff,当节点无法拉取镜像时发生
  • 驱逐事件,当节点确定需要驱逐或终止某个 Pod 以释放一些资源(CPU、内存等)时,可能会发生该事件。发生这种情况时,K8s 应该将 pod 重新调度到另一个节点上。
  • FailedMount / FailedAttachVolume,当 Pod 需要持久卷或存储时,如果存储不可访问,此事件会阻止它们启动。
  • FailedSchedulingEvents,当调度程序找不到运行 pod 的节点时。
  • NodeNotReady,当节点由于潜在问题而无法运行 Pod 时。
  • 已重启
  • 主机端口冲突

转载自博客:https://www.sychzs.cn/u011127242/article/details/127391025

1 简介
kubernetes-event-exporter 是一个收集 k8s 事件的工具。它允许我们将经常错过的 Kubernetes 事件导出到第三方平台或数据库,以用于可观察或警报目的。
event-exporter可以将k8s事件存储到Opsgenie、Webhooks、kafka、es等十几个平台|数据库中。本文介绍基于该工具的两种最常见的采集方式。方法一将事件日志收集到kafka中。方法二、直接收集事件日志到es集群。

2 部署测试
2.1 编写kafka
部署脚本:

api版本:v1
种类:命名空间
元数据:
  名称:镜头-指标
---
api版本:v1
种类:服务帐户
元数据:
  命名空间:镜头-指标
  名称: 事件-出口商
---
api版本:www.sychzs.cn/v1
种类:ClusterRoleBinding
元数据:
  名称: 事件-出口商
角色参考:
  apiGroup:www.sychzs.cn
  种类:集群角色
  名称:视图
科目:
  - 种类:ServiceAccount
    命名空间:镜头-指标
    名称: 事件-出口商
---
api版本:v1
种类:ConfigMap
元数据:
  名称:事件-exporter-cfg命名空间:镜头-指标
数据:
  config.yaml:| 此工具允许将经常错过的 Kubernetes 事件导出到各种输出,以用于可观察或警报目的。你不会相信你错过了什么。
    日志级别:错误
    日志格式:json
    路线:
      路线:
      - 匹配:
        -接收器:kafka
    接收者:
      -名称:kafka
        卡夫卡:
          clientId: "kubernetes"
          主题:k8s-事件日志
          经纪人:
          - "192.168.2.11:9092"
          压缩编解码器:gzip
---
api版本:apps/v1
类型:部署
元数据:
  名称: 事件-出口商
  命名空间:镜头-指标
规格:
  复制品:1
  模板:
    元数据:
      标签:
        应用程序:事件-出口商
        版本:v1
    规格:
      serviceAccountName: event-出口商
      容器:
      -名称:事件-出口商图片:opsgenie/kubernetes-事件-导出器:0.9
        imagePullPolicy:IfNotPresent
        参数:
        - -conf=/data/config.yaml
        体积安装:
        -挂载路径:/数据
          名称:cfg
      卷:
        -名称:cfg
          配置映射:
            名称:事件-exporter-cfg
  选择器:
    匹配标签:
      应用程序:事件-出口商
      版本:v1

收集数据:
服务部署后,kafka很快就收集完毕,如下图:


偏移4077的具体数据如下:

{
    元数据:{
        名称印花布节点-4p4jb.171cf6be0f3d946d,
        "命名空间": "kube-system",液体53d89898-44f3-471b-a3fc-9362567ac846 ,
        "资源版本": "4225520",
        "创建时间戳": "2022-10-11T08:34:18Z" ,
        托管字段:[
            {
                经理kubelet"操作": "更新",
                "api版本": "v1",
                "时间": "2022-10-11T08:34:18Z"
            }
        ]
    },
    原因不健康消息就绪探测失败:2022-10-11 08:34:18.377 [信息][5 03]confd/health.go 180:已建立 BGP 对等的节点数量 = 0\ncalico/节点未就绪:BIRD 未就绪:未与 192.168.2.12\n" 建立 BGP,来源:{
        组件kubelet主机​​”kmaster
    },
    第一个时间戳2022-10-11T08:34:18Z,
    最后时间戳2022-10-11T08:34:18Z,
    "计数": 1,
    "类型": "警告",
    "事件时间": null,
    "报告组件": "",
    "报告实例": "",
    "涉及对象": {
        种类Pod"命名空间": "kube-system",
        名称印花布节点-4p4jb液体069010fe-ca85-4ede-a4c5-033f02975433,"api版本": "v1",
        "资源版本": "4223433",
        fieldPathspec.containers{印花布节点} ,
        标签:{
            控制器修订哈希84f97c77db” ,
            k8s-app印花布节点pod 模板生成2
        }
    }
}

 

相关文章