【K8S系列】Kubernetes pod节点NotReady问题及解决方案详解【已解决】

在这里插入图片描述

Kubernetes 集群中的每个节点都是运行容器化应用的基础。当节点状态显示为 NotReady
时,意味着该节点无法正常工作,这可能会导致 Pod
无法调度,从而影响整个应用的可用性。本文将深入分析节点不健康的各种原因、详细的排查步骤以及有效的解决方案。

一、节点不健康的原因

节点不健康的原因可以归结为多种因素,以下是一些主要原因:

  1. 资源不足

    • CPU 和内存压力:当节点上的 CPU 或内存使用率接近 100% 时,Kubernetes 可能会将节点标记为不健康。
    • 磁盘空间不足:如果节点的磁盘空间不足,可能会导致 Pod 无法正常运行。
  2. Kubelet 服务故障

    • Kubelet 是负责管理节点上容器的主要组件。如果 Kubelet 进程未运行或崩溃,节点会被标记为 NotReady
  3. 网络问题

    • 节点与 Kubernetes 控制平面或其他节点之间的网络连接故障,导致无法与 API 服务器通信。
  4. 容器运行时问题

    • Docker 或其他容器运行时未正常工作,会导致 Pod 无法启动。
  5. 节点维护状态

    • 节点可能被人为标记为维护状态(cordon),这会阻止新的 Pod 调度到该节点。
  6. 系统级别问题

    • 操作系统的错误、内核崩溃或其他严重问题可能导致节点不健康。

二、排查步骤

步骤 1: 查看节点状态

首先,使用以下命令检查集群中所有节点的状态:

kubectl get nodes

输出示例:

NAME           STATUS     ROLES    AGE     VERSION
node1         NotReady   <none>   5d      v1.21.0
node2         Ready      <none>   5d      v1.21.0

这表明 node1 的状态为 NotReady

步骤 2: 描述节点

使用 kubectl describe 命令获取节点的详细信息:

kubectl describe node <node-name>

输出示例:

Name:               node1
Labels:             <none>
Annotations:        kubernetes.io/hostname=node1
...
Conditions:Type              StatusReady             FalseOutOfDisk         FalseMemoryPressure    FalseDiskPressure      FalsePIDPressure       FalseNetworkUnavailable False
...
Events:Type     Reason       Age                From                 Message----     ------       ----               ----                 -------Warning  KubeletNotReady  5m                kubelet, node1     Kubelet is not posting active status

在输出中,关注以下几个方面:

  • Conditions:查看 Ready 状态是否为 False,以及其他条件(如 OutOfDiskMemoryPressure 等)。
  • Events:检查是否有异常事件,特别是 Kubelet 的状态信息。

步骤 3: 检查资源使用情况

确认节点的资源使用情况,确保没有达到限制:

kubectl top nodes

输出示例:

NAME       CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
node1      2000m        95%    1500Mi          90%
node2      1000m        30%    800Mi           50%

如果某个节点的 CPU 或内存使用率接近 100%,说明资源不足。

步骤 4: 检查 Kubelet 状态

SSH 登录到节点,检查 Kubelet 服务的状态:

sudo systemctl status kubelet

输出示例:

● kubelet.service - Kubernetes KubeletLoaded: loaded (/etc/systemd/system/kubelet.service; enabled; vendor preset: disabled)Active: failed (Result: exit-code) since Thu 2023-10-10 10:00:00 UTC; 5min ago

如果 Kubelet 未运行或状态为 failed,查看日志以查找故障原因:

journalctl -u kubelet

查找关键错误信息,帮助定位问题。

步骤 5: 检查 Docker 状态

确认 Docker 或其他容器运行时是否正常工作:

sudo systemctl status docker

输出示例:

● docker.service - Docker Application Container EngineLoaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)Active: active (running) since Thu 2023-10-10 09:50:00 UTC; 10min ago

如果 Docker 服务未运行,查看 Docker 日志,检查是否有错误信息:

journalctl -u docker

步骤 6: 检查网络连接

确保节点能够访问 Kubernetes 控制平面和其他节点。可以使用 pingcurl 命令检查网络连通性。例如,检查 API 服务器是否可达:

curl -k https://<k8s-api-server>:6443/version

如果网络无法连接,可能需要检查防火墙或网络配置。

三、解决方案

解决方案 1: 释放资源

如果节点资源不足,考虑以下措施:

  • 减少 Pod 数量:使用 kubectl delete pod <pod-name> 删除不必要的 Pod。
  • 调整资源请求和限制:优化 Pod 的资源配置,确保不超过节点的可用资源。
  • 扩展节点:通过云服务提供商添加新的节点或将现有节点的资源进行扩展。

解决方案 2: 重启 Kubelet

如果 Kubelet 服务出现问题,可以尝试重启:

sudo systemctl restart kubelet

重启后,再次检查节点状态:

kubectl get nodes

解决方案 3: 处理网络问题

如果发现网络连接不通:

  • 检查防火墙设置:确保 Kubernetes 所需的端口(如 6443、10250 等)是开放的。
  • 确认网络插件:如果使用了网络插件(如 Calico、Flannel 等),确保其正常工作。

解决方案 4: 检查和重启 Docker

如果 Docker 服务出现问题,尝试重启 Docker:

sudo systemctl restart docker

然后再次检查节点状态。

解决方案 5: 检查节点维护状态

如果节点被标记为 cordon,可以使用以下命令解除该状态:

kubectl uncordon <node-name>

确保节点能够接收新的 Pod。

解决方案 6: 处理系统级别问题

如果排查后仍无法解决,可能需要检查系统日志,查找操作系统级别的问题。这可能包括:

  • 检查系统负载和进程状态。
  • 重新启动节点,解决临时问题。

四、总结

节点不健康的问题是 Kubernetes 运维中的常见挑战。通过系统化的排查步骤和针对性的解决方案,用户可以高效地定位和解决问题,确保集群的稳定运行。了解节点的健康状态以及如何进行有效的故障排查,将极大地提升运维效率和服务质量。掌握这些知识和技能,将使你在 Kubernetes 的管理和维护中更加游刃有余。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/450845.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

查看SQL执行计划 explain

查看SQL执行计划 explain explain使用方式 alter session set current_schematest; explain plan for sql语句; --并不会实际执行&#xff0c;因此生成的执行计划也是预估的 select * from table(dbms_xplan.display); explain使用场景 1.内存中没有谓词信息了&#xff0…

MySQL从入门到跑路

SQL语言 SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;是用于管理和操作关系数据库的一种标准编程语言。 SQL分类&#xff1a; DDL(Data Definition Language)&#xff1a;数据定义语言&#xff0c;用于操作数据库、表、字段&#xff0c…

前端文件流导出

1、前端代码 ​ /** 导出 */ const handleExport async () > {let config {responseType: blob,headers: {Content-Type: application/json,},};const res await getTargetExport(config);const blob new Blob([res]);const fileName PK目标跟进导出列表.xls;const li…

SpringBoot整合Freemarker(一)

Freemarker和jsp一样是一个视图的引擎模板&#xff0c;其实所有的模板引擎的工作原理都是类似的&#xff0c;如下图&#xff1a; 接下来就具体讲解一下Freemarker的用法&#xff0c;参考手册&#xff1a;模板 数据模型 输出 - FreeMarker 中文官方参考手册 SpringBoot默认就…

【浏览器】如何正确使用Microsoft Edge

1、清理主页广告 如今的Microsoft Edge 浏览器 主页太乱了&#xff0c;各种广告推送&#xff0c;点右上角⚙️设置&#xff0c;把快速链接、网站导航、信息提要、背景等全部关闭。这样你就能得到一个超级清爽的主页。 网站导航       关闭 …

HarmonyOS NEXT和认证(在校生的大福利)

今天重点关注了一下HarmonyOS NEXT&#xff0c;也就是我们所说的纯血鸿蒙&#xff01; 根据官方的说法&#xff1a; 欢迎开发者进入HarmonyOS NEXT。暌违一年&#xff0c;HarmonyOS NEXT终于在万千开发者的期待下从幕后走向台前。 HarmonyOS NEXT采用全新升级的系统架构&#…

【Python】NumPy(一):数据类型、创建数组及基本操作

目录 ​NumPy初识 1.什么是NumPy&#xff1f; NumPy的应用 NumPy数据类型 Python基本数据类型 NumPy数据类型 NumPy数组 创建数组 1.使用numpy.array() 2.使用arange()方法创建 3.使用linspace()创建等差数列 4使用zeros()创建数组 5.使用ones()创建数组 6.利用…

Linux基本使用和程序部署

文章目录 一. Linux背景Linux发行版 二. Linux环境搭建Linux常见命令lspwdcdtouchcatmkdirrmcpmvtailvimgreppsnetstat管道 三. 搭建java部署环境安装jdk安装mysql部署Web项目到Linux 一. Linux背景 1969−1970年,⻉尔实验室的DennisRitchie和KenTompson开发了Unix操作系统. 他…

在Linux操作系统上安装NVM教程——CentOS 7/VMware 17版

目录 一、测试网络是否能上网 二、下载阿里云镜像 三、解决执行yum命令出现报错&#xff08;没有就跳过&#xff09; 四、下载NVM安装包 五、解压NVM安装包 六、安装Node 七、连接新的动态库 八、升级GLIBC版本 九、安装GCC 十、查看当前服务器CentOS版本 一、测试网…

[AWS云]kafka调用和创建

背景:因为因为公司的项目需要使用AWS的kafka&#xff0c;但是在创建和使用过程中都遇到了一些报错和麻烦&#xff0c;毕竟老外的东西&#xff0c;和阿里云、华为使用起来还是不一样。 一、创建&#xff08;创建的配置过程就略了&#xff0c;就是配置一下可用区、型号&#xff0…

闯关leetcode——110. Balanced Binary Tree

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/balanced-binary-tree/description/ 内容 Given a binary tree, determine if it is height-balanced. A height-balanced binary tree is a binary tree in which the depth of the two subtrees…

深入理解售后派单管理系统,功能优势一览

售后派单管理系统优化售后服务流程&#xff0c;提升响应速度、运营效率和服务质量。ZohoDesk等系统通过自动化派单、实时调度监控等功能&#xff0c;助力企业赢得竞争优势。适用于电子产品、汽车、IT及房地产等行业。 一、什么是售后派单管理系统 售后派单管理系统是一种专门用…

第七届机械、控制与计算机工程国际学术会议(ICMCCE2024)

重要信息 大会官网&#xff1a;www.icmcce.com 大会地点&#xff1a;中国杭州 大会时间&#xff1a;2024年10月25-27日 大会简介 第七届机械、控制与计算机工程国际学术会议定于2024年10月25日至27日在中国杭州召开。本届会议由巢湖学院主办&#xff0c;主要围绕“机械”、…

AGI|浅尝多Agent协作框架CrewAI,打造一个智能旅行助手

目录 一、介绍 二、特性 三、使用案例 四、 结语 一、介绍 Crew AI是一个多智能体协作智能框架&#xff0c;可以编排角色扮演的AI智能体。旨在协调角色扮演的自主AI代理&#xff0c;通过促进协作智能体&#xff0c;Crew AI使代理能够无缝协作&#xff0c;共同应对复杂任务。…

【JavaScript】LeetCode:61-65

文章目录 61 课程表62 实现Trie&#xff08;前缀树&#xff09;63 全排列64 子集65 电话号码的字母组合 61 课程表 Map BFS拓扑排序&#xff1a;将有向无环图转为线性顺序。遍历prerequisites&#xff1a;1. 数组记录每个节点的入度&#xff0c;2. 哈希表记录依赖关系。n 6&a…

(十九)、使用 minikube 运行k8s 集群

文章目录 1、机器信息2、官方文档3、启动本机 docker4、安装 minikube5、启动 minikube5.1、报错重试应该做什么&#xff1f; 6、启动后7、安装 Vs Code & k8s extensions8、在 VS Code 查看运行起来的 k8s 集群9、基本命令10、虚拟化不支持 Mac Os 14.3.1 1、机器信息 Ma…

c++算法第3天

本篇文章包含三道算法题&#xff0c;难度由浅入深&#xff0c;适合新手练习哟 目录 第一题 题目链接 题目解析 代码原理 代码编写 本题总结 第二题 题目链接 题目解析 代码原理 代码编写 第三题 题目链接 题目解析 代码原理 代码编写 第一题 题目链接 [NOIP2…

Iceberg 基本操作和快速入门二-Spark DDL操作

Iceberg 基本操作和快速入门一-CSDN博客 启动spark会话 docker exec -it spark-iceberg spark-sql 创建表 CREATE TABLE prod.db.sample ( id bigint NOT NULL COMMENT unique id, data string) USING iceberg; 创建分区表 CREATE TABLE prod.db.sample_par ( id bigint, …

No.17 笔记 | XXE漏洞:XML外部实体注入攻击

1. XXE漏洞概览 XXE&#xff08;XML External Entity&#xff09;是一种允许攻击者干扰应用程序对XML输入处理的漏洞。 1.1 XXE漏洞比喻 想象XML解析器是一个听话的机器人&#xff0c;而XXE就是利用这个机器人的"过分听话"来获取不应该获取的信息。 1.2 XXE漏洞危…

基于51单片机的大棚环境检测系统设计

温室大棚环境监测系统设计&#xff1a;基于51单片机的智能化解决方案 引言 随着现代农业技术的发展&#xff0c;温室大棚种植已成为提高农作物产量和质量的重要手段。为了更好地控制温室环境&#xff0c;提高作物生长效率&#xff0c;环境监测系统成为了温室管理中不可或缺的…