03.K8S工作原理
# 01.K8S工作原理
① 部署应用:
- 开发者提交应用描述文件(YAML格式)到API Server
- 指定Pod、Service、ConfigMap等资源的期望状态
② API Server处理请求:
- API Server 接收到请求后,首先将应用描述文件中的信息存储在etcd中,确保集群状态数据的一致性
③ 调度器决定节点分配:
- Scheduler 读取etcd中存储的应用期望状态
- 并根据当前集群中节点的资源利用情况,选择最合适的节点运行Pod
④ Kubelet拉起容器:
- Kubelet接收到Scheduler的指令后
- 通过容器运行时(如Docker或containerd)拉取指定镜像并启动容器
⑤ 服务发现与负载均衡:
- Kube-proxy设置相应的网络规则
- 使应用服务能够被外部访问或在内部Pod之间进行通信
⑥ 自动扩缩容和故障恢复:
- Controller Manager持续监控Pod的运行状态
- 并在Pod故障或节点失效时自动创建新的副本或迁移Pod
# 02.创建pod的流程
一:获取创建请求
1.用户提交创建Pod的请求
,可以通过API Server的REST API ,也可用Kubectl命令行工具,支持Json和Yaml两种格式;2.API Server 处理用户请求
,存储Pod数据到Etcd,以便后续组件能够读取Pod状态;3.Schedule
通过和 API Server的watch机制
,查看到新的pod
,尝试为Pod绑定Node;
二:选择Pod主机节点
4.过滤主机
:调度器用一组规则过滤掉不符合要求的主机
(比如Pod指定了所需要的资源,那么就要过滤掉资源不够的主机);5.主机打分
:对第一步筛选出的符合要求的主机进行打分
,在主机打分阶段,调度器会考虑一些整体优化策略- 比如:把一个Replication Controller的副本分布到不同的主机上,使用最低负载的主机等;
6.选择主机
:选择打分最高的主机,进行binding操作
,结果存储到Etcd中
;
三:调用docker引擎,创建容器
- 7.kubelet根据调度结果执行Pod创建操作:
- 1)绑定成功后,会启动container, docker run,
- 2)scheduler会调用API Server的API在etcd中创建一个bound pod对象,描述在一个工作节点上绑定运行的所有pod信息。
- 3)运行在每个工作节点上的kubelet也会定期与etcd同步bound pod信息
- 4)一旦发现应该在该工作节点上运行的bound pod对象没有更新,则调用Docker API创建并启动pod内的容器。
上次更新: 2024/9/27 11:33:57