这是我参与「第四届青训营 」 笔记创作活动的第14天
1 Kubernetes 简介:
Kubernetes(k8s)是一个开源容器管理工具,负责容器部署,容器扩缩容以及负载平衡。k8s是自动化容器操作的开源平台,提供多容器管理解决方案。这些容器操作包括:部署,调度和节点集群间扩展。
2 资源管理
2.1 资源种类
-
计算和存储资源
-
计算
- 原生
- 非原生,插件支持
-
存储
- 原生,临时存储、持久化存储
- 可以通过CSI方式扩展支持其他存储
-
- k8s最核心的资源类型是Deployment,Service,pod和ReplicaSet。
2.2 资源上报
cAdvisor:资源采集器,采集后上报给Node Status setter,更新到Node API Object。
计算:
cAdvisor -> Kubelet->Node
Device agent -> Device plugin -> Kubelet->Node
存储:
- 临时存储:cAdvisor -> Kubelet -> Node
- 持久化存储:托管到存储提供商管理
2.3 资源分配
计算资源:
pod/Containert -> Kubelet
- Kubelet :Container manager -> cgroup manager -> cpu, memory...
- Kubelet :Container manager -> device manager -> extended resources
存储资源:
pod/Containert -> Controller manager -> Kubelet
- Controller manager:PV controller/Provisoner -> Attach controller;
- Kubelet :Volume manager -> Mounter
2.4 状态维护
2.5 资源回收
基本上就是分配到过来
-
计算资源回收:
- Kubelet -> cgroup manager -> cpu, memory...
- Kubelet -> device manager -> extended resources
3 调度
3.1 资源申请
在定义pod的部署文件时,还会对所需的资源量进行设置,保证pod的高可用。
如果按Pod的QoS(Quality of Service)进行分类,那么可以分为三类。
- 第一类:Guaranteed:pod的每个容器设置的资源需求(CPU/内存)的limits和request的值完全一样。
- 第二类:Burstable:只要一个容器指定了CPU或者内存的request,requests的limits的值不一样。
- 第三类:BestEffort:Pod中所有容器都未指定CPU或内存资源需求的requests。
当计算节点检测到内存压力时,Kubernetes会按BestEffort>Burstable>Guaranteed的顺序依次进行驱逐。
3.2 调度流程
调度框架
- 过滤
- 打分
- 任务分配
4 总结
Kubernetes和yarn的不同
| k8s | yarn | |
|---|---|---|
| 基本单位 | Pod | Container |
| 资源管理的扩展能力 | 插件机制,侵入性小 | 无插件机制,侵入性大 |
| 调度模式 | Task->Node | Node->Task |
| 系统设计 | 节点缓存 | 中心化存储 |
参考
Kubernetes资源对象Pod、ReplicaSet、Deployment、Service之间的关系
认识k8s中资源申请和探针 课程链接:live.juejin.cn/4354/yc_K8S