前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深入理解K8S资源管理和调度|青训营笔记

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

作者头像
白泽z
发布2022-08-18 14:32:38
3870
发布2022-08-18 14:32:38
举报
文章被收录于专栏:Go与云原生开发Go与云原生开发

一、Kubernetes 简介

几个核心概念

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

Kubernetes架构

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

资源种类

  • • 计算类
    • • 原生:CPU,memory,等;
    • • 可通过 Device plugin 方式支持的非原生:numa,socket...
  • • 存储类
    • • 临时存储:Ephemeral storage,EmptyDir 等
    • • 持久化 (PV): Cinder, RBD, Cephfs, NFS, GlusterFS...
    • • 原生:
    • • 可以通过 CSI 方式扩展支持其他存储

资源上报

  • • 计算资源上报:
    • • cAdvisor -> Kubelet -> Node
    • • Agent -> Device plugin -> Kubelet -> Node
  • • 存储资源上报:
    • • 托管到存储提供商管理
    • • cAdvisor -> Kubelet -> Node
    • • 临时存储:
    • • 持久化存储:

资源分配

  • • 计算资源分配:
    • • Kubelet -> cgroup manager -> cpu, memory...
    • • Kubelet -> device manager -> extended resources
  • • 存储资源分配:
    • • Controller manager -> provisioner -> attacher -> mounter

资源状态维护

  • • 计算资源状态维护:
    • • kubelet/cgroup manager/device manager/evictioner manager -> cpu, memory, extended resources
  • • 存储资源维护
    • • PV controller -> PV/PVC

资源回收

  • • 计算资源回收:
    • • 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...

调度流程

调度框架

主要分为几个步骤:

  • • 过滤
    • • Pre-Filter: 进行一些全局的准备工作,防止流程中多次重复计算;
    • • Filter: 基于 Pod 的约束,进行 Pod -> Node 的匹配工作;
    • • Post-Filter: 如果没有一个合适的节点,则进行一些抢占行为(驱逐低优任务),看是否能找到合适节点;
  • • 打分
    • • 基于前面的过滤节点,对合适的节点进行打分,按照分值高低进行排序;
    • • 如果前面没有合适的节点,则直接调度失败;
  • • 任务分配
    • • 结果有三类:失败,成功,等待
    • • 失败:直接返回调度失败结果;
    • • 成功:直接通过;
    • • 等待:则异步等待,不阻塞其他流程;
    • • Reserve: 在调度器 cache 里面缓存调度结果,为了解决异步 API 操作带来的时延问题;
    • • Permit:扩展接口,可以在这里支持一些扩展语音,比如:Gang 等;
    • • Pre-Bind: 任务运行前的一些准备操作,比如:动态创建 Volume 等;
    • • Bind: 把 Pod 绑定到 Node,即:给应用分配运行节点;

四、小结

Kubernetes 运行 MySql + WordPress 示例:

  • • https://kubernetes.io/zh-cn/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume

Kubernetes 与 Yarn 的一些不同点:

  • • 基本单位:
    • • Yarn:Container;
    • • Kubernetes:Pod;
  • • 资源管理的扩展能力:
    • • Yarn:没提供 Plugin 机制,侵入性较大;
    • • Kubernetes:plugin 机制扩展,侵入性小;
  • • 调度模式:
    • • Yarn: Node -> Task
    • • Kubernetes: Task -> Node
  • • 系统设计
    • • Yarn: 节点缓存,无核心中心化存储;
    • • Kubernetes:中心化存储;
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-08-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员白泽 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、Kubernetes 简介
    • 几个核心概念
      • Kubernetes架构
      • 二、Kubernetes 资源管理
        • 资源种类
          • 资源上报
            • 资源分配
              • 资源状态维护
                • 资源回收
                • 三、Kubernetes 调度
                  • 约束描述
                    • 调度流程
                      • 调度框架
                      • 四、小结
                        • Kubernetes 运行 MySql + WordPress 示例:
                          • Kubernetes 与 Yarn 的一些不同点:
                          相关产品与服务
                          容器服务
                          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档