Pod的生命周期:
    image.png

    Pending:创建了pod资源并存入etcd中,但尚未完成调度

    ContainerCreating:Pod 的调度完成,被分配到指定 Node 上,处于容器创建的过程中,通常是在拉取镜像的过程中

    Running:Pod 包含的所有容器都已经成功创建,并且成功运行起来

    Succeeded:Pod中的所有容器都已经成功终止并且不会被重启

    Failed:所有容器都已经终止,但至少有一个容器终止失败,也就是说容器返回了非0值的退出状态或已经被系统终止

    容器重启策略:
    image.png

    Always:但凡Pod对象终止就重启,默认设置

    OnFailure:仅在Pod出现错误时才重启

    Never:从不

    容器探针:
    image.png

    在pod生命周期中可以做的一些事情,主容器启动前可以完成初始化容器,初始化容器可以有多个,他们是串行执行的,执行完成后就推出了,在主程序刚刚启动的时候可以指定一个post start 主程序启动开始后执行一些操作,在主程序结束前可以指定一个 pre stop 表示主程序结束前执行的一些操作

    在程序启动后可以做两类检测 liveness probe(存活性探测) 和 readness probe(就绪性探测)

    探针是由 kubelet 对容器执行的定期诊断,要执行诊断, kubelet 调用由容器实现的 Handler, 有三种类型的处理程序:

    • ExecAction: 在容器内执行指定命令,如果命令退出时返回码为 0 则认为诊断成功
    • TCPSocketAction: 对指定端⼝上的容器的 IP 地址进行TCP 检查,如果端⼝打开, 则诊断被认为是成功的
    • HTTPGetAction: 对指定的端⼝和路径上的容器的 IP 地址执行HTTP Get 请求,如果响应的状态码大于等于200且小于 400, 则诊断被认为是成功的

    Kubelet 可以选择是否执行在容器上运行的两种探针执行和做出反应:

    • livenessProbe:指示容器是否正在运行,如果存活探测失败,则 kubelet 会杀死容器,并且容器将受到其重启策略的影响,如果容器不提供存活探针,则默认状态为 Success

    • readinessProbe:指示容器是否准备好服务请求,如果就绪探测失败,端点控制器将从与 Pod 匹配的所有 Service 的端点中删除该 Pod 的 IP 地址,初始延迟之前的就绪状态默认为 Failure,如果容器不提供就绪探针,则默认状态为 Success

    livenessProbe和readinessProbe使用场景:
    image.png

    如果容器中的进程能够在遇到问题或不健康的情况下自行崩溃,则不一定需要存活探针,kubelet 将根据 Pod 的restartPolicy 自动执行正确的操作

    如果希望容器在探测失败时被杀死并重新启动,那么请指定一个存活探针,并指定restartPolicy 为 Always 或 OnFailure

    如果要仅在探测成功时才开始向 Pod 发送流量,请指定就绪探针,在这种情况下,就绪探针可能与存活探针相同,但是 spec 中的就绪探针的存在意味着 Pod 将在没有接收到任何流量的情况下启动,并且只有在探针探测成功后才开始接收流量

    如果您希望容器能够自行维护,您可以指定一个就绪探针,该探针检查与存活探针不同的端点

    请注意,如果您只想在 Pod 被删除时能够排除请求,则不一定需要使用就绪探针;在删除 Pod 时,Pod 会自动将自身置于未完成状态,无论就绪探针是否存在,当等待 Pod 中的容器停止时,Pod 仍处于未完成状态