Kubernetes Debug 专用镜像实践指南

Kubernetes Debug 专用镜像实践指南

适用人群:SRE / DevOps / 运维工程师

适用场景:Kubernetes 生产环境排障、网络/进程/资源问题快速定位


一、为什么需要 Debug 专用镜像

在实际生产环境中,我们常见的业务镜像往往具备以下特点:

  • 基于 alpine / debian-slim / distroless
  • 体积极小,攻击面低
  • 不包含任何运维排障工具

常见问题包括:

  • ps: command not found
  • ss / netstat / top / free 不存在
  • 无法抓包、无法定位端口、无法确认真实启动参数

结论

生产镜像应该极简,但排障能力不能没有。

因此,一个 Debug 专用镜像 是 Kubernetes 运维体系中的必备组件。


二、Debug 镜像设计原则

一个合格的 Debug 镜像应满足:

  1. 工具齐全:

    • 进程:ps top
    • 网络:ss netstat tcpdump
    • 系统:free uptime vmstat
    • 基础工具:curl wget bash
  2. 系统稳定:

    • Debian / Ubuntu LTS
  3. 镜像可控:

    • 内部镜像仓库
    • 固定 tag,不随意变更
  4. 仅用于排障,不承载业务


三、推荐基础镜像选择

推荐使用:

  • debian:11
  • ubuntu:22.04

本文以 Debian 11 为例。


四、Debug 镜像 Dockerfile 示例

dockerfile 复制代码
FROM debian:11

LABEL maintainer="sre@company.com"
LABEL description="Kubernetes Debug Image"

# 替换为大陆镜像源(阿里云)
RUN sed -i 's@deb.debian.org@mirrors.aliyun.com@g' /etc/apt/sources.list \
 && sed -i 's@security.debian.org@mirrors.aliyun.com/debian-security@g' /etc/apt/sources.list

# 安装常用运维调试工具
RUN apt-get update && apt-get install -y \
    procps \
    iproute2 \
    net-tools \
    tcpdump \
    curl \
    wget \
    vim \
    less \
    lsof \
    strace \
    bash \
 && rm -rf /var/lib/apt/lists/*

CMD ["bash"]

五、镜像包含工具说明

分类 工具 用途
进程 ps / top 查看进程、CPU、内存
网络 ss / netstat 查看端口、连接状态
抓包 tcpdump 网络问题定位
系统 free / uptime 资源使用情况
文件 lsof 端口与进程映射
调试 strace 系统调用分析

六、构建并推送镜像

bash 复制代码
docker build -t registry.example.com/ops/k8s-debug:debian11 .
docker push registry.example.com/ops/k8s-debug:debian11

建议:

  • 放入 公司私有镜像仓库
  • tag 固定(如 debian11 / v1.0)

七、在 Kubernetes 中使用 Debug 镜像(推荐)

方式一:kubectl debug(最佳实践)

bash 复制代码
kubectl debug pod/mx-devops-frontend \
  -it \
  --image=registry.example.com/ops/k8s-debug:debian11 \
  --target=frontend

特点:

  • 不影响原 Pod
  • 共享网络 / PID / 文件系统(取决于配置)
  • 排障完成即可退出

方式二:临时 Debug Pod

yaml 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: debug-tools
spec:
  containers:
  - name: debug
    image: registry.example.com/ops/k8s-debug:debian11
    command: ["sleep", "36000"]

适合:

  • 长时间排查
  • 网络连通性测试

八、常用排障命令速查

查看完整进程启动参数

bash 复制代码
ps auxww

查看监听端口

bash 复制代码
ss -lntp

查看端口被哪个进程占用

bash 复制代码
lsof -i :3000

抓包(示例)

bash 复制代码
tcpdump -i any port 80

九、生产环境最佳实践建议

  1. 业务镜像与 Debug 镜像严格分离
  2. 禁止在业务镜像中安装 tcpdump
  3. Debug 镜像仅授予运维权限
  4. 结合 RBAC 控制 kubectl debug 权限

成熟团队一定有 Debug 镜像,没有只是时间问题。


十、总结

  • ps 不存在 ≠ 系统有问题
  • 而是 镜像设计选择问题
  • Debug 镜像是 Kubernetes 运维的"急救箱"

平时不用,但出事时必须能拿出来。


吐槽一下:

说好AI能更好效率工作,释放运维的工作,但是有些公司已经把非运维主要工作硬硬塞进来,已经成为了一个四不像了。

相关推荐
openFuyao9 小时前
新增Agent沙箱调度能力!openFuyao v26.09社区发行版上线,AI原生基础设施能力进一步升级
云原生·ai-native·ai推理·openfuyao·多样化算力集群软件
谢亮_vipxieliang10 小时前
Kubernetes 1.36 深度解读:从 kubelet 安全到 GPU 原生调度的 70 项改进
安全·kubernetes·kubelet
阿里云云原生12 小时前
云效工作项智能优化:先澄清,再开工
云原生
阿里云云原生13 小时前
阿里云日志服务 SLS 全新升级,打造 Agent 时代的智能数据引擎
云原生
阿里云云原生13 小时前
从“治已病”到“治未病”:浩瀚能源与阿里云共建充电补能异地双活高可用体系实践
云原生
wzq11_66613 小时前
kubernetes集群——灰度发布
云原生·容器·kubernetes
阿里云云原生15 小时前
阿里云发布 Alibaba Cloud AI Agent Handbook,阐述“智能面积”
云原生
灯澜忆梦16 小时前
【docker】#1 | Docker 初识
运维·docker·容器
骑着蜗牛撵大象32717 小时前
穿越 Docker 内核迷雾:镜像分层的叠加态与卷挂载的空间穿梭
运维·docker·容器·联合文件系统·卷挂载·镜像分层·存储驱动
吴声子夜歌17 小时前
Docker入门与实战——Docker数据管理
docker·容器