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 参数才能发起强制删除请求。