PostStart钩子

在容器启动后立即执行的操作。通过定义PostStart钩子,可以在容器启动后执行特定的命令或脚本,以确保容器能够正常运行。例如,可以检查数据库连接、启动子进程等。

PreStop钩子

在容器终止之前执行的操作。通过定义PreStop钩子,可以在容器停止前执行一些清理工作,如保存数据、关闭连接等。这有助于确保容器在退出时能够正常释放资源,避免数据丢失或资源泄漏。

apiVersion: v1
kind: Pod
metadata:
  name: lifecycle-demo
  namespace: default
spec:
  containers:
  - name: lifecycle-container
    image: busybox
    command: ["/bin/sh", "-c", "sleep 3600"]
    volumeMounts:
    - name: busybox-vol
      mountPath: /data
    lifecycle:
      postStart:
        exec:
          command: ["/bin/sh", "-c", "echo postStart >> /data/postStart.log "]
      preStop:
        exec:
          command: ["/bin/sh", "-c", "echo preStop >> /data/preStop.log"]
  volumes:
  - name: busybox-vol
    hostPath:
      path: /tmp/data
      type: Directory

通过describe可以看到,该Pod被分配到node01节点

从0开始搞K8S:Pod生命周期-PostStart、PreStop以及相位(Phase)_Pod

登录到node01,可以看到/tmp/data下只有postStart.log,说明postStart钩子运行成功

从0开始搞K8S:Pod生命周期-PostStart、PreStop以及相位(Phase)_钩子_02

停止该pod后,会生成preStop.log,说明preStrop钩子运行成功

从0开始搞K8S:Pod生命周期-PostStart、PreStop以及相位(Phase)_钩子_03

相位(Phase)

在Kubernetes(K8s)中,Pod对象的生命周期包括不同的相位(Phase),用于描述Pod在其生命周期中的当前状态。这些相位包括:

  1. Pending(挂起):Pod已经被Kubernetes系统接受,但有一个或者多个容器镜像尚未创建。等待时间包括调度Pod的时间和通过网络下载镜像的时间,这可能需要一些时间。
  2. Running(运行中):Pod已经绑定到了某个节点上,Pod中所有的容器都已被创建。至少有一个容器正在运行,或者正处于启动或重启状态。
  3. Succeeded(成功):Pod中的所有容器都已成功终止,并且不会再重启。
  4. Failed(失败):Pod中的所有容器都已终止了,并且至少有一个容器是因为失败终止。也就是说,容器以非零状态退出或者被系统终止。
  5. Unknown(未知):因为某些原因无法取得Pod的状态,通常是因为与Pod所在主机通信失败。

请注意,Pod的相位是其在生命周期中的宏观概述,而不是对容器或Pod对象的综合汇总。相位的数量和含义在Kubernetes中被严格界定,仅包含上面列举的相位值。