k8s lifecycle——poststart和prestop

1、lifecycle的声明

    lifecycle:
      postStart:
        exec:
          command: ["/bin/sh", "-c", "sleep 100"]
      preStop:
        exec:
          command: ["/bin/sh", "-c", "sleep 100"]

在这里插入图片描述

2、poststart

容器创建后立即执行,主要用于资源部署、环境准备等

2.1 时序

当前container创建后发送钩子命令
发送后:

  • pod是pending状态
  • container是waiting状态
    执行完成后:
  • 执行成功:pod会变为running状态,这时会被分配IP
  • 执行失败:容器重启,如果poststart执行完之前container退出也会重启

2.2 command&args 与 postart 优先级

没有优先级关系,基本会同时执行

3、prestop

容器终止之前立即被调用。主要用于优雅关闭应用程序、通知其他系统等

3.1 时序

触发kill pod:

  • 执行prestop钩子
  • terminationGracePeriodSeconds计时
  • pod状态变为terminating
    在terminationGracePeriodSeconds时间内:prestop执行,执行完成后,向 pod 发送SIGTERM信号,pod将会进行业务进程停止过程;如果执行失败,event中会看到报错
    超出terminationGracePeriodSeconds时间:杀死容器

在某些极端情况下,Pod 被删除的一小段时间内,仍然可能有新连接被转发过来,因为 kubelet 与 kube-proxy 同时 watch 到 Pod 被删除,kubelet 有可能在 kube-proxy 同步完规则前就已停止容器,这时可能导致一些新的连接被转发到正在删除的 Pod,而通常情况下,当应用收到 SIGTERM 后都不再接受新连接,只保持存量连接继续处理,因此可能导致 Pod 删除的瞬间部分请求失败。

针对上述情况,可以利用 preStop 先 sleep 短暂时间,等待 kube-proxy 完成规则同步再开始停止容器内进程。
参考:https://www.tencentcloud.com/zh/document/product/457/42069

4、题外话:

command&args 与 dockerfile中entrypoint&cmd关系

一一对应,container中的优先级高于dockerfile中优先级

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值