这是我参与「第四届青训营 」笔记创作活动的第16天.
课前导学
推荐文章:
- 左图:根据主机操作系统(只有一个)用容器构建自己的容器环境,有容器
轻便,有镜像你就可以在任何平台启动,不需要引包准备工作。镜像Technology。 - 右图:基础设施(物理主机)虚拟化成VM虚拟机,每一个VM里有一个操作系统,要想APP部署在machine上,登陆VM手动启动应用或脚本启动。
一、Kubernetes简介
1、为什么要Ku
-
容器相比于传统的虚拟化技术,更轻量,更敏捷,更易于管理,运维成本更低;
- 一次打包,任意地方运行
-
如果容器规模巨大,如何编排管理容器也是个巨大的挑战,需要一个强大的管理系统,Kubernetes 在这方面表现很好
- 基于 google 超过 15 年的大规模容器管理经验;
- 功能丰富,易于扩展,架构优雅;
- 社区活跃,仅次于 Linux 的全球第二大社区;
2、KU是什么
3、Ku核心概念
(1)pod
(2)Volume/PV/PVC/StorageClass
(3)Deployment
(4)Stateful
(5)Node
4、设计准则
5、Ku架构
6、Ku核心通信机制-List-Watch
7、Ku核心功能
二、资源管理
1、资源种类
-
计算类
- 原生: CPU,memory,等;
- 可通过 Device plugin 方式支持的非原生: numa,socket。。。
-
存储类
-
原生:
- 临时存储: Ephemeral storage,EmptyDir 等
- 持久化 (PV): Cinder, RBD, Cephfs, NFS, GlusterFS...
-
可以通过 CSI 方式扩展支持其他存储;
-
2、资源上报
-
计算资源上报:
- cAdvisor -> Kubelet -> Node
- Agent -> Device plugin -> Kubelet -> Node
-
存储资源上报:
-
临时存储:
- cAdvisor -> Kubelet -> Node
-
持久化存储:
- 托管到存储提供商管理
-
(1)节点资源案例
3、资源分配
-
计算资源分配:
- Kubelet -> cgroup manager -> cpu, memory...
- Kubelet -> device manager -> extended resources
-
存储资源分配:
- Controller manager -> provisioner -> attacher -> mounter
4、状态维护
-
计算资源状态维护:
- kubelet/cgroup manager/device manager/evictioner manager -> cpu, memory, extended resources
-
存储资源维护
- PV controller -> PV/PVC
5、资源回收
-
计算资源回收:
- Kubelet -> cgroup manager -> cpu, memory...
- Kubelet -> device manager -> extended resources
-
存储资源回收:
- Controller manager -> unmounter -> detacher -> deleter
三、调度
约束描述:
-
资源申请:
- request、limit
-
其他约束:
- affinity/anti-affinity
- Label selector
- Taint & toleration
- Image locality
- Bin-packing/Load balancing...
1、资源申请
2、调度流程
主要分为几个步骤:
-
过滤
- Pre-Filter: 进行一些全局的准备工作,防止流程中多次重复计算;
- Filter: 基于 Pod 的约束,进行 Pod -> Node 的匹配工作;
- Post-Filter: 如果没有一个合适的节点,则进行一些抢占行为(驱逐低优任务),看是否能找到合适节点;
-
打分
- 基于前面的过滤节点,对合适的节点进行打分,按照分值高低进行排序;
- 如果前面没有合适的节点,则直接调度失败;
-
任务分配
-
Reserve: 在调度器 cache 里面缓存调度结果,为了解决异步 API 操作带来的时延问题;
-
Permit: 扩展接口,可以在这里支持一些扩展语音,比如: Gang 等;
-
结果有三类: 失败,成功,等待
- 失败: 直接返回调度失败结果;
- 成功: 直接通过;
- 等待: 则异步等待,不阻塞其他流程;
-
-
Pre-Bind: 任务运行前的一些准备操作,比如: 动态创建 Volume 等;
-
Bind: 把 Pod 绑定到 Node,即: 给应用分配运行节点;
-
3、栗子
(1)Mysql
(2)WordPress
四、优化
推荐文档: