这是我参与「第四届青训营」笔记创作活动的第17天
0 引言
容器介绍:Docker
1 Kubernetes简介
1.1 定义
Kubernetes是一个可移植、可扩展的开源平台(特点),用于管理容器化的工作负载和服务(目的),便于声明性配置和自动化(作用)。
1.2 核心概念
Pod:pod是k8s的最小管理单元,容器运行在pod,一个容器可运行多个pod。kubectl run运行容器pod,kubectl run -h查看用法。
Deployment/StatefulSet:副本集部署,弹性伸缩。副本集(创建pod,同时复制多个,随机部署到节点上),弹性伸缩(当节点宕机,或者新加入节点时,根据该pod副本集配置数量决定是否在该节点运行pod)。
Volume/PVC/PV/StorageClass:
Node:
1.3 核心功能
核心通信机制-ListWatch
服务发现和负载均衡
存储编排
自动发布,回滚
自愈
秘钥,配置管理
资源管理,应用编排调度
1.4 架构
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 资源上报
2.3 资源分配
2.4 状态维护
2.5 资源回收
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 调度流程
开始进行过滤节点,假如成功,给节点打分、给节点排序、选择最合适的节点,流程结束。假如失败,尝试抢占节点假如成功,给节点排序、选择最合适节点,流程结束。尝试抢占节点假如失败,调度失败,流程结束。
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核心概念