Skip to content

集群状态同步与缓存 ​

Kuboard 将常用 Kubernetes 对象同步到本地数据库(缓存),资源列表从缓存查询,而不是每次请求都穿透到集群,从而降低对集群的访问压力。

缓存让列表的分页、筛选、排序等功能得以在本地实现。适用对象:集群运维 / 管理员。本文说明缓存如何同步、参数在哪配置,以及「同步状态」页上能做哪些操作。

三种同步模式 ​

每种资源的同步方式,在设置 → 系统设置 → 集群缓存设置中指定:

模式数据更新方式适用场景
watch(实时监听)集群中对象变更后立即更新缓存Pod、Deployment、Service 等频繁变更的资源
polling(定时轮询)每隔固定时间整体刷新一次Namespace、Secret、Ingress 等变更不频繁的资源
nocache(直连不缓存)不写入缓存,每次查询直接访问集群冷门资源、未列入缓存配置的资源

默认行为

未在缓存设置中列出的资源,默认按 nocache 直连处理,不产生本地缓存。

缓存资源配置 ​

在设置 → 系统设置 → 集群缓存设置中集中维护,保存后立即生效,无需重启服务。配置分三部分:

  • 同步线程池:设置同时执行同步任务的最小 / 最大线程数;
  • 同步时间控制:全量同步的超时与失败重试、增量同步每轮监听的周期与间隔等;
  • 缓存对象设置:为每种资源选择同步方式(watch 或 polling)及轮询间隔;events 资源可单独设置删除后的保留时长。

默认缓存资源如下,可按需调整:

  • watch:pod、deployment、statefulset、daemonset、service、endpoint、endpointslice、event(默认删除后保留 168 小时)及 DRA 资源;
  • polling(每 5 分钟):namespace、node、configmap、secret、persistentvolumeclaim、ingress、networkpolicy、horizontalpodautoscaler、job、cronjob、role、rolebinding、serviceaccount、customresourcedefinition;
  • polling(每 300 分钟):各类 admission webhook 配置、validatingadmissionpolicy 及其绑定、flowschema、prioritylevelconfiguration、runtimeclass。

集群状态(缓存健康) ​

集群管理列表中,每个集群的集群状态列显示缓存健康状态:

状态含义
unknown集群刚导入时的初始状态
ready缓存可用,资源列表正常从缓存读取
error与集群失联,缓存查询返回空结果

集群失联(error)后无需人工干预:集群恢复连通后会自动回到 ready。想查看失联原因,可在集群管理列表点开集群,查看失联原因与检查时间。

状态同步页 ​

在集群详情 → 同步状态标签页,可以查看该集群每种资源的同步明细。

集群状态同步页

表格每个资源一行,主要列:

列说明
资源类型(ApiVersion / Kind / 资源名称)同步的资源
更新方式该资源当前的同步方式(监听 / 轮询 / 无缓存)
条目数当前缓存中该资源的对象数量
全量同步开始时间、结束时间与状态
增量同步开始时间、结束时间、轮次与状态

同步状态取值为:created(任务已创建,等待执行)、processing(执行中)、failed(失败)、success(成功)。页面上有两个操作按钮:

  • 重启全量同步(危险操作):删除该集群全部同步任务,按当前缓存设置重新生成任务并逐资源执行全量同步,相当于重建一次缓存;
  • 刷新:重新加载表格数据。

同步进行中看到什么 ​

大集群的全量同步动辄十几分钟。这期间页面每 5 秒自动刷新一次,条目数一栏显示实时进展:

  • 正在同步的资源,条目数显示为「已同步 N 条(第 P 页)」——N 是已写入缓存的对象数,P 是已翻过的分页数;
  • 页面切到后台标签时暂停刷新,切回来立即补一次;
  • 全部资源同步完成后自动停止刷新。

同步中显示 0 条是正常的

同步刚开始、或本实例不是正在执行同步的那个实例时,进展数字暂时拿不到,条目数显示为占位符而不是 0。这不代表异常——等数字出现即可。

重启全量同步须知

该操作会把集群导入状态改回「导入中」;单个资源会先删除旧缓存、再写入新数据,期间对应资源列表可能短暂为空或不完整。集群较多、资源量大时应避开业务高峰。

同步异常:受限同步与失败原因 ​

同步列表里除正常状态外,还会出现两类需要关注的标记。

受限同步 ​

当某类资源的数据量过大,Kuboard 判断它无法在集群的变更窗口内完成一次全量同步时,会把该资源标记为「受限同步」。

含义:缓存数据仍然可读,但不是最新的 —— 每次全量同步刚写完就再次失效。在集群详情 → 同步状态页展开该资源,可以看到一句话结论与实测证据:

  • 结论:单轮全量需约 N 分钟,而本集群的变更窗口只有约 M 秒;
  • 证据:当前对象数 X,最近触发 Y 次全量同步,最长稳定期 Z 分钟。

Kuboard 给出三条建议:

建议说明
改为直查(不使用缓存)该资源每次直接读集群,跳过本地缓存。数据最新,代价是集群较多时列表变慢。任何情况下都可用
提升数据库写入能力数据库写入吞吐不足时,会给出「至少需要多少行/秒」
改为定时刷新按单轮全量的实测耗时给出建议的刷新间隔(下限 5 分钟)

同一结论还会出现在平台健康诊断页(检测项「资源同步受限」)、消息中心待办与缓存状态弹窗。

受限同步不是故障

数据仍在,可继续使用最后一份快照。若该资源本来就不要求实时,改为定时刷新或直查即可。

同步失败原因 ​

同步失败时展开该资源,会看到一张「失败原因」卡片:失败原因(一句话分类)、当前影响(数据仍在 / 暂无可用数据)、可能原因(0~2 条)、可以这样处理(可执行动作,部分可直接点击跳转)。

失败原因含义可以这样处理
无法连接集群网络不通、连接被拒、证书握手失败、读超时检查集群地址与网络
凭据无效或权限不足导入集群用的凭据过期,或权限已被回收更新集群凭据
集群数据变化过快,本次同步中途失效资源变更频繁,分页读取期间数据已发生变化稍后重试(平台会自动重试)
集群在时限内没有返回完整数据集群响应超时或对请求做了限流稍后重试;也可改为直查
集群内部错误集群自身返回了错误稍后重试
单次返回的数据过大单页数据量超过 Kuboard 可处理的体量调小单页数据量
数据库写入失败数据库连接、锁或磁盘压力提升数据库写入能力
未能识别具体原因以上都不匹配时的兜底查看同步日志定位

原始报错在哪

「技术详情」折叠区里有请求地址、状态码与集群返回的原始报文,反馈问题时请一并提供。其余位置只显示归类后的结论,不展示原始报文。

常见问题 ​

某个资源的列表始终为空 ​

依次检查:该资源是否已加入集群缓存设置(未配置的资源走直连,无本地缓存);集群健康状态是否为 ready(失联集群查询返回空);若是新加入缓存的资源,需在同步状态页点一次重启全量同步。

同步显示成功,但列表里少了对象 ​

旧版本存在一个缺陷:全量同步按固定页数截断,被截断时仍记为「同步成功」,界面看不出问题,实际缓存里缺了一部分对象。升级到当前版本后该缺陷已修复——同步会一直翻到最后一页,中途异常一律记为「同步失败」。

若你在旧版本上同步过、之后直接沿用旧缓存,缺失的对象不会自动补回。处理方式:到同步状态页点一次重启全量同步,重建缓存。

切换同步方式后,缓存没有按预期工作 ​

已存在的任务会在下一轮按新配置生效;但新增或移除资源不会自动生成、清理任务。修改缓存设置后,请在各集群的同步状态页点击重启全量同步,按最新配置重建同步任务与缓存。

集群失联后,资源列表不可用 ​

失联集群的健康状态为 error,缓存查询返回空结果。恢复集群连通后会自动回到 ready,无需操作。

events 在集群中删除后仍能看到 ​

events 默认在删除后保留 168 小时,便于事后排查问题。可在集群缓存设置中调整该保留时长。

提示 resourceVersion 过期(410 Gone) ​

watch 监听携带的版本号过期(如集群重启)时会提示 410 Gone,属正常现象。Kuboard 会自动重新建立监听,无需处理。

大集群同步慢是正常的

对象数量大时全量同步需要十几分钟甚至更久,期间页面会自动刷新并显示已同步条数。只要数字在涨就说明在正常推进;长时间数字不动,才需要排查(见上一条「无进展多久重启全量同步」配置项)。

接口文档 ​

本节涉及的接口详见 Swagger UI 的「集群管理接口」分组。