惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Security Latest
Security Latest
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Stack Overflow Blog
Stack Overflow Blog
WordPress大学
WordPress大学
N
Netflix TechBlog - Medium
GbyAI
GbyAI
云风的 BLOG
云风的 BLOG
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
宝玉的分享
宝玉的分享
博客园 - 【当耐特】
C
Cyber Attacks, Cyber Crime and Cyber Security
雷峰网
雷峰网
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Threat Research - Cisco Blogs
NISL@THU
NISL@THU
Spread Privacy
Spread Privacy
P
Proofpoint News Feed
J
Java Code Geeks
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
MyScale Blog
MyScale Blog
T
Tor Project blog
P
Proofpoint News Feed
C
CERT Recently Published Vulnerability Notes
P
Privacy & Cybersecurity Law Blog
MongoDB | Blog
MongoDB | Blog
Simon Willison's Weblog
Simon Willison's Weblog
C
Cybersecurity and Infrastructure Security Agency CISA
L
LINUX DO - 热门话题
小众软件
小众软件
G
GRAHAM CLULEY
P
Privacy International News Feed
AWS News Blog
AWS News Blog
Know Your Adversary
Know Your Adversary
P
Palo Alto Networks Blog
人人都是产品经理
人人都是产品经理
S
Schneier on Security
Scott Helme
Scott Helme
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
B
Blog RSS Feed
T
The Exploit Database - CXSecurity.com
Recent Announcements
Recent Announcements
E
Exploit-DB.com RSS Feed
C
CXSECURITY Database RSS Feed - CXSecurity.com
U
Unit 42
The Register - Security
The Register - Security
S
Securelist
Martin Fowler
Martin Fowler
Project Zero
Project Zero
大猫的无限游戏
大猫的无限游戏
Cisco Talos Blog
Cisco Talos Blog

博客园 - 梦徒

GPU和CPU的知识 K8s 集群巡检项整理 K8s运维的核心能力建设 Ceph 分布式存储系统 VMware备份接口 股市布林线(BOLL)指标三条线的使用技巧 Python 数据分析入门|02:Pandas 数据清洗:缺失值/重复值/异常值处理 Python 数据分析入门|01 Pandas 基础:1 行代码读取 Excel/Csv文件 python f-string格式化输出 Python数据分析利器-Pandas数据处理-筛选与排序 Python数据分析利器-Pandas 简介 python-分割文件名及后缀 python类及三大特性 Python 类的属性和方法详解 Python 必背内置函数 python常用数据结构之字典 MQ三巨头RocketMQ、Kafka、RabbitMQ 选型 一文搞懂 Redis 的三种集群方案 VMware ESXi 磁盘置备类型详解 Linux 实例:配置 NTP 服务 Kubernetes 运维必备之常用命令总结 Kubernetes + CI/CD 全流程指南!实现自动化部署 Linux Redhat 7.9 下 Docker 离线安装部署
K8s节点NotReady恢复方法
梦徒 · 2026-05-21 · via 博客园 - 梦徒

问题描述:业务反应有一个K8s pod更新后一直删除不掉,以免影响业务,排查后发现是该pod所在的node节点主机10.10.12.75是NotReady状态。

# kubectl get nodes
NAME        STATUS     ROLES         AGE      VERSION
10.10.12.55   Ready      etcd,master   5y305d   v1.18.5
10.10.12.57   Ready      etcd,master   5y305d   v1.18.5
10.10.12.59   Ready      etcd,master   5y305d   v1.18.5
10.10.12.62   Ready      worker        5y305d   v1.18.5
10.10.12.64   Ready      worker        5y305d   v1.18.5
10.10.12.75   NotReady   worker        5y305d   v1.18.5

生产环境中遇到节点 NotReady,首要原则是先诊断,后操作。任何直接重启节点的行为都应谨慎,以免对运行中的业务造成影响。

1. 获取节点详情

kubectl describe node 10.10.12.75

在命令输出的末尾,重点关注以下两个部分:

Conditions 部分:查看 Ready 状态为 False 还是 Unknown。同时检查 MemoryPressureDiskPressurePIDPressure 等是否为 True。如果是 True,说明节点资源耗尽

Events 部分:这里会记录近期发生的关键事件。例如,可能会出现 Failed to create pod sandboxUnable to attach or mount volumes 或 kubelet stopped posting node status 等错误信息。这些信息是后续排查的根本依据。

2. 检查控制平面组件状态

# kubectl get pods -n kube-system | grep -E 'etcd|apiserver|controller-manager|scheduler'
etcd-10.0.1.55                             1/1     Running   15         5y305d
kube-apiserver-10.0.1.59                   1/1     Running   8          5y305d
kube-controller-manager-10.0.1.55          1/1     Running   98         5y305d
kube-scheduler-10.0.1.55                   1/1     Running   104        5y305d

确保所有控制平面组件的Pod都在运行。

3. (如果可能)登录问题节点,检查基础服务

检查kubelet服务状态及日志信息

systemctl status kubelet
journalctl -u kubelet -f --lines=50

观察日志末尾是否有明显的错误。常见的有:

  • 证书问题: 日志中可能包含 "TLS bootstrap failed" 或 "certificate has expired" 等字样。5年以上的集群,证书过期是常见原因

  • 容器运行时问题: 报错 "failed to connect to containerd" 或 "dial unix /run/containerd/containerd.sock: connect: no such file or directory",说明容器运行时(containerd/docker)挂了。

  • PLEG问题: 报错 "PLEG is not healthy",通常与容器运行时响应缓慢有关

4、检查容器运行时状态:

# 如果使用 containerd (K8s 1.18 的常用运行时)
sudo systemctl status containerd

# 如果使用 docker
sudo systemctl status docker

# 检查磁盘空间
df -h /var/lib/kubelet

5、实施恢复(低风险操作)

# 重启docker、kubelet服务
systemctl restart docker
systemctl restart kubelet
# 重启后再次检查其状态和日志
sudo systemctl status kubelet

6、故障转移(业务保护)

 如果节点问题复杂,预计修复时间较长(超过10分钟),为了保障业务,应该先将该节点上的Pod迁移走。

# 封锁节点,使其不再接受新的Pod调度
kubectl cordon 10.10.12.75

# 驱离节点上的现有Pod,使其重新调度到其他健康节点
# --ignore-daemonsets: 忽略DaemonSet管理的Pod
# --delete-emptydir-data: 删除那些使用了临时存储的Pod(谨慎使用)
kubectl drain 10.10.12.75 --ignore-daemonsets --delete-emptydir-data

Kubernetes 中,可以通过 Service 的配置找到关联的 Pod,并获取 Pod 的 IP 地址.

方法一:通过 kubectl describe svc 查看 Endpoints

kubectl describe svc <service-name> -n <namespace>

#输出中会包含 Endpoints 字段,格式为 <pod-ip>:<port>,例如
Endpoints:         10.244.1.5:8080,10.244.2.8:8080,10.244.3.12:8080

方法二:使用 kubectl get endpoints 命令
# 查看单个 Service 的 Endpoints
kubectl get endpoints <service-name> -n <namespace>

# 查看所有 Service 的 Endpoints
kubectl get endpoints -A