Pod的优雅上下线

打印 上一主题 下一主题

主题 804|帖子 804|积分 2412

Pod的优雅上下线依靠k8s的监控检查机制,以及 Pod lifecycle Hooks,通过这些kubernetes的机制,配合服务发现的流量管理机制,实现业务的优雅上下线。
基础概念

Pod 健康检查

Pod的健康状态由两类探针来检查:LivenessProbe和ReadinessProbe。

  • livenessProbe(存活探针)

    • 表明容器是否正在运行。
    • 如果存活探测失败,则 kubelet 会杀死容器,并且容器将受到其 重启策略的影响。
    • 如果容器不提供存活探针,则默认状态为 Success。

  • readinessProbe(就绪探针)

    • 表明容器是否可以正常继承请求。
    • 如果就绪探测失败,端点控制器将从与 Pod 匹配的所有 Service 的端点中删除该 Pod 的 IP 所在。
    • 初始延迟之前的就绪状态默认为 Failure。
    • 如果容器不提供就绪探针,则默认状态为 Success。

  • StartupProbe(这个 1.16 版本增加的)

    • 如果三个探针同时存在,先执行 StartupProbe 探针,其他两个探针将会被暂时禁用,直到 pod 满足 StartupProbe 探针配置的条件,其他 2 个探针启动,如果不满足按照规则重启容器。

两种探针的区别
总的来说 ReadinessProbe 和 LivenessProbe 是使用相同探测的方式,只是探测后对 Pod 的处置方式差别:

  • ReadinessProbe: 当检测失败后,将 Pod 的 IPort 从对应 Service 关联的 EndPoint 所在列表中删除。
  • LivenessProbe: 当检测失败后将杀死容器,并根据 Pod 的重启策略来决定作出对应的措施。
例子
  1. livenessProbe:
  2.   failureThreshold: 3
  3.   initialDelaySeconds: 600
  4.   periodSeconds: 5
  5.   successThreshold: 1
  6.   tcpSocket:
  7.     port: 7800
  8.   timeoutSeconds: 1
  9.   
  10. readinessProbe:
  11.   failureThreshold: 3
  12.   httpGet:
  13.     path: /ready
  14.     port: 7800
  15.     scheme: HTTP
  16.   periodSeconds: 5
  17.   successThreshold: 1
  18.   timeoutSeconds: 3
复制代码
Pod lifecycle Hooks



  • PostStart
    PostStart hook在容器启动的时候运行,但并不保证该hook肯定会比容器指定的ENTRYPOINT命令先运行。就是说PostStart和ENTRYPOINT都会在容器启动后运行,至于谁先运行,谁先竣事,并不肯定,是随机的。如果容器启动的时候,PostStart没有成功,容器不会处于running状态。
  • PreStop
    PreStop会在kubelet给Pod发送TERM信号之前执行。一般API Server会给kubelet发送竣事Pod的信号,或者Pod的liveness/startup探针失败,或别的原因导致Pod失败,kubelet会实验发送TERM信号给Pod里主进程。如果PreStop存在,kubelet则会优先启动PreStop,待PreStop竣事之后再发送TERM信号给Pod。但从API Server将Pod标记为Terminating状态开始,整个Pod停止时间不能凌驾terminationGracePeriodSeconds所设置的时间,如果凌驾,kubelet需要发送KILL信号给Pod所有的进程。
例子:
  1. lifecycle:
  2.       postStart:
  3.         exec:
  4.           command:
  5.           - /bin/sh
  6.           - -c
  7.           - ./online.sh
  8.       preStop:
  9.         exec:
  10.           command:
  11.           - /bin/sh
  12.           - -c
  13.           - ./offline.sh
复制代码
实现


优雅上线的实现:

  • Pod启动后,在服务治理框架(sidecar)中开始注册服务,服务注册中心收到服务治理框架的成功注册消息。
  • 同时服务注册中心管理系统会watch应用的Service的Endpoint,当Pod的IP出现时,服务治理框架会任务当前Pod状态ready可以上线服务了,当然Pod的IP出现在Endpoint列表中,本质也是就绪探针成功,这取决于服务治理框架的实现,一般服务治理框架需要提供探针健康检查的接口。
  • 服务注册中心会向上下游通知当前节点上线。
Pod下线:

  • Pod的IP从Endpoint列表中消失,服务治理框架会通知应用,应用需要下线服务。
  • Pod pre stop hook执行后,服务治理框架会通知服务注册中心,服务注册中心会广播此节点下线,停止路由新调用,同时pre stop hook还可以确保服务内已经获得的请求都处置惩罚完毕,Pod才可以被回收。
更多文章

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

罪恶克星

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表