Kubernetes节点管理与故障排查引言在 Kubernetes 集群中节点是运行 Pod 的基础设施。节点的健康状态直接影响整个集群的稳定性。本文将深入探讨 Kubernetes 节点管理的核心概念、常见问题排查方法和最佳实践。一、节点架构概述1.1 节点组件┌─────────────────────────────────────────────────────────────┐ │ Kubernetes 节点 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ Master Node │ │ │ │ ┌─────────┐ ┌──────────┐ ┌───────────┐ │ │ │ │ │ API │ │ Scheduler│ │ Controller│ │ │ │ │ │ Server │ │ │ │ Manager │ │ │ │ │ └────┬────┘ └────┬─────┘ └─────┬─────┘ │ │ │ └───────┼────────────┼──────────────┼─────────────────┘ │ │ │ │ │ │ │ ▼ ▼ ▼ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ Worker Node │ │ │ │ ┌─────────┐ ┌──────────┐ ┌───────────┐ │ │ │ │ │ Kubelet │ │ Kube- │ │ Container │ │ │ │ │ │ │ │ proxy │ │ Runtime │ │ │ │ │ └────┬────┘ └────┬─────┘ └─────┬─────┘ │ │ │ │ │ │ │ │ │ │ │ └────────────┼──────────────┘ │ │ │ │ ▼ │ │ │ │ ┌──────────────┐ │ │ │ │ │ Pods │ │ │ │ │ └──────────────┘ │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘1.2 节点状态状态描述原因Ready节点正常运行所有组件健康NotReady节点不可用Kubelet 未响应或资源不足Unknown状态未知节点失联SchedulingDisabled禁止调度手动设置或污点二、节点管理命令2.1 查看节点状态# 查看所有节点 kubectl get nodes # 查看节点详细信息 kubectl describe node node-name # 查看节点资源使用 kubectl top nodes # 查看节点标签 kubectl get nodes -L zone,region2.2 节点标签管理# 添加节点标签 kubectl label nodes node-name zoneus-west-2 # 更新节点标签 kubectl label nodes node-name zoneus-west-2 --overwrite # 删除节点标签 kubectl label nodes node-name zone- # 查看节点标签 kubectl get nodes --show-labels2.3 节点污点管理# 添加污点 kubectl taint nodes node-name keyvalue:NoSchedule # 删除污点 kubectl taint nodes node-name key:NoSchedule- # 查看污点 kubectl describe node node-name | grep Taints2.4 节点调度控制# 禁止节点调度 kubectl cordon node-name # 允许节点调度 kubectl uncordon node-name # 驱逐节点上的 Pod kubectl drain node-name --ignore-daemonsets # 安全驱逐等待 Pod 优雅终止 kubectl drain node-name --grace-period60三、节点故障排查3.1 常见节点问题问题现象排查方向节点 NotReadyPod 无法调度到该节点检查 Kubelet、网络、资源Pod 无法启动Pod 卡在 Pending 状态检查资源请求、节点选择器、污点节点资源不足Pod 被驱逐检查 CPU、内存、磁盘使用网络不通Pod 无法通信检查 CNI、防火墙、路由3.2 Kubelet 问题排查# 检查 Kubelet 状态 systemctl status kubelet # 查看 Kubelet 日志 journalctl -u kubelet -f # 检查 Kubelet 配置 cat /var/lib/kubelet/config.yaml # 验证 Kubelet 健康状态 curl -s http://localhost:10248/healthz3.3 节点资源问题排查# 查看节点资源使用 kubectl top nodes # 查看节点详细资源信息 kubectl describe node node-name | grep -A 20 Allocated Resources # 检查节点磁盘使用 df -h # 检查节点内存使用 free -h # 检查节点 CPU 使用 top3.4 网络问题排查# 检查节点网络连接 ping node-ip # 检查 Pod 网络 kubectl exec -it pod-name -- ping target-pod-ip # 检查 CNI 插件状态 kubectl get pods -n kube-system -l k8s-appcalico # 检查节点路由 ip route3.5 节点日志分析# 查看节点系统日志 journalctl -p err -f # 查看 Docker 日志 journalctl -u docker -f # 查看 containerd 日志 journalctl -u containerd -f # 查看节点事件 kubectl get events --field-selector involvedObject.kindNode四、节点维护4.1 节点维护流程┌─────────────────────────────────────────────────────────────┐ │ 节点维护流程 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 1. 禁止调度 → kubectl cordon node │ │ │ │ │ ▼ │ │ 2. 驱逐 Pod → kubectl drain node │ │ │ │ │ ▼ │ │ 3. 执行维护操作 │ │ │ │ │ ▼ │ │ 4. 恢复调度 → kubectl uncordon node │ │ │ │ │ ▼ │ │ 5. 验证节点状态 │ │ │ └─────────────────────────────────────────────────────────────┘4.2 节点升级# 查看当前版本 kubectl version # 升级 Kubelet以 Ubuntu 为例 apt-get update apt-get upgrade -y kubelet kubeadm kubectl # 重启 Kubelet systemctl restart kubelet # 验证升级 kubectl get nodes -o wide4.3 节点替换# 准备新节点 kubeadm join master-ip:6443 --token token --discovery-token-ca-cert-hash hash # 驱逐旧节点 kubectl drain old-node --ignore-daemonsets # 删除旧节点 kubectl delete node old-node # 验证新节点 kubectl get nodes五、节点监控与告警5.1 节点监控指标apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: node-exporter spec: selector: matchLabels: app: node-exporter endpoints: - port: metrics interval: 30s5.2 节点告警规则groups: - name: node-alerts rules: - alert: NodeNotReady expr: kube_node_status_condition{conditionReady,statusfalse} 1 for: 5m labels: severity: critical annotations: summary: Node {{ $labels.node }} is not ready description: Node {{ $labels.node }} has been not ready for more than 5 minutes - alert: NodeHighCPU expr: 100 - (avg by(node) (irate(node_cpu_seconds_total{modeidle}[1m])) * 100) 90 for: 5m labels: severity: warning annotations: summary: High CPU usage on node {{ $labels.node }} description: CPU usage is above 90% on node {{ $labels.node }} - alert: NodeHighMemory expr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes 0.9 for: 5m labels: severity: warning annotations: summary: High memory usage on node {{ $labels.node }} description: Memory usage is above 90% on node {{ $labels.node }}5.3 节点健康检查# 节点健康检查脚本 #!/bin/bash echo Node Health Check echo -e \n1. Node Status: kubectl get nodes -o wide echo -e \n2. Node Resources: kubectl top nodes echo -e \n3. Node Conditions: kubectl get nodes -o jsonpath{range .items[*]}{.metadata.name}{\n}{range .status.conditions[*]}{ }{.type}{: }{.status}{\n}{end}{end} echo -e \n4. Recent Events: kubectl get events --field-selector involvedObject.kindNode --sort-by.lastTimestamp | tail -10六、节点安全加固6.1 节点访问控制apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: node-admin rules: - apiGroups: [] resources: [nodes] verbs: [get, list, watch, patch, update] apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: node-admin-binding roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: node-admin subjects: - kind: User name: admin-user6.2 节点安全配置# 禁用 swap swapoff -a sed -i /swap/d /etc/fstab # 关闭不必要的服务 systemctl disable --now firewalld systemctl disable --now auditd # 设置内核参数 cat /etc/sysctl.d/k8s.conf EOF net.bridge.bridge-nf-call-ip6tables 1 net.bridge.bridge-nf-call-iptables 1 net.ipv4.ip_forward 1 EOF sysctl --system6.3 节点审计# 查看节点修改历史 kubectl get events --field-selector involvedObject.kindNode # 检查节点标签变更 kubectl get nodes -o yaml | grep -E name:|labels: # 检查节点污点变更 kubectl describe node node-name | grep Taints七、总结节点管理是 Kubernetes 运维的核心节点状态监控定期检查节点状态和资源使用故障排查掌握 Kubelet、网络、资源问题的排查方法节点维护掌握 cordon/drain/uncordon 流程节点监控配置监控指标和告警规则节点安全实施访问控制和安全加固通过有效的节点管理可以保障集群的稳定性和可靠性。下一步行动建立节点监控和告警体系制定节点维护流程实施节点安全加固定期进行节点健康检查建立节点故障处理手册