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

171 阅读3分钟

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

theme: smartblue

深入理解 K8S 资源管理和调度

一、Kubernetes 简介

1.1为什么需要 Kubernetes ?

  • 容器相比于传统的虚拟化技术,更轻量,更敏捷,更易于管理,运维成本更低; 一次打包,任意地方运行

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

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

1.2 Kubernetes 是什么?

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

1.3 Kubernetes 几个核心概念

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

image.png

1.4 Kubernetes 架构

image.png

  • 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 出入流量

1.5 Kubernetes 核心功能

  • 服务发现和负载均衡

  • 存储编排

  • 自动发布,回滚

  • 自愈

  • 秘钥,配置管理

  • 资源管理,应用编排调度

二、资源种类

  • 计算类

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

    • 原生:

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

2.1 资源上报

image.png

2.2 资源分配

计算资源

  • Kubelet -> cgroup manager -> cpu, memory...
  • Kubelet -> device manager -> extended resources image.png

存储卷

image.png

2.3 资源状态维护

image.png

2.4 资源回收

计算资源

  • Kubelet -> cgroup manager -> cpu, memory...
  • Kubelet -> device manager -> extended resources image.png

存储卷

  • Controller manager -> unmounter -> detacher -> deleter image.png

三、调度

3.1 资源申请

  • request、limit

3.2 调度流程

image.png

3.3 调度框架

image.png

四、优化实践

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