详细描述下 K8s 中的 Pod 创建过程和销毁过程

提问者:帅平 问题分类:面试刷题
详细描述下 K8s 中的 Pod 创建过程和销毁过程
6 个回答
冷心丿玫瑰
冷心丿玫瑰
Pod 创建过程:从用户提交请求到 API Server,再到调度器选择节点,Kubelet 启动容器,最后更新状态并暴露服务。
Pod 销毁过程:从用户或控制器发起删除请求,到 API Server 标记 Pod 为 Terminating,Kubelet 优雅地终止容器,最终清理资源并更新状态。
发布于:1个月前 (03-17) IP属地:四川省
踏尽风雪
踏尽风雪
整个过程依赖 Kubernetes 的多个组件(如 API Server、Scheduler、Kubelet、Kube Proxy 等)协同工作,确保 Pod 的创建和销毁是自动化、高效且一致的。
发布于:1个月前 (03-17) IP属地:四川省
丶殇
丶殇
Pod销毁过程
1、用户或控制器发起删除请求
• Pod 的销毁通常由用户通过 kubectl delete pod <pod_name> 命令,或者由控制器(如 Deployment、StatefulSet 等)发起。
• 当控制器的期望状态与实际状态不一致时,控制器会发起删除 Pod 的请求。比如,Deployment 中的 Pod 副本数发生变化时,控制器会删除不需要的 Pod。
2、APIServer处理删除请求
• API Server 接收到删除请求后,首先会验证请求的合法性。
• API Server 会将删除请求的状态保存到 Etcd 中,更新 Pod 的状态为 Terminating。
3、kubelet停止容器
Kubelet 发现 Pod 被标记为 Terminating 后,会启动容器的终止过程。Kubelet 会:
• 发送终止信号(如 SIGTERM)给 Pod 中的容器。
• 等待一定的时间(Grace Period),允许容器优雅地关闭。
• 如果容器没有在规定时间内退出,Kubelet 会发送强制终止信号(如 SIGKILL)。
4、清理容器资源
Kubelet 会清理容器和与 Pod 相关的资源,例如:
• 删除容器的运行时资源。
• 如果 Pod 使用了卷,Kubelet 会释放和卸载卷资源。
• 删除容器网络设置。
发布于:1个月前 (03-17) IP属地:四川省
青山依旧
青山依旧
5、kubernetes集群状态更新
• Kubernetes API Server 会更新 Pod 的状态为 Deleted,并从 Etcd 中删除 Pod 的相关数据。
• 如果 Pod 是由控制器(如 Deployment)管理的,控制器会根据新的状态启动新的 Pod,以维持期望的副本数。
6、清理网络资源
Kube Proxy 会更新服务的后端列表,移除已删除 Pod 的 IP 地址,确保流量不再路由到该 Pod。
发布于:1个月前 (03-17) IP属地:四川省
待我幼稚完
待我幼稚完
Pod创建过程:
1、用户提交请求(kubectl或者API)
• 用户通过 kubectl 或者直接通过 Kubernetes API 提交创建 Pod 的请求。这通常是通过 kubectl run、kubectl apply 等命令,或者通过编写一个 YAML 文件描述 Pod 的配置并将其提交到集群。
• 请求包含 Pod 的配置,通常包括容器的镜像、资源限制、环境变量、卷、端口等信息。
2、APIServer处理请求:
1)Kubernetes 的 API Server 是整个集群的接口,处理所有的 HTTP 请求。收到 Pod 创建请求后,API Server 会对请求进行验证和授权(基于 RBAC 和其他策略):
• 验证:检查请求是否符合 Kubernetes 的 API 规范(例如,Pod 配置的语法、字段是否正确等)。
• 授权:确保发起请求的用户有足够的权限来创建 Pod。
•2)如果请求通过验证和授权,API Server 会将 Pod 配置保存到 Etcd 中。Etcd 是一个强一致性的数据库,用于存储 Kubernetes 集群的所有状态信息。
3、调度器选择节点
1)Kubernetes Scheduler 会监控 Etcd 中的 Pod 状态,并选择适合的节点来运行该 Pod。调度器会根据以下因素做出决策:
• 资源请求:Pod 请求的 CPU 和内存资源。
• 节点资源:节点的当前负载和可用资源。
• 亲和性/反亲和性:Pod 对节点的亲和性或反亲和性规则(例如,某些 Pod 必须一起运行,或者不能与其他 Pod 一起运行)。
• 污点和容忍:节点是否有污点,并且 Pod 是否容忍这些污点。
2)调度器选择的节点会更新 Pod 的配置,指定该 Pod 将运行在选定的节点上。
发布于:1个月前 (03-17) IP属地:四川省
旧梦难醒
旧梦难醒
4、Kubelet启动容器
1)Kubelet 是每个节点上的代理,它负责确保容器在节点上运行。当调度器确定 Pod 将运行在某个节点上时,Kubelet 会接收到该节点上 Pod 的信息。
2)Kubelet 会根据 Pod 配置启动容器,确保容器按预期启动。它会:
• 下载所需的容器镜像(如果镜像不存在于节点上)。
• 根据 Pod 配置启动容器。
• 如果使用了卷,Kubelet 会挂载相应的存储资源到容器中。
3)Kubelet 启动容器后,容器运行的状态会定期报告给 API Server,确保 Pod 的状态是健康的。
5、服务发现和网络配置
• Kube Proxy 会为 Pod 配置网络规则,确保服务能够找到这个 Pod。如果 Pod 是通过 Service 暴露的,Kube Proxy 会更新 Service 的后端列表,包含新创建的 Pod。
• Kubernetes 的 DNS 服务会为 Pod 分配一个 DNS 名称,使其可以通过 DNS 解析访问。
6、Pod状态更新
在 Pod 被成功调度并启动后,Kubernetes API Server 会将 Pod 的状态更新为 Running,并将状态信息保存在 Etcd 中。Pod 的 IP 地址和其他元数据也会在这个阶段更新。
发布于:1个月前 (03-17) IP属地:四川省
我来回答