Kubernetes 中 Pod 的 initContainers、探针(Probes)和生命周期钩子(Lifecycle Hooks)是容器编排的核心机制,它们共同确保了应用的高可用性和可控性。
一、Init Containers(初始化容器)
概念
- 在 Pod 的主容器(Main Containers )启动之前运行的独立容器,用于执行初始化任务。
多个 Init Container 按顺序执行,全部成功后才会启动主容器,即有一个失败就会从头重新开始执行。
核心意义
-
依赖准备
- 等待外部服务就绪(如数据库启动完成)。
- 动态生成配置文件(如从 ConfigMap 或 Secret 渲染模板)。
- 下载敏感数据或密钥(避免直接暴露在主容器镜像中)。
- 确保前置条件满足后再启动主应用
示例
spec:
initContainers:
- name: init-db
image: init-tool
command: ["sh", "-c", "until nc -z db 3306; do echo 'Waiting for DB'; sleep 2; done"]
containers:
- name: app
image: my-app
sh -c "until nc -z db 3306; do echo 'Waiting for DB'; sleep 2; done"
- 持续检测
db服务的 3306 端口。- 假设数据库 30 秒后启动完成,检测成功,初始化容器退出(状态码 0)。
还可以增加一个超时机制
initContainers:
- name: init-db
image: init-tool
command:
- sh
- -c
- |
# 增加超时机制(最多尝试 60 次,每次 5 秒,总计 5 分钟)
timeout=60
count=0
while ! nc -z db 3306; do
echo "Waiting for DB (attempt $((++count))/$timeout)"
if [ $count -ge $timeout ]; then
echo "Timeout waiting for DB"
exit 1
fi
sleep 5
done
二、探针(Probes)
Kubernetes 提供三种探针,持续监控容器状态:
1. Liveness Probe(存活探针)
作用
- 检测容器是否处于运行状态。若失败,kubelet 会重启容器。
- 应用死锁或无响应时自动恢复。
2. Readiness Probe(就绪探针)
作用
- 检测容器是否准备好接收流量。若失败,从 Service 的 Endpoints 中移除该 Pod。
- 应用启动后加载缓存或连接池,延迟就绪状态。
3. Startup Probe(启动探针)
作用
- 在容器启动初期延迟其他探针的执行,直到应用完全启动。
- 避免存活/就绪探针过早介入导致频繁重启。
简单例子
containers:
- name: web
livenessProbe: # 存活探针
httpGet: # 使用 HTTP GET 方式探测
path: /healthz # 探测路径
port: 8080 # 探测端口
initialDelaySeconds: 5 # 容器启动后等待5秒开始探测
periodSeconds: 10 # 每10秒执行一次探测
readinessProbe: # 就绪探针
tcpSocket: # 使用 TCP Socket 方式探测
port: 8080 # 探测端口
initialDelaySeconds: 15 # 容器启动后等待15秒开始探测
三、生命周期钩子(Lifecycle Hooks)
概念
- 在容器生命周期的特定阶段触发自定义操作。
1. PostStart
- 容器启动后立即执行。 //注意:可能与容器入口命令并发执行
- 用途:发送通知、注册服务到注册中心。
2. PreStop
- 容器终止前执行,阻塞终止流程直到完成。
- 用途:优雅关闭应用 //例:完成正在处理的请求、释放资源
示例
containers:
- name: app
lifecycle: # 生命周期钩子定义
postStart: # 容器启动后立即触发的钩子
exec: # 命令执行方式
command: ["/bin/sh", "-c", "echo 'Container started' > /tmp/start.log"]
preStop: # 容器终止前触发的钩子
httpGet: # GET 请求方式
path: /graceful-shutdown # 请求路径
port: 8080 # 请求端口
四、核心价值总结
| 机制 | 目标 | 关键场景 |
|---|---|---|
| Init Containers | 确保主容器的运行环境就绪 | 依赖服务等待、配置初始化 |
| Liveness Probe | 自动恢复故障 | 检测死锁、无响应 |
| Readiness Probe | 精准控制流量分发 | 避免向未就绪 Pod 发送请求 |
| Startup Probe | 兼容慢启动应用 | Java 应用初始化耗时较长 |
| PreStop Hook | 优雅终止 | 释放连接、处理未完成任务 |

2万+

被折叠的 条评论
为什么被折叠?



