在上一节当中我们利用yaml文件创建了资源对象Pod,这节讲解一下Pod的生命周期与创建过程
一、Pod生命周期
所谓的pod生命周期就是说pod这个资源对象从开始创建到结束整个的一个流程,在流程当中会经历多个阶段
Pod 的 status 属性是一个 PodStatus 对象,拥有一个 phase 字段。它简单描述了 Pod 在其生命周期的阶段
| 阶段 | 说明 |
| Pending | Pod 已被 Kubernetes 接受,apiServer将信息记录到etcd当中,但尚未创建一个或多个容器镜像。这包括被调度之前的时间以及通过网络下载镜像所花费的时间,执行需要一段时间。 |
| Running | Pod 已经被绑定到了一个节点上面去运行,所有容器已被创建,完成了Pod的调度。至少一个容器正在运行,或者正在启动或重新启动。 |
| Succeeded | 所有容器成功终止,也不会重启。 |
| Failed | 所有容器终止,至少有一个容器以失败方式终止。也就是说,这个容器要么已非 0 状态退出,要么被系统终止。 |
| Unknown | 由于一些原因,Pod 的状态无法获取,通常是与 Pod 通信时出错导致的。 |
二、Pod创建过程
Pod是Kubernetes中最基本的部署调度单元,可以包含container,逻辑上表示某种应用的一个实例。例如一个web站点应用由前端、后端及数据库构建而成,这三个组件将运行在各自的容器中,那么我们可以创建包含三个container的pod。本文将对Kubernetes的基本处理流程做一个简单的分析。
Pod的创建流程如下图所示(图片来源于网络):
具体的创建步骤包括:
1、客户端提交创建请求,可以通过API Server的Restful API,也可以使用kubectl命令行工具。支持的数据类型包括JSON和YAML。
2、API Server处理用户请求,存储Pod数据到etcd,返回确认信息给客户端即created。
3、API Server会去etcd去查看其状态变化,调度器通过API Server查看未绑定的Pod(所有Kubernetes组件都使用watch机制来跟踪API Server的一些变动)。尝试为Pod分配主机即为Pod挑选符合要求的节点,使其在节点上运行。
4、过滤主机 (调度预选):调度器用一组规则过滤掉不符合要求的主机。比如Pod指定了所需要的资源量,那么可用资源比Pod需要的资源量少的主机会被过滤掉。
5、主机打分(调度优选):对第一步筛选出的符合要求的主机进行打分,在主机打分阶段,调度器会考虑一些整体优化策略,比如把容一个Replication Controller的副本分布到不同的主机上,使用最低负载的主机等。
6、选择主机:选择打分最高的主机,进行binding操作,绑定主机成功后将结果存储到etcd中。
7、kubelet根据调度结果执行Pod创建操作: 绑定成功后,scheduler会调用APIServer的API在etcd中创建一个boundpod对象,描述在一个工作节点上绑定运行的所有pod信息。运行在每个工作节点上的kubelet也会定期与etcd同步boundpod信息,一旦发现应该在该工作节点上运行的boundpod对象没有更新,则调用Docker API创建并启动pod内的容器。