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

课程资料

课程链接:live./4354/yc_K8S

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

学员手册:/post/713013…

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

一、Kubernetes 简介

几个中心概念

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

  • Pod
  • PVC/PV/StorageClass
  • Deployment
  • Statefulset
  • Node

Kubernetes架构

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

  • 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 资源管理

资源品种

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

  • 核算类

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

    • 原生:

      • 暂时存储: Ephemeral storage,EmptyDir 等
      • 耐久化 (PV): Cinder, RBD, Cephfs, NFS, GlusterFS…
    • 能够通过 CSI 方法扩展支持其他存储

资源上报

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

  • 核算资源上报:

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

    • 暂时存储:

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

      • 托管到存储供给商管理

资源分配

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

  • 核算资源分配:

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

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

资源状况保护

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

  • 核算资源状况保护:

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

    • PV controller -> PV/PVC

资源收回

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

  • 核算资源收回:

    • 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…

调度流程

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

调度框架

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

主要分为几个过程:

  • 过滤

    • 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: 中心化存储;