声明式系统
Node
Namespace
POD
service
Kubernetes master节点
kubeadm 默认将控制面板的组件放到 kube-system namespace中
API Server
是kubernetes的核心组件之一,主要提供以下功能
- 控制面板中唯一带有用户可以访问的API以及用户交互的组件,API Server会暴露一个restful的API并使用json格式的清单文件
- 提供其他模块之间数据交互和通信的枢纽(其他模块通过API查询或修改数据,只有API才能操作etcd)
- 提供etcd的数据缓存以减少对etcd的访问
- 提供集群管理的API接口
认证 Authentication 谁来访问API
鉴权 Authorization 有没有权利访问请求的API
准入 Admission 请求是否合法
mutating 用于增加自定义属性
validating 用于验证自定义mutating后的对象
- 无状态
AuthService 对接认证平台
Rate Limit 限流,防止过载
Aggreted APIServer AA 自定义API Server
控制管理器 kube-controller manager
- kube-controller manager 是多个控制器的组合,每个控制器都是一个control loop,负责侦听其管控的对象,当对象发生变更时完成配置
- 集群运作的核心和大脑 ,是整个集群动起来的关键
- 确保真实状态和用户期望状态一致
- 配置失败自动触发重试,整个集群会在自动重试机制下保持最终一致性(Evental Consistency)
etcd 是CoreOS基于raft开发的分布式key-value存储,用于服务发现,共享配置和一致性保障(数据库选主和分布式锁)
- 基本的key-value存储
- 监听机制,可作为消息中间件
- key的过期及续约机制,用于监控和服务发现
- 原子CAS和CAD,用于分布式锁和leader选举
控制器协同工作原理
创建deployment对象—>创建replicaset对象—> 创建pod对象—>绑定pod到节点—>kubelet通过CRI/CNI/CSI启动容器
etcd 是一个稳定的,强大的,高可用的键值存储,用于长久储存kubernetes API对象
调度器 Sheduler
特殊的Controller,工作原理与其他控制器毫无差异
sheduler的特殊职责在于监控当前集群所有未调度的POD,并且获取当前集群所有节点的健康状况和资源使用情况,为待调度的POD选择最佳节点,完成调度。
调度阶段:
- predict:过滤不能满足业务需求的节点,如资源不足、端口冲突
- Priority:按既定要素将满足调度需求的节点评分,选择最佳节点
- Bind:将计算节点和POD绑定,完成调度
Kubernetes worker节点
kubelet
- 上报当前节点的健康状况
- 维护当前节点所有pod的生命周期
- 通过容器运行时(拉取镜像,启停容器等)来运行容器
- cAdviser 监控容器的组件,涉及容器的资源用量和健康状况
kube-proxy
- 负责节点的网络,在主机上维护网络规则并执行连接转发
- 负责最正在运行的pod进行负载均衡