当前位置: 首页 > news >正文

Kubernetes节点管理与故障排查

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,region

2.2 节点标签管理

# 添加节点标签 kubectl label nodes <node-name> zone=us-west-2 # 更新节点标签 kubectl label nodes <node-name> zone=us-west-2 --overwrite # 删除节点标签 kubectl label nodes <node-name> zone- # 查看节点标签 kubectl get nodes --show-labels

2.3 节点污点管理

# 添加污点 kubectl taint nodes <node-name> key=value:NoSchedule # 删除污点 kubectl taint nodes <node-name> key:NoSchedule- # 查看污点 kubectl describe node <node-name> | grep Taints

2.4 节点调度控制

# 禁止节点调度 kubectl cordon <node-name> # 允许节点调度 kubectl uncordon <node-name> # 驱逐节点上的 Pod kubectl drain <node-name> --ignore-daemonsets # 安全驱逐(等待 Pod 优雅终止) kubectl drain <node-name> --grace-period=60

三、节点故障排查

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/healthz

3.3 节点资源问题排查

# 查看节点资源使用 kubectl top nodes # 查看节点详细资源信息 kubectl describe node <node-name> | grep -A 20 "Allocated Resources" # 检查节点磁盘使用 df -h # 检查节点内存使用 free -h # 检查节点 CPU 使用 top

3.4 网络问题排查

# 检查节点网络连接 ping <node-ip> # 检查 Pod 网络 kubectl exec -it <pod-name> -- ping <target-pod-ip> # 检查 CNI 插件状态 kubectl get pods -n kube-system -l k8s-app=calico # 检查节点路由 ip route

3.5 节点日志分析

# 查看节点系统日志 journalctl -p err -f # 查看 Docker 日志 journalctl -u docker -f # 查看 containerd 日志 journalctl -u containerd -f # 查看节点事件 kubectl get events --field-selector involvedObject.kind=Node

四、节点维护

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 wide

4.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: 30s

5.2 节点告警规则

groups: - name: node-alerts rules: - alert: NodeNotReady expr: kube_node_status_condition{condition="Ready",status="false"} == 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{mode="idle"}[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.kind=Node --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-user

6.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 --system

6.3 节点审计

# 查看节点修改历史 kubectl get events --field-selector involvedObject.kind=Node # 检查节点标签变更 kubectl get nodes -o yaml | grep -E "name:|labels:" # 检查节点污点变更 kubectl describe node <node-name> | grep Taints

七、总结

节点管理是 Kubernetes 运维的核心:

  1. 节点状态监控:定期检查节点状态和资源使用
  2. 故障排查:掌握 Kubelet、网络、资源问题的排查方法
  3. 节点维护:掌握 cordon/drain/uncordon 流程
  4. 节点监控:配置监控指标和告警规则
  5. 节点安全:实施访问控制和安全加固

通过有效的节点管理,可以保障集群的稳定性和可靠性。

下一步行动

  1. 建立节点监控和告警体系
  2. 制定节点维护流程
  3. 实施节点安全加固
  4. 定期进行节点健康检查
  5. 建立节点故障处理手册
http://www.jsqmd.com/news/811993/

相关文章:

  • ElevenLabs IVR语音制作正在淘汰传统TTS方案?头部金融客户已将平均通话时长缩短31%,你还在手动剪辑吗?
  • 量子互联网节点混合程序执行挑战与Qoala架构解析
  • Arm A-profile架构寄存器设计与安全隔离机制详解
  • 2025-2026年国内充电桩加盟品牌推荐:十大厂家排名评测产品特点与适用场景指南 - 品牌推荐
  • NotebookLM + Hugging Face协同作战:NLP任务交付周期压缩68%的实证方法论
  • 2025-2026年上海新房项目推荐:五大楼盘评测解析投资自住两相宜场景与注意事项 - 品牌推荐
  • 保姆级教程:用安信可RG-02网关和TTN平台,5分钟搞定LoRaWAN节点数据收发
  • HCM系列共模电感器:小型化与大电流EMI滤波技术解析
  • 2025-2026年淮安财税公司推荐:六家可靠评测税务筹划避风险注意事项排行 - 品牌推荐
  • ssm《数字图像处理》教学演示系统(10019)
  • 从零构建Copaw自定义Channel:WebSocket实时通信与Agent能力接入实战
  • 2025-2026年北京代理记账公司推荐:五家排行产品专业评测解决年终汇算清缴致合规难题 - 品牌推荐
  • 电子傅里叶叠层成像技术原理与应用解析
  • 2025-2026年上海1500万-2000万新房项目推荐:五大项目详细评测,周末看房防信息过载案例 - 品牌推荐
  • AI编程助手任务编排引擎:从Linear到Claude Code的自动化工作流
  • 合肥系统门窗品牌排行:合肥阳光房/合肥阳台封窗/天津系统封窗/天津系统门窗/天津铝合金门窗/天津门窗/天津阳光房/选择指南 - 优质品牌商家
  • Lime AI工作台:本地优先的智能创作助手与工作流自动化实践
  • 2025-2026年北京代理记账公司推荐:五家排行专业评测针对电商行业账目混乱痛点 - 品牌推荐
  • 2025-2026年国内品牌策划公司推荐:七大产品多品类扩张避免品牌力分散的口碑好的评测注意事项 - 品牌推荐
  • 存储过程如何处理海量数据的批处理_循环提交与分段LIMIT结合
  • Arm PSA安全架构:双环境隔离与RoT服务实现详解
  • 2025-2026年国内品牌策划公司推荐:七家排行产品专业评测解决品牌定位模糊致客户流失 - 品牌推荐
  • LaTeX实战进阶:从IEEE会议模板到高效科研排版
  • 2026广州小型搬家权威服务推荐榜:广州蚂蚁搬屋、广州专业搬家、广州人人搬家、广州人人搬屋、广州仓库搬迁、广州天河搬家选择指南 - 优质品牌商家
  • 从真人秀到真工程:揭秘硬件开发与EDA工具链的实战魅力
  • 独立开发者如何利用Taotoken为多个AI项目管理API成本
  • 2026年5月1500万-2000万上海新房项目推荐:五大项目专业评测夜间居家防采光痛点 - 品牌推荐
  • 2025-2026年北京代理记账公司推荐:五家高性价比评测解决小微企业成本控制痛点 - 品牌推荐
  • Llama-3中文优化实战:从词表策略到本地部署的完整指南
  • 2026年高压MOS厂商排行:TO-263MOS、低压MOS、功率MOS、平面MOS、替代料MOS、现货MOS选择指南 - 优质品牌商家