pod生命周期细节记录

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

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生命周期细节记录

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

查看所有标签

猜你喜欢:

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

Network Algorithmics,

Network Algorithmics,

George Varghese / Morgan Kaufmann / 2004-12-29 / USD 75.95

In designing a network device, you make dozens of decisions that affect the speed with which it will perform - sometimes for better, but sometimes for worse. "Network Algorithmics" provides a complete......一起来看看 《Network Algorithmics,》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

URL 编码/解码
URL 编码/解码

URL 编码/解码