已采纳
回答正文
回复
讨论正文
该问题的正文与回答。
背景 我维护一个 48 台 worker(8C16G,200GB 系统盘)的 K8s 1.28 集群,containerd 1.7,私有 Harbor 单节点。业务镜像偏大(基础镜像 + 依赖层,单镜像 1.8~2.4GB),发布节奏是每天 3~4 次滚动更新,一次发布要在 48 个节点上并发拉取。
现象 最近两个月出现两类互相矛盾的故障:
imagefs.available < 10% 驱逐,20 多个 Pod 被赶走,其中 2 个是有状态服务,RPO 损失约 15 分钟;imageGCHighThreshold 从默认 85% 调到 70%、imageGCLowThreshold 从 80% 调到 60% 之后,GC 触发明显变频繁,有 2 次在 GC 进行中撞上发布窗口,拉取被 containerd 限流,出现 context deadline exceeded (Client.Timeout),回滚了 4 个版本。已尝试的排查
crictl images + du -sh /var/lib/containerd 确认了节点上历史镜像累积是主因(单节点最多堆了 40+ 个 tag,其中 60% 是 3 个月前的旧版本);--image-gc-high-threshold=85 / --image-gc-low-threshold=80,和 containerd 侧的阈值目前是双套在跑,不清楚哪个实际生效、是不是叠加;期望得到的答案形态 想问三个具体点,越具体越好,最好带可复现的配置片段或命令:
欢迎直接贴你们线上的 containerd config.toml 片段(脱敏)和 kubelet 启动参数,比抽象建议有用。