不登节点也能排查
集群里的调试 Pod 可以在不开放远程登录的前提下进入宿主环境:它把节点根目录挂载到容器内,用容器运行时与内核工具查看磁盘、进程与容器列表。适合临时排查节点侧问题,也适合在安全策略禁止直接登录节点的环境里取一次现场。代价是这类 Pod 权限极高,用完必须清理。
基本信息
| 适用平台 | Kubernetes 1.20+,需要创建调试 Pod 的权限 |
|---|---|
| 命令入口 | kubectl debug node/<节点名> |
| 宿主访问点 | 容器内的 /host 目录 |
| 常用镜像 | busybox 等轻量镜像 |
| 权限代价 | 挂载宿主根目录,权限等同节点管理权限 |
典型使用场景
- 节点没有开放远程登录,需要临时查看磁盘与进程
- 确认节点侧容器运行时里的容器与集群对象是否一致
- 排查网络问题:查看节点路由、接口与转发规则
- 内核或系统参数核验,例如连接数上限与转发开关
- 节点被隔离后仍要取一次现场信息
进入节点(临时)
进入节点(临时)
kubectl debug node/node1 -it --image=busybox:1.36 # 启动调试 Pod 并进入
# 容器内:宿主根文件系统挂载在 /host
chroot /host df -h # 查看宿主磁盘水位
chroot /host crictl ps | head # 查看运行时里的容器
chroot /host ip route | head # 查看宿主路由
chroot /host journalctl -u kubelet --no-pager | tail -20 # 看节点组件日志需要保留现场时的清单(谨慎使用)
需要保留现场时的清单(谨慎使用)
apiVersion: v1
kind: Pod
metadata:
name: node-debug
spec:
hostNetwork: true # 使用宿主网络命名空间
hostPID: true # 可见宿主进程
containers:
- name: shell
image: busybox:1.36
command: ["sleep", "infinity"]
securityContext:
privileged: true # 特权模式,等同节点管理权限
volumeMounts:
- name: host-root
mountPath: /host
volumes:
- name: host-root
hostPath:
path: /调试入口怎么选
| 入口 | 适合场景 | 代价 |
|---|---|---|
| 调试节点 | 需要看宿主文件与进程 | 权限等同节点管理权限 |
| 调试容器副本 | 业务容器缺少工具,需临时加工具排查 | 影响单个副本,不触及宿主 |
| 临时容器 | 生产 Pod 无法重建,只想临时进入 | 依赖容器运行时支持 |
| 直接登节点 | 常规系统维护 | 需要开放登录通道与账号管理 |
调试容器里的工具集与节点宿主的工具集不同。进入后先确认命令是否存在,取宿主信息通常要在宿主目录下执行或在容器里直接指向宿主根目录。
挂载宿主根目录并开启特权,等价于拿到节点的管理权限。使用后立即删除并确认没有残留,生产集群应通过准入策略限制这类 Pod 的创建。