K8S节点异常怎么办

发布时间:2021-12-16 09:19:29 作者:柒染
来源:亿速云 阅读:193
# K8S节点异常怎么办

## 前言

Kubernetes(K8S)作为容器编排的事实标准,其节点稳定性直接影响业务连续性。当节点出现异常时,快速定位和恢复是运维人员的核心能力。本文将系统梳理节点异常的类型、诊断方法、恢复手段及预防策略。

---

## 一、节点异常常见类型与表现

### 1.1 节点状态异常
```bash
kubectl get nodes

常见异常状态: - NotReady:节点无法接收新Pod - Unknown:API Server无法获取节点状态 - OutOfDisk:磁盘空间不足 - MemoryPressure:内存资源不足

1.2 资源耗尽

1.3 组件故障


二、诊断流程与方法

2.1 基础检查

# 查看节点事件
kubectl describe node <node-name>

# 检查核心组件日志
journalctl -u kubelet -n 100

2.2 资源分析工具

工具 作用 示例命令
top 实时资源监控 top -c
nmon 系统性能快照 nmon -f -s 5 -c 12
kubectl-top K8S资源视图 kubectl top node

2.3 网络诊断

# 检查CNI插件
kubectl get pods -n kube-system | grep -E 'flannel|calico'

# 测试节点间连通性
kubectl run net-test --image=alpine -- ping <目标IP>

三、典型场景处理方案

3.1 节点NotReady处理

步骤: 1. 检查kubelet状态

   ssh <node-ip> "systemctl restart kubelet"
  1. 验证证书有效期
    
    openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -dates
    
  2. 检查CNI配置
    
    ls /etc/cni/net.d/
    

3.2 资源不足处理

内存不足:

# 查找内存消耗最高的Pod
kubectl top pods -A --sort-by=memory

磁盘回收策略:

apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
evictionHard:
  memory.available: "500Mi"
  nodefs.available: "10%"

3.3 节点隔离与恢复

# 标记节点不可调度
kubectl cordon <node-name>

# 驱逐所有Pod(慎用)
kubectl drain <node-name> --ignore-daemonsets

# 恢复调度
kubectl uncordon <node-name>

四、高级排查技巧

4.1 内核日志分析

dmesg -T | grep -E 'oom|kill'

4.2 性能分析工具

4.3 节点调试Pod

apiVersion: v1
kind: Pod
metadata:
  name: node-debugger
spec:
  hostPID: true
  hostNetwork: true
  containers:
  - name: nsenter
    image: alpine
    command: ["nsenter", "-t", "1", "-m", "-u", "-i", "-n", "sleep", "3600"]

五、预防性措施

5.1 监控告警配置

推荐Prometheus监控指标: - kube_node_status_condition - node_memory_MemAvailable_bytes - node_filesystem_avail_bytes

5.2 节点自愈方案

使用Cluster API实现自动修复:

apiVersion: cluster.x-k8s.io/v1beta1
kind: MachineHealthCheck
spec:
  unhealthyConditions:
  - type: Ready
    status: Unknown
    timeout: 5m

5.3 最佳实践

  1. 预留系统资源(kube-reserved)
  2. 定期滚动升级节点
  3. 实现Pod优先级/QoS分级

六、案例复盘

案例1:时钟漂移导致证书失效

现象:节点突然NotReady
根因:NTP服务停止导致时间偏差超过证书有效期
解决

timedatectl set-ntp true
systemctl restart kubelet

案例2:僵尸进程耗尽PID

现象:无法创建新容器
修复

sysctl -w kernel.pid_max=32768
echo 100000 > /proc/sys/kernel/threads-max

结语

节点异常处理需要结合监控数据、日志分析和系统知识。建议建立完整的应急预案并定期演练。随着K8S版本迭代,持续关注官方故障排除文档更新。

本文档最后更新于:2023年8月
适用版本:Kubernetes 1.24+ “`

注:实际使用时可根据具体环境调整命令参数,生产环境操作前建议先在测试集群验证。文章长度可通过增加案例细节或补充原理说明进一步扩展。

推荐阅读:
  1. Cassandra集群管理-替换异常节点
  2. RKE K8S 集群增删节点

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

kubernetes

上一篇:如何解析K8S中Service 的Ingress意义与部署

下一篇:Linux sftp命令的用法是怎样的

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》