master
- master 可以在集群中任意 node 上运行
- 通常会在一台单独 node 上启动, 并且不会在该 node 上运行服务 pod
api-server(服务接口)
- 对外提供 restful 的 k8s api 服务
- 其他 master 组件通过 api server 提供的 rest 风格接口实现各自的功能
如: controller 通过 api server 实时监控各个资源的状态
etcd(状态存储)
- k8s 提供的高可用 kv 数据库, 用于保存所有网络配置和资源对象的状态信息, 也就是保存了整个集群的状态
- k8s 系统中一共两类服务需要 etcd 来协同和存储配置, 分别是
- 网络相关
- k8s 本身各种资源对象的状态和元信息
scheduler(调度器)
- 监听新的 pod 的信息, 并通过调度算法为该 pod 选择一个最合适的 node
- 调度成功后
- 将 pod 与 node 进行绑定
- 将绑定信息写入到 etcd
- 绑定成功后, kubelet 组件接手管理 pod 的生命周期
- k8s 保留了接口, 可以自定义算法
controller Manager(创建完成后管理)
- controllerManager 负责管理 controller
包括Node Controller
,NameSpace Controller
,Deployment Controller
,StatefulSet Controller
等 - controller 负责维护集群状态, 如故障检测, 自动扩展, 回滚更新等
当资源状态因为故障发生改变时, controller 会尝试将系统由现有状态
恢复到期待状态
, 保证其下每一个 controller 所对应的资源处于期望状态
- 包括管理控制器(kube-controller-manager) 和 云管理控制器(cloud-controller-manager)
Node
kubelet(agent)
- 作为 daemonSet 存在于每个 node 上, 负责监听和管理 pod 的生命周期
- 盗了张大佬的图
kube-proxy(请求转发)
- 负责请求转发
- 实现 service 的通信与负载均衡机制的重要组件, 将 service 的请求转发到后端 pod 上
runtime(docker/container)
- 容器运行环境