教程云原生容器编排【免费下载链接】kubernetes-handbookKubernetes 架构与生态从云原生到 AI 原生基础设施的构建指南项目地址https://gitcode.com/gh_mirrors/ku/kubernetes-handbook点击查看免费下载Node 是 Kubernetes 集群中的工作节点是 Pod 实际运行的物理机或虚拟机也是集群调度、资源上报与故障检测的基本单元。本文以 concepts/node.md 为主线系统讲解 Node 的地址Address、状态条件Condition、容量Capacity与版本信息Info四类状态信息的含义与判读方法并围绕kubectl cordon、kubectl drain、kubectl uncordon三大运维命令给出可复制的节点维护流程同时结合本仓库的 kubelet 配置文件、systemd 单元与 kubectl-cheatsheet.md 等实操资料深入到--hostname-override、unschedulable字段与 Pod Disruption Budget 等底层机制帮助读者既能看懂kubectl get nodes的输出也能安全、规范地完成一次节点的下线与维护。Node 在集群中的定位Node 是 Kubernetes 集群的工作节点可以是物理机也可以是虚拟机。在 Kubernetes 的经典架构中集群由 Master 与 Node 两类角色构成Master 承载 API Server、Controller Manager、Scheduler 等控制面组件而 Node 则运行 kubelet、kube-proxy 与容器运行时真正承载用户的工作负载。仓库的 concepts/index.md 中给出了整体架构视图其中 kubelet 负责维护容器的生命周期同时也负责 VolumeCSI和网络CNI的管理。从仓库的 practice/node-installation.md 可以看出一个标准的 Node 节点包含如下组件kubelet、kube-proxy、Docker容器运行时与 flannel网络插件并且每台 Node 节点上都需要安装 flannel。kubelet 启动后通过 TLS bootstrapping 向 kube-apiserver 发送 register node 请求从而把该节点注册进集群成为集群可调度资源的一部分。Node 的状态信息Kubernetes 通过NodeStatus持续收集并暴露节点的运行状态。使用kubectl describe nodes node即可查看某个节点的完整状态信息guide/kubectl-cheatsheet.md。Node 的状态信息分为四类Address、Condition、Capacity 和 Info。Address地址Node 的地址信息包括三类分别服务于不同的通信场景HostName节点的主机名可以被 kubelet 中的--hostname-override参数替代。在仓库的 etc/kubernetes/kubelet 中可以看到真实配置示例KUBELET_HOSTNAME--hostname-override172.20.0.113当节点的主机名不可靠例如 DHCP 分配的动态主机名或需要在集群内统一命名时就可以通过该参数强制指定节点在集群内注册的 HostName覆盖操作系统的主机名。ExternalIP可以被集群外部路由到的 IP 地址通常用于从集群外部访问该节点上的服务。InternalIP集群内部使用的 IP集群外部无法访问主要用于节点间通信与 Pod 调度。Condition状态条件Condition 用于描述节点当前的健康与资源压力状况是调度器与控制器做出决策的重要依据主要包括OutOfDisk磁盘空间不足时为True。ReadyNode controller 40 秒内没有收到节点的状态报告时为Unknown节点健康时为True否则为False。Ready 条件是最核心的健康信号kubectl get nodes输出中的STATUS列即由此而来。MemoryPressure当节点有内存压力时为True否则为False。DiskPressure当节点有磁盘压力时为True否则为False。查看所有节点是否就绪可以直接复用 guide/kubectl-cheatsheet.md 中提供的 JSONPath 技巧$ JSONPATH{range .items[*]}{.metadata.name}:{range .status.conditions[*]}{.type}{.status};{end}{end} \ kubectl get nodes -o jsonpath$JSONPATH | grep ReadyTrue当节点因为内存或磁盘压力进入MemoryPressure/DiskPressure状态时kubelet 会根据资源驱逐策略逐出部分 Pod 以恢复节点可用性这也是 concepts/pod-disruption-budget.md 中提到的由于节点资源不足而将容器逐出的非自愿中断场景之一。Capacity容量Capacity 描述节点可提供的资源上限主要包括CPU节点可用的 CPU 核数以千分之一核为单位即1000m 1 核。内存节点可用的内存容量。可运行的最大 Pod 个数受 kubelet 的--max-pods参数限制默认通常是 110。调度器Scheduler在做 Pod 调度时会以 Capacity 为基准扣除已分配Allocatable 之外的资源后判断节点是否有足够的剩余资源承接新的 Pod。Info版本信息Info 记录节点的软件与系统版本信息例如操作系统、Kubernetes 版本、Docker / 容器运行时版本等。通过kubectl describe nodes node的System Info部分即可查看常用于排查版本不匹配或升级前后的一致性核对。Node 管理cordon / drain / uncordon节点维护如下线物理机、升级内核、调整硬件是集群运维的日常操作。仓库的 concepts/node.md 给出了一套标准的三个命令工作流核心目的只有一个在节点不可用的整个过程中保证集群中运行的 Pod 不中断服务。禁止 Pod 调度到该节点kubectl cordonkubectl cordon nodecordon封锁命令将节点标记为不可调度unschedulable其底层实现是修改节点对象的spec.unschedulable字段为true。这一点在 guide/kubectl-cheatsheet.md 中有直接对应$ kubectl patch node k8s-node-1 -p {spec:{unschedulable:true}} # 部分更新节点也就是说kubectl cordon与上述kubectl patch的效果等价后者是前者更底层的等价操作。封锁之后已经运行在该节点上的 Pod不会被驱逐继续正常运行新创建的 Pod不会被调度到该节点上调度器会自动将其分配到其他可用节点通过kubectl get nodes查看时该节点的 STATUS 会显示Ready,SchedulingDisabled。驱逐该节点上的所有 Podkubectl drainkubectl drain nodedrain排空命令会删除该节点上的所有 PodDaemonSet 除外并在其他 node 上重新启动它们通常该节点需要维护时使用该命令。直接使用该命令会自动调用kubectl cordon node命令因此一个典型的排空流程是先封锁节点自动完成不再接收新的 Pod 调度再驱逐存量 Pod将普通 Pod 在其他节点重新创建维护期间节点处于排空状态直到维护完成。该命令会删除该节点上的所有 PodDaemonSet 除外在其他 node 上重新启动它们通常该节点需要维护时使用该命令。直接使用该命令会自动调用kubectl cordon node命令。当该节点维护完成启动了 kubelet 后再使用kubectl uncordon node即可将该节点添加到 kubernetes 集群中。需要注意的是drain驱逐 Pod 的过程实际上走的是 Eviction API这与 concepts/pod-disruption-budget.md 中关于自愿中断的论述完全对应集群管理员应使用遵循 Pod Disruption BudgetPDB的工具例如kubectl drain通过 Eviction API 驱逐 Pod而不是直接删除 Pod。当驱逐请求可能暂时被拒绝时drain 工具会定期重试所有失败的请求直到所有 Pod 都被终止或者达到配置的超时时间。对于设置了 PDB 的 Deploymentdrain会严格遵守可用副本数不低于 PDB 指定阈值的约束宁可阻塞等待也不会突破 PDB 底线这正是节点维护期间应用不中断服务的关键保障。恢复节点调度kubectl uncordonkubectl uncordon node当该节点维护完成启动了 kubelet 后再使用kubectl uncordon node即可将该节点添加到 kubernetes 集群中。uncordon会把节点的spec.unschedulable字段重新置为false节点恢复为可调度状态此后新创建的 Pod 又可以正常调度到该节点上。节点维护完整流程综合以上三个命令一次标准的节点维护流程如下# 1. 排空节点自动完成封锁 驱逐所有非 DaemonSet Pod kubectl drain node # 2. 查看节点状态确认 SchedulingDisabled kubectl get nodes # 3. 执行维护操作如升级内核、更换硬件等 # 维护完成后重新启动 kubelet # 4. 恢复节点调度 kubectl uncordon node与节点管理相关的其他操作节点管理不只是封锁与排空仓库中还有两类与其密切相关的操作值得掌握。查看与标记节点查看节点详细信息kubectl describe nodes my-node获取所有节点的 ExternalIP$ kubectl get nodes -o jsonpath{.items[*].status.addresses[?(.typeExternalIP)].address}查看节点的资源使用指标需要 Metrics Server / Heapster 支撑kubectl top node my-node见 guide/kubectl-cheatsheet.md。用 Taint 控制节点调度除了封锁cordon这种一刀切的临时手段Kubernetes 还提供 Taint污点与 Toleration容忍机制做更精细的调度控制concepts/taint-and-toleration.md。二者的作用方式与节点亲和性相反具有 taint 的 node 和 pod 是互斥关系而具有节点亲和性关系的 node 和 pod 是相吸的。每个节点上都可以应用一个或多个 taint不能容忍这些 taint 的 Pod 不会被该节点接受而为 Pod 设置 toleration 后这些 Pod 可以但不要求被调度到具有相应 taint 的节点上。为 node1 设置 taintkubectl taint nodes node1 key1value1:NoSchedule kubectl taint nodes node1 key1value1:NoExecute kubectl taint nodes node1 key2value2:NoSchedule删除 taint 与查看 taintkubectl taint nodes node1 key1:NoSchedule- kubectl taint nodes node1 key1:NoExecute- kubectl taint nodes node1 key2:NoSchedule- kubectl describe nodes node1在 Pod 的 spec 中设置 tolerations 字段可以有多个 keytolerations: - key: key1 operator: Equal value: value1 effect: NoSchedule - key: key1 operator: Equal value: value1 effect: NoExecute - key: node.alpha.kubernetes.io/unreachable operator: Exists effect: NoExecute tolerationSeconds: 6000其中value的值可以为NoSchedule、PreferNoSchedule或NoExecutetolerationSeconds是当 Pod 需要被驱逐时可以继续在 node 上运行的时间。Kubernetes 内置的node.alpha.kubernetes.io/unreachable污点会在节点不可达时自动添加配合tolerationSeconds可以控制 Pod 在节点失联后继续存活的时长这与drain驱逐是互补的两套保障机制。从配置到命令kubelet 与节点的真实落地为了把上述概念落到真实环境可以对照仓库中 kubelet 的完整配置链路理解节点注册与状态上报的实现环境配置文件 etc/kubernetes/kubelet 中KUBELET_ADDRESS、KUBELET_HOSTNAME即--hostname-override、KUBELET_API_SERVER、KUBELET_POD_INFRA_CONTAINER等参数逐一决定了节点监听的地址、在集群中注册的名称、接入的 API Server 地址与 Pod 基础设施镜像systemd 单元 systemd/kubelet.service 通过EnvironmentFile-/etc/kubernetes/config与EnvironmentFile-/etc/kubernetes/kubelet加载上述配置并最终以ExecStart/usr/bin/kubelet ...启动 kubelet在 practice/node-installation.md 中可以看到kubelet 启动时向 kube-apiserver 发送 TLS bootstrapping 请求需要先把kubelet-bootstrap用户赋予system:node-bootstrappercluster 角色kubelet 通过认证后发送 register node 请求还需要把kubelet-nodes用户赋予system:nodecluster 角色并加入system:nodes组之后节点才真正出现在集群中。也就是说Node 之所以能出现在kubectl get nodes列表中、能上报 Address / Condition / Capacity / Info 状态、能被 cordon / drain 管理其背后是 kubelet 从注册、认证到周期心跳上报的一整套机制在支撑。理解了这一链路再看kubectl drain与kubectl uncordon的运维语义就会清晰很多封锁与排空只是控制面侧的标记与驱逐动作而节点重新加入集群的前提始终是 kubelet 进程恢复正常并向 API Server 持续上报状态。参考文档concepts/node.mdNode 状态与 cordon / drain / uncordon 管理命令guide/kubectl-cheatsheet.md节点相关 kubectl 速查命令concepts/taint-and-toleration.mdTaint 与 Toleration 调度控制concepts/pod-disruption-budget.mdPDB 与kubectl drain的 Eviction API 配合practice/node-installation.mdNode 节点安装与 kubelet 注册流程etc/kubernetes/kubelet、systemd/kubelet.servicekubelet 配置与启动单元concepts/index.mdKubernetes 整体架构与组件职责赞分享教程云原生容器编排【免费下载链接】kubernetes-handbookKubernetes 架构与生态从云原生到 AI 原生基础设施的构建指南项目地址https://gitcode.com/gh_mirrors/ku/kubernetes-handbook点击查看免费下载相关推荐Laravel FastLogin部署指南生产环境配置与性能调优Laravel FastLogin部署指南生产环境配置与性能调优 Laravel FastLogin是一款强大的扩展包允许你的用户通过FaceID或ToucApollo核心概念详解命名空间与集群管理Apollo核心概念详解命名空间与集群管理 本文详细解析了Apollo配置中心的核心概念重点介绍了命名空间的设计理念、类型体系及其在实际应用中的使用场景。命配置中心后端微服务Playwright CLI与npx playwright终极API差异与兼容性处理指南Playwright CLI与npx playwright终极API差异与兼容性处理指南 Playwright CLI是一个专为浏览器自动化设计的命令行工具AI 技能浏览器控制GUI 自动化测试上一篇Chromeless HTML获取方法提取页面源代码的两种方式下一篇Cosmos-Reason2-32B API参考手册从基础调用到高级集成的完整文档创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
Python入侵检测项目源码解析:数据预处理与模型实现 简介:面向计算机相关专业学生与毕业设计、课程设计、期末大作业场景,这份基于机器学习/深度学习的入侵检测项目提供了可直接运行的完整代码体系。项目涵盖CNN与LSTM两类模型实现,配套数据预处理、特征提取、不平衡处理、分类评估等Python脚本… · 2026/9/23 23:32:57
认识 Yii 2:高性能、组件化 PHP 框架的官方入门导读 后端Web框架 【免费下载链接】yii2 Yii 2: The Fast, Secure and Professional PHP Framework 项目地址: https://gitcode.com/gh_mirrors/yi/yii2 点击查看 免费下载 本文基于 Yii 2 官方《Definitive Guide》的开篇章节(docs/guide-vi/intro-yii.md&a… · 2026/9/23 23:32:32
XDF文件怎么读?用pyxdf轻松解析LSL多模态数据 说实话,我第一次拿到.xdf后缀的文件时,整个人是懵的:双击打不开,拖进Excel直接报错,用文本编辑器打开满屏乱码。搞脑电、做多模态生理信号采集的朋友应该都有共鸣——设备采集完数据,导出的正是XDF格式&… · 2026/9/24 0:13:47
iView表格分页实战:Table与Page组合的完整实现方案 做了这么多年后台管理系统,表格分页这活儿真的是躲不开也绕不过去。不管你是用iView、Element还是Ant Design,数据一多,表格分页就是刚需。我早期带团队的时候,见过太多新手在iView里把Table和Page各自用得挺溜,但一到… · 2026/9/24 0:13:47
配电网动态重构与分布式光伏消纳:多目标优化模型与IEEE 33节点算例解析 简介:面向电力系统与分布式光伏领域的研究人员、工程师及高年级学生,这份资源是一篇题为《基于配电网动态重构的分布式光伏消纳策略》的学术论文PDF。内容针对光伏出力的间歇性与波动性,综合考虑负荷变化、出力不确定性和开关切换次数&#x… · 2026/9/24 0:13:41
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44