这是我参与「第四届青训营」笔记创作活动的第22天
本节课程目录:
- Kubernetes 简介
- 资源管理
- 调度
- 优化实践
1. Kubernetes 简介
Kubernetes is a portable, extensible, open source platform for managing containerized workloads and services, that facilitates both declarative configuration and automation.
- 特点:便携,可扩展,开源
- 目的:管理容器应用和服务
- 作用:声明式配置和自动化
1.1 Kubernetes 核心概念
- Pod
- Volume/PV/PVC/StorageClass
- Deployment
- StatefulSet
- Node
1.2 Kubernetes 设计准则
- 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 架构
1.4 Kubernetes 核心通信机制 List-Watch
1.5 Kubernetes 核心功能
- 服务发现和负载均衡
- 存储编排
- 自动发布,回滚
- 自愈
- 密钥,配置管理
- 资源管理,应用编排调度
2. 资源管理
-
计算类
- 原生: CPU,memory,等;
- 可通过 Device plugin 方式支持的非原生: numa,socket...
-
存储类
-
原生:
- 临时存储: Ephemeral storage,EmptyDir 等
- 持久化 (PV): Cinder, RBD, Cephfs, NFS, GlusterFS...
-
可以通过 CSI 方式扩展支持其他存储;
-
2.1 资源上报
-
计算资源上报:
- cAdvisor -> Kubelet -> Node
- Agent -> Device plugin -> Kubelet -> Node
-
存储资源上报:
- 临时存储:
- cAdvisor -> Kubelet -> Node
- 持久化存储:
- 托管到存储提供商管理
- 临时存储:
2.3 资源分配
- 计算资源分配:
- Kubelet -> cgroup manager -> cpu, memory...
- Kubelet -> device manager -> extended resources
- 存储资源分配:
- Controller manager -> provisioner -> attacher -> mounter
- Controller manager -> provisioner -> attacher -> mounter
2.4 状态维护
-
计算资源状态维护:
- kubelet/cgroup manager/device manager/evictioner manager -> cpu, memory, extended resources
-
存储资源维护
- PV controller -> PV/PVC
2.5 资源回收
-
计算资源回收:
- Kubelet -> cgroup manager -> cpu, memory...
- Kubelet -> device manager -> extended resources
-
存储资源回收:
- Controller manager -> unmounter -> detacher -> deleter
3. 调度
3.1 资源申请
-
资源申请:
- request、limit
-
其他约束:
- affinity/anti-affinity
- Label selector
- Taint & toleration
- Image locality
- Bin-packing/Load balancing...
3.2 调度流程
3.3 调度框架
4. 优化实践
4.1 Kubernetes 还可以更好
- 非原生资源的精细化管理能力
- 动态资源接入,管理能力
- 调度功能和性能
- 调度质量
4.2 字节的一些工作:
-
非原生资源:
- Socket, numa, local disk, NIC, mbw...
-
动态资源:
- CPU 实时负载,利用率...
-
调度功能&性能优化:
- Gang
- 应用级别亲和性约束能力支持;
- 微拓扑调度能力支持;
- 资源预留;
- 系统重构:分布式系统
-
调度质量改善:
- 重调度;
- 业务上下游亲和性策略;
- 实时负载均衡策略;
- 碎片整理,优化等
4.3 Kubernetes 与 Yarn 的不同点:
-
基本单位:
- Yarn:Container;
- Kubernetes:Pod;
-
资源管理的扩展能力:
- Yarn:没提供 Plugin 机制,侵入性较大;
- Kubernetes:plugin 机制扩展,侵入性小;
-
调度模式:
- Yarn: Node -> Task
- Kubernetes: Task -> Node
-
系统设计
- Yarn: 节点缓存,无核心中心化存储;
- Kubernetes:中心化存储;