Linkerd 2.10(Step by Step)—优雅的 Pod 关闭

简介: Linkerd 2.10(Step by Step)—优雅的 Pod 关闭

当 Kubernetes 开始终止一个 Pod 时,它首先向该 Pod 中的所有容器发送一个 TERM 信号。当 Linkerd 代理 sidecar 收到此信号时, 它将立即开始正常关闭, 拒绝所有新请求并允许现有请求在关闭之前完成。


这意味着如果 Pod 的主容器在代理收到 TERM 信号后尝试进行任何新的网络调用, 这些网络调用将失败。这也会对终止 Pod 的客户端和作业资源(job resources)产生影响。


客户端更新缓慢



在 Kubernetes 终止一个 Pod 之前,它首先从该 Pod 所属的任何服务的端点资源中删除该 Pod。这意味着该服务的客户端应该在终止之前停止向 Pod 发送流量。但是,某些客户端接收端点更新的速度可能很慢, 并且可能会在 Pod 的代理已经收到 TERM 信号并开始正常关闭后尝试向终止 Pod 发送请求。这些请求将失败。


为了缓解这种情况,使用 --wait-before-exit-seconds 标志 和 linkerd inject 来使用 preStop 钩子将 Linkerd 代理对 TERM 信号的处理延迟给定的秒数。在开始正常关闭之前,此延迟为慢速客户端提供了额外的时间来接收端点更新。为了从该选项中获得最大收益,主容器应该有自己的 preStop 钩子, 其中的 sleep 命令的周期小于为代理 sidecar 设置的周期。并且它们都不能大于为整个 pod 配置的 terminationGracePeriodSeconds

例如,


# application container
        lifecycle:
          preStop:
            exec:
              command:
                - /bin/bash
                - -c
                - sleep 20
    # for entire pod
    terminationGracePeriodSeconds: 160


Job Resources



作为 job resource 一部分的 Pod 会一直运行,直到 Pod 中的所有容器都完成。但是,Linkerd 代理容器会持续运行,直到收到 TERM 信号。这意味着已注入的 job pods 将继续运行,即使主容器已完成。


已经提议更好地支持 sidecar containers in Kubernetes, Linkerd 将在该支持可用时利用该支持。

目录
打赏
0
0
0
0
27
分享
相关文章
博主日常工作中使用的shell脚本分享
博主日常工作中使用的shell脚本分享
259 0
博主日常工作中使用的shell脚本分享
灵码智能体体验之路
本文记录了使用智能开发工具的入门体验。从VS Code更新、安装MCP插件到解决依赖问题(如Node.js),再到配置智能体生成代码,整个过程详细描述了遇到的问题与解决方案。例如,插件报错需安装Node.js、模型选择不当影响执行等。尽管存在一些不便,比如手动安装依赖和配置入口难找,但智能体的强大功能令人印象深刻,能够通过交互生成代码、调试并运行,甚至支持截图提问解决问题,极大地提升了开发效率,整体体验令人满意!
3186 16
实战 | Qwen2.5-VL模型目标检测(Grounding)任务领域微调教程
在目标检测领域,众多神经网络模型早已凭借其卓越的性能,实现了精准的目标检测与目标分割效果。然而,随着多模态模型的崛起,其在图像分析方面展现出的非凡能力,为该领域带来了新的机遇。多模态模型不仅能够深入理解图像内容,还能将这种理解转化为文本形式输出,极大地拓展了其应用场景。
562 29
OkHttp源码解析(小白必看,建议收藏)
本文详细解析了OkHttp3的源码及其实现机制,适合初学者学习。文章从Request与Response结构、HTTPS握手过程、响应码含义、Socket概念到责任链模式的应用逐一讲解。重点分析了OkHttp的工作流程:通过Call对象的enqueue()或execute()方法发起请求,核心是getResponseWithInterceptorChain(),利用拦截器链处理请求,包括用户自定义拦截器、重试、桥接、缓存、连接等步骤。最后还探讨了Dispatcher的任务调度机制。
217 13
Spring AI Alibaba + Nacos 动态 MCP Server 代理方案
本文介绍如何通过 Spring AI Alibaba MCP 模块,基于 Nacos 的服务注册信息,实现将现有服务无缝转换为 MCP 协议的服务。方案无需修改原有业务代码,支持动态新增或删除 MCP 服务。
430 36
JManus - 面向 Java 开发者的开源通用智能体
JManus 是一个以 Java 为核心、完全开源的 OpenManus 实现,隶属于 Spring AI Alibaba 项目。它旨在让 Java 程序员更便捷地使用 AI 技术,支持多 Agent 框架、网页配置 Agent、MCP 协议和 PLAN-ACT 模式。项目在 GitHub 上已获近 3k star,可集成多个大模型如 Claude 3.5 和 Qwen3。开发者可通过 IDE 或 Maven 快速运行项目,体验智能问答与工具调用功能。欢迎参与开源共建,推动通用 AI Agent 框架发展。
2157 62
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等