K8s 架构
k8s 是典型的master-worker架构。master 是大脑,worker负责执行。官网架构图:

控制平面组件
来控制节点的负载均衡,实时监控节点的负载状态。
控制平面组件可以在集群中的任何节点上运行。 然而,为了简单起见,安装脚本通常会在同一个计算机上启动所有控制平面组件, 并且不会在此计算机上运行用户容器。具体关系如下图:

Kube-apiserver
API 服务器是 Kubernetes 控制平面的组件, 该组件负责公开了 Kubernetes API,负责处理接受请求的工作。 API 服务器是 Kubernetes 控制平面的前端。
我们可以把它想象成一个大型跨国公司的“总服务台”兼“安保中心”。
|
角色 |
作用 |
类比 |
|
统一入口 (Gateway) |
所有操作(增删改查)的唯一入口,无论是人(kubectl)还是机器(Scheduler)都通过它交互。 |
公司的总机/前台,所有电话都经过它转接。 |
|
安全卫士 (Security) |
负责认证(你是谁)、鉴权(你能干嘛)和准入控制(你做的事合不合规)。 |
保安和合规部,防止坏人进入或违规操作。 |
|
数据枢纽 (Hub) |
它是唯一能读写 etcd 的组件,负责把“期望状态”存进去,把“实际状态”读出来,让各个组件通过它来“间接沟通”。 |
公司的中央数据库管理员,各部门不直接互换文件,而是通过它来同步信息。 |
etcd
一致且高可用的键值存储,用作 Kubernetes 所有集群数据的后台数据库。如果你的 Kubernetes 集群使用 etcd 作为其后台数据库, 请确保你针对这些数据有一份 备份计划。
该组件用于存k8s 集群的统一存储,存储节点的数据。如果没有 etcd,这些信息可能散落在各个服务的内存里,导致数据不一致。任何配置变更、状态更新,必须写在 etcd 上才算数。
etcd 是强一致性的,因此无论你去问集群里的哪个节点,读到的数据永远是一样的。
kube-scheduler
负责监视新创建的、未指定运行节点的 Pod,并选择节点来让 Pod 在上面运行。
调度决策考虑的因素包括单个 Pod 及多个 Pod 集合的资源需求、 软硬件及策略约束、亲和性及反亲和性规范、数据位置、工作负载间的干扰及最后时限。
kube-controller-manager
确保期望结果和实际结果一致的工具。为了降低复杂性,Kubernetes 把上面提到的所有“工头”(节点控制器、副本控制器等)都打包编译到了同一个程序里运行。这个程序就是 kube-controller-manager。你可以把它理解为“控制器的大本营”。
下表是controller的类比表格:
|
组件 |
角色类比 |
核心作用 |
关键特性 |
|
控制器 (Controller) |
具体的工头 |
调节状态。通过“调谐循环”不断对比“期望”与“实际”,并执行操作来消除差异。 |
自动化、自愈。你只管声明“我要什么”,它负责“怎么做到”和“坏了怎么修”。 |
|
kube-controller-manager |
工头大本营 |
运行控制器。它是一个守护进程,负责把各种内置的控制器跑起来,管理集群的生命周期。 |
集成化。它把多个逻辑上独立的控制器打包在一起运行,方便管理和部署。 |
cloud-controller-manager
嵌入了特定于云平台的控制逻辑。 云控制器管理器(Cloud Controller Manager)允许将你的集群连接到云提供商的 API 之上, 并将与该云平台交互的组件同与你的集群交互的组件分离开来。
它的核心作用是将 Kubernetes 集群与云厂商的 API 解耦。它让 K8s 能够利用云厂商的“超能力”(负载均衡、云存储、路由),同时让 K8s 核心代码保持干净,不再被云厂商的特定代码“绑架”。
kube-controller-manager 管的是集群内部的逻辑(比如 Pod 的数量、配置更新)。cloud-controller-manager 管的是集群与云厂商的交互(比如申请公网 IP、管理云路由表)。
节点组件
是master-worker中的worker,节点组件会在每个节点上运行,负责维护运行的 Pod 并提供 Kubernetes 运行时环境。
kubelet
kubelet 会在集群中每个节点(node)上运行。 它保证容器(containers)都运行在 Pod 中。
PodSpec:一份详细的“任务说明书”或“设计蓝图”。它是一个YAML或JSON格式的文件,精确描述了Pod应该是什么样子,比如需要运行哪些容器、使用什么镜像、需要多少CPU和内存、挂载哪些存储卷等。
kubelet 接收一组通过各类机制提供给它的 PodSpec,确保这些 PodSpec 中描述的容器处于运行状态且健康。 kubelet 不会管理不是由 Kubernetes 创建的容器。确定要管理那些容器。
kube-proxy(可选)
是集群中每个节点(node)上所运行的网络代理, 实现 Kubernetes 服务(Service) 概念的一部分。
kube-proxy 维护节点上的一些网络规则, 这些网络规则会允许从集群内部或外部的网络会话与 Pod 进行网络通信。如果操作系统提供了可用的数据包过滤层,则 kube-proxy 会通过它来实现网络规则。 否则,kube-proxy 仅做流量转发。
如果你使用网络插件为 Service 实现本身的数据包转发, 并提供与 kube-proxy 等效的行为,那么你不需要在集群中的节点上运行 kube-proxy。
iptables三种代理模式 ⽤户空间模式性 能问题较严重基本不再使⽤应⽤最多的是iptables和ipvs模式。
容器运行时
这个基础组件使 Kubernetes 能够有效运行容器。 它负责管理 Kubernetes 环境中容器的执行和生命周期。负责拉取镜像,运行容器。
Kubelet 并不直接与具体的容器运行时打交道,而是通过一个标准化的接口——CRI (Container Runtime Interface) 来进行通信。
- Kubelet:作为节点上的代理,负责接收来自 API Server 的 Pod 调度指令。
- CRI:作为 Kubelet 和容器运行时之间的“翻译官”,它定义了一套标准的 gRPC 接口。
- 容器运行时:实现了 CRI 接口,接收来自 Kubelet 的指令,并负责在操作系统层面真正地创建和管理容器。
更多推荐

所有评论(0)