钩子
一、认识
Pod
生命周期钩子(Hooks
): 在 Kubernetes
中,Pod
生命周期钩子(Lifecycle Hooks
)是一组允许用户在容器的生命周期中指定特定操作的机制。这些钩子为在容器启动前或终止前执行定制逻辑提供了灵活性,从而帮助确保应用程序的平滑启动和优雅终止。
Kubernetes
提供了两种主要的生命周期钩子:
-
postStart
钩子:在容器启动后立即调用。容器已经创建并准备运行,但还没有开始处理请求或进入其主循环。因此,postStart
钩子可用于在应用程序正式启动前执行初始化任务,如注册服务、生成初始配置文件、检查依赖的服务状态等。 -
preStop
钩子:在容器被终止之前执行。容器终止前,Kubernetes
会首先调用preStop
钩子,等待其完成或达到超时限制,然后再终止容器。因此,preStop
常用于优雅地关闭应用程序,保存状态,或释放资源,例如关闭连接、刷新缓存、通知其他服务等。比如说:preStop
钩子可以帮助应用程序在终止前完成必要的清理工作,例如关闭数据库连接、提交未完成的事务、通知其他服务等。通过preStop
钩子,在应用程序终止前保存重要数据或状态,确保在应用重启或扩展时不会丢失重要信息。
Pod
生命周期钩子的执行方式
-
exec
: 在容器内执行指定的命令。通常用于简单的操作或需要访问容器内部资源的任务。 -
httpGet
: 向容器内的某个HTTP
端点发起GET
请求。通常用于触发应用程序的特定逻辑,例如通知应用程序它将要停止。
二、preStop
preStop
:在容器被终止之前执行。容器终止前,Kubernetes
会首先调用 preStop
钩子,等待其完成或达到超时限制,然后再终止容器。因此,preStop
常用于优雅地关闭应用程序,保存状态,或释放资源,例如关闭连接、刷新缓存、通知其他服务等。比如说: preStop
钩子可以帮助应用程序在终止前完成必要的清理工作,例如关闭数据库连接、提交未完成的事务、通知其他服务等。通过 preStop
钩子,在应用程序终止前保存重要数据或状态,确保在应用重启或扩展时不会丢失重要信息。
2.1 语法
exec
方式:
apiVersion: v1
kind: Pod
metadata:
name: lifecycle
spec:
containers:
- name: lifecycle
image: registry.cn-hangzhou.aliyuncs.com/bolawen/nginx:stable-otel-linux-arm64
lifecycle:
preStop:
exec:
command: ["/bin/sh", "-c", "nginx -s quit; while killall -0 nginx; do sleep 1; done"]
ports:
- containerPort: 80
httpGet
方式
apiVersion: v1
kind: Pod
metadata:
name: lifecycle
spec:
containers:
- name: lifecycle
image: registry.cn-hangzhou.aliyuncs.com/bolawen/nginx:stable-otel-linux-arm64
lifecycle:
preStop:
httpGet:
path: /shutdown
port: 8080
ports:
- containerPort: 80
2.2 场景
三、postStart
postStart
:在容器启动后立即调用。容器已经创建并准备运行,但还没有开始处理请求或进入其主循环。因此, postStart
钩子可用于在应用程序正式启动前执行初始化任务,如注册服务、生成初始配置文件、检查依赖的服务状态等。
3.1 语法
exec
方式:
apiVersion: v1
kind: Pod
metadata:
name: lifecycle
spec:
containers:
- name: lifecycle
image: registry.cn-hangzhou.aliyuncs.com/bolawen/nginx:stable-otel-linux-arm64
lifecycle:
postStart:
exec:
command: ["/bin/sh", "-c", "echo Hello from the postStart handler > /usr/share/message"]
ports:
- containerPort: 80
httpGet
方式
apiVersion: v1
kind: Pod
metadata:
name: lifecycle
spec:
containers:
- name: lifecycle
image: registry.cn-hangzhou.aliyuncs.com/bolawen/nginx:stable-otel-linux-arm64
lifecycle:
postStart:
httpGet:
path: /shutdown
port: 8080
ports:
- containerPort: 80