参考:

k8s使用pod hook钩子函数

0、如果没有设置钩子,pod如何删除

给pod里的每个容器中pid为1的进程发送 kill -9 (SIGTERM) 信号,

1、postStart

这个钩子在创建容器之后立即执行。但是,并不能保证钩子在容器本身的初始命令(ENTRYPOINT)之前执行。主要用于资源部署、环境准备等。
不过需要注意的是如果钩子花费实践过长以至于不能运行或者挂起,容器将不能达到Running状态。

apiVersion: v1
kind: Pod
metadata:
  name: start-hook
  labels:
    app: test
spec:
  containers:
  - name: start-hook
    image: nginx
    ports:
    - name: nginx-port
      containerPort: 80
    lifecycle:
      postStart:
        exec:
          command: ["/bin/bash", "-c", "echo before running> /postStart.txt"]

2、preStop

在容器终止之前立即调用此钩子。它是阻塞的,同时也是同步的,所以只有此钩子执行完后,才会执行删除容器的操作
主要用于优雅关闭应用程序、通知其他系统等。如果钩子在执行期间挂起,Pod阶段将停留在Running状态并且不会达到failed状态

apiVersion: v1
kind: Pod
metadata:
  name: stop-hook
  labels:
    app: test
spec:
  containers:
  - name: stop-hook
    image: nginx
    ports:
    - name: nginx-port
      containerPort: 80
    lifecycle:
      preStop:
        exec:
          command: ["/usr/sbin/nginx","-s", "quit"]