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

118 阅读3分钟

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

课前导学

屏幕截图 2022-08-24 115505.jpg 推荐文章:

  1. www.cio.com/article/247…
  1. www.sumologic.com/insight/kub…

屏幕截图 2022-08-24 115552.jpg

  • 左图:根据主机操作系统(只有一个)用容器构建自己的容器环境,有容器轻便,有镜像你就可以在任何平台启动,不需要引包准备工作。镜像Technology。
  • 右图:基础设施(物理主机)虚拟化成VM虚拟机,每一个VM里有一个操作系统,要想APP部署在machine上,登陆VM手动启动应用或脚本启动。

一、Kubernetes简介

1、为什么要Ku

屏幕截图 2022-08-24 120201.jpg

  • 容器相比于传统的虚拟化技术,更轻量,更敏捷,更易于管理,运维成本更低;

    • 一次打包,任意地方运行
  • 如果容器规模巨大,如何编排管理容器也是个巨大的挑战,需要一个强大的管理系统,Kubernetes 在这方面表现很好

    • 基于 google 超过 15 年的大规模容器管理经验;
    • 功能丰富,易于扩展,架构优雅;
    • 社区活跃,仅次于 Linux 的全球第二大社区;

2、KU是什么

屏幕截图 2022-08-24 120254.jpg

3、Ku核心概念

屏幕截图 2022-08-24 120416.jpg

(1)pod

屏幕截图 2022-08-24 120453.jpg

(2)Volume/PV/PVC/StorageClass

屏幕截图 2022-08-24 120621.jpg

(3)Deployment

屏幕截图 2022-08-24 120704.jpg

(4)Stateful

屏幕截图 2022-08-24 120753.jpg

(5)Node

屏幕截图 2022-08-24 120840.jpg

4、设计准则

屏幕截图 2022-08-24 120933.jpg

5、Ku架构

屏幕截图 2022-08-24 121017.jpg

6、Ku核心通信机制-List-Watch

屏幕截图 2022-08-24 121120.jpg

7、Ku核心功能

屏幕截图 2022-08-24 121213.jpg

二、资源管理

1、资源种类

屏幕截图 2022-08-24 121423.jpg

  • 计算类

    • 原生: CPU,memory,等;
    • 可通过 Device plugin 方式支持的非原生: numa,socket。。。
  • 存储类

    • 原生:

      • 临时存储: Ephemeral storage,EmptyDir 等
      • 持久化 (PV): Cinder, RBD, Cephfs, NFS, GlusterFS...
    • 可以通过 CSI 方式扩展支持其他存储;

2、资源上报

屏幕截图 2022-08-24 121519.jpg

  • 计算资源上报:

    • cAdvisor -> Kubelet -> Node
    • Agent -> Device plugin -> Kubelet -> Node
  • 存储资源上报:

    • 临时存储:

      • cAdvisor -> Kubelet -> Node
    • 持久化存储:

      • 托管到存储提供商管理

(1)节点资源案例

屏幕截图 2022-08-24 121616.jpg

3、资源分配

屏幕截图 2022-08-24 121829.jpg

  • 计算资源分配:

    • Kubelet -> cgroup manager -> cpu, memory...
    • Kubelet -> device manager -> extended resources
  • 存储资源分配:

    • Controller manager -> provisioner -> attacher -> mounter

屏幕截图 2022-08-24 121902.jpg

4、状态维护

屏幕截图 2022-08-24 122023.jpg

  • 计算资源状态维护:

    • kubelet/cgroup manager/device manager/evictioner manager -> cpu, memory, extended resources
  • 存储资源维护

    • PV controller -> PV/PVC

5、资源回收

屏幕截图 2022-08-24 122110.jpg

  • 计算资源回收:

    • Kubelet -> cgroup manager -> cpu, memory...
    • Kubelet -> device manager -> extended resources
  • 存储资源回收:

    • Controller manager -> unmounter -> detacher -> deleter

屏幕截图 2022-08-24 122123.jpg

三、调度

约束描述:

  • 资源申请:

    • request、limit
  • 其他约束:

    • affinity/anti-affinity
    • Label selector
    • Taint & toleration
    • Image locality
    • Bin-packing/Load balancing...

1、资源申请

屏幕截图 2022-08-24 122251.jpg

2、调度流程

屏幕截图 2022-08-24 122417.jpg 主要分为几个步骤:

  • 过滤

    • Pre-Filter: 进行一些全局的准备工作,防止流程中多次重复计算;
    • Filter: 基于 Pod 的约束,进行 Pod -> Node 的匹配工作;
    • Post-Filter: 如果没有一个合适的节点,则进行一些抢占行为(驱逐低优任务),看是否能找到合适节点;
  • 打分

    • 基于前面的过滤节点,对合适的节点进行打分,按照分值高低进行排序;
    • 如果前面没有合适的节点,则直接调度失败;
  • 任务分配

    • Reserve: 在调度器 cache 里面缓存调度结果,为了解决异步 API 操作带来的时延问题;

    • Permit: 扩展接口,可以在这里支持一些扩展语音,比如: Gang 等;

      • 结果有三类: 失败,成功,等待

        • 失败: 直接返回调度失败结果;
        • 成功: 直接通过;
        • 等待: 则异步等待,不阻塞其他流程;
    • Pre-Bind: 任务运行前的一些准备操作,比如: 动态创建 Volume 等;

    • Bind: 把 Pod 绑定到 Node,即: 给应用分配运行节点;

屏幕截图 2022-08-24 122434.jpg

3、栗子

(1)Mysql

屏幕截图 2022-08-24 122600.jpg

(2)WordPress

屏幕截图 2022-08-24 122708.jpg 推荐文章:Overview | Kubernetes

四、优化

推荐文档:

  1. stackoverflow.com/questions/5…
  1. kuberty.io/blog/kubern…

1、Ku还可以更好

屏幕截图 2022-08-24 122918.jpg

2、字节的一些工作

(1)资源管理

屏幕截图 2022-08-24 123013.jpg

(2)功能增强

屏幕截图 2022-08-24 123114.jpg

(3)性能优化

屏幕截图 2022-08-24 123200.jpg

(4)调度质量

屏幕截图 2022-08-24 123233.jpg

3、Ku和Yarn不同

屏幕截图 2022-08-24 123316.jpg

课后总结

屏幕截图 2022-08-24 123422.jpg 参考文献详情:【大数据专场 学习资料六】第四届字节跳动青训营 - 掘金 (juejin.cn)