写点什么

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

评论

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

开源移动核心网Magma架构设计启示

俞凡

架构 网络 通信

JSON.stringify() 的 5 使用场景

devpoint

JavaScript 前端开发 JSON格式化

水果软件2024FL Studio中文语言版本下载

茶色酒

FL Studio FL Studio 21

复习前端:前端安全

devpoint

CSRF xss攻击 前端安全

架构误区系列12:一切皆依赖云平台

agnostic

云计算 部署架构

极客时间运维进阶训练营第十二周作业

9527

【Linux技术专题系列】「必备基础知识」一起探索和实践sftp配置之密钥方式登录

码界西柚

Linux SSH SSH工具 sftp

Studio One2024旗舰级DAW的跨版本升级

茶色酒

Studio One 5 Studio One2023

如何快速优雅的用Know Streaming创建Topic

石臻臻的杂货铺

获取 topic等信息 后端、

精华推荐 | 【JVM深层系列】「GC底层调优系列」一文带你彻底加强夯实底层原理之GC垃圾回收技术的分析指南(GC原理透析)

码界西柚

Java JVM JVM原理 2023

CleanMyMac X2024汉化版安装包新增

茶色酒

CleanMyMac X CleanMyMac X2023

2022年终总结-无所吊谓

wood

年终总结 稳定 开心 普通的一年

万字长文搞懂产品模式和项目模式

俞凡

团队管理

CleanMyMacX4.12.2最新版本更新下载

茶色酒

CleanMyMacX

【Redis技术专区】「优化案例」谈谈使用Redis慢查询日志以及Redis慢查询分析指南

码界西柚

redis 性能调优 慢查询

会声会影2023和谐版本补丁包下载

茶色酒

会声会影 会声会影2023

我们需要怎样的低代码平台

agnostic

低代码

Kratos微服务框架API工程化指南

golang gRPC microservice Kratos 工程化

FPGA:硬件描述语言简介

timerring

FPGA

工作这么多年,我总结的数据传输对象 (DTO) 的最佳实践

JAVA旭阳

Java 架构

技术管理者如何获得下属的认同?

石云升

极客时间 1月月更 技术领导力实战笔记

关于环境变量配置的思考总结

timerring

Go 环境变量

【PHP】英文博客专栏PHP快速入门个人笔记

懒时小窝

php

从任务分配角度来看管理

石云升

极客时间 1月月更 技术领导力实战笔记

复习前端:JavaScript V8 引擎机制

devpoint

chrome JIT V8

Portraiture2024汉化版磨皮插件下载

茶色酒

Portraiture2023 Portraiture

你知道哈希算法,但你知道一致性哈希吗?

JAVA旭阳

Java 架构

技术如何分担产品之忧?

石云升

极客时间 1月月更 技术领导力实战笔记

Python 内置界面开发框架 Tkinter入门篇 甲

eng八戒

Python GUI tkinter

复习前端:前端应掌握的网络知识

devpoint

OSI七层协议 http2 HTTPS协议加密

架构误区系列11:无聊的架构归一

agnostic

架构治理

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