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

101 阅读3分钟

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

容器和虚拟机的区别

容器是多个应该用共享一套操作系统

虚拟机是在一套操作系统上虚拟多个机器,每个机器有一套自己的操作系统

1.1 Kubernetes核心概念

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

image.png

1.1.1 Pod

Pod是最小单位,是一个或者多个Container的组合

Pod中的spec有几个配置就有几个container组成Pod

image.png

1.1.2 Volume/PVC/PV/StorageClass

Volume太老了,基本不用。

PV关联到一个具体的存储。

1.1.3 Deployment/StatefulSet

Deployment由一个或者多个Pod组成。

  • template:是Pod的模板
  • replicas:由几个Pod组成

image.png

StatefulSet与Deployment不同的在于volumeClaimTemplate,多了存储空间的描述

image.png

1.1.4 Node

Node是一个机器的概念

1.2 Kubernetes设计准则

  • 声明式而不是命令式
  • 控制循环
  • 简单
  • 模块化
  • 向下兼容
  • 开放原则

1.3 Kubernetes架构

ETCD: 持久化数据中心

维护集群中所有数据的有序性和一致性,事件机制同步数据变更

Controller-Manager

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

APIServer

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

Schedular:

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

Kulelet:

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

Kube-proxy

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

image.png

1.4 Kubernetes核心通道机制 List Watch

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.5 Kubernetes核心功能

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

2 资源管理

2.1 资源上报

在kubelet中,集成了cAvisor采集器,采集机器的细粒度信息后上报给Node status setter,Node status setter会将信息更新到Node API Object里面。

如Numa sockect资源,K8s提供Device manager组件,实现自己的Device agent上报资源。

image.png

2.2 资源分配-计算资源

在Pod中配置需要多少资源,kubelet中的container manager根据list watch机制,利用Cgroup manager做一些操作,类似资源上报的逆过程。

image.png

2.3 资源分配-存储卷

创建一个Pod,里面挂了PVC,controller-manager会watch到

image.png

2.3 状态维护

PV Controller:管理PV

Protection controller:做数据保护,比如删除pod前不能删除PV

Attach/Detach controller:管理块设备节点的attach/detach

image.png

3 调度

3.1 资源申请

通过配置文件,配置PVC

image.png

3.2 调度流程

image.png