Kubernetes 简介
Kubernetes 定义
- 便携,可扩展,开源的容器管理平台
Kubernetes 特性
- 服务发现和负载均衡
- 存储编排
- 自动发布,回滚
- 自愈
- 秘钥,配置管理
- 资源管理,应用编排调度
Kubernetes 几个核心概念
- Pod
- PVC/PV/StorageClass
- Deployment
- Statefulset
- Node
Kubernetes 架构
-
ETCD
- 持久化数据中心
- 维护集群中所有数据的有序性和一致性
- 事件机制同步数据变更
-
APIServer
- 对所有组件提供 API 接口
- 负责 admission,鉴权等功能
- 提供后端 etcd 数据 cacher,降低 ETCD 压力
- 结合 ETCD,提供 List-Watch 机制
-
Controller-manager
- 提供一系列控制器,负责维护各种对象的生命周期 比如: Node controller, PV controller, Deployment controller, StatefulSet controller 等
-
Kubelet
- 基于 Pod 声明,真正开始启动容器,负责容器生命周期维护
-
Kube-proxy
- 网络代理,负责维护节点网络规则,接管 Pod 出入流量
资源种类:
-
计算类
- 原生: CPU,memory,等;
- 可通过 Device plugin 方式支持的非原生: numa,socket。。。
-
存储类
-
原生:
- 临时存储: Ephemeral storage,EmptyDir 等
- 持久化 (PV): Cinder, RBD, Cephfs, NFS, GlusterFS...
-
可以通过 CSI 方式扩展支持其他存储;
-
资源上报:
-
计算资源上报:
- cAdvisor -> Kubelet -> Node
- Agent -> Device plugin -> Kubelet -> Node
-
存储资源上报:
-
临时存储:
- cAdvisor -> Kubelet -> Node
-
持久化存储:
- 托管到存储提供商管理
-
资源分配:
-
计算资源分配:
- Kubelet -> cgroup manager -> cpu, memory...
- Kubelet -> device manager -> extended resources
-
存储资源分配:
- Controller manager -> provisioner -> attacher -> mounter
资源状态维护:
-
计算资源状态维护:
- kubelet/cgroup manager/device manager/evictioner manager -> cpu, memory, extended resources
-
存储资源维护
- PV controller -> PV/PVC
资源回收:
-
计算资源回收:
- Kubelet -> cgroup manager -> cpu, memory...
- Kubelet -> device manager -> extended resources
-
存储资源回收:
- Controller manager -> unmounter -> detacher -> deleter
Kubernetes 调度
调度框架:
Kubernetes 运行 MySql + WordPress 示例:
优化实践
Kubernetes 在哪些地方可以更好:
- 非原生资源的精细化管理能力
- 动态资源的接入,管理能力;
- 更多场景的调度功能和性能优化;
- 调度质量;
字节的一些工作:
-
非原生资源:
- Socket, numa, local disk, NIC, mbw...
-
动态资源:
- CPU 实时负载,利用率...
-
调度功能&性能优化:
- Gang
- 应用级别亲和性约束能力支持;
- 微拓扑调度能力支持;
- 资源预留;
- 系统重构: 分布式系统
- 等
-
调度质量改善:
- 重调度;
- 业务上下游亲和性策略;
- 实时负载均衡策略;
- 碎片整理,优化等
Kubernetes 与 Yarn 的一些不同点:
-
基本单位:
- Yarn: Container;
- Kubernetes: Pod;
-
资源管理的扩展能力:
- Yarn: 没提供 Plugin 机制,侵入性较大;
- Kubernetes: plugin 机制扩展,侵入性小;
-
调度模式:
- Yarn: Node -> Task
- Kubernetes: Task -> Node
-
系统设计
- Yarn: 节点缓存,无核心中心化存储;
- Kubernetes: 中心化存储;