Kubernetes故障排查与调试实战指南

作为Kubernetes运维人员,掌握高效的故障排查技巧至关重要。本文将系统介绍Kubernetes调试的核心工具和方法,帮助您快速定位和解决问题。

一、基础排查命令

1. kubectl基础四件套

# 查看资源状态
kubectl get pods -n <namespace>

# 获取详细描述(包含事件和状态变更)
kubectl describe pod <pod-name> -n <namespace>

# 查看容器日志
kubectl logs <pod-name> -c <container-name> -n <namespace> --tail=100

# 进入容器调试
kubectl exec -it <pod-name> -c <container-name> -n <namespace> -- /bin/sh

实践建议

  • 使用-o wide查看更宽的输出格式
  • 结合-w参数实时观察状态变化
  • 日志查看时使用--since=1h限制时间范围

2. kubectl debug技巧

# 创建临时调试容器(需要Kubernetes v1.18+)
kubectl debug -it <pod-name> --image=busybox --target=<container-name>

# 节点调试(需要开启EphemeralContainers特性门控)
kubectl debug node/<node-name> -it --image=ubuntu

典型场景

  • 当容器缺少调试工具时,通过临时容器注入工具集
  • 检查节点网络连通性
  • 诊断文件系统问题

二、事件与状态分析

1. 事件追踪

# 查看集群事件(按时间排序)
kubectl get events --sort-by=.metadata.creationTimestamp

# 只看Warning级别事件
kubectl get events --field-selector type=Warning

# 持续监控事件
kubectl get events -w

事件分析要点

  • FailedScheduling: 通常资源不足或亲和性规则冲突
  • BackOff: 容器启动失败,检查镜像或命令
  • Unhealthy: 健康检查失败

2. 资源监控

# 查看节点资源使用
kubectl top nodes

# 查看Pod资源使用
kubectl top pods -n <namespace>

# 带标签筛选
kubectl top pods -l app=nginx

资源问题排查流程

图1

三、高级调试技巧

1. 网络连通性测试

# 创建网络测试Pod
kubectl run net-test --image=nicolaka/netshoot -it --rm

# 在测试Pod中执行
curl -v http://<service-name>.<namespace>.svc.cluster.local
nslookup <service-name>
traceroute <target-ip>

2. 存储问题排查

# 查看PV/PVC状态
kubectl get pv,pvc -n <namespace>

# 检查存储类
kubectl get storageclass

# 查看卷挂载详情
kubectl describe pod <pod-name> | grep -A 10 "Mounts"

四、调试工具推荐

  1. k9s: 终端可视化工具,实时监控集群状态
  2. Lens: 桌面版Kubernetes IDE
  3. Octant: Web版集群可视化工具
  4. kubectl-neat: 清理kubectl输出中的冗余信息

五、最佳实践

  1. 问题分类处理

    • 启动问题:检查kubectl describe中的事件
    • 运行时问题:查看日志和资源监控
    • 网络问题:使用临时容器测试连通性
  2. 调试流程

图2

  1. 预防措施

    • 部署前验证YAML(kubectl apply --dry-run=client)
    • 设置合理的资源限制和健康检查
    • 定期检查集群事件和资源使用趋势

掌握这些调试技巧后,您将能够快速定位大多数Kubernetes环境中的常见问题。记住,好的运维人员不是不遇到问题,而是能快速解决问题。

添加新评论