一、Node和Pod的详细对比
| 特性 | Node(节点) | Pod(容器组) |
|---|---|---|
| 本质 | 工作机器,是集群中的物理机或虚拟机。 | 可部署的最小单位,是容器的逻辑封装。 |
| 角色 | 资源的提供者(CPU、内存、存储)。构成集群的计算基础。 | 资源的消费者。运行业务应用程序的实体。 |
| 组成 | 由 Kubelet、容器运行时(如 Docker)、kube-proxy 等组件构成。 | 包含一个或多个共享资源的容器,以及这些容器的共享存储、网络等。 |
| 生命周期 | 相对稳定。节点可以被添加、移除或维护,但不会频繁创建销毁。 | 短暂易逝("cattle, not pets")。会频繁地被创建、销毁、迁移(例如在滚动更新、扩缩容时)。 |
| IP 地址 | 拥有一个真实的 IP 地址(节点的内网 IP),用于节点间的通信。 | 拥有一个独立的集群内 IP 地址。Pod 内的所有容器共享这个 IP 和端口空间。 |
| 调度 | 是 Pod 被调度的目标。Kubernetes 调度器(kube-scheduler)负责决定将 Pod 放在哪个 Node 上运行。 | 是被调度的对象。调度器根据 Node 的资源情况和调度规则,为 Pod 选择一个合适的 Node。 |
| 如何交互 | 你通常不会直接“运行”一个 Node,而是管理一个由多个 Node 组成的集群。 | 你通过 YAML 配置文件 来定义和创建 Pod(或更常用的,通过 Deployment 等控制器来创建和管理 Pod)。 |
核心关系与互动
-
从属关系:
-
一个 Kubernetes 集群 由多个 Node 组成。
-
每个 Node 上可以运行多个 Pod。
-
每个 Pod 包含一个或多个 Container。
-
-
资源关系:
-
Node 提供资源:当你描述一个 Node 时,你会说“这个节点有 4 核 CPU 和 16GB 内存”。
-
Pod 请求和消耗资源:当你在 Pod 的配置文件中,你会指定“这个 Pod 需要 500m CPU 和 1Gi 内存”。Kubernetes 调度器会找到一个有足够剩余资源的 Node 来运行这个 Pod。
-
-
网络关系:
-
每个 Pod 都有自己的 IP 地址。
-
Pod 内的所有容器共享这个 IP 地址,并通过
localhost相互访问。它们也可以通过共享的卷(Volume)来共享文件。
-
- 总结
-
记住最关键的一点:
-
Node 是硬件,是资源。
-
Pod 是软件,是负载。
-
你作为开发者或运维人员,主要打交道的是 Pod(以及管理 Pod 的更高层控制器,如 Deployment、StatefulSet),你通过配置文件告诉 Kubernetes “我想要运行什么样的应用(Pod)”。而 Kubernetes 系统则负责将这些 Pod 智能地、自动化地调度到合适的 Node 上去运行。
-
二、为什么需要使用 cordon
cordon 通常是在进行节点维护时的第一步。比如您需要:
-
对节点进行操作系统升级或打补丁。
-
更换节点硬件(如内存、硬盘)。
-
对节点进行内核参数调优并需要重启。
-
暂时隔离一个有潜在问题的节点,防止新工作负载被分配上去。
标准维护流程通常是:
-
cordon:隔离节点,阻止新 Pod 进来。 -
drain:排空节点(这是下一步)。这个命令会优雅地终止节点上的所有 Pod,并将它们安全地驱逐到其他可用的节点上重新运行。 -
进行物理维护操作(如重启、关机等)。
-
uncordon:维护完成后,解除节点的隔离状态,使其重新接受新的 Pod 调度。
相关命令
1. kubectl drain
这是 cordon 的“增强版”或“后续步骤”。它不仅会标记节点为 SchedulingDisabled,还会驱逐该节点上所有的 Pod。
bash
kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data
-
--ignore-daemonsets:通常需要这个参数,因为 DaemonSet 管理的 Pod(如网络插件、监控代理)是每个节点都必须运行的,无法被驱逐。 -
--delete-emptydir-data:删除使用emptyDir卷的 Pod 的数据,谨慎使用。
cordon vs drain:
-
cordon:只关门,不清客。(不让新客人进来,但已有的客人不受影响) -
drain:先关门,再请客人们离开。(不让新 Pod 进来,并且礼貌地请现有的 Pod 离开)
2. kubectl uncordon
这是 cordon 的逆操作。用于解除节点的隔离状态,使其恢复为可调度。
bash
kubectl uncordon <node-name>
总结
| 命令 | 作用 | 对现有 Pod 的影响 | 对调度新 Pod 的影响 |
|---|---|---|---|
cordon | 隔离节点 | 无影响,继续保持运行 | 阻止新 Pod 调度到此节点 |
drain | 排空节点 | 驱逐所有 Pod(DaemonSet 除外) | 阻止新 Pod 调度到此节点 |
uncordon | 解除隔离 | 无影响 | 允许新 Pod 调度到此节点 |
简单来说,cordon 就是一个安全开关,用于在不中断现有服务的情况下,将一个节点从集群的调度池中暂时移除。
三、查看 Master 节点 IP 的主要方法
| 方法 | 核心命令 | 关键信息 & 说明 |
|---|---|---|
| 列出所有节点 | kubectl get nodes | 显示节点的角色(ROLES),通常为 control-plane 或 master。 |
| 查看节点详情(含IP) | kubectl get nodes -o wide | 在上一命令基础上,增加显示 INTERNAL-IP 等信息。 |
| 查看集群信息 | kubectl cluster-info | 直接显示 Kubernetes master 的访问地址(IP 和端口)。 |
| 检查配置文件 | cat ~/.kube/config | 在 clusters 块下的 server 字段中,可以找到 API Server 的地址。 |

被折叠的 条评论
为什么被折叠?



