速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

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:523897

评论

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

Python时区转换的两种方式

红毛丹

Python 6月月更

『Three.js』起飞!

德育处主任

JavaScript canvas 前端可视化 three.js 6月月更

InfoQ 极客传媒 15 周年庆征文|Socket请求和Http请求特点、区别及适用场景

No Silver Bullet

HTTP请求 6月月更 InfoQ极客传媒15周年庆 Socket请求

ADB 日志抓取

甜甜的白桃

android adb APK 6月月更

只需八步将小程序一键打包生成App

Geek_99967b

小程序 小程序转app

漫谈测试覆盖率

老张

软件测试 质量保障 质量度量

C#入门系列(十) -- 一维数组

陈言必行

C# 6月月更

悬赏任务源码开发设计构建时,要留意哪些事项

开源直播系统源码

源码 软件开发 直播系统 悬赏任务源码

SAP 云平台多目标应用 Multi-Target Application 的开发技术介绍

汪子熙

云原生 Cloud SAP CloudFoundry 6月月更

Google搜索为什么不能无限分页?

蝉沐风

elasticsearch 深度分页

NFT铸造交易平台开发市场详情

开发微hkkf5566

流程测试支持批量参数导入,测试效率直接拉满!

Xd

数据库 后端 接口测试 测试工具

运算符 (第二天)

Jason199

运算符 js 6月月更

MySql事务

工程师日月

6月月更

python小知识-python作用域和闭包

AIWeker

Python python小知识

Vue中created和mounted的区别

devpoint

Vue Vue3 InfoQ极客传媒15周年庆

SpringBoot应用使用自定义的ApplicationContext实现类

程序员欣宸

Java spring springboot Spring Framework 6月月更

互联网公司研发效能团队为啥必须独立?何时独立?

laofo

互联网 DevOps cicd 研发效能 工程效率

HPCA名人堂成员蒋晓维博士,任职大禹智芯首席科学家

硬科技星球

人工智能 阿里巴巴 大禹智芯 蒋晓维

在线JSON转CSV工具

入门小站

工具

企业无忧 | Apipost私有化部署活动即将火热开启

Xd

后端 apipost 接口测试工具

Vue-4-模板语法-1

Python研究所

前端 6月月更

Django API 开发:视图设置和路由

宇宙之一粟

django 6月月更

知识图谱、图数据平台、图技术如何助力零售业飞速发展

GPU算力

图计算 图数据分析 图数据一体机

如何在使用 Flutter时切换应用时隐藏应用预览

坚果

6月月更

Neo 黑客松获奖名单揭晓,上万美金花落谁家?

TinTinLand

区块链

设计千万级学生管理系统的考试试卷存储方案

Fan

架构师实战营

InfoQ 极客传媒 15 周年庆征文|【Python技能树共建】异常捕获预处理

梦想橡皮擦

Python 6月月更 InfoQ极客传媒15周年庆

【高并发】关于乐观锁和悲观锁,蚂蚁金服面试官问了我这几个问题!!

冰河

并发编程 多线程 高并发 异步编程 6月月更

Linux编程_网页视频监控项目

DS小龙哥

6月月更

ES6新特性class类

大熊G

JavaScript 前端 6月月更

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