K8s 容器运维 — 知识地图
本笔记为 MOC(Map of Content)
K8s 容器运维的核心难点不在编排语法,而在容器文件系统、挂载语义与运行时环境这三者的交互。本 MOC 汇总相关原子笔记。
存储与挂载 ⭐ 高频故障区
| 主题 | 核心笔记 |
|---|---|
| 卷挂载的覆盖语义 | K8s卷挂载是覆盖而非合并 |
| 实战案例:挂载遮蔽 /usr/share | 案例-K8s容器时区异常-PVC挂载遮蔽usr-share |
最容易忽视的一条规则
挂载点必须是镜像里不存在的目录。 只要挂载点在镜像中已有内容,就会被整体遮蔽——对 PVC、ConfigMap、Secret、hostPath 一律成立。 被遮蔽后镜像层与包数据库都毫发无损,卸载卷即恢复,但故障期间没有任何报错。
时区与运行时环境
| 主题 | 核心笔记 |
|---|---|
| TZ 变量与时区数据的关系 | TZ环境变量只是指针-时区数据才是本体 |
| Alpine 镜像不含 tzdata | Alpine镜像不自带tzdata |
OS 时区 ≠ JVM 时区
JDK 自带
tzdb.dat,可能”date显示 UTC 而 Java 日志显示 CST”。二者必须分别验证。
镜像与诊断工具
| 主题 | 核心笔记 |
|---|---|
| docker history 的误导性 | docker-history是审计日志不是文件清单 |
| 包数据库与文件系统是两套真相 | apk数据库与文件系统是两套真相 |
| ENOENT 无法区分层级 | 容器文件消失排查-ENOENT无法区分层级 |
| Dockerfile ENTRYPOINT 指令 | Dockerfile-ENTRYPOINT指令 |
网络与服务
| 主题 | 核心笔记 |
|---|---|
| DNS 故障排查方法论 | K8s-DNS-故障排查方法论 |
| Service DNS 域名解析规则 | K8s-Service-DNS域名解析规则 |
| NodePort 流量流转 | K8s-NodePort流量流转 |
| MetalLB L2 模式限制 | MetalLB-L2模式-VIP-自身不支持跨网段访问 |
| IPVS 负载均衡 | IPVS-IP虚拟服务器详解 |
配置与发布
| 主题 | 核心笔记 |
|---|---|
| ConfigMap 变更触发 Pod 重启 | K8s-ConfigMap变更触发Pod重启 |
日志采集
| 主题 | 核心笔记 |
|---|---|
| Fluent Bit 背压与缓冲 | FluentBit背压导致mem-buf-overlimit |
| VictoriaLogs 部署与保留 | VictoriaLogs-Windows部署 · VictoriaLogs-日志保留策略 |
| LogsQL 查询语言 | LogsQL-查询语言 |
排查心法
四条实战原则
- 先查挂载,再查镜像:挂载遮蔽无法从容器内的”文件是否存在”看出,必须先查
mount视角- 找对照组:“同样技术栈却正常”的服务,是把问题从”制品缺陷”推进到”环境差异”的关键
- 反常证据当线索:“包记录完好但文件不见”这个矛盾,应尽早把方向从删除扭向遮蔽
- 优先怀疑配置层:离代码越近的配置改动,往往越容易被忽视
加固检查清单
| 措施 | 目的 |
|---|---|
用准入策略(OPA/Kyverno)禁止挂载到 /usr、/etc、/lib、/var 等系统目录 | 从源头杜绝遮蔽类事故 |
Dockerfile 显式声明运行时依赖 + 构建期断言([ -f ... ]) | 消除对基础镜像隐式内容的依赖 |
| 基础镜像用 digest 固定;Harbor 配置 Tag Immutability | 保证构建可复现 |
| 启动自检关键运行时资源(时区、CA 证书),不符则拒绝启动 | 把静默错误转为显式失败 |
| 发布前跑”运行时资源冒烟测试” | 在交付前拦截 |