ClickHouseCluster 和
KeeperCluster 对象上记录 Kubernetes 事件。这些事件可追踪 operator 在
协调过程中执行的操作——资源变更在哪一步失败、集群何时变为
就绪、扩缩容为何被阻塞——并暴露那些通常不会出现在用户日常查看日志中的失败。它们将便于阅读的历史记录直接附加到自定义资源上,从而对 指标
形成补充。
clickhouse-controller 会在 ClickHouseCluster 对象上报告事件,而
keeper-controller 会在 KeeperCluster 对象上报告这些事件。资源
生命周期失败事件还会引用其所涉及的受管对象 (
StatefulSet、Service、ConfigMap、Secret、PodDisruptionBudget、
PersistentVolumeClaim 或版本探测 Job) ;其他事件则只引用
集群本身。
Kubernetes API server 会在生存时间 (TTL) 到期后使事件过期——默认
为一小时 (
--event-ttl) 。因此,事件只是反映近期活动的短期信号,
并非持久的审计记录。查看事件
kubectl describe,它会在底部列出
最新的事件:
events 资源,并按关联对象或类型进行过滤:
ClickHouseCluster 事件 (clickhouse-controller) 与 KeeperCluster 事件
(keeper-controller) 区分开来。
事件原因参考
Normal
事件表示预期的进展;Warning 事件表示失败,或提示用户
应采取行动的状态。
资源生命周期
ClickHouseCluster 和 KeeperCluster 上发出此事件。
集群就绪情况
扩缩容
KeeperCluster 的副本数时,会发出此类事件。
当 Keeper 的扩缩容请求看起来没有任何反应时,需要关注
HorizontalScaleBlocked 事件:
operator 会有意暂缓这次变更,保持现有 quorum,
而不是冒脑裂风险。该事件消息会说明
阻止这次变更的限制条件。外部 Secret
ClickHouseCluster 上会发出此事件。请参阅
配置指南中的“外部 Secret”功能。
版本检查
ClickHouseCluster 和 KeeperCluster 的版本检查发出。
VersionProbeFailed 是 ClickHouse 版本探测 Job 特有的事件。
ClickHouse server 警告
最后这一类原因比较特殊:它描述的并不是 operator 自身的操作。在
每个就绪的副本上,operator 会定期查询服务器的
system.warnings 表,
并将其中的每一行作为集群上的 Warning 事件重新发布,同时以前缀标明其来源
副本。这样一来,ClickHouse 自身的配置和运行时
警告——已废弃配置项、过低的限制值、不安全的选项——都会变成你可以通过
kubectl 看到的事件,而无需分别对每个副本打开一个 ClickHouse 客户端 会话。
事件、指标和条件
- Events (本指南) —— 最近发生、便于阅读,并附加在对象上。最适合回答
“这个集群刚刚发生了什么”,以及配合
kubectl describe进行交互式故障排查。它们会过期。 - 自定义资源上的
status.conditions—— 当前且持久的真实状态 (ready、外部 Secret 有效、允许扩缩容、版本已同步) 。最适合用于 脚本和 GitOps 健康门禁。可使用以下命令读取:kubectl get clickhousecluster <name> -o jsonpath='{.status.conditions}'。 - 指标 —— 持久且 数值化。最适合用于仪表盘,以及针对持续存在的 reconcile 错误率进行 告警。
Warning 事件和一个 False condition 往往是在从两个
角度描述同一个问题:事件记录的是发生当下及其消息,而 condition 则会持续反映
该状态,直到问题消除。
通过事件进行故障排查
FailedCreate/FailedUpdate重复出现 — operator 无法应用某个 resource。事件消息中会包含 API 错误 (admission 拒绝、quota 限制、spec 无效) 。协调会持续重试,因此如果是暂时性原因,通常会自行恢复;如果是持续性问题,则需要修复 spec 或 集群。ClusterNotReady且没有对应的ClusterReady— 集群 未能 恢复。事件消息会指出哪些 shards 尚未就绪,或说明存在 quorum 问题;请检查其对应的 Pod (容器组) 。HorizontalScaleBlocked— 出于安全考虑,预期的扩缩容被暂时阻止。执行任何强制操作前, 请先查看消息中说明的具体约束。ExternalSecretNotFound/ExternalSecretInvalid— 修正 Secret 名称或 其 keys;一旦 operator 可以使用该 Secret,对应的ExternalSecretValidcondition 就会切换为True。ClickHouseWarning— 问题出在 ClickHouse 内部,而不在 operator。 请像处理system.warnings中的一行那样对待这条消息。
- 监控 Operator — 指标和健康探针,是事件的持久化对应物。
- 扩缩容 —
HorizontalScaleBlocked的保护作用,以及 Keeper quorum 如何限制扩缩容。 - 配置 — external-secret 事件背后的外部 Secret 功能。