pod生命周期细节记录

栏目: 编程工具 · 发布时间: 7年前

pod生命周期细节记录

  • pod的生命周期
    • 迁移:无状态:新pod会有新的ip地址和主机名,stateful:保证一样的主机名和持久化状态,当然pod ip还是发生了改变。不建议是用ip构建应用关系,如果使用主机名构建关系,请使用statufulset。
    • 非持久数据,pod迁移后,数据指定会丢失。因为,新的容器会启动一个全新的可写入层。
    • 保存持久数据到pv卷中。
    • 多容器pod,如果某个容器启动失败,会一直重启。
  • pod启动顺序
    • init容器
      • 初始化容器,意味着向容器的存储卷写入数据,然后将存储卷挂载到主容器上。
      • pod可以拥有任意数量的init容器,init顺序执行。最后一个执行完成后,才启动主容器。
      • initContainers:
          - name: init
            image: busybox
            command:
              - sh
              - -c
              - 'while true; do echo "Waiting for fortune service to come up...";'
      • 合理使用就绪探针(Readiness)
  • 生命周期钩子
    • 启动后钩子
      • 【与主进程并行运行】
    • 停止前钩子
      • 先执行钩子,并在钩子执行完成后,向容器发送SIGTERM信号。如果没有优雅终止,则会被杀死。
      • 不管执行成功与否,容器都会终止,如果未成功则告警。
      • 需要注意容器:如何启动,使用ENTRYPOINT [“/mycommand”],这样进程将是容器主进程,而不是先启动一个 shell 作为主进程。
  • pod关闭
    • 触发:API服务器删除pod对象触发的。
    • 当API服务器接收到HTTP DELETE请求后,pod设置一个deletionTimestamp值,拥有deletionTimestamp的pod 开始停止。
    • kubelet接到终止信息,开始终止pod中的每一个容器。kubelet会给每个容器一定的时间优雅地停止。这个时间叫做终止宽限期。
    • 流程:
      • 执行停止前钩子,等待它执行完毕
      • 向容器的主进程发送SIGTERM信号
      • 等待容器优雅关闭或者等待终止宽限期超时
      • 如果容器没有优雅关闭,使用SIGKILL信号强制终止进程
    • 设置终止宽限期
      • spec.terminationGracePeriod,默认为30s
      • 命令:kubectl delete po mypod –grace-period=5
      • 强制:kubectl delete po mypod –grace-period=0 –force
  • 如何妥善处理所有连接
    • 开始时:理解服务和服务端点的工作原理
      • pod启动,pod ip写入服务端点给服务。定义容器 就绪指针 ,保证就绪后在接收请求。
    • 结束时:已接受未处理完请求,HTTP长连接。
      • 回顾一下:API服务器接收到删除pod的请求之后,它首先修改etcd中的状态并把删除事件通知给观察者。其中两个观察者:kubelet和端点控制器(Endpoint Controller)。这两个事情并行。
        • A事件:kubelet接收到pod终止通知->初始化关闭动作序列(执行停止钩子,发送SIGTERM信号,等待过期时间,如果超时SIGKILL杀死容器),如果应用理解停止接收请求,则客户端会返回Connection Refused错误。
        • pod生命周期细节记录
        • B事件:当 端点控制器 接收到pod要被删除的通知时,它从所有的pod所在的服务中移除这个pod的服务端点。它通过向API服务器发送rest请求来修改EndpointAPI对象。然后api会通知所有的客户端关注这个endpoint对象,其中一些观察者都是运行在工作节点上的 kube-proxy 服务。每个kube-proxy服务都会在自己的节点上更新iptables规则。以阻止新的连接转发到停止的pod上。一个重要细节: 移除iptables规则对已存在的连接没有影响 。已经连接的请求仍然可以发送额外请求。
        • 问题:如果SIGTERM在iptables规则修改之前到达,这是请求到来后,就会报:连接拒绝类的错误。
        • 执行时间线「关注」
        • pod生命周期细节记录
        • 解决办法:无解,唯一办法是给于kube-proxy足够长的时间完成它的工作。增大关闭超时时间,然后prestop做一些事情,提前优雅关闭。延迟,然后局部解决问题。
          • 等待几秒,然后停止接收新的连接
          • 关闭所有没有请求的长连接
          • 等待所有的请求都完成
          • 关闭应用
          • pod生命周期细节记录
          • pod生命周期细节记录

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Learning Processing

Learning Processing

Daniel Shiffman / Morgan Kaufmann / 2008-08-15 / USD 49.95

Book Description Teaches graphic artists the fundamentals of computer programming within a visual playground! Product Description This book introduces programming concepts in the context of c......一起来看看 《Learning Processing》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具