深入理解 K8S 资源管理和调度| 字节青训营

102 阅读2分钟

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

容器:通俗地说就是一个装有应用软件的箱子,箱子里面有软件运行所需的依赖库和配置,可以把这个箱子放在任意一台机器上,不影响软件的使用。

Kubernetes简介

核心功能

对容器进行编排的系统

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

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

核心概念

Pod:k8s中最小的单位,可以看成是容器的封装 Deployment/StatefulSet:Pod的集合 Volume/PVC/PV/StoraheClass Node:相当于一个物理机或者虚拟机

image.png

设计准则

  • Declarative > imperative 声明式的
  • Control loops:Observe, rectify, repeat
  • simple > Complex 使用简单
  • Modularity 模块化
  • Legacy compatible向下兼容
  • Open > closed 开放

架构

大致分为控制面 和 Node上的组件两部分

组件

  • 控制面:

    • ETCD - k8s选取的一致性存储的KV store

      • 持久化数据中心
      • 维护集群中所有数据的有序性和一致性
      • 事件机制同步数据变更
    • APIServer - 唯一的API

      • 对所有组件提供 API 接口
      • 负责 admission,鉴权等功能
      • 提供后端 etcd 数据 cacher,降低 ETCD 压力
      • 结合 ETCD,提供 List-Watch 机制
    • Controller-manager

      • 提供一系列控制器,负责维护各种对象的生命周期
        • 比如: Node controller, PV controller, Deployment controller, StatefulSet controller 等
    • Scheduler

      • 负责应用实例的调度,把Pod绑定到合适的Node
  • Node上:

    • Kubelet

      • 基于 Pod 声明,真正开始启动容器,负责容器生命周期维护
    • Kube-proxy

      • 网络代理,负责维护节点网络规则,接管 Pod 出入流量

核心通信机制 - List-Watch

image.png 自定义第三方控制器

核心功能

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

资源管理

上报 维护 分配 回收

资源种类:

  • 计算类

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

    • 原生:

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

image.png

调度

优化实践