在K8S中,主节点的作用是什么?
在 Kubernetes(K8S)中,主节点(Master Node) 是集群的控制中心,负责管理整个集群的状态、调度决策、API 访问和安全策略。它不运行用户的应用容器(Pod),而是运行一系列关键的控制平面(Control Plane)组件,确保集群的稳定运行和自动化管理。
主节点的核心作用
1. 集群管理与协调
- 全局大脑:主节点是集群的决策中心,所有集群级别的操作(如创建/删除资源、扩缩容、更新配置)都通过主节点协调。
- 状态存储:通过
etcd
存储集群的所有持久化状态(如 Pod、Service、Node 等对象的状态),确保数据一致性和高可用性。
2. API 暴露与访问控制
- 唯一入口:
kube-apiserver
组件运行在主节点上,提供 Kubernetes RESTful API,是所有用户(kubectl
)、工作节点(Kubelet)和其他组件访问集群的唯一入口。 - 安全网关:处理认证(Authentication)、授权(Authorization)和准入控制(Admission Control),确保集群操作的安全合规。
3. 资源调度
- 智能调度器:
kube-scheduler
组件监听未调度的 Pod,根据资源需求、节点负载、亲和性规则等策略,选择最优工作节点运行 Pod。
4. 集群状态维护
- 控制器管理:
kube-controller-manager
运行一系列控制器(Controller),持续监控集群状态并驱动其向期望状态收敛:- 节点控制器(Node Controller):监控节点健康状况(如宕机时标记
NotReady
)。 - 副本控制器(Replication Controller):确保 Deployment/ReplicaSet 的 Pod 副本数符合预期。
- 服务控制器(Service Controller):管理 Service 与 Endpoints 的映射关系。
- 其他控制器(如命名空间控制器、服务账号控制器等)。
- 节点控制器(Node Controller):监控节点健康状况(如宕机时标记
5. 网络策略与通信管理
- 网络规则:控制平面组件(如
kube-controller-manager
)负责配置 Service 的负载均衡规则(通过 Cloud Provider 或kube-proxy
)。 - DNS 服务:
CoreDNS
通常部署在主节点上,为集群提供域名解析服务(如my-svc.my-namespace.svc.cluster.local
)。
6. 高可用与容灾
- 多主节点架构:生产集群通常部署多个主节点(通过负载均衡暴露 API),避免单点故障:
etcd
以分布式集群运行,保障数据一致性(Raft 协议)。kube-apiserver
可水平扩展,多个副本同时服务。kube-scheduler
和kube-controller-manager
采用领导者选举机制,同一时间仅一个副本处于活跃状态。
主节点核心组件
组件 | 作用 |
---|---|
kube-apiserver |
集群 API 入口,处理所有操作请求并读写 etcd 。 |
etcd |
分布式键值数据库,存储集群所有状态数据(唯一数据源)。 |
kube-scheduler |
为新创建的 Pod 选择最优工作节点。 |
kube-controller-manager |
运行各类控制器,确保集群实际状态与期望状态一致。 |
cloud-controller-manager |
(可选)对接云厂商 API,管理节点、路由、负载均衡等云资源。 |
主节点 vs 工作节点
特性 | 主节点(Master Node) | 工作节点(Worker Node) |
---|---|---|
角色 | 控制平面(集群管理) | 数据平面(运行业务负载) |
运行组件 | kube-apiserver , etcd , scheduler , controller-manager |
kubelet , kube-proxy , 容器运行时(如 containerd) |
运行业务 Pod | ❌ 一般不运行用户 Pod(可通过污点禁止调度) | ✅ 运行用户 Pod |
高可用要求 | ✅ 需多副本部署 | ⚠️ 可扩展但非必须 |
为什么主节点至关重要?
- 单点故障风险:主节点宕机将导致集群无法管理(无法创建/修改资源),但已运行的 Pod 通常不受影响(工作节点仍继续运行容器)。
- 安全核心:所有认证、授权策略由主节点执行,一旦被攻破,集群将完全失控。
- 调度决策:无主节点则新 Pod 无法调度,自动扩缩容(HPA)等功能失效。
💡 生产环境建议:
- 至少部署 3 个主节点以实现高可用(奇数台避免脑裂)。
- 使用负载均衡器暴露
kube-apiserver
。- 为主节点设置
node-role.kubernetes.io/control-plane:NoSchedule
污点,禁止用户 Pod 调度。
总结
主节点是 Kubernetes 集群的“指挥中心”,负责:
✅ 提供集群 API 入口和安全控制
✅ 存储全局状态(通过 etcd)
✅ 调度 Pod 到工作节点
✅ 通过控制器维护集群状态
✅ 保障集群高可用与自动化运维
理解主节点的作用,是掌握 Kubernetes 架构设计的核心基础!