Master组件
Master 组件对集群进行全局决策(例如,调度),并检测和响应集群事件(例如,当不满足部署的 replicas
字段时,启动新的 pod)。
1、kube-apiserver
master节点上提供k8sapi服务的组件,
2、etcd
保存了k8s集群的一些数据,比如pod的副本数,pod的期望状态与现在的状态
3、scheduler
master节点上的调度器,负责选择节点让pod在节点上运行
kube-scheduler 给一个 pod 做调度选择包含两个步骤:
1、过滤
2、打分
过滤阶段会将所有满足 Pod 调度需求的 Node 选出来。例如,PodFitsResources 过滤函数会检查候选 Node 的可用资源能否满足 Pod 的资源请求。在过滤之后,得出一个 Node 列表,里面包含了所有可调度节点;通常情况下,这个 Node 列表包含不止一个 Node。如果这个列表是空的,代表这个 Pod 不可调度。
在打分阶段,调度器会为 Pod 从所有可调度节点中选取一个最合适的 Node。根据当前启用的打分规则,调度器会给每一个可调度节点进行打分。
最后,kube-scheduler 会将 Pod 调度到得分最高的 Node 上。如果存在多个得分最高的 Node,kube-scheduler 会从中随机选取一个。
4、controller
master节点的控制器,负责在节点出现故障时进行通知和响应,负责对节点的pod状态进行监控
Node组件
1、kubelet
一个在集群中每个节点上运行的代理。它保证容器都运行在 Pod 中。
他负责管理在该节点上的属于k8s集群的容器
2、kube-proxy
一个代理,可以通过代理创建一个虚拟ip,通过这个ip来与pod进行交流
3、Container Runtime
容器运行环境是负责在节点上运行容器的软件
附加组件
1、DNS
负责对k8s集群进行域名解析
2、Dashboard
Dashboard是k8s集群的一个web界面,
3、集群层面日志
集群层面日志机制负责将容器的日志数据保存到一个集中的日志存储中,该存储能够提供搜索和浏览接口。
4、容器资源监控
容器资源监控将关于容器的一些常见的时间序列度量值保存到一个集中的数据库中,并提供用于浏览这些数据的界面。
k8s流程
以下是我自己对k8s工作流程的理解,只供参考
1、准备好对应的yanl文件,通过kubectl发送到Api Server中
2、Api Server接收到客户端的请求将请求内容保存到etcd中
3、Scheduler会监测etcd,发现没有分配节点的pod对象通过过滤和打分筛选出最适合的节点运行pod
4、节点会通过conteiner runntime 运行对应pod的容器以及创建对应的副本数
5、节点上的kubelet会对自己节点上的容器进行管理
6、controler会监测集群中的每个节点,发现期望状态和实际状态不符合的话,就会通知对应的节点
7、节点收到通知,会通过container runtime来对pod内的容器进行收缩或者扩张
对于容器来说,管理的单位是容器
对于k8s来说,管理的是一个pod应用
一个pod上可以运行多个容器,可以将pod理解为一个虚拟机,一个虚拟机上运行了多个容器