深入理解 K8S 资源管理和调度|青训营笔记

129 阅读2分钟

这是我参与「第四届青训营 」 笔记创作活动的第14天

1 Kubernetes 简介:

Kubernetes(k8s)是一个开源容器管理工具,负责容器部署,容器扩缩容以及负载平衡。k8s是自动化容器操作的开源平台,提供多容器管理解决方案。这些容器操作包括:部署,调度和节点集群间扩展。

2 资源管理

2.1 资源种类

  • 计算和存储资源

    • 计算

      • 原生
      • 非原生,插件支持
    • 存储

      • 原生,临时存储、持久化存储
      • 可以通过CSI方式扩展支持其他存储

image-20220816153133318

  • k8s最核心的资源类型是Deployment,Service,pod和ReplicaSet。

image.png

2.2 资源上报

image.png 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 状态维护

image-20220816154306721

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 调度流程

image.png

调度框架

image-20220816154803379

  1. 过滤
  2. 打分
  3. 任务分配

4 总结

Kubernetes和yarn的不同

k8syarn
基本单位PodContainer
资源管理的扩展能力插件机制,侵入性小无插件机制,侵入性大
调度模式Task->NodeNode->Task
系统设计节点缓存中心化存储

参考

Kubernetes资源对象Pod、ReplicaSet、Deployment、Service之间的关系

认识k8s中资源申请和探针 课程链接:live.juejin.cn/4354/yc_K8S

课程PPT:bytedance.feishu.cn/file/boxcnK…

学员手册:juejin.cn/post/713013…

完整手册:bytedance.feishu.cn/docx/doxcnE…