容器内存告警冲到 99.45% 却没触发 OOM,峰值里约 87% 是页缓存;同一个容器热缓存下重启只剩 23.70%,最后把告警的分子换成 RSS。
restic 夜备内存告警:排查 fsGroup 触发的整库重读
夜间备份那段时间内存接近 limit,按每次运行重新对齐数据后才发现根因:书库 pod 重建时 kubelet 对 local PV 做 fsGroup 权限处理,restic 因此重读整库。
在 ClickHouse 上补一列历史数据:一次只读评审
同事准备用 mutation 修复 ClickHouse 表里写坏了 18 天的一列,我在评审方案的同时用只读连接把表的现状摸了一遍,意见主要提在回滚上。
Kafka producer 构造失败:fat jar 下 commonPool 抢走了第一次类初始化
同一个 JVM 里只有走 Confluent 序列化器的 topic 发不出去:它的配置类在静态初始化时按 TCCL 解析默认值的类名,而 fat jar 下那个 TCCL 看不见 BOOT-INF/lib;之后这个类不会再重新初始化,实例只能换掉。
用 external-dns 接管 homelab 的子域名 DNS
两个 K3s 集群的子域名 DNS 从 Terraform 手改交给 external-dns 之后,加一个子域名只剩一步,真正的难点是把既有记录零停机迁过去,得先预埋 ownership TXT。
mirrord 用户授权的 GitOps 化:按用户维护 RBAC 清单
mirrord 的开发者授权从脚本式操作改成 GitOps:每人一份 RoleBinding 与 ClusterRoleBinding 写进 Git,由 Argo CD 带 prune 同步;证书签发后无法吊销,能回收的只有授权。
把重复 series 拦在入库前:我的 Prometheus 内存瘦身
homelab Prometheus 的 active series 少了一半,起因是 k3s 单进程把同一批 apiserver 和 etcd 指标重复暴露;三层核查确认可以丢就在入库前拦掉,内存峰值跟着降了大半。
Contract First 落地实践:工具栈、团队协作与我踩到的坑
OpenAPI Contract First 落到工程里要定的事:工具栈如何拼、AI 怎么起草 spec、团队同步机制、breaking change 治理、常见坑的对策,以及老项目的迁移路径。
微服务之后,大厂如何重新治理边界:2019–2026 年的七个案例
2019 到 2026 年,七家公司在代码边界、服务边界、部署拓扑、API 聚合和数据契约上都有过真实调整,拼起来能看出微服务规模化之后边界治理往哪儿迁移。
Java 微服务在 K8s 上的运行时基线(2026):镜像、探针、滚动与可观测
Java 25 加 Spring Boot 3.5 的微服务上 Kubernetes,我给自己定了一份运行时基线,覆盖镜像、探针、优雅停机、滚动与回滚、可观测性,每块都同时写现状和差距。