Kubernetes 容器与 Pod 生命周期管理及调度机制解析
1. 容器生命周期钩子
容器生命周期钩子包括 postStart
和 preStop
两种,其调用机制与健康检查类似,支持以下处理程序类型:
- exec :直接在容器中运行命令。
- httpGet :对 Pod 容器打开的端口执行 HTTP GET 请求。
需要注意的是,在 postStart
钩子中执行关键逻辑时要格外小心,因为无法保证其执行。由于该钩子与容器进程并行运行,可能在容器启动之前就执行。此外,该钩子具有至少执行一次的语义,因此实现时必须处理重复执行的情况。平台对于未到达处理程序的失败 HTTP 请求不会进行重试。
preStop
钩子是在容器终止前发送给容器的阻塞调用,其语义与 SIGTERM
信号相同,当无法对 SIGTERM
做出反应时,可用于启动容器的优雅关闭。例如:
apiVersion: v1
kind: Pod
metadata:
name: pre-stop-hook
spec:
containers:
- image: k8spatterns/random-generator:1.0
name: random-generator
lifecycle:
preStop:
httpG