Please enable Javascript to view the contents

使用 Ops 项目查看并监控集群事件

 ·  ☕ 2 分钟

https://github.com/shaowenchen/ops

1. 告警 Kubernetes 集群的事件

  • 监控指定的关键字
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
apiVersion: crd.chenshaowen.com/v1
kind: EventHooks
metadata:
  name: kube-pod-falid
  namespace: ops-system
spec:
  type: xiezuo
  url: https://xz.wps.cn/api/v1/webhook/send?key=
  subject: "ops.clusters.*.namespaces.*.pods.*.event"
  keywords:
    - failed

一份简单的配置,即可收获大量的相关告警。

  • 监控之后,自动化处理
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
apiVersion: crd.chenshaowen.com/v1
kind: EventHooks
metadata:
  name: kube-no-free-node
  namespace: ops-system
spec:
  additional: "action: restart-kubelet-bypod"
  keywords:
    - no free node
  subject: ops.clusters.*.namespaces.*.pods.*.event
  type: webhook
  url: http://x.x.x.x/webhook

借助 Ops Copilot 的执行能力,只需要将相关的告警添加 Action 然后抛给 Copilot,即可实现自动化处理。

上图就是为了解决某种异常情况下,自动重启节点的 Kubelet 以恢复节点的可用性。

2. 使用 Ops 观测事件

在 Ops 项目的 Server 中,集成有一个 UI 端,可以查看所有的事件。

支持三种形式的事件查询:

  • 直接查询
1
ops.clusters.mycluster.namespaces.ai-translate.pods.ciba-translate-ec--long-v1-74b88d9f74-9zpv7.event
  • 通配符
1
ops.clusters.mycluster.namespaces.ops-system.taskruns.alert-npu-drop.reports.*

reports 是 Ops 巡检主动上报的事件,是自动采集集群事件之外的另一个大的分类。

  • 前缀匹配
1
ops.clusters.*.namespaces.ops-system.hosts.>

这里定义一个事件对象的概念: 一组相关联的事件序列描述的对象,比如一个 Pod,一个节点,一个应用,一个人的操作等。

在 Nats 中主要是通过 Subjects 来区分不同事件,Nats 支持最多 16 个 domain,256 字符长度。

因此,在 Ops 中一个事件对象与一个 Subject 对应,并通过 Restful 风格的 Subject 名。

1
ops.clusters.{cluster}.namespaces.{namespace}.pods.{pod}.event

3. 如何安装和使用 Ops 的事件能力

https://www.chenshaowen.com/ops/zh/opscontroller.html 提供有详细的安装文档。

  • 添加 Helm 仓库
1
helm repo add ops https://www.chenshaowen.com/ops/charts
  • 安装 ops-controller-manager
1
helm install myops ops/ops --version 2.0.0 --namespace ops-system --create-namespace

安装 2.0.0 版本的 Ops,需要注意的是 2.0.0 版本是下一个 Release 版本,目前还在开发中。

  • 查看安装结果
1
kubectl get pods -n ops-system

4. 关于通知支持的通知类型

目前仅支持了两种:

  • xiezuo
  • webhook

当然,各种通知类型加起来很快,可以给我提交 https://github.com/shaowenchen/ops/issues 。如果测试条件满足,当天就能发布。

添加新的通知类型,并不需要修改 CRD 的结构,只需要更新一下 Controller 的镜像。

5. 并不会对 kube-apiserver 产生额外的压力

如上图,在采集集群 Event 之后,kube-apiserver 相关指标没有产生明显恶化,波动在日常区间之类,可以放心使用。


微信公众号
作者
微信公众号