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

K8S-Node

Node

在 Kubernetes 集群中,节点(Node)是运行工作负载的实际计算资源,可以是物理服务器或虚拟机。每个节点都运行着必要的服务来支持 Pod 的执行,并由控制面统一管理

节点管理机制

自注册模式

Kubernetes 提供了两种节点管理方式:

自动注册(默认)
当 kubelet 的 --register-node 标志设置为 true(默认值)时,kubelet 会自动向 API 服务器注册自己。这个过程包括:

  1. kubelet 启动时读取节点配置信息
  2. 向 API 服务器发送注册请求
  3. Kubernetes 在内部创建对应的 Node 对象
  4. 系统验证节点名称的合法性并检查节点健康状况

手动注册
在某些情况下,可能需要手动创建 Node 对象,这时需要设置 kubelet 的 --register-node=false 标志。手动注册通常用于:

  • 需要精确控制节点属性的环境
  • 自动化工具管理节点生命周期的场景

节点状态管理

Kubernetes 持续监控节点状态,通过以下方式管理节点生命周期:

  • 健康节点:所有必要服务正常运行,可以接收和运行 Pod
  • 不健康节点:关键服务存在问题,集群活动会忽略该节点
  • 节点恢复:当不健康节点恢复正常后,Kubernetes 会自动重新启用它

注意 : Kubernetes 会一直保存非正常节点对应的对象,并持续检查其健康状态,直到该节点被显式删除。

节点名称的唯一性

命名规则

节点名称在 Kubernetes 集群中必须保持唯一性,

Node名称唯一的原因
  1. 身份标识:节点名称是 Node 对象的主要标识符
  2. 资源关联:系统资源、监控数据和网络策略都与节点名称关联
  3. 集群操作:管理操作(如驱逐、维护)都基于节点名称执行

命名规范

  • 使用有意义且一致的命名约定
  • 避免使用易混淆的字符(如大小写混合,特殊字符)
  • 考虑使用基础设施提供的唯一标识符

节点自注册过程详解

注册流程

节点自注册是一个多步骤的过程:

  1. kubelet 启动:读取配置并初始化
  2. 凭证获取:获取访问 API 服务器所需的认证信息
  3. 节点信息收集:收集硬件信息、操作系统数据和容量信息
  4. API 调用:向 API 服务器发送 Node 对象创建请求
  5. 状态更新:定期更新节点状态信息

配置参数详解

kubelet 与节点注册相关的重要参数:

# 是否启用自注册(默认true)
--register-node=true# 节点标签和注解
--node-labels=key1=value1,key2=value2# 节点状态更新频率
--node-status-update-frequency=10s

重新注册场景

当节点配置需要更新时,推荐的做法是重新向 API 服务器注册节点。这通常在以下情况下需要:

  • 硬件资源变更(如内存、CPU扩容)
  • 标签或注解更新
  • 网络配置变更
  • kubelet 重要配置修改

节点心跳机制

地址信息

节点的地址字段提供了网络标识信息,其具体含义取决于云提供商或物理基础设施的配置:

  • HostName:由节点内核报告的主机名,可通过 kubelet 的 --hostname-override 参数覆盖
  • ExternalIP:通常是从集群外部可路由的 IP 地址
  • InternalIP:通常是仅在集群内部可路由的 IP 地址
节点状况

节点的 conditions 字段描述了运行中节点的状态,主要包括以下类型:

状况类型描述
Ready节点健康且可接收 Pod 时为 True;不健康时为 False;节点控制器在最近监控宽限期内未收到消息时为 Unknown
DiskPressureTrue 表示节点磁盘可用量低,存在磁盘空间压力
MemoryPressureTrue 表示节点内存可用量低,存在内存压力
PIDPressureTrue 表示节点上进程过多,存在进程压力
NetworkUnavailableTrue 表示节点网络配置不正确

状况与污点的关联

当节点出现问题时,Kubernetes 控制面会自动创建与节点状况对应的污点

  • Ready 状况为 Unknown 超过 NodeMonitorGracePeriod(默认50秒)时,添加 node.kubernetes.io/unreachable 污点
  • Ready 状况为 False 超过宽限期时,添加 node.kubernetes.io/not-ready 污点

污点会影响 Pod 的调度行为:

  • 调度器在分配 Pod 时会考虑节点污点
  • 已调度到节点的 Pod 可能因 NoExecute 污点而被驱逐
  • Pod 可以通过设置容忍度继续在特定污点的节点上运行

心跳的作用

节点心跳是 Kubernetes 集群确定节点可用性的核心机制,用于:

  1. 健康检测:确认节点是否正常运行
  2. 故障检测:及时发现节点故障并采取相应措施
  3. 资源调度:为调度器提供准确的节点状态信息

心跳类型

Kubernetes 使用两种类型的心跳机制:

1. NodeStatus 心跳

通过节点状态的 .status 字段实现:

  • 由 kubelet 定期更新(默认每10秒)
  • 包含丰富的节点状态信息
  • 直接存储在 Node 对象中

关键状态信息包括:

  • 容量与可分配资源
  • 当前运行条件(Ready、MemoryPressure、DiskPressure等)
  • 运行中的 Pod 信息
  • 主机系统信息
2. Lease 对象心跳

从 Kubernetes 1.14 引入的补充机制:

  • 创建独立的 Lease 对象(每个节点一个)
  • 更轻量级的心跳机制
  • 减少大型集群中 etcd 的负载

Lease 对象的优势:

  • 降低 API 服务器的负载
  • 提高心跳更新的可靠性
  • 更好地支持大规模集群

心跳更新机制

kubelet 负责管理两种心跳的更新:

  • .status 更新:当节点状态发生变化时,或在配置的时间间隔内(默认5分钟)没有更新事件时触发
  • Lease 更新:默认每10秒更新一次,独立于.status更新
    • 如果 Lease 更新失败,kubelet 采用指数回退机制重试
    • 初始重试间隔为200毫秒,最长重试间隔为7秒钟

心跳故障处理

当节点停止发送心跳时,控制面会采取分级响应:

  1. 标记不可达:节点状态更新为 Unknown(在 node-monitor-grace-period 后,默认40秒)
  2. 调度暂停:停止向该节点调度新的 Pod
  3. 驱逐决策:节点控制器根据设置决定是否驱逐 Pod(在 pod-eviction-timeout 后,默认5分钟)
  4. 恢复检测:持续监测节点是否恢复,恢复后自动重新启用

可配置参数:

# 节点未响应多久后标记为不可用(默认40秒)
--node-monitor-grace-period=40s# 节点不可用后多久开始驱逐Pod(默认5分钟)
--pod-eviction-timeout=5m

节点控制器

节点控制器功能

  1. 节点注册管理:处理节点的添加和删除
  2. 状态监控:定期检查节点健康状况
  3. 心跳管理:监控节点心跳更新
  4. 驱逐管理:在节点故障时驱逐Pod

控制器协调循环

节点控制器的工作流程:

for {// 获取所有节点列表nodes := listAllNodes()for _, node := range nodes {// 检查节点心跳if !hasRecentHeartbeat(node) {// 标记节点状态为UnknownmarkNodeStatusUnknown(node)// 检查是否需要驱逐Podif isEvictionRequired(node) {evictPodsFromNode(node)}} else {// 更新节点状态为健康updateNodeStatusHealthy(node)}}// 等待下一次循环sleep(syncPeriod)
}

配置参数

节点控制器的行为可以通过以下关键参数进行配置:

参数默认值描述
--node-monitor-period5s节点状态检查周期
--node-monitor-grace-period40s节点未响应标记为不可用的等待时间
--pod-eviction-timeout5m节点不可用后开始驱逐Pod的等待时间
--node-eviction-rate0.1每秒驱逐节点的速率限制
--secondary-node-eviction-rate0.01区域故障时的节点驱逐速率
--large-cluster-size-threshold50大型集群的大小阈值
--unhealthy-zone-threshold0.55不健康区域的阈值比例

故障处理

1. 网络分区处理

当节点与控制面之间的网络发生分区时:

  • 节点控制器检测到心跳丢失
  • 标记节点状态为 Unknown
  • 添加 node.kubernetes.io/unreachable 污点
  • 在超时后开始驱逐 Pod

2. 节点资源压力处理

当节点遇到资源压力时:

  • kubelet 报告 MemoryPressure 或 DiskPressure 状况
  • 节点控制器监控这些状况
  • 根据需要添加相应的污点
  • 影响新 Pod 的调度决策

3. 区域故障处理

在云环境中区域故障时:

  • 节点控制器检测到整个区域不可用
  • 降低驱逐速率以避免大规模重新调度风暴
  • 优先保证集群稳定性

查看节点控制器状态

# 查看节点控制器日志
kubectl logs -n kube-system kube-controller-manager-<pod-name> | grep node_controller# 检查节点状况
kubectl describe node <node-name># 查看节点事件
kubectl get events --field-selector involvedObject.kind=Node

Node官方文档


文章转载自:

http://0ejnIBTp.qywzp.cn
http://YC9RrW58.qywzp.cn
http://8gcsFTef.qywzp.cn
http://IpovyT9d.qywzp.cn
http://yI9o2MnF.qywzp.cn
http://HHTU93Jo.qywzp.cn
http://zg2apEH5.qywzp.cn
http://MXKviTS4.qywzp.cn
http://1pWCV8HC.qywzp.cn
http://ExRvB0yf.qywzp.cn
http://m1clZ19N.qywzp.cn
http://6XyQ2LTA.qywzp.cn
http://hZxyWwUM.qywzp.cn
http://sRXjZkAb.qywzp.cn
http://C9mmEaxJ.qywzp.cn
http://WcoQYfW6.qywzp.cn
http://XB1FC2RS.qywzp.cn
http://giMk7ZFg.qywzp.cn
http://cQaoizJe.qywzp.cn
http://jHXejjO7.qywzp.cn
http://GPU1vGkr.qywzp.cn
http://0BJCems3.qywzp.cn
http://OKDuO6ad.qywzp.cn
http://wWgnYFGd.qywzp.cn
http://1uWd1x03.qywzp.cn
http://IraBPMPJ.qywzp.cn
http://XcAZR0K9.qywzp.cn
http://sbJq5SXp.qywzp.cn
http://kSaF0THS.qywzp.cn
http://ngDp8ZPF.qywzp.cn
http://www.dtcms.com/a/374711.html

相关文章:

  • 嵌入式 - ARM(4) 硬件介绍与开发环境搭建
  • 网络上那些在线 PDF 转换工具安全吗?转换 PDF 需要注意什么
  • OneMark 插件试用
  • 专题:2025人形机器人、工业机器人、智能焊接机器人、扫地机器人产业洞察报告 | 附158+份报告PDF、数据仪表盘汇总下载
  • 微服务核心组件实战:Nacos 与 Ribbon 的应用
  • PDF处理控件Aspose.PDF教程:使用 Python 将 PDF 转换为 Base64
  • arm启动代码总结
  • TypeScript学习【一】
  • Day 19: 算法基础与面试理论精通 - 从思想理解到策略掌握的完整体系
  • 基于CNN的航空发动机剩余寿命预测 (MATLAB实现)
  • 已知 inode 号,如何操作文件?Ext 文件系统增删查改底层逻辑拆解
  • 论文阅读,Plug-and-Play Latent Diffusion,Brain Imaging
  • C#(/unity)中的闭包
  • 概率论第六讲—数理统计
  • Oracle RAC共享存储核心技术
  • C++, ffmpeg, libavcodec-RTSP拉流,opencv实时预览
  • 全网首发!Realsense 全新 D555 相机开箱记录与 D435i、L515、D456 横向测评!
  • 基于 Django 与 Bootstrap 构建的现代化设备管理平台
  • 图像金字塔---图像上采样下采样
  • 【ARM】ULINK Pro如何和SWD接口进行连接调试
  • 使用 Apollo TransformWrapper 生成相机到各坐标系的变换矩阵
  • 苹果用户速更新!macOS存严重漏洞,用户隐私数据面临泄露风险
  • 认识CPU (六):缓存与内存——芯片里的多级智能仓库
  • C++设计模式原理与实战(视频教程)
  • 苍穹外卖项目实战(day7-1)-缓存菜品和缓存套餐功能-记录实战教程、问题的解决方法以及完整代码
  • 51.不可变基础设施:云原生时代的「乐高城堡」建造法
  • Redis小白入门
  • 分层-三层架构
  • 实战:HarmonyOS 中 HEIF 图像开发全流程(图处理篇)
  • 深入 Kubernetes:从零到生产的工程实践与原理洞察