PreStop 钩子

Prestop 的语义也很简单,在停止之前调用

但是在什么停止之前呢?容器停止之前?Pod销毁之前?

Prestop的准确调用时间是,在Kubernetes发出 SIGTERM信号之前调用

需要注意的是,SIGTERM信号是发送给Pod的,preStop钩子是容器的

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        lifecycle:
          preStop:
            exec:
              command:
              - sh
              - -c
              - sleep 30
      - name: u1
        command:
        - sleep
        - infinity
        image: ubuntu
        lifecycle:
          preStop:
            exec:
              command:
              - sh
              - -c
              - date "+%Y-%m-%d %H:%M:%S" >> /datetmp.txt && sleep 5
      - name: u2
        command:
        - sleep
        - infinity
        image: ubuntu
        lifecycle:
          preStop:
            exec:
              command:
              - sh
              - -c
              - date "+%Y-%m-%d %H:%M:%S" >> /datetmp.txt && sleep 10

脚本中 Nginx 阻塞30秒,最后应该是被 kill的

两个ubuntu容器阻塞时间有 5秒 的差值,

观察到的结果是,他们都是在最后30秒一起结束的,而preStop脚本则异步同时启动

Send a Message