k8s基础概念

一、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)。

    核心关系与互动

  1. 从属关系

    • 一个 Kubernetes 集群 由多个 Node 组成。

    • 每个 Node 上可以运行多个 Pod

    • 每个 Pod 包含一个或多个 Container

  2. 资源关系

    • Node 提供资源:当你描述一个 Node 时,你会说“这个节点有 4 核 CPU 和 16GB 内存”。

    • Pod 请求和消耗资源:当你在 Pod 的配置文件中,你会指定“这个 Pod 需要 500m CPU 和 1Gi 内存”。Kubernetes 调度器会找到一个有足够剩余资源的 Node 来运行这个 Pod。

  3. 网络关系

    • 每个 Pod 都有自己的 IP 地址。

    • Pod 内的所有容器共享这个 IP 地址,并通过 localhost 相互访问。它们也可以通过共享的卷(Volume)来共享文件。

  4. 总结
    • 记住最关键的一点:

    • Node 是硬件,是资源

    • Pod 是软件,是负载

    • 你作为开发者或运维人员,主要打交道的是 Pod(以及管理 Pod 的更高层控制器,如 Deployment、StatefulSet),你通过配置文件告诉 Kubernetes “我想要运行什么样的应用(Pod)”。而 Kubernetes 系统则负责将这些 Pod 智能地、自动化地调度到合适的 Node 上去运行。

二、为什么需要使用 cordon

cordon 通常是在进行节点维护时的第一步。比如您需要:

  • 对节点进行操作系统升级或打补丁

  • 更换节点硬件(如内存、硬盘)

  • 对节点进行内核参数调优并需要重启

  • 暂时隔离一个有潜在问题的节点,防止新工作负载被分配上去

标准维护流程通常是:

  1. cordon:隔离节点,阻止新 Pod 进来。

  2. drain排空节点(这是下一步)。这个命令会优雅地终止节点上的所有 Pod,并将它们安全地驱逐到其他可用的节点上重新运行。

  3. 进行物理维护操作(如重启、关机等)。

  4. 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 的地址。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值