k8s–基础–12.2–pod–生命周期,状态,重启策略


1、pod生命周期

  1. 在Pod被创建时,会被指派一个唯一的ID,并被调度到Node中,直到Pod被终止或删除。
  2. 如果Pod所在的Node宕机,原先的Pod不会被重新调度,它将被完全相同的Pod所替代。
  3. 如果Pod被删除,即使完全相同的副本被创建,则相关存储卷等也会被删除,并会为Pod创建一个新的存储卷等。

2、pod生命周期包含什么内容

  1. Init容器
  2. 主容器
    1. 主容器启动后钩子
    2. 容器结束前钩子
  3. 容器探针

在这里插入图片描述

2.1、Init容器(初始化容器)

  1. 是做初始化工作的容器。
  2. 可以有一个或多个,如果是多个,按照定义的顺序依次执行。
  3. 由于一个Pod里的存储卷是共享的,所以Init容器里产生的数据可以被主容器使用到
  4. Init容器可以在多种K8S资源里被使用到,如
    1. Deployment
    2. DaemonSet
    3. StatefulSet
    4. Job等

2.1.1、查看定义

kubectl explain  pods.spec

在这里插入图片描述

2.2、主容器

  1. Init容器完成后,主容器才启动。
  2. 主容器有2个钩子
    1. 主容器启动后钩子(postStart)
    2. 容器结束前钩子(preStop)

2.2.1、主容器启动后钩子(postStart)

  1. 在主容器被创建后立刻触发
  2. 功能:通知容器它已经被创建
  3. 如果该钩子对应的hook(构子) handler方法执行失败,则该容器会被杀死,并且根据该容器的重启策略决定是否要重启该容器
  4. 这个钩子不需要传递任何参数

2.2.2、容器结束前钩子(preStop)

  1. 该钩子在容器被删除前触发,其所对应的hook(构子) handler方法 必须在 删除该容器的请求发送给Docker daemon之前完成。
  2. 在该钩子对应的hook(构子) handler方法完成后不论执行的结果如何,Docker daemon会发送一个SGTERN信号量给Docker daemon来删除该容器
  3. 这个钩子不需要传递任何参数

2.2.3、查看定义

# postStart定义
kubectl explain  pods.spec.containers.lifecycle.postStart

# preStop定义
kubectl explain  pods.spec.containers.lifecycle.preStop

2.3、容器探针

  1. 容器存活探针
  2. 容器就绪探针

2.3.1、livenessProbe

  1. 判断容器是否存活。
    1. 如果存活探测失败
      1. kubelet 会杀死容器,并且容器将受到其重启策略的影响。
  2. 如果容器不提供存活探针,则默认状态为Success。

2.3.2、readinessProbe

  1. 用于判断容器是否启动完成。
    1. 如果就绪探测失败,端点控制器将从与 Pod 匹配的所有Service 的端点中删除该 Pod 的 IP 地址。
  2. 初始延迟之前的就绪状态默认为Failure。
  3. 如果容器不提供就绪探针,则默认状态为Success

2.3.3、查看定义

# livenessProbe定义
kubectl explain pods.spec.containers.livenessProbe
# readinessProbe定义
kubectl explain pods.spec.containers.readinessProbe

3、状态

3.1、Pending:挂起

3.1.1、场景

  1. 我们在请求创建pod时,条件不满足,调度没有完成,没有任何一个节点能满足调度条件。
  2. 已经创建了但是没有适合它运行的节点,调度没有完成。
  3. API server已经创建该server,但pod内有一个或多个容器的镜像还未创建,可能在下载中

3.2、Running:运行状态

Pod内所有的容器已创建,且至少有一个容器处于运行状态,正在启动或重启状态

3.3、Failed:表示失败

Pod内所有容器都已退出,或者至少有一个容器退出失败

3.4、Succeeded:表示成功状态

3.5、Unknown:未知状态

如果节点之上的kubelet本身出故障,那么api server就连不上kubelet,得不到信息了,就会看Unknown

4、重启策略

4.1、策略

4.1.1、Always

  1. 只要容器挂了就重启
  2. 默认重启策略

4.1.2、OnFailure

只有容器状态为Failed的时候才重启
1. 容器终止运行,且退出码不为0

4.1.3、Never

从不重启容器

4.2、重启策略定义

kubectl explain pods.spec.restartPolicy
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐