本篇及此系列文章只针对面试相关问题做了简单总结,后续会出比较详细的系列文章....
1. 创建Pod的底层逻辑
1)创建单个Pod时:组件间的交互流程和描述如下图,该过程中controller-manager组件不工作。
① 客户端提交创建请求【通过 api-server 的restful 接口 或kubectl 命令行工具,支持JSON 和 YAML】
② api-server 处理用户请求,将 pod 信息存储至 etcd 中;
③ kube-scheduler 通过 api-server 接口监测到未绑定的 pod,尝试为 pod 分配 node 节点;
两阶段进行:预选阶段和优选阶段
预选阶段:遍历所有的 node 节点,根据策略筛选出候选节点;
优选阶段:为预选阶段所选的候选节点进行打分,取分数最高者;
④ 选出最优节点后,进行 pod绑定操作,并将结果存储至 etcd 中;
⑤ 目标节点的 kubelet 进程通过 api-server 接口监测到 pod绑定事件,从 etcd 获取 pod 清单,下载镜像并启动容器;
⑥ kubelet通过接口上报pod状态给api-server,api-server更新etcd资源信息
2)创建Deployment时:组件间的交互流程和描述如下图:
流程描述
① 客户端提交创建请求【通过 api-server 的restful 接口 或kubectl 命令行工具,支持JSON 和 YAML】
② api-server 验证并存储deployment信息到 etcd 数据中心;
③ + ④ deployment-controller通过api-server监测到新deployment对象创建,则创建一个replicaset对象并存储到etcd数据中心;
⑤+⑥ replicaset-controller通过api-server监测到新replicaset对象创建&#