当您的家居板长大时: SQLite 如何将我的 k3s 控制平面

2026年8月2日1 次浏览来源:Dev.to阅读原文

最初发表于wostal.eu.

TL; DR:我的赫兹纳克3s实验室悄悄地成为了平台.

数十个拥有领袖-选举租赁的运营商将默认数据库-SQLite通过-击打至收缩进入死亡螺旋:1.36M行,13.8GB WAL不设检查站,CPU被固定在99%,8个核心平均装入79个.

我通过截取WAL来止血,然后将控制平面迁移到嵌入等(7.5 GB SQLite → 313 MB等,装入79~5).

这是完整的尸检——和教训。

这是一个战争故事,不是教书。

大约是家居地不再成为家居地,开始像生产一样行事的时候——从未宣布过.

我之前写的Hetzner K3s的设定。

它开始小。

它并不小。

我将在这篇文章中报导:一个过度成熟的实验室是如何打破默认的数据库的——克尼/SQLite收缩死亡-螺旋.

交火——衡量而不是猜测, 以及实际有效的修复 永久固定——将控制平面迁移到嵌入等,诚实的警告 元lesson——如何识别 当你的实验室 成为一个平台 一个诊断操作本—— 所以下一次是分钟,而不是小时 这起事件有一个伴奏作品.

进行这种等移徙的CI管道本身是新迁移的,而且严重迁移,在一条缺失的新线上调试它需要我几个小时的时间。

我把它分成了自己的职位:我让一个AI重塑我的CI管道。

这是什么"断"。

上下文:它"只是一个家居地"——只是它没有像任何家居地一样开始:赫茨纳上一个k3s的节点,一些东西可以玩.

问题是,几个月多来它悄悄地成为一个平台。

单一主节点(8个vCPU / 16个GB,未被封装,并载有长角和工作量)现运行:ArgoCD, Kargo, Crossplane/Upbound, CloudNativePG, EMQX, Longhorn, 三维操作者, Kubescape, 守门员, Goldilocks/VPA, VictoriaMetrics, Loki, OpenTeleometer, Argo Workingflows/Events/Rollouts, kgateway等.

每一个都是坚固的生产级操作员.

但他们都一起将 k3s 默认设置上的控制平面敲击出- 这意味着数据存储器是 SQLite,通过 访问, 一个将等效API 翻译为 SQL 的shim.

这工作很完美...

直到实验室穿过一个隐形的门槛 开始像平台一样行动 那时你得到生产级故障模式 在实验室级基础设施。

此帖所为.

第一部分 交火:克尼的收缩-死亡-呼吸 控制平面被固定:主机为99%的CPU,在内核(sys)中为~42%,负载平均攀升32~79在8个核心上.

食人鱼开始喷出: 数据库的饱和度甚至无法回答关于自身指标的询问。

错误的线索(以及最重要的教训:量度,不要猜测) 我最初的疑犯是"明显"——而且都是错误的:守门员审计每60人就跑一次(完全现场名单来自服务员).

我把它拆了,测量:CPU被噪音所移动.

Goldilocks/VPA——推荐者在142个VPA上写~7个检查站.

CPU不变。

第1课:通过缩放为0并测量来验证每个"绝对是X".

剪切单个API客户端没有移动CPU,因为瓶颈并不是任何客户端——这是数据存储引擎本身.

实际的根因只有进入了节点(SSH over Tailscale——公共SSH被防火墙所覆盖),真假才会出现:被按下: 机制:领跑者-选举租赁由每个运营商每~2秒更新一次. kine应该删除旧的修改( 比较) 。

这里,每所租约累计有~55,000个死修订(QQ31小时,无收缩)~1.36M行~7.5GB数据库.

这是典型的克尼死亡-螺旋:桌子长得如此之大,使收缩查询本身开始超时——所以收缩一直没有赶上,所以桌子不断增长.

反馈回路 我从前一天开始就自己修补 添加了燃料(一个完整的三重扫描,删除了876份报告,一个CNPG reyn)

分享