详情页标题前

腾讯云容器服务Service 优雅停机同尘科技

详情页1

简介

基于接入层直连 Pod 的场景,当后端进行滚动更新或后端 Pod 被删除时,如果直接将 Pod 从 LB 的后端摘除,则无法处理 Pod 已接收但还未处理的请求。
特别是长链接的场景,例如会议业务,如果直接更新或删除工作负载的 Pod,此时会议会直接中断。

应用场景

更新工作负载时,Pod 的优雅退出,使客户端不会感受到更新时产生的抖动和错误。当 Pod 需要被删除时,Pod 能够处理完已接受到的请求,此时入流量关闭,但出流量仍能走通。直到处理完所有已有请求和 Pod 真正删除时,出入流量才进行关闭。注意仅针对 直连场景 生效,请检查您的集群是否支持直连模式。

操作步骤

步骤1:使用 Annotation 标明使用优雅停机

以下为使用 Annotation 标明使用优雅停机示例,完整 Service Annotation 说明可参见 Service Annotation 说明。

kind: ServiceapiVersion: v1metadata:   annotations:     service.cloud.tencent.com/direct-access: "true" ## 开启直连 Pod 模式    service.cloud.tencent.com/enable-grace-shutdown: "true"  # 表示使用优雅停机  name: my-servicespec:   selector:     app: MyApp

步骤2:使用 preStop 和 terminationGracePeriodSeconds

步骤2为在需要优雅停机的工作负载里配合使用 preStop 和 terminationGracePeriodSeconds。

容器终止流程

以下为容器在 Kubernetes 环境中的终止流程:1. Pod 被删除,此时 Pod 里有 DeletionTimestamp,且状态置为 Terminating。此时调整 CLB 到该 Pod 的权重为 0。2. kube-proxy 更新转发规则,将 Pod 从 service 的 endpoint 列表中摘除掉,新的流量不再转发到该 Pod。3. 如果 Pod 配置了 preStop Hook ,将会执行。4. kubelet 将对 Pod 中各个 container 发送 SIGTERM 信号,以通知容器进程开始优雅停止。5. 等待容器进程完全停止,如果在 terminationGracePeriodSeconds 内 (默认30s) 还未完全停止,将发送 SIGKILL 信号强制停止进程。6. 所有容器进程终止,清理 Pod 资源。

具体操作步骤

1. 使用 preStop要实现优雅终止,务必在业务代码里处理 SIGTERM 信号。主要逻辑是不接受新的流量进入,继续处理存量流量,所有连接全部断开才退出,了解更多可参见 示例。
若您的业务代码中未处理 SIGTERM 信号,或者您无法控制使用的第三方库或系统来增加优雅终止的逻辑,也可以尝试为 Pod 配置 preStop,在其实现优雅终止的逻辑,示例如下:

apiVersion: v1kind: Podmetadata:   name: lifecycle-demospec:   containers:   - name: lifecycle-demo-container    image: nginx    lifecycle:       preStop:         exec:           command:           - /clean.sh...

更多关于 preStop 的配置请参见 Kubernetes API 文档。在某些极端情况下,Pod 被删除的一小段时间内,仍然可能有新连接被转发过来,因为 kubelet 与 kube-proxy 同时 watch 到 Pod 被删除,kubelet 有可能在 kube-proxy 同步完规则前就已经停止容器,这时可能导致一些新的连接被转发到正在删除的 Pod,而通常情况下,当应用受到 SIGTERM 后都不再接受新连接,只保持存量连接继续处理,因此可能导致 Pod 删除的瞬间部分请求失败。针对上述情况,可以利用 preStop 先 sleep 短暂时间,等待 kube-proxy 完成规则同步再开始停止容器内进程。示例如下:

apiVersion: v1kind: Podmetadata:   name: lifecycle-demospec:   containers:   - name: lifecycle-demo-container    image: nginx    lifecycle:       preStop:         exec:           command:           - sleep          - 5s 

2. 使用 terminationGracePeriodSeconds 调整优雅时长
如果需要优雅终止时间较长 (preStop + 业务进程停止可能超过30s),可根据实际情况自定义 terminationGracePeriodSeconds,避免过早的被 SIGKILL 停止,示例如下:

apiVersion: v1kind: Podmetadata:   name: grace-demospec:   terminationGracePeriodSeconds: 60 # 优雅停机默认30s,您可以设置更长的时间  containers:   - name: lifecycle-demo-container    image: nginx    lifecycle:       preStop:         exec:           command:           - sleep          - 5s...

相关能力

优雅停机只是在 Pod 删除时,才把 CLB 后端的权重置为 0。若 Pod 在运行的过程中,出现了不健康的情况,此时将该后端的权重置为 0,可以减少服务不可用的风险。
您可以使用 Annotation:service.cloud.tencent.com/enable-grace-shutdown-tkex: "true" 实现这样优雅退出的能力。
该 Annotation 会根据 Endpoint 对象中 endpoints 是否 not-ready,将 not-ready 的 CLB 后端权重置为 0。

相关文档

故障处理:Nginx Ingress Controller 后端解绑不优雅的问题
容器服务官网1折活动,限时活动,即将结束,速速收藏
同尘科技腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利。同意关联立享优惠

转转请注明出处:https://www.yunxiaoer.com/147500.html

(0)
上一篇 2023年12月9日 下午12:40
下一篇 2023年12月9日 下午12:40
详情页2

相关推荐

  • 腾讯云对象存储拼接任务接口

    简介 本文档提供关于提交拼接任务的 API 概览和 SDK 示例代码。 API 操作描述 提交拼接任务 提交一个拼接任务 查询任务结果 查询指定的任务 提交拼接任务 功能说明 用于提交一个拼接任务。 方法原型 public Guzzle\Service\Resource\Model createMediaConcatJobs(array $args …

    腾讯云 2023年12月9日
  • Serverless 应用引擎的php工程已经部署上去了,静态资源样式无法正常加载要怎么配置?-云小二-阿里云

    Serverless 应用引擎的php工程已经部署上去了也能正常访问数据库,但是静态资源样式无法正常加载要怎么配置? 以下为热心网友提供的参考意见 静态自研可以放在OSS,创建部署应用的时候通过挂载的方式使用。此回答整理自钉群“【3群】Serverless应用引擎(SAE)用户群”

    阿里云 2023年12月13日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 腾讯云云函数(SCF)固定公网出口 IP-云淘科技

    操作场景 当用户在云函数中访问数据库、微信公众号的 API 接口或其他第三方的服务时,可以使用云函数的固定公网出口 IP 功能,实现云函数网络配置的控制与管理。云函数的固定公网出口 IP 功能具有以下特点:当云函数启用固定公网出口 IP 功能后,该云函数将会获得一个随机分配的弹性公网 IP。该云函数访问公网的流量,将会基于该弹性公网 IP 统一进行转发。当在…

    2023年12月9日
  • 阿里云负载均衡ListLoadBalancers – 查询负载均衡-云淘科技

    查询指定地域的负载均衡,支持根据条件过滤。 调试 您可以在OpenAPI Explorer中直接运行该接口,免去您计算签名的困扰。运行成功后,OpenAPI Explorer可以自动生成SDK代码示例。 调试调试授权信息下表是API对应的授权信息,可以在RAM权限策略语句的Action元素中使用,用来给RAM用户或RAM角色授予调用此API的权限。具体说明如…

    阿里云负载均衡 2023年12月10日
  • 腾讯云云点播时移回看

    简介 时移回看依托直播录制能力,结合直播时移和点播的加速分发,实现在直播过程中进行回看的功能,用户可以实时选择从开播后的某个过往时间点开始进行回看,从而达到播放之前直播内容的效果。常用于赛事直播中的精彩片段回看,用户可以直接拖动进度条,进行回看,而不必等到直播结束,回看过程中直播流保持不变,用户可以在回看过程中切回直播。 适用场景 场景 说明 教育直播 在线…

    腾讯云 2023年12月9日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。