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

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. 容器探针

k8s--基础--12.2--pod--生命周期,状态,重启策略_第1张图片

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

k8s--基础--12.2--pod--生命周期,状态,重启策略_第2张图片

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

你可能感兴趣的:(k8s,docker,容器,kubernetes)