mightybruce
198 天前
业务代码角度
任务状态和任务信息保存在 DB 中, 修改代码逻辑,在服务里面加一些请求处理,服务增加优雅关闭处理,能够处理 sigterm 的信号。
从 k8s 角度
使用自定义钩子
Deployment 资源支持以下几种钩子:
PostStart 钩子:在容器启动后立即执行。这通常用于执行容器启动后的初始化任务,例如等待其他服务启动、注册服务到服务发现系统等。
PreStop 钩子:在容器关闭之前执行。这通常用于执行容器关闭前的清理任务,例如保存数据、关闭连接、发送信号给其他进程等。
在关闭之前执行一些持久化操作
比如 可以执行一个 HTTP GET 请求 或者 exec 命令,并且它们执行是阻塞的,可以利用这个特性来做优雅停止。
调用 HTTP GET
spec:
contaienrs:
- name: my-container
lifecycle:
preStop:
httpGet:
path: "/stop"
port: 8080
scheme: "HTTP"
修改 terminationGracePeriodSeconds , 将它调整到合适的值,不要过大。
terminationGracePeriodSeconds 等于 服务优雅退出超时时间和 preStopHook 之和