当前位置:首页 > 问答 > 正文

Kubernetes到底是怎么搭起来的,这些核心部件其实挺关键的,得先弄明白它们关系啥

Kubernetes搭建起来,本质上就像组建一个高度自动化的机器人运维团队,来帮你管理成百上千台的服务器和上面跑的应用,你不能一台台机器去手动操作,那样效率太低且容易出错,你需要先准备好一批机器(可以是物理服务器,也可以是云上的虚拟机),然后在这些机器上安装并配置好几个核心的“角色”,让它们各司其职,协同工作。

这些核心部件,根据Kubernetes官方文档的架构描述,可以分为两大部分:控制平面(Control Plane)和工作节点(Worker Nodes),控制平面就像是这个机器人团队的大脑和指挥中心,而工作节点就是具体干活的双手。

我们看指挥中心——控制平面。

控制平面通常至少需要一台机器(生产环境为了高可用会有多台),它上面运行着几个最关键的程序:

  1. kube-apiserver(API服务器):这是整个Kubernetes集群的“总入口”和“通信枢纽”,你想对集群做任何操作,比如部署一个新应用、扩容缩容,都必须通过命令行工具kubectl向这个API服务器发送请求,同样,集群内部各个部件之间的沟通,比如大脑想知道双手的状态,也要通过它,它是无状态的,可以轻松部署多个实例来实现高可用,根据Kubernetes官方文档,API服务器是唯一与存储系统直接交互的控制平面组件。

  2. etcd:这是一个高可用的键值对数据库,可以理解为整个集群的“配置中心”或“记忆库”,集群的所有重要信息都安全地存放在这里,比如有哪些节点、跑了哪些应用、这些应用的配置是什么等等,API服务器在收到指令后,任何对集群状态的更改都会持久化到etcd中;其他组件也会通过监听etcd来获取最新的集群状态,etcd是Kubernetes集群的大脑记忆核心,它的数据安全性和一致性至关重要。

  3. kube-scheduler(调度器):这个部件是“人力资源总监”,它的工作很简单但很智能:当你说“我需要运行一个Web服务器实例”时,调度器就负责观察集群里所有工作节点的“健康状况”和“资源余量”(比如谁的CPU空闲多、谁的内存够用),然后根据一套复杂的调度算法,选择一个最合适的节点,通知”这个节点去把任务跑起来,它只负责做决策,不负责具体执行。

  4. kube-controller-manager(控制器管理器)cloud-controller-manager(云控制器管理器):你可以把它们理解成一群“自动化的监管机器人”,它们不断地通过API服务器查询etcd,对比“当前状态”和“期望状态”,你期望始终有3个应用实例在运行,但其中一个突然崩溃了,控制器管理器会发现这个差异(当前只有2个),于是它就会自动创建新的实例,直到恢复成3个,它确保集群总能保持在你期望的样子,cloud-controller管理器则是专门负责与底层云服务商(如AWS、阿里云)打交道,管理比如负载均衡器、存储卷等云资源。

我们看干活的双手——工作节点。

每个工作节点上也需要安装几个核心程序:

  1. kubelet:这是每个节点上的“工头”,它负责与控制平面的API服务器保持通信,接收指令(比如调度器让它在本节点运行一个容器),然后它再去调用容器运行时(如Docker、containerd)真正把容器启动起来,它还会持续向大脑汇报本节点的健康状况和上面运行的容器的状态。

  2. kube-proxy:这是节点上的“网络代理和调度员”,它负责Kubernetes服务的网络相关功能,比如当有请求要访问某个服务(比如一个Web服务)时,kube-proxy会通过一定的规则(如iptables或IPVS)将流量正确地转发到背后提供服务的、健康的容器上,它实现了服务的负载均衡。

  3. 容器运行时(Container Runtime):这是真正负责运行容器的软件,比如Docker、containerd、CRI-O等,kubelet通过标准的CRI(容器运行时接口)向它下发指令,让它拉取镜像、启动和停止容器。

它们是怎么协作搭起一个集群的?

想象一个部署应用的场景:你用kubectl工具提交一个部署请求 -> 请求发送给API服务器 -> API服务器校验请求并将部署信息写入etcd -> 调度器监控到etcd中有新的待调度任务,于是选择一个最佳节点,并将绑定信息通过API服务器写回etcd -> 目标节点上的kubelet通过监控API服务器,发现了有属于自己的新任务 -> kubelet调用本机的容器运行时,拉取镜像并启动容器 -> kubelet将容器状态通过API服务器汇报给etcd -> 控制器管理器持续监控,确保容器数量始终符合预期。

搭建Kubernetes的过程,就是在一组机器上,按照上述角色划分,把这些核心部件逐一安装、配置并启动起来,让它们之间能够通过网络互相发现、安全地通信,最终形成一个统一、可调度的资源池,明白了每个部件的职责和它们之间的数据流动关系,也就理解了Kubernetes是如何运作的。

Kubernetes到底是怎么搭起来的,这些核心部件其实挺关键的,得先弄明白它们关系啥