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

简介: 本篇文章首先讲解K8S的整体架构,介绍各个模块的功能,在此基础上梳理K8S使用各个组件完成项目部署时涉及的资源管理和调度方式

课程资料

课程链接:https://live.juejin.cn/4354/yc_K8S

课程PPT:https://bytedance.feishu.cn/file/boxcnKzeTqE9oymOVKqLtTWzHNb

学员手册:https://juejin.cn/post/7130131931722678308#heading-74

完整手册:https://bytedance.feishu.cn/docx/doxcnECGEFkCKYqbxaDipK1qrVf

一、Kubernetes 简介

几个核心概念

image-20220816152030393

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

Kubernetes架构

image-20220816152350657

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

资源种类

image-20220816153133318

  • 计算类

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

    • 原生:

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

资源上报

image-20220816153857764

  • 计算资源上报:

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

    • 临时存储:

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

      • 托管到存储提供商管理

资源分配

image-20220816154011489

  • 计算资源分配:

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

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

资源状态维护

image-20220816154306721

  • 计算资源状态维护:

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

    • PV controller -> PV/PVC

资源回收

image-20220816154427712

  • 计算资源回收:

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

调度流程

image-20220816154716330

调度框架

image-20220816154803379

主要分为几个步骤:

  • 过滤

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

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

    • Reserve: 在调度器 cache 里面缓存调度结果,为了解决异步 API 操作带来的时延问题;
    • Permit: 扩展接口,可以在这里支持一些扩展语音,比如: Gang 等;

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

        • 失败: 直接返回调度失败结果;
        • 成功: 直接通过;
        • 等待: 则异步等待,不阻塞其他流程;
    • Pre-Bind: 任务运行前的一些准备操作,比如: 动态创建 Volume 等;
    • Bind: 把 Pod 绑定到 Node,即: 给应用分配运行节点;

四、小结

Kubernetes 运行 MySql + WordPress 示例:

Kubernetes 与 Yarn 的一些不同点:

  • 基本单位:

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

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

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

    • Yarn: 节点缓存,无核心中心化存储;
    • Kubernetes: 中心化存储;
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
12天前
|
人工智能 算法 调度
阿里云ACK托管集群Pro版共享GPU调度操作指南
本文介绍在阿里云ACK托管集群Pro版中,如何通过共享GPU调度实现显存与算力的精细化分配,涵盖前提条件、使用限制、节点池配置及任务部署全流程,提升GPU资源利用率,适用于AI训练与推理场景。
89 1
|
存储 边缘计算 Kubernetes
边缘计算问题之YurtControllerManager 接管原生 Kubernetes 的调度如何解决
边缘计算问题之YurtControllerManager 接管原生 Kubernetes 的调度如何解决
108 1
|
7月前
|
人工智能 Serverless 调度
突破地域限制,实现算力无限供给 —阿里云ACK One注册集群开启多地域Serverless算力调度
本文介绍了阿里云ACK One注册集群多地域Serverless算力调度解决方案,解决传统数据中心在AI时代面临的算力不足问题。方案通过分钟级接入、100%兼容Kubernetes操作及云上Serverless弹性,实现跨地域弹性算力供给,支持高并发请求与模型快速迭代。文中详细描述了快速接入步骤、指定地域调度及动态调度方法,并提供了相关代码示例。该方案助力企业实现AI推理服务的规模化部署,提升商业落地效率。
|
7月前
|
人工智能 Serverless 调度
突破地域限制,实现算力无限供给 -- 阿里云ACK One注册集群开启多地域Serverless算力调度
传统单地域算力难以支撑AI推理场景的高并发实时响应、突发高流量的要求,阿里云容器服务ACK One注册集群推出多地域Serverless算力调度方案完美解决此问题。
|
8月前
|
人工智能 分布式计算 调度
打破资源边界、告别资源浪费:ACK One 多集群Spark和AI作业调度
ACK One多集群Spark作业调度,可以帮助您在不影响集群中正在运行的在线业务的前提下,打破资源边界,根据各集群实际剩余资源来进行调度,最大化您多集群中闲置资源的利用率。
|
Kubernetes 调度 容器
Kubernetes高级调度方式
文章介绍了Kubernetes的高级调度方式,包括调度器的工作机制、节点倾向性(Node Affinity)和Pod倾向性(Affinity)。
204 9
Kubernetes高级调度方式
|
应用服务中间件 调度 nginx
Kubernetes的Pod调度:让你的应用像乘坐头等舱!
Kubernetes的Pod调度:让你的应用像乘坐头等舱!
|
机器学习/深度学习 Kubernetes 调度
Kubernetes与GPU的调度:前世今生
本文详细探讨了Kubernetes与GPU的结合使用,阐述了两者在现代高性能计算环境中的重要性。Kubernetes作为容器编排的佼佼者,简化了分布式系统中应用程序的部署与管理;GPU则凭借其强大的并行计算能力,在加速大规模数据处理和深度学习任务中发挥关键作用。文章深入分析了Kubernetes如何支持GPU资源的检测与分配,并介绍了热门工具如NVIDIA GPU Device Plugin和Kubeflow的应用。
|
Kubernetes 调度 Perl
在K8S中,Pod多副本配置了硬亲和性,会调度到同⼀个节点上吗?
在K8S中,Pod多副本配置了硬亲和性,会调度到同⼀个节点上吗?
|
存储 Kubernetes 调度
在K8S中,影响Pod调度策略的有哪些?
在K8S中,影响Pod调度策略的有哪些?

热门文章

最新文章