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 提供有详细的安装文档。
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. 关于通知支持的通知类型
目前仅支持了两种:
当然,各种通知类型加起来很快,可以给我提交 https://github.com/shaowenchen/ops/issues 。如果测试条件满足,当天就能发布。
添加新的通知类型,并不需要修改 CRD 的结构,只需要更新一下 Controller 的镜像。
5. 并不会对 kube-apiserver 产生额外的压力
如上图,在采集集群 Event 之后,kube-apiserver 相关指标没有产生明显恶化,波动在日常区间之类,可以放心使用。