K8S|青训营笔记
这是我参与「第四届青训营 」笔记创作活动的第三天
k8s简介
为什么要k8s
应用数量巨大,需要编排,出问题需要修复
k8s是什么
- 特点:便携可扩展,开源
- 目的:管理容应用和服务
- 作用:声明配置和自动化
如何在k8s中部署wordpress应用
k8s核心概念
pod,最基本的单位,最小的应用单位
deployment/statefulset pod的集合,stateful更强调状态
volume/PVC/PV/StorageClass volume写死在pod里,扩展性较差。 PVC是持久化存储的声明,大部分由用户来创建,做一些应用存储空间的声明。 PV是底层存储k8s里的逻辑概念,由系统自动创建或者管理员创建,PVC和PV是一一绑定的关系。 StorageClass用于自动创建PVC,PVC和PV绑定
Node 节点,控制面和数据面
pod
pv
pvc
storageclass
Deployment
k8s设计准则
声明式的而不是命令式的
控制循环
追求简单
模块化
向下兼容
开源开放
k8s架构
ETCD:持久化数据中心,维护集群中所有数据的有序性和一致性,事件机制同步数据变更
APIServer:负责对所有组件提供API接口,负责admission,鉴权等功能,提供后端etcd数据cacher,降低ETCD压力,结合ETCD,提供List-Watch机制(最重要的机制)
Controller-Manager:提供一系列控制器,负责维护各种对象的声明周期。比如:Node controller,PV controller等
Scheduler:负责应用实例的调度,把pod绑定到合适的Node
Kubelet:基于Pod声明,真正开始启动容器,负责容器生命周期维护
Kube-proxy:网络代理,负责维护节点网络规则,接管Pod出入流量
K8s核心通信机制 List-Watch
k8s核心功能
服务发现和负载均衡
存储编排
自动发布,回滚
自愈
密钥,配置管理
资源管理,应用编排调度
资源管理
资源种类
计算
CPU,memory,HugePages,Gpu...
Socket,Numa...
存储
资源上报
资源分配
计算资源
存储卷
状态维护
资源回收
计算资源
删除pod之前,PV和PVC是不能删的
存储资源
调度
资源申请
request是底限,limit是上限
调度流程
如果抢占失败,只能调度失败,进入循环控制,等待下一轮
优化实践
k8s还可以更好
大规模集群的性能问题,原生的k8s无法达到的功能,为了追求通用和优雅,牺牲了一部分性能
非原生资源的精细化管理能力
动态资源接入,管理能力
调度功能和性能
调度质量
字节的一些工作-资源管理
字节的一些工作-功能增强
K8s和Yarn的一些不同
基本单位:K8s Pod & Yarn Container
资源管理:资源种类,扩展能力
调度模式:Yarn更像是基于节点找应用,K8s是基于应用找节点,K8s的调度质量应该要比Yarn好很多,所以K8s的性能要比Yarn差很多
系统设计:K8s 中心存储 & Yarn 节点缓存;所以K8s的异常恢复要简单很多