携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第13天,点击查看活动详情 >>
1 定义:
Kubernetes(k8s)是一个开源容器管理工具,负责容器部署,容器扩缩容以及负载平衡。k8s是自动化容器操作的开源平台,提供多容器管理解决方案。这些容器操作包括:部署,调度和节点集群间扩展。
特点: 便携,可扩展,开源
目的: 管理容器应用和服务
作用: 声明式配置和自动化
2 核心功能
- 自动化容器部署和复制。
- 实时弹性收缩容器规模。
- 容器编排成组,并提供容器间的负载均衡。
- 调度:容器在哪个机器上运行。
3 概念
-
Pod: kubernetes的最小控制单元,容器都是运行在pod中的,一个pod中可以有1个或者多个容器
-
Volume/PV/PVC/StorageClass:存储卷/持久卷/持久卷声明清单/动态配置持久卷
- Volume:满足旧容器重启之后恢复旧数据的需求
- PV:集群管理员创建持久卷PV,在创建时可以指定这个PV的大小和所支持的访问模式。
- PVC:开发者(集群用户)创建持久卷声明PVC清单申请在Pod中添加特定的卷
- StorageClass:开发者自定义创建pv的方式
-
Deployment: 为Pod和Replica Set提供声明式更新,将 Pod 和ReplicaSet 的实际状态改变成 Deployment 中描述的目标状态,
-
StatefulSet: 有状态的集合,管理所有有状态的服务。解决有状态服务的问题,它所管理的Pod拥有固定的Pod名称,启停顺序
-
Node: 工作负载节点,由master分配容器到这些node工作节点上,然后node节点上的docker负责容器的运行
-
Master:集群控制节点,每个集群需要至少一个master节点负责集群的管控
-
Controller:控制器,通过它来实现对pod的管理,比如启动pod、停止pod、伸缩pod的数量等等
-
Service:pod对外服务的统一入口,下面可以维护者同一类的多个pod
-
Label:标签,用于对pod进行分类,同一类pod会拥有相同的标签
-
NameSpace:命名空间,用来隔离pod的运行环境
4 设计准则
- 声明式而不是命令式
- 控制循环
- 简单
- 开放
- 组件化
- 向下兼容
5 架构
-
ETCD、APIServer、Controller-manager、Scheduler、Kubelet、Kube-proxy
- Etcd持久化数据中心,用于保存集群所有的网络配置和对象的状态信息。维护集群中所有数据的有序性和一致性;事件机制和同步数据变更
- APIServer对所有组件提供API借口,负责admission,鉴权等功能,提供后端etcd数据cacher,降低ETCD压力,提供List-Watch机制
- Controller-manager提供一些列的控制器,负责维护各种对象的生命周期
- Scheduler负责应用实例的调度,把pod绑定到合适的Node
- Kubelet基于po申明,负责容器生命周期的维护
- Kube-proxy网络代理,负责维护节点网络规则,接管pod出入流量