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节点
登录到node01,可以看到/tmp/data下只有postStart.log,说明postStart钩子运行成功
停止该pod后,会生成preStop.log,说明preStrop钩子运行成功
相位(Phase)
在Kubernetes(K8s)中,Pod对象的生命周期包括不同的相位(Phase),用于描述Pod在其生命周期中的当前状态。这些相位包括:
- Pending(挂起):Pod已经被Kubernetes系统接受,但有一个或者多个容器镜像尚未创建。等待时间包括调度Pod的时间和通过网络下载镜像的时间,这可能需要一些时间。
- Running(运行中):Pod已经绑定到了某个节点上,Pod中所有的容器都已被创建。至少有一个容器正在运行,或者正处于启动或重启状态。
- Succeeded(成功):Pod中的所有容器都已成功终止,并且不会再重启。
- Failed(失败):Pod中的所有容器都已终止了,并且至少有一个容器是因为失败终止。也就是说,容器以非零状态退出或者被系统终止。
- Unknown(未知):因为某些原因无法取得Pod的状态,通常是因为与Pod所在主机通信失败。
请注意,Pod的相位是其在生命周期中的宏观概述,而不是对容器或Pod对象的综合汇总。相位的数量和含义在Kubernetes中被严格界定,仅包含上面列举的相位值。