云原生是大型架构的核心,下面我重点详解K8S架构@mikechen
K8S
Kubernetes(简称 K8S),是 Google 开源的容器编排系统。
用于自动化应用容器的部署、扩缩容、负载均衡与管理。
核心特性:
自动化部署:支持滚动更新、蓝绿部署和金丝雀发布。
弹性扩展:根据负载自动调整容器实例数量。
服务发现与负载均衡:内置DNS和负载均衡机制。
高可用:支持多节点集群,故障自动恢复。
生态丰富:与SpringCloud Alibaba等微服务框架无缝集成。
K8S架构
K8S 架构采用 Master-Node(主从架构),由一组核心组件组成。
用户 -> API Server -> Controller Manager / Scheduler -> Node(Kubelet + KubeProxy)
Master节点
Master节点包含以下核心组件:
kube-apiserver:整个K8S集群的唯一入口,提供RESTful API,接收和处理所有操作请求,是各组件通信的核心枢纽。
etcd:高可用分布式键值数据库,用于存储集群的所有状态数据和配置信息,保证数据一致性和持久化。
kube-scheduler:负责根据资源情况和策略,将Pod调度到合适的Node节点上执行。
kube-controller-manager:运行各种控制器,确保集群状态符合期望,包括副本控制、节点管理、服务终结点管理等。
Node节点
Node节点是执行容器和应用的工作节点,主要组件有:
kubelet:负责节点上Pod的生命周期管理,接收来自Master的指令,启动和监控容器。
kube-proxy:负责节点网络服务代理,实现服务发现和负载均衡,管理网络规则,保证集群内外流量正确路由。
容器运行时(如Docker、containerd):在Node节点上实际启动和管理容器。
API Server(kube-apiserver)
作用:集群的唯一入口,所有操作(kubectl、控制器、调度器)均通过 API Server。
关键点:RESTful 接口、认证授权(RBAC)、存储到 etcd 的最终入口。
高可用:通常部署多实例,配合负载均衡器或虚拟 IP。
etcd
作用:分布式键值存储,保存集群状态(所有对象的最终一致性存储)。
关键点:强一致性(Raft 协议)、备份/恢复策略、磁盘与网络延迟对集群影响大。
高可用:奇数节点的集群(3/5/7),注意性能与容量规划。
Controller Manager
作用:运行各种控制器(节点控制器、复制控制器、端点控制器等),确保期望状态与实际状态一致。
关键点:每种控制器观察 API Server 的对象并执行相应操作;单实例运行控制器集合(但可通过 leader election 实现 HA)。
Scheduler(kube-scheduler)
作用:为待调度的 Pod 选择合适的 Node(考虑资源、亲和性/反亲和性、污点与容忍、拓扑等)。
关键点:调度决策分为过滤(Filter)与优先级评分(Score);支持自定义调度策略和扩展。
Kubelet
作用:每个 Node 上运行的代理,负责将 Pod 的期望状态(来自 API Server)在本机上落地并报告状态。
关键点:管理容器运行时(Container Runtime,如 containerd、CRI-O)、健康检查、卷挂载、资源度量。
容错:当 kubelet 与 API Server 通信中断时,本地尽力维护已有 Pod 的运行。