kube-eventer事件收集器

一、概述

kube-eventer是ACK维护的开源Kubernetes事件离线工具,可以将集群的事件离线到钉钉、SLS、EventBridge等系统,并提供不同等级的过滤条件,实现事件的实时采集、定向告警、异步归档。

1、概念

kubernetes的核心设计理念是状态机。因此,Normal当转移到期望状态时会发生事件,而Warning当转移到非预期状态时会发生事件。 kube-eventer 可以帮助诊断、分析和报警问题。

2、架构图

在这里插入图片描述

二、envent

我们需要再了解一下event的概念,在k8s中,事件(evnet)也是一种资源对象,主要用于展示集群内发生的事件,然后将运行的事件发送给API server,再有APIserver保存到etcd中,为了避免,etcd中的数据量过多,默认会保留最近一个小时内的事件(event)。

1、事件类型

  • Faild events(错误事件)

    当yaml文件语法错误、拉取镜像错误等

  • Evicted events(驱逐事件)

    节点发生oom时触发

  • Faild scheduling events(错误调度事件)

    因为资源不足、污点等无法调度

  • Volume events(卷事件)

    配置模式不正确,或者网络等原因无法创建卷的情况

  • Node events(节点事件)

    节点因为不可抗拒等原因与集群失联

2、事件级别

三、配置kube-eventer

需要配置集群角色以及角色绑定的配置文件,kube-eventer以deployment的形式部署在集群内,默认放在kube-system名称空间下,

我配置的为飞书告警,新增了namespace和podname等信息,可以更加清晰;

其他告警方式请参考github:https://github.com/AliyunContainerService/kube-eventer/tree/master

如果没有特别的需求,只需要将飞书机器人的webhook替换即可

例如:

--sink=webhook:https://open.feishu.cn/open-apis/bot/v2/hook/<你自己的机器人地址>?level=Warning&method=POST&header=Content-Type=application/json&custom_body_configmap=custom-body&custom_body_configmap_namespace=kube-system

1、具体的yaml文件

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    name: kube-eventer
  name: kube-eventer
  namespace: kube-system
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kube-eventer
  template:
    metadata:
      labels:
        app: kube-eventer
      annotations:	
        scheduler.alpha.kubernetes.io/critical-pod: ''
    spec:
      dnsPolicy: ClusterFirstWithHostNet
      serviceAccount: kube-eventer
      containers:
        - image: registry.aliyuncs.com/acs/kube-eventer:v1.2.7-ca03be0-aliyun
          name: kube-eventer
          command:
            - "/kube-eventer"
            - "--source=kubernetes:https://kubernetes.default"
            ## .e.g,dingtalk sink demo
            - --sink=webhook:https://open.feishu.cn/open-apis/bot/v2/hook/<你自己的机器人地址>?level=Warning&method=POST&header=Content-Type=application/json&custom_body_configmap=custom-body&custom_body_configmap_namespace=kube-system
          env:
          # If TZ is assigned, set the TZ value as the time zone
          - name: TZ
            value: "Asia/Shanghai" 
          volumeMounts:
            - name: localtime
              mountPath: /etc/localtime
              readOnly: true
            - name: zoneinfo
              mountPath: /usr/share/zoneinfo
              readOnly: true
          resources:
            requests:
              cpu: 100m
              memory: 100Mi
            limits:
              cpu: 500m
              memory: 250Mi
      volumes:
        - name: localtime
          hostPath:
            path: /etc/localtime
        - name: zoneinfo
          hostPath:
            path: /usr/share/zoneinfo
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: kube-eventer
rules:
  - apiGroups:
      - ""
    resources:
      - configmaps
      - events
    verbs:
      - get
      - list
      - watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: kube-eventer
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: kube-eventer
subjects:
  - kind: ServiceAccount
    name: kube-eventer
    namespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: kube-eventer
  namespace: kube-system
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: custom-body
  namespace: kube-system
data:
  content: '{
   "msg_type": "interactive",
   "card": {
      "config": {
         "wide_screen_mode": true,
         "enable_forward": true
      },
      "header": {
         "title": {
            "tag": "plain_text",
            "content": "Kube-eventer"
         },
         "template": "Red"
      },
      "elements": [
         {
            "tag": "div",
            "text": {
               "tag": "lark_md",
               "content":  "**EventType:**  {{ .Type }}\n**Name:**  {{ .InvolvedObject.Name }}\n**NameSpace:**  {{ .InvolvedObject.Namespace }}\n**EventKind:**  {{ .InvolvedObject.Kind }}\n**EventReason:**  {{ .Reason }}\n**EventTime:**  {{ .LastTimestamp }}\n**EventMessage:**  {{ .Message }}"
            }
        	}
      	]
   		}
		}'


2、飞书展示

在这里插入图片描述

3、Webhook 参数

  • level- 事件级别(可选。默认:警告。选项:警告和正常)
  • namespaces- 要过滤的命名空间(可选。默认值:所有命名空间,使用逗号分隔多个命名空间,支持正则表达式模式)
  • kinds- 过滤种类(可选。默认:所有种类,使用逗号分隔多种。选项:Node、Pod 等。)
  • reason- 过滤原因(可选。默认值:空,正则表达式模式支持)。您可以在查询中使用多原因字段。
  • method- 发送请求的方法(可选。默认值:GET)
  • header- 请求中的标头(可选。默认值:空)。您可以在查询中使用多标头字段。
  • custom_body_configmap- 请求正文模板的配置映射名称。您可以使用模板来自定义请求正文。 (选修的。)
  • custom_body_configmap_namespace- 请求正文模板的 configmap 命名空间。 (选修的。)
  • 28
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值