翼度科技»论坛 云主机 服务器技术 查看内容

IoT边缘集群Kubernetes Events告警通知实现示例

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
背景

边缘集群(基于 树莓派 + K3S) 需要实现基本的告警功能。

边缘集群限制

CPU/内存/存储 资源紧张,无法支撑至少需要 2GB 以上内存和大量存储的基于 Prometheus 的完整监控体系方案(即使是基于 Prometheus Agent, 也无法支撑) (需要避免额外的存储和计算资源消耗)
网络条件,无法支撑监控体系,因为监控体系一般都需要每 1min 定时(或每时每刻)传输数据,且数据量不小;
存在 5G 收费网络的情况,且访问的目的端地址需要开通权限,且按照流量收费,且因为 5G 网络条件,网络传输能力受限,且不稳定(可能会在一段时间内离线);

关键需求

总结下来,关键需求如下:

  • 实现对边缘集群异常的及时告警,需要知道边缘集群正在发生的异常情况;
  • 网络:网络条件情况较差,网络流量少,只只能开通极少数目的端地址,可以容忍网络不稳定(一段时间内离线)的情况;
  • 资源:需要尽量避免额外的存储和计算资源消耗

方案

综上所诉,采用如下方案实现:
基于 Kubernetes Events 的告警通知

架构图



技术方案规划


  • 从 Kubernetes 的各项资源收集 Events, 如:pod
    node
    kubelet
    crd
    ...
  • 通过 kubernetes-event-exporter 组件来实现对 Kubernetes Events 的收集;
  • 只筛选
    1. Warning
    复制代码
    级别 Events 供告警通知(后续,条件可以进一步定义)
  • 告警通过 飞书 webhook 等通信工具进行发送(后续,发送渠道可以增加)

实施步骤

手动方式:
在边缘集群上,执行如下操作:

1. 创建 roles

如下:
  1. cat << _EOF_ | kubectl apply -f -
  2. ---
  3. apiVersion: v1
  4. kind: Namespace
  5. metadata:
  6.   name: monitoring
  7. ---
  8. apiVersion: rbac.authorization.k8s.io/v1
  9. kind: ClusterRole
  10. metadata:
  11.   name: event-exporter-extra
  12. rules:
  13.   - apiGroups:
  14.       - ""
  15.     resources:
  16.       - nodes
  17.     verbs:
  18.       - get
  19.       - list
  20.       - watch
  21. ---
  22. apiVersion: v1
  23. kind: ServiceAccount
  24. metadata:
  25.   namespace: monitoring
  26.   name: event-exporter
  27. ---
  28. apiVersion: rbac.authorization.k8s.io/v1
  29. kind: ClusterRoleBinding
  30. metadata:
  31.   name: event-exporter
  32. roleRef:
  33.   apiGroup: rbac.authorization.k8s.io
  34.   kind: ClusterRole
  35.   name: view
  36. subjects:
  37.   - kind: ServiceAccount
  38.     namespace: monitoring
  39.     name: event-exporter
  40. ---
  41. apiVersion: rbac.authorization.k8s.io/v1
  42. kind: ClusterRoleBinding
  43. metadata:
  44.   name: event-exporter-extra
  45. roleRef:
  46.   apiGroup: rbac.authorization.k8s.io
  47.   kind: ClusterRole
  48.   name: event-exporter-extra
  49. subjects:
  50.   - kind: ServiceAccount
  51.     namespace: kube-event-export
  52.     name: event-exporter
  53. _EOF_
复制代码
2. 创建 kubernetes-event-exporter config

如下:
  1. cat &lt;&lt; _EOF_ | kubectl apply -f -
  2. apiVersion: v1
  3. kind: ConfigMap
  4. metadata:
  5.   name: event-exporter-cfg
  6.   namespace: monitoring
  7. data:
  8.   config.yaml: |
  9.     logLevel: error
  10.     logFormat: json
  11.     route:
  12.       routes:
  13.         - match:
  14.             - receiver: "dump"      
  15.         - drop:
  16.             - type: "Normal"
  17.           match:
  18.             - receiver: "feishu"                     
  19.     receivers:
  20.       - name: "dump"
  21.         stdout: {}
  22.       - name: "feishu"
  23.         webhook:
  24.           endpoint: "https://open.feishu.cn/open-apis/bot/v2/hook/..."
  25.           headers:
  26.             Content-Type: application/json
  27.           layout:
  28.             msg_type: interactive
  29.             card:
  30.               config:
  31.                 wide_screen_mode: true
  32.                 enable_forward: true
  33.               header:
  34.                 title:
  35.                   tag: plain_text
  36.                   content: XXX IoT K3S 集群告警
  37.                 template: red
  38.               elements:
  39.                 - tag: div
  40.                   text:
  41.                     tag: lark_md
  42.                     content: "**EventType:**  {{ .Type }}\n**EventKind:**  {{ .InvolvedObject.Kind }}\n**EventReason:**  {{ .Reason }}\n**EventTime:**  {{ .LastTimestamp }}\n**EventMessage:**  {{ .Message }}"
  43. _EOF_
复制代码

来源:https://www.jb51.net/article/275623.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具