QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

Netflix 如何处理其容器平台 Titus 上 的孤儿 Pod 问题

作者:Claudio Masolo

  • 2023-12-13
    北京
  • 本文字数:1347 字

    阅读完需:约 4 分钟

Netflix 如何处理其容器平台 Titus上 的孤儿 Pod 问题

Netflix 工程团队介绍了他们如何调查、识别和解决 Titus 的“孤儿”pod 问题,揭示了从内核恐慌到 Kubernetes(k8s)的整个过程,并最终为操作人员提供了可用于理解节点消失原因的工具。


Netflix Titus 是 Netflix 开发的容器管理平台,于 2018 年开源。按照设计,它主要是用于在云中大规模运行容器,并专门针对 Netflix 的动态、高流量大型流媒体服务的独特需求和挑战而量身定制。


虽然孤儿 pod 在系统中占少数,但对批处理用户来说是一个很大的问题,因为他们会面临不确定性,缺少明确的返回代码可以指导他们做重试决策。孤儿 pod 是由于底层 Kubernetes Node 对象消失造成的。当一个节点消失时,将触发一个垃圾收集(GC)进程,删除相关的 pod。为了增强用户体验,Titus 使用了一个自定义控制器来维护 pod 和 Node 对象的历史记录,以保证信息透明度。然而,由于对于丢失原因缺乏令人满意的解释,他们决定对根本原因做进一步调查。


Node 可能因为各种原因消失,尤其是在云环境中。通常,云供应商会使用 Kubernetes 云控制器来检测底层服务器的丢失,并随后删除 Kubernetes 节点对象。然而,这并没有回答节点消失的关键问题。为了解决这个问题,Netflix 工程团队引入了一个注解来捕获终止原因,为理解节点消失的原因提供信息。


{     "apiVersion": "v1",     "kind": "pod",     "metadata": {          "annotations": {               "pod.titus.netflix.com/pod-termination-reason": "Something really bad happened!",...
复制代码


添加“pod-termination-reason”注解是其中一个关键的步骤。通过将该注解加入垃圾收集器控制器,并将其包含在可能意外终止 pod 或节点的进程中,Titus 实现了一种可以统筹兼顾的方法。与修正状态不同,使用注解可以兼顾历史考量而保留 pod 的完整性。现在,Titus 可以捕获各种终止原因,如抢占作业、硬件故障、用户干预或内核恐慌,并提供人类可读的消息。


考虑到 Linux 内核出现故障时可用的选项有限,处理内核故障是一项独特的挑战。受 Google Spanner“最后喘息”概念(节点在致命故障时发送 UDP 数据包)的启发,Titus 使用 netconsole 模块实现了一个解决方案。配置 netconsole,将 Linux 内核设置为在内核恐慌时发送 UDP 数据包,从而使平台在发生灾难性故障时也能捕获重要的信息。


最后一步是连接到 Kubernetes 并实现一个控制器:


  1. 监听 netconsole UDP 数据包。

  2. 识别内核恐慌,并将它们与 k8s 节点对象关联起来。

  3. 标注并删除与恐慌节点关联的 pod。

  4. 标注并删除恐慌节点。


该进程可以确保在检测到内核恐慌时立即采取行动,而不必等待垃圾收集器进程。注解充当文档,使操作人员能够清楚地了解节点和相关 pod 发生了什么。



Titus 显示 pod 在一个内核恐慌的节点上丢失的过程


他们引入的措施不仅直接解决了孤儿 pod 的问题,还为操作人员提供了重要的观察工具。现在,Titus 用户可以收到有关作业失败原因的详细信息,即使在内核恐慌的情况下也是如此。虽然标记由于这种严重事件而导致的作业失败可能并不是最理想的方法,但令人满意的是,这种方法增强了可观察性以及主动处理和纠正内核恐慌的能力。由于所有这些改进,Titus 显著增强了其功能,确保工程师和批处理用户都能获得更流畅的体验。


原文链接:

https://www.infoq.com/news/2023/12/orphaned-pods-netflix-titus/


2023-12-13 12:523947

评论

发布
暂无评论
发现更多内容

线上问题处理案例:出乎意料的数据库连接池 | 京东云技术团队

京东科技开发者

数据库 GC 线上问题 数据库连接池 企业号 5 月 PK 榜

BSC智能链游戏链系统开发解析

Congge420

区块链追溯系统开发 元宇宙 元宇宙系统开发

软件测试/测试开发丨Python基本数据类型之字符串

测试人

Python 软件测试 自动化测试 测试开发

为什么我们拥有庞大的语言模型,而Vision Transformers的规模却很小?

Baihai IDP

人工智能 深度学习 计算机视觉 白海科技 Vision Transformers

关于PCBA元器件布局的重要性

华秋PCB

工具 元器件 PCB 布局 PCB设计

2023数字中国建设峰会:百度点石获开放群岛开源社区优秀共建单位

百度安全

【实践篇】领域驱动设计:DDD工程参考架构 | 京东云技术团队

京东科技开发者

领域驱动设计 DDD 企业号 5 月 PK 榜 工程架构

LED显示屏如何做到节能

Dylan

效率 能源 节能 LED显示屏

OpenHarmony社区运营报告(2023年4月)

OpenHarmony开发者

OpenHarmony

软件测试/测试开发丨Python控制流–分支判断和循环

测试人

Python 软件测试 自动化测试 测试开发

真香!阿里最新产出分布式进阶实战手册,涵盖分布式架构所有操作

Java你猿哥

架构 微服务架构 Spring Cloud Spring Boot ssm

深度学习基础入门篇[9.1]:卷积之标准卷积:卷积核/特征图/卷积计算、填充、感受视野、多通道输入输出、卷积优势和应用案例讲解

汀丶人工智能

人工智能 神经网络 深度学习 卷积网络 卷积相关算子

深度学习基础入门篇[9.2]:卷积之1*1 卷积(残差网络)、2D/3D卷积、转置卷积数学推导、应用实例

汀丶人工智能

人工智能 神经网络 深度学习 卷积网络 卷积核

【程序员日记】——从业务编排到低代码 | 京东云技术团队

京东科技开发者

低代码 业务 企业号 5 月 PK 榜 业务编排

火山引擎DataTester:小改动带来大收益,A/B实验助力幸福里APP精准优化

字节跳动数据平台

ab测试 A/B 测试

硬核!互联网资深大佬手码高并发编程速成笔记(2023版)限时开源

做梦都在改BUG

Java 并发编程 高并发

看完这篇,DWS故障修复不再愁

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 5 月 PK 榜

rt下降40%?程序并行优化六步法 | 京东云技术团队

京东科技开发者

性能优化 异步编程 企业号 5 月 PK 榜 多线程优化 并发框架

面试官:你能和我说一下 CMS 垃圾回收器吗?

Java你猿哥

算法 CMS JVM 垃圾回收器 垃圾收集器

2023语言与智能技术竞赛开辟“双赛道”:寻找“全民测评官”,探索AI多模态能力

飞桨PaddlePaddle

TF游戏Ai智能系统开发

Congge420

系统开发 区块链、 智能运维AIOps

聊聊 万亿流量场景下的负载均衡实践

Java你猿哥

负载均衡 ssm 高并发 DNS 负载均衡架构

为什么MySQL单表不能超过2000万行?

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 5 月 PK 榜

Seata 的可观测实践

阿里巴巴云原生

阿里云 云原生 seata

刷爆LeetCode!字节技术官亲码算法面试进阶神技太香了

做梦都在改BUG

Java 数据结构 算法 LeetCode

用写代码的方式画图-试下PlantUML吧 | 京东云技术团队

京东科技开发者

开发工具 PlantUML 画图软件 企业号 5 月 PK 榜

如何使用、部署 Auto-GPT?系统开发技术分析

Congge420

系统开发 区块链、 autogpt

IPQ8072 or IPQ8072A with the QCN9074/9024 chipset / well-suited for high-end routers.

Cindy-wallys

IPQ8072

Wallys miniPCIe wlan modules/ QCA9880 /2.4G&5G

Cindy-wallys

QCA9880

Netflix 如何处理其容器平台 Titus上 的孤儿 Pod 问题_云原生_InfoQ精选文章