这是我参与「第四届青训营 」笔记创作活动的第16天
Kubernetes简介
为什么需要 ?
-
容器相比于传统的虚拟化技术,更轻量,更敏捷,更易于管理,运维成本更低;
-
如果容器规模巨大,如何编排管理容器也是个巨大的挑战,需要一个强大的管理系统,Kubernetes 在这方面表现很好
定义
- Kubernetes是一个可移植、可扩展的开源平台(特点),用于管理容器化的工作负载和服务(目的),便于声明性配置和自动化(作用)。
核心概念
- Pod:pod是k8s的最小管理单元,容器运行在pod,一个容器可运行多个pod。
kubectl run运行容器pod,kubectl run -h查看用法
- PVC/PV/StorageClass
- Deployment:副本集部署,弹性伸缩。副本集(创建pod,同时复制多个,随机部署到节点上),弹性伸缩(当节点宕机,或者新加入节点时,根据该pod副本集配置数量决定是否在该节点运行pod)。
- Statefulset:Pod的集合,集合中的Pod可以挂不同的存储卷
- Node:结点主要分为控制面和数据面,数据面主要是运行机器的地方,node映射到机器的概念。
架构
-
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,Socket,Numa,NIC、HugePages,GPU...
存储:Ephemeral Storage,NFS,GlusterFS...RBD,Cinder...ByteDance Storage(FS,Block)...
资源上报:
-
计算资源上报:
- cAdvisor -> Kubelet -> Node
- Agent -> Device plugin -> Kubelet -> Node
-
存储资源上报:
-
临时存储:
- cAdvisor -> Kubelet -> Node
-
持久化存储:
- 托管到存储提供商管理
-
资源状态维护:
-
计算资源状态维护:
- 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
调度
资源调度流程
开始进行过滤节点,假如成功,给节点打分、给节点排序、选择最合适的节点,流程结束。假如失败,尝试抢占节点假如成功,给节点排序、选择最合适节点,流程结束。尝试抢占节点假如失败,调度失败,流程结束。