一、集群部署时节点无法加入的典型症状

当你兴冲冲执行完kubeadm init,却发现worker节点死活join不进去时,先别急着砸键盘。最常见的报错是:"kubelet isn't running or healthy"。这时候建议分三步走:

  1. 检查防火墙
# CentOS示例(技术栈:Linux + kubeadm)
sudo systemctl stop firewalld  # 临时关闭防火墙
sudo systemctl disable firewalld  # 永久禁用

注意:生产环境建议配置精确放行规则而非直接关闭

  1. 验证容器运行时
sudo systemctl status docker  # 假设使用Docker作为运行时
journalctl -xeu docker.service  # 查看详细日志
  1. 排查证书问题
openssl x509 -noout -text -in /etc/kubernetes/pki/ca.crt  # 检查CA证书有效期
date  # 对比系统时间是否偏差过大

二、Pod卡在Pending状态的深度排查

那些赖在Pending状态不走的Pod,十有八九是资源分配的问题。来个真实案例:

# 示例:资源超限的Deployment(技术栈:Kubernetes YAML)
apiVersion: apps/v1
kind: Deployment
metadata:
  name: memory-hog
spec:
  replicas: 3
  template:
    spec:
      containers:
      - name: nginx
        image: nginx
        resources:
          requests:
            memory: "16Gi"  # 请求16G内存
          limits:
            memory: "32Gi"  # 限制32G

关键命令:kubectl describe node | grep -A 10 Allocatable 查看节点实际可用资源

进阶排查技巧:

kubectl get events --sort-by='.lastTimestamp'  # 按时间排序查看事件
kubectl describe pod <pod-name> | grep -i warning  # 过滤警告信息

三、Service网络不通的经典场景

明明Pod跑得好好的,Service却访问不了?先试试这个诊断流程:

  1. 基础连通性测试
kubectl run test-$RANDOM --image=busybox --rm -it -- sh  # 临时容器
wget -O- <service-ip>:<port>  # 从集群内部测试
  1. Endpoint验证
# 典型错误示例:标签不匹配导致Endpoint为空
apiVersion: v1
kind: Service
metadata:
  name: buggy-service
spec:
  selector:
    app: not-exist-label  # 这里写错了标签
  ports:
    - protocol: TCP
      port: 80

补救命令:kubectl get endpoints <service-name> 看是否有对应IP

  1. 网络插件诊断
# Calico网络排查示例
calicoctl get workloadendpoints  # 查看网络端点
iptables -t nat -L -n -v  # 检查iptables规则

四、存储卷挂载失败的救火指南

PVC一直处于Pending状态?可能是这些原因:

  1. StorageClass配置问题
kubectl get storageclass  # 查看默认存储类
kubectl describe pvc <pvc-name>  # 查看具体错误
  1. 动态供应器日志
# NFS Provisioner示例(技术栈:Kubernetes + NFS)
kubectl logs -n kube-system deploy/nfs-provisioner | grep -i error
  1. 权限配置示例
# 正确的SecurityContext配置
apiVersion: v1
kind: Pod
metadata:
  name: security-context-demo
spec:
  securityContext:
    runAsUser: 1000
    fsGroup: 2000
  volumes:
  - name: sec-ctx-vol
    persistentVolumeClaim:
      claimName: test-pvc

五、集群升级中的那些坑

从1.18升级到1.20?小心这些雷区:

  1. API版本废弃检查
kubectl api-resources | grep deprecated  # 查找废弃API
kubectl convert -f old-deployment.yaml --output-version apps/v1  # 版本转换
  1. 关键组件版本兼容性
# 查看当前组件版本
kubectl version --short
kubeadm version
kubectl get daemonset -n kube-system kube-proxy -o yaml | grep image:
  1. 回滚方案
# 快速回滚kubelet示例
sudo yum install -y kubelet-1.18.20-0  # 指定旧版本
sudo systemctl restart kubelet

应用场景与技术选型

这套排查方法特别适合:

  • 刚接触Kubernetes的运维团队
  • 需要快速定位生产问题的场景
  • 混合云环境下的集群管理

技术优缺点

  • 优点:覆盖了90%的常见问题,步骤可复制性强
  • 缺点:需要基础Linux知识,部分命令需要根据实际环境调整

注意事项

  1. 生产环境慎用--force类强制命令
  2. 所有诊断操作应该先在测试环境验证
  3. 重要操作前务必做快照备份

总结

就像修车要先听发动机声音一样,处理Kubernetes问题也要学会"听"集群的状态。记住这个诊断黄金法则:先看Events,再查Describe,最后分析Logs。保持耐心,你终将成为集群故障的"老中医"。