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

128 阅读2分钟

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

本节课程目录:

  1. Kubernetes 简介
  2. 资源管理
  3. 调度
  4. 优化实践

1. Kubernetes 简介

Kubernetes is a portable, extensible, open source platform for managing containerized workloads and services, that facilitates both declarative configuration and automation.

  • 特点:便携,可扩展,开源
  • 目的:管理容器应用和服务
  • 作用:声明式配置和自动化

1.1 Kubernetes 核心概念

  • Pod
  • Volume/PV/PVC/StorageClass
  • Deployment
  • StatefulSet
  • Node

image.png

1.2 Kubernetes 设计准则

  • Declarative > imperative:State your desired results, let the system actuate
  • Control loops:Observe, rectify, repeat
  • Simple > Complex:Try to do as little as possible
  • Modularity:Components, interfaces, plugins
  • Legacy compatible:Meet users where they are, requiring apps to change is a non-starter
  • Open > Closed:Open Source, standards, REST, JSON, etc.

1.3 Kubernetes 架构

截屏2022-08-17 09.26.28.png

1.4 Kubernetes 核心通信机制 List-Watch

image-3.png

1.5 Kubernetes 核心功能

  • 服务发现和负载均衡
  • 存储编排
  • 自动发布,回滚
  • 自愈
  • 密钥,配置管理
  • 资源管理,应用编排调度

2. 资源管理

  • 计算类

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

    • 原生:

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

2.1 资源上报

  • 计算资源上报:

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

    • 临时存储:
      • cAdvisor -> Kubelet -> Node
    • 持久化存储:
      • 托管到存储提供商管理

截屏2022-08-17 09.32.29.png

2.3 资源分配

  • 计算资源分配:
    • Kubelet -> cgroup manager -> cpu, memory...
    • Kubelet -> device manager -> extended resources 截屏2022-08-17 09.35.59.png
  • 存储资源分配:
    • Controller manager -> provisioner -> attacher -> mounter 截屏2022-08-17 09.36.22.png

2.4 状态维护

  • 计算资源状态维护:

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

    • PV controller -> PV/PVC

截屏2022-08-17 09.37.34.png

2.5 资源回收

  • 计算资源回收:

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

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

3. 调度

3.1 资源申请

  • 资源申请:

    • request、limit
  • 其他约束:

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

3.2 调度流程

截屏2022-08-17 09.42.16.png

3.3 调度框架

ee4925d137ae481ca903518c1992448d~tplv-k3u1fbpfcp-zoom-in-crop-mark-3024-0-0-0.image.png

4. 优化实践

4.1 Kubernetes 还可以更好

  • 非原生资源的精细化管理能力
  • 动态资源接入,管理能力
  • 调度功能和性能
  • 调度质量

4.2 字节的一些工作:

  • 非原生资源:

    • Socket, numa, local disk, NIC, mbw...
  • 动态资源:

    • CPU 实时负载,利用率...
  • 调度功能&性能优化:

    • Gang
    • 应用级别亲和性约束能力支持;
    • 微拓扑调度能力支持;
    • 资源预留;
    • 系统重构:分布式系统
  • 调度质量改善:

    • 重调度;
    • 业务上下游亲和性策略;
    • 实时负载均衡策略;
    • 碎片整理,优化等

4.3 Kubernetes 与 Yarn 的不同点:

  • 基本单位:

    • Yarn:Container;
    • Kubernetes:Pod;
  • 资源管理的扩展能力:

    • Yarn:没提供 Plugin 机制,侵入性较大;
    • Kubernetes:plugin 机制扩展,侵入性小;
  • 调度模式:

    • Yarn: Node -> Task
    • Kubernetes: Task -> Node
  • 系统设计

    • Yarn: 节点缓存,无核心中心化存储;
    • Kubernetes:中心化存储;