K8S是云原生最核心的内容,也是云计算的未来,下满我就全面来详解K8S原理架构@mikechen
K8S
Kubernetes(K8s)是一个强大的容器编排平台,旨在自动化应用程序的部署、扩展和管理。
Kubernetes 的核心目标是:简化大规模容器化应用的管理、部署、和运维。
在大规模容器化环境中,可以更有效地管理、和调度容器,让它们在集群中合理分布。
通过了解K8S原理架构、工作流程,可以更好地理解 Kubernetes 的工作原理,并将其应用于实际的生产环境中。
K8S原理架构
Kubernetes(K8s),架构分为两大部分:控制平面(Control Plane) 和 节点(Node)。
如下图所示:
控制平面(Control Plane)
控制平面:负责集群的管理和决策,而节点是应用程序容器的运行环境。
控制平面组件,通常运行在集群的主机上,负责集群状态的调度、监控、管理…等。
主要会包含,如下组件:
API 服务器(API Server)
API 服务器是 Kubernetes 的入口点,提供与集群进行交互的 REST API。
它是集群所有操作的“控制中心”,所有的操作(如部署、扩容、删除等)都通过 API 服务器传递。
如下图所示:
首先,所有请求都通过 API 服务器进行验证、和处理;
API 服务器负责:处理所有对集群状态的 CRUD 操作(如:创建、读取、更新和删除资源…等等)。
etcd(集群状态存储)
etcd 是一个分布式的键值存储系统,用来保存 Kubernetes 集群的所有配置信息、状态信息、以及应用的元数据。
比如: Pod、Deployment、Service …..等信息,都会被存储在 etcd 中。
etcd ,是 K8s 集群的“数据源”,保证了集群状态的一致性,使用强一致性算法,保证集群状态的一致性。
调度器(Scheduler)
调度器,负责将应用程序容器(Pod),分配到合适的节点上运行。
Pod 是 Kubernetes 中最小的可部署的计算单元,它代表着部署的一个单位。
一个 Pod 可以包含:一个、或多个容器…等等,这些容器共享网络命名空间、IP地址和存储卷…等等。
你可以将 Pod 想象成一栋房子,房子里可以住一个人(一个容器),也可以住一家人(多个容器)。
房子有自己的地址(IP地址),房子里的成员(容器),可以共享厨房(共享存储)、客厅(共享网络)…等。
它决定哪个节点可以运行新的 Pod,根据资源需求、节点容量、亲和性等条件来选择最佳节点。
根据 Pod 的资源需求、节点的资源利用率、负载等信息做出调度决策。
如果集群中没有足够的资源,调度器会将 Pod 标记为“不可调度”。
控制器管理器(Controller Manager)
控制器管理器,负责管理集群的生命周期,确保集群的实际状态与预期状态一致。
它包含多个控制器,每个控制器负责管理某种类型的资源。
常见的控制器包括:
ReplicaSet Controller:确保每个服务的副本数符合期望值;
Deployment Controller:处理 Deployment 资源,管理应用程序版本的滚动更新、和回滚;
StatefulSet Controller:管理有状态应用程序,确保 Pod 的顺序、和稳定性;
Job Controller:管理短期任务的执行。
K8S节点(Node)
K8S工作节点架构,如下图所示:
每个节点上运行多个 K8s 组件,来实现容器的部署、管理和监控。
K8S整体流程,如下:
首先,用户创建资源。
用户通过 kubectl 命令行工具、或其他客户端工具,向 kube-apiserver 发送创建资源的请求。
然后,API Server 验证并存储
kube-apiserver 验证请求,并将其存储到 etcd 中。
然后,开始调度器调度
kube-scheduler ,监视 etcd 中的新 Pod,根据调度策略选择合适的 Node,并将 Pod 的调度信息写入 etcd。
然后,Node 上执行
kubelet 监视 etcd 中的 Pod 信息,并根据这些信息启动容器。
然后,服务发现与负载均衡
kube-proxy 负责服务发现和负载均衡,将服务请求转发到后端的 Pod。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注作者「mikechen」公众号,获取更多技术干货!

后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》,后台回复【面试】即可获取《史上最全阿里Java面试题总结》