这是我参与「第四届青训营 」笔记创造活动的的第11天
课程资料
课程链接:live./4354/yc_K8S
课程PPT:bytedance.feishu.cn/file/boxcnK…
学员手册:/post/713013…
完整手册:bytedance.feishu.cn/docx/doxcnE…
一、Kubernetes 简介
几个中心概念
- Pod
- PVC/PV/StorageClass
- Deployment
- Statefulset
- Node
Kubernetes架构
-
ETCD
- 耐久化数据中心
- 保护集群中所有数据的有序性和一致性
- 事件机制同步数据变更
-
APIServer
- 对所有组件供给 API 接口
- 担任 admission,鉴权等功能
- 供给后端 etcd 数据 cacher,下降 ETCD 压力
- 结合 ETCD,供给 List-Watch 机制
-
Controller-manager
- 供给一系列控制器,担任保护各种目标的生命周期 比方: Node controller, PV controller, Deployment controller, StatefulSet controller 等
-
Kubelet
- 根据 Pod 声明,真正开始发动容器,担任容器生命周期保护
-
Kube-proxy
- 网络代理,担任保护节点网络规则,接收 Pod 出入流量
二、Kubernetes 资源管理
资源品种
-
核算类
- 原生: CPU,memory,等;
- 可通过 Device plugin 方法支持的非原生: numa,socket…
-
存储类
-
原生:
- 暂时存储: Ephemeral storage,EmptyDir 等
- 耐久化 (PV): Cinder, RBD, Cephfs, NFS, GlusterFS…
-
能够通过 CSI 方法扩展支持其他存储
-
资源上报
-
核算资源上报:
- cAdvisor -> Kubelet -> Node
- Agent -> Device plugin -> Kubelet -> Node
-
存储资源上报:
-
暂时存储:
- cAdvisor -> Kubelet -> Node
-
耐久化存储:
- 托管到存储供给商管理
-
资源分配
-
核算资源分配:
- Kubelet -> cgroup manager -> cpu, memory…
- Kubelet -> device manager -> extended resources
-
存储资源分配:
- Controller manager -> provisioner -> attacher -> mounter
资源状况保护
-
核算资源状况保护:
- kubelet/cgroup manager/device manager/evictioner manager -> cpu, memory, extended resources
-
存储资源保护
- PV controller -> PV/PVC
资源收回
-
核算资源收回:
- Kubelet -> cgroup manager -> cpu, memory…
- Kubelet -> device manager -> extended resources
-
存储资源收回:
- Controller manager -> unmounter -> detacher -> deleter
三、Kubernetes 调度
束缚描绘
-
资源申请:
- request、limit
-
其他束缚:
- affinity/anti-affinity
- Label selector
- Taint & toleration
- Image locality
- Bin-packing/Load balancing…
调度流程
调度框架
主要分为几个过程:
-
过滤
- Pre-Filter: 进行一些全局的预备工作,避免流程中多次重复核算;
- Filter: 根据 Pod 的束缚,进行 Pod -> Node 的匹配工作;
- Post-Filter: 假如没有一个合适的节点,则进行一些抢占行为(驱逐低优任务),看是否能找到合适节点;
-
打分
- 根据前面的过滤节点,对合适的节点进行打分,按照分值凹凸进行排序;
- 假如前面没有合适的节点,则直接调度失败;
-
任务分配
-
Reserve: 在调度器 cache 里边缓存调度成果,为了处理异步 API 操作带来的时延问题;
-
Permit: 扩展接口,能够在这里支持一些扩展语音,比方: Gang 等;
-
成果有三类: 失败,成功,等候
- 失败: 直接回来调度失败成果;
- 成功: 直接通过;
- 等候: 则异步等候,不阻塞其他流程;
-
-
Pre-Bind: 任务运行前的一些预备操作,比方: 动态创建 Volume 等;
-
Bind: 把 Pod 绑定到 Node,即: 给使用分配运行节点;
-
四、小结
Kubernetes 运行 MySql + WordPress 示例:
- kubernetes.io/zh-cn/docs/…
Kubernetes 与 Yarn 的一些不同点:
-
基本单位:
- Yarn: Container;
- Kubernetes: Pod;
-
资源管理的扩展能力:
- Yarn: 没供给 Plugin 机制,侵入性较大;
- Kubernetes: plugin 机制扩展,侵入性小;
-
调度模式:
- Yarn: Node -> Task
- Kubernetes: Task -> Node
-
体系设计
- Yarn: 节点缓存,无中心中心化存储;
- Kubernetes: 中心化存储;