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

53 阅读3分钟

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

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

小提问:如何部署你的WordPress应用(Mysql) ?

  • 登录服务器,手动安装各种依赖,然后部署二进制

  • 自己编译,打包镜像,手动启动容器

  • 容器 image.png

  • docker官网 www.docker.com/resources/w…

01.Kubernetes简介

1.1定义

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

  • 特点

    • 便捷,可扩展,开源
  • 目的

    • 管理容器应用和服务
  • 作用

    • 声明式配置和自动化
  • 核心概念

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

image.png

  • Deployment中有两个pod
  • pod可扩展到pvc
  • pvc和sc连接

pod样例

image.png

Volume/PVC/PV/StorageClass

  • Volume image.png

  • StorageClass image.png

  • PVC image.png

  • Deployment image.png

  • StatefulSet

image.png

  • Node

image.png docker 处为系统镜像

1.2设计准则

  • 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 架构

image.png

  • ETCD:
    • 持久化数据中心
    • 维护集群中所有数据的有序性和—致性
    • 事件机制同步数据变更
  • APIServer:
    • 对所有组件提供API接负责admission,鉴权等功能
    • 提供后端etcd数据cacher,降低ETCD压力
    • 结合ETCD,提供List-Watch机制
  • Controller-Manager:
    • 提供—系列控制器,负责维护各种对象的生命周期比如: Node controller,PV,controller, Deployment controller ,StatefulSet controller等
  • Scheduler:
    • 负责应用实例的调度,把Pod绑定到合适的Node
  • Kubelet:
    • 基于Pod声明,真正开始启动容器,
    • 负责容器生命周期维护
  • Kube-proxy:
    • 网络代理,负责维护节点网络规则,接管
    • Pod出入流量

1.4Kubernetes 核心通信机制 - List-Watch

image.png

  • Kubernetes 是通过 List-Watch 的机制进行每个组件的协作,保持数据同步的,每个组件之间的设计实现了解耦。
  • 用户是通过 kubectl 根据配置文件,向 APIServer 发送命令,在 Node 节点上面建立 Pod 和 Container。APIServer 经过 API 调用,权限控制,调用资源和存储资源的过程,实际上还没有真正开始部署应用。这里需要 Controller Manager、Scheduler 和 kubelet 的协助才能完成整个部署过程。
  • 在 Kubernetes 中,所有部署的信息都会写到 etcd 中保存。实际上 etcd 在存储部署信息的时候,会发送 Create事件给 APIServer,而 APIServer 会通过监听(Watch)etcd发过来的事件。其他组件也会监听(Watch)APIServer 发出来的事件。

1.5Kubernetes 核心功能

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

02.资源管理

资源种类

  • CPU, Memory ,HugePages, GPU...
  • Socket, Numa,NIC...
  • Ephemeral Storage,NFS,GlusterFS.RBD,Cinder...
  • ByteDance Storage(FS, Block)...

2.1资源上报

image.png kubelet采集器

2.2资源分配

计算资源 image.png

2.3资源分配

存储卷 image.png

2.4状态维护

image.png

2.5资源回收

计算资源和存储卷联系。 当用户不再使用其存储卷时,他们可以从API中将 PVC 对象删除,从而允许该资源被回收再利用。PersistentVolume 对象的回收策略告诉集群,当其被从申领中释放时如何处理该数据卷。 目前,数据卷可以被 Retained(保留)、Recycled(回收)或 Deleted(删除)。

03.调度

  • CPU 资源;
  • memory;
  • ephemeral-storage 临时存储;
  • 通用的扩展资源,比如GPU。 image.png

调度流程

image.png

04.优化实践

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

功能增强

  • Gang
  • Job level affinity
  • 微拓扑调度
  • 资源预留,占位
  • 重调度
  • 丰富的排队策略

调度质量

  • 实时负载均衡
  • 资源碎片
  • 应用亲和,反亲和力

Kubernetes 和Yarn的一些不同

  • 基本单位
    • Pod&Container
  • 资源管理
    • 资源种类
    • 扩展能力
  • 调度模式
    • Task ->Node
    • Node ->Task
  • 系统涉及 中心存储&节点缓存