容器生命周期钩子

容器生命周期钩子(Container Lifecycle Hooks)监听容器生命周期的特定事件,并在事件发生时执行已注册的回调函数

支持两种钩子:

  • postStart: 容器创建后立即执行,注意由于是异步执行,它无法保证一定在 ENTRYPOINT 之前运行。如果失败,容器会被杀死,并根据 RestartPolicy 决定是 否重启

  • preStop:容器终止前执行,常用于资源清理。执行完成之后容器将成功终止,如果失败,容器同样也会被杀死。在其完成之前 会阻塞删除容器的操作

钩子的回调函数支持三种方式定义动作

  • exec:在容器内执行命令,如果命令的退出状态码是 0 表示执行成功,否则表示失败

...
  lifecycle:
    postStart:
      exec:
        command:
        - cat
        - /tmp/healthy
...        
  • httpGet:向指定URL发起GET请求,如果返回的HTTP状态码在 [200, 400) 之间表示请求成功,否则表示失败

...
  lifecycle:
    postStart:
      httpGet:
        path: /healthcheck   #URI地址
        port: 8800  # 端口号
        host: localhost # 主机地址
        scheme: HTTP   # 支持的协议,http或https

...
  • TCPSocket:在容器尝试访问指定的socket

...
  lifecycle:
    postStart:
      tcpSocket:
        port: 8080
...

示例

spec:
  containers:
  - name: demo
    image: nginx
    lifecycle:
      postStart:
        exec:
          command: ["/bin/sh", "-c", "echo Hello  > /usr/share/message"]
      preStop:
        exec:
          command: ["/usr/sbin/nginx","-s","quit"]

Pod的终止过程

删除Pod => Pod被标记为Terminating状态 => Service移除该Pod的endpoint => kubelet筛别Terminating状态的pod,执行pod的preStop钩子 => 如果执行preStop超时(grace period) ,kubelet发送SIGTERM并等待2秒 => 

文章作者: 鲜花的主人
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 爱吃可爱多
Kubernetes Kubernetes
喜欢就支持一下吧
打赏
微信 微信
支付宝 支付宝