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

343 阅读3分钟

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

0 引言

容器介绍:Docker 思维导图.png

1 Kubernetes简介

1.1 定义

Kubernetes是一个可移植、可扩展的开源平台(特点),用于管理容器化的工作负载和服务(目的),便于声明性配置和自动化(作用)。

1.2 核心概念

核心概念.png
Pod:pod是k8s的最小管理单元,容器运行在pod,一个容器可运行多个pod。kubectl run运行容器pod,kubectl run -h查看用法。

Deployment/StatefulSet:副本集部署,弹性伸缩。副本集(创建pod,同时复制多个,随机部署到节点上),弹性伸缩(当节点宕机,或者新加入节点时,根据该pod副本集配置数量决定是否在该节点运行pod)。

Volume/PVC/PV/StorageClass:

Node:

1.3 核心功能

核心通信机制-ListWatch
核心通讯机制.png

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

1.4 架构

架构.png

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

ETCD:持久化数据中心,维护集群中所有数据的有序性和一致性,事件机制同步数据变更。

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

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

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

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

2 资源管理

2.1 资源种类

计算:CPU,Memory,Socket,Numa,NIC、HugePages,GPU...

存储:Ephemeral Storage,NFS,GlusterFS...RBD,Cinder...ByteDance Storage(FS,Block)...

2.2 资源上报

资源上报.png

2.3 资源分配

资源分配.png

2.4 状态维护

状态维护.png

2.5 资源回收

资源回收.png

3 调度

3.1 资源申请

举例配置文件:

apiVersion: v1
kind: Pod
metadata:
    name: frontend
spec:
    containers:
        - name: app
    image: images.my-company.example/app:v4
    resources:
        requests:
            cpu: 1
            memory: 1Gi
            ephemeral-storage: "2Gi"
        limits:
            cpu: 2
            memory: 2Gi
            ephemeral-storage: "4Gi"

3.2 调度流程

调度流程1.png
开始进行过滤节点,假如成功,给节点打分、给节点排序、选择最合适的节点,流程结束。假如失败,尝试抢占节点假如成功,给节点排序、选择最合适节点,流程结束。尝试抢占节点假如失败,调度失败,流程结束。

调度流程.png

4 优化实践

Kubernetes可以更好的地方

非原生资源的精细化管理能力
动态资源接入,管理能力
调度功能和性能
调度质量

字节的一些工作

资源管理:计算机硬软件
功能增强:Gang、Job level affinity、微拓扑调度、资源预留/占位、重调度、丰富的排队策略
性能优化:吞吐
调度质量:负载均衡、资源碎片

和Yarn的一些不同

基本单位:Pod & Container
资源管理:资源种类、扩展能力
调度模式:Task -> Node、Node -> Task
系统设计:中心存储、节点缓存

参考引用

1. 5分钟带你快速了解Docker和k8s
2. 从 0 开始了解 Docker
3. Docker从入门到上瘾,万字终极指南!
4.【大数据专场 学习资料六】第四届字节跳动青训营
5. K8S核心概念