1.4.2. pods生命周期¶
1.4.2.1. pod生命周期¶
pod的生命周期开始pending阶段,正常启动后进入Running状态,后续失败或者成功进入Succeeded或者Failed状态。
pod在其生命周期,指挥被调度一次,知道这个pod停止或者终止。
Pod 自身不具有自愈能力。如果 Pod 被调度到某节点 而该节点之后失效,Pod 会被删除;类似地,Pod 无法在因节点资源 耗尽或者节点维护而被驱逐期间继续存活。Kubernetes 使用一种高级抽象 来管理这些相对而言可随时丢弃的 Pod 实例,称作 控制器。
1.4.2.2. Pod 阶段¶
Pending: 已经被k8s接受,还没有创建或者运行。比如容器还在拉取镜像中就是pending中的。
Running: pod已经绑定到某个节点,pod里面的容器已经创建完毕,至少有一个容器在运行中。
Succeeded: 成功终止了,不在重启。
Failed: 所有的容器都已经终止了,至少有一个容器失败终止,非0状态终止或者系统终止。
Unknown: 因为某些原因无法取得pod的状态,这种情况通常因为pod所在主机通信失联了。
1.4.2.3. 容器状态¶
一旦调度器将 Pod 分派给某个节点,kubelet 就通过 容器运行时 开始为 Pod 创建容器。 容器的状态有三种 - Waiting(等待) - Running(运行中) - Terminated(已终止)
1.4.2.4. 容器重启策略¶
重启策略有如下几个
Always
OnFailure
Never
restartPolicy仅仅针对同一个节点上kubelet的容器重启动作
1.4.2.5. Pod 状况¶
pod的状态有如下几个。
PodScheduled: 表示pod已经被调度到某个节点。
ContainersReady: pod中所有的容器已经就绪。
Initialized: 所有的Init容器都成功启动。
Ready: 启动完毕,可以提供服务,应该诶添加对应服务的负载均衡上的。
1.4.2.6. 容器探针¶
probe是kubelet对pod执行定期的诊断,kubelet调用容器实现的handler处理程序,有三类。
ExecAction: 在容器内执行指定命令。如果命令退出时返回码为 0 则认为诊断成功。
TCPSocketAction: 对容器的 IP 地址上的指定端口执行 TCP 检查。如果端口打开,则诊断被认为是成功的。
HTTPGetAction: 对容器的 IP 地址上指定端口和路径执行 HTTP Get 请求。如果响应的状态码大于等于 200 且小于 400,则诊断被认为是成功的。
执行结果如下
Success: 成功的
Failure: 失败的
Unknown: 未知的
三种探针
livenessProbe: 存活性探测,期望在特定状态或者不健康的时候重新启动。
readinessProbe: 是否就绪探测,需要确定合适才可以给这个pod接受流量需要这个。
startupProbe: 是否启动探测,容器需要启动很久的,
1.4.2.7. pod终止¶
pod的终止是优雅的, 容器运行时会发送一个TERM信号到每个容器的主进程,如果超过一个时间还没有关闭,就会发送KILl信号,之后pod就会从api服务器上面移除。
1.4.2.8. 强制删除pod¶
默认清理是有30s的宽限期限的。快速立刻的办法是。 设置 –grace-period=0 的同时额外设置 –force 参数才能发起强制删除请求。