声明式系统
Node
Namespace
POD
service

kubernetes和borg使用类似的架构
image.png

Kubernetes master节点

kubeadm 默认将控制面板的组件放到 kube-system namespace中

image.png
API Server
image.png
是kubernetes的核心组件之一,主要提供以下功能

  • 控制面板中唯一带有用户可以访问的API以及用户交互的组件,API Server会暴露一个restful的API并使用json格式的清单文件
  • 提供其他模块之间数据交互和通信的枢纽(其他模块通过API查询或修改数据,只有API才能操作etcd)
  • 提供etcd的数据缓存以减少对etcd的访问
  • 提供集群管理的API接口

认证 Authentication 谁来访问API
鉴权 Authorization 有没有权利访问请求的API
准入 Admission 请求是否合法
mutating 用于增加自定义属性
validating 用于验证自定义mutating后的对象

  • 无状态

image.png
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选举

控制器协同工作原理
image.png
创建deployment对象—>创建replicaset对象—> 创建pod对象—>绑定pod到节点—>kubelet通过CRI/CNI/CSI启动容器

etcd 是一个稳定的,强大的,高可用的键值存储,用于长久储存kubernetes API对象

调度器 Sheduler
特殊的Controller,工作原理与其他控制器毫无差异
sheduler的特殊职责在于监控当前集群所有未调度的POD,并且获取当前集群所有节点的健康状况和资源使用情况,为待调度的POD选择最佳节点,完成调度。
调度阶段:

  • predict:过滤不能满足业务需求的节点,如资源不足、端口冲突
  • Priority:按既定要素将满足调度需求的节点评分,选择最佳节点
  • Bind:将计算节点和POD绑定,完成调度

image.png

image.png

Kubernetes worker节点

kubelet

  • 上报当前节点的健康状况
  • 维护当前节点所有pod的生命周期
  • 通过容器运行时(拉取镜像,启停容器等)来运行容器
  • cAdviser 监控容器的组件,涉及容器的资源用量和健康状况

kube-proxy

  • 负责节点的网络,在主机上维护网络规则并执行连接转发
  • 负责最正在运行的pod进行负载均衡