引言:为什么SRE依然是2026年最值得加入的技术岗位?
在AI大模型爆发、云原生全面普及的2026年,技术行业的格局发生了翻天覆地的变化。许多曾经热门的岗位面临AI替代的风险,但Linux运维与SRE(站点可靠性工程) 却逆势而上,成为互联网、金融、云计算等行业最紧缺、最稳定、越老越吃香的核心技术岗位之一。
根据最新的行业报告,2026年国内SRE人才缺口已突破50万,一线城市资深SRE工程师的年薪普遍在50-150万之间,部分头部企业的专家级SRE年薪更是超过200万。更重要的是,与其他技术岗位不同,SRE岗位的经验价值随着时间呈指数级增长,35岁危机在这个领域几乎不存在。
为什么SRE如此重要?因为无论技术如何迭代,系统稳定性永远是所有互联网服务的基石。从电商平台的秒杀活动到银行的核心交易系统,从大模型的推理服务到云计算的基础设施,每一个环节都离不开SRE工程师的保驾护航。在2026年,随着AI应用的大规模落地,系统的复杂度呈指数级上升,对SRE工程师的需求也达到了前所未有的高度。
本文将为你全面梳理2026年Linux运维/SRE面试的核心考点,从基础的Linux系统管理到前沿的云原生技术,从传统的故障排查到AI驱动的可观测性,覆盖初级到高级所有岗位的面试重点。无论你是刚入行的新人,还是准备跳槽的资深工程师,这篇文章都将成为你面试路上的最强指南。
一、Linux基础与系统管理:万变不离其宗的基本功
很多人认为在云原生时代,Linux基础已经不重要了。这是一个致命的误解。事实上,无论是Docker容器还是Kubernetes集群,本质上都是运行在Linux内核之上的。所有上层的复杂问题,最终都会回归到Linux系统层面。在面试中,Linux基础永远是第一道门槛,也是区分"只会用工具"和"真正懂原理"的关键。
1.1 inode:理解Linux文件系统的钥匙
几乎所有的运维面试都会问到inode的概念,但很少有人能真正理解其本质。inode不仅仅是存储文件元信息的数据结构,它更是Linux文件系统设计思想的核心体现。
深入理解:
- 文件名只是inode的别名,系统通过inode号识别文件。这就是为什么你可以在不关闭文件的情况下删除它——文件内容只有在inode引用计数为0时才会被真正删除。
- 硬链接和软链接的本质区别:硬链接是多个文件名指向同一个inode,软链接是一个独立的文件,其内容是另一个文件的路径。
- inode耗尽是一个非常常见的线上故障。当磁盘还有大量空间但无法创建新文件时,首先要检查的就是inode使用率:df -i。
面试高频考点:
- 为什么删除一个10GB的文件比删除10万个1KB的文件快得多?
- 如何找到占用inode最多的目录?
- 为什么硬链接不能跨文件系统?
1.2 进程管理:从状态模型到资源控制
进程是Linux系统的基本执行单元,理解进程的生命周期和资源管理是故障排查的基础。
深入理解:
- 进程的5种基本状态中,D状态(不可中断睡眠) 是最容易引发问题的。处于D状态的进程不能被任何信号杀死,只能通过重启系统或等待IO完成来解决。大量D状态进程通常意味着磁盘IO出现了严重问题。
- 僵尸进程的危害不在于占用内存,而在于占用PID。Linux系统的PID是有限的(默认32768),大量僵尸进程会导致系统无法创建新进程。
- 进程间通信(IPC)机制:管道、消息队列、共享内存、信号量、套接字。不同的IPC机制适用于不同的场景,了解它们的优缺点是系统设计的基础。
面试高频考点:
- 如何杀死一个处于D状态的进程?
- 什么是OOM Killer?它的工作原理是什么?如何调整进程的OOM优先级?
- 解释一下Linux的进程调度算法。
1.3 文件描述符:最容易被忽视的性能瓶颈
文件描述符(fd)是Linux内核为了高效管理已打开的文件所创建的索引。在高并发场景下,文件描述符耗尽是一个非常常见的故障。
深入理解:
- 每个进程都有自己的文件描述符表,默认限制是1024。对于高并发的网络服务来说,这个值远远不够。
- 系统全局的文件描述符上限由/proc/sys/fs/file-max控制,这个值通常是系统内存的10%左右。
- 除了普通文件,网络连接、管道、套接字等都会占用文件描述符。因此,一个高并发的Web服务器可能会打开数万个文件描述符。
面试高频考点:
- 如何临时和永久修改进程的文件描述符限制?
- 如何查看某个进程打开了哪些文件描述符?
- 为什么ulimit -n修改后不生效?可能的原因有哪些?
二、网络基础与服务:分布式系统的通信基石
在分布式系统时代,网络问题占所有线上故障的70%以上。一个优秀的SRE工程师必须具备扎实的网络基础,能够快速定位和解决各种网络问题。
2.1 TCP/IP协议栈:从三次握手到四次挥手
TCP协议是互联网的基础,也是面试中必考的内容。但面试官真正想考察的不是你能否背诵三次握手的过程,而是你能否理解TCP协议的设计思想,并运用这些知识解决实际问题。
深入理解:
- 三次握手的本质是双方确认彼此的发送和接收能力。如果只有两次握手,那么服务器无法确认客户端的接收能力,可能会建立无效的连接,浪费服务器资源。
- 四次挥手的本质是双方独立关闭连接。因为TCP是全双工的,每个方向的连接都需要单独关闭。
- TIME_WAIT状态是TCP协议中最容易引发问题的部分。主动关闭方会进入TIME_WAIT状态,等待2MSL(通常2分钟)后才释放连接。在高并发场景下,大量TIME_WAIT连接会耗尽系统的端口资源。
面试高频考点:
- 为什么TIME_WAIT状态需要等待2MSL?
- 什么是SYN洪水攻击?如何防御?
- TCP的拥塞控制算法有哪些?它们的工作原理是什么?
2.2 Nginx:高性能Web服务器与反向代理
Nginx是目前最流行的Web服务器和反向代理,几乎所有的互联网公司都在使用。Nginx的配置和调优是运维工程师的必备技能。
深入理解:
- Nginx的高性能源于其事件驱动的异步非阻塞架构。一个Nginx进程可以同时处理成千上万个连接,而不需要为每个连接创建一个新的进程或线程。
- Nginx的负载均衡策略不仅仅是简单的轮询。在实际应用中,需要根据后端服务的特点选择合适的负载均衡策略。例如,对于有状态的服务,应该使用ip_hash策略;对于响应时间差异较大的服务,应该使用fair策略。
- Nginx的性能调优是一个系统工程,涉及到内核参数调优、Nginx配置调优和应用层调优。
面试高频考点:
- Nginx和Apache的区别是什么?
- 如何配置Nginx的HTTPS?
- Nginx 502、503、504错误的区别是什么?如何排查?
2.3 DNS:互联网的电话簿
DNS是互联网的基础服务,但也是最容易被忽视的环节。很多看似复杂的网络问题,最终都归结为DNS问题。
深入理解:
- DNS的解析过程是递归查询和迭代查询的结合。本地DNS服务器向根域名服务器发送迭代查询,根域名服务器返回顶级域名服务器的地址,依此类推,直到找到目标域名的IP地址。
- DNS缓存是一把双刃剑。它可以提高解析速度,但也会导致DNS变更不能及时生效。了解各级DNS缓存的过期时间是非常重要的。
- DNS负载均衡是一种简单有效的负载均衡方式,但它也有很多局限性,例如不能根据后端服务器的健康状态动态调整。
面试高频考点:
- 什么是DNS污染?如何解决?
- A记录、CNAME记录、MX记录、TXT记录的作用是什么?
- 如何排查DNS解析问题?
三、故障排查与性能调优:SRE的核心竞争力
故障排查和性能调优是SRE工程师的核心工作,也是面试中最能体现个人能力的部分。面试官会通过真实的故障场景,考察你的分析问题和解决问题的能力。
3.1 系统负载过高:最常见的线上故障
系统负载过高是每个运维工程师都会遇到的问题。但很多人对load average这个指标存在误解,认为load average大于CPU核心数就一定是CPU负载高。
深入理解:
- load average是指单位时间内处于运行状态和不可中断睡眠状态的进程数。它不仅包括正在使用CPU的进程,还包括等待磁盘IO、网络IO的进程。
- 因此,load average高可能有三种原因:CPU负载高、内存负载高(导致频繁换页)、IO负载高。在排查时,首先要区分是哪种类型的负载高。
- 一个健康的系统,load average应该在CPU核心数的70%以下。如果长期超过这个值,就需要进行性能优化或扩容。
排查方法论:
3.2 磁盘IO性能调优:从硬件到应用
磁盘IO是系统性能的常见瓶颈,尤其是在数据库、日志系统等IO密集型应用中。
深入理解:
- 磁盘IO的性能指标包括:吞吐量(MB/s)、IOPS(每秒IO次数)、延迟(ms)。不同的应用对这些指标的要求不同。例如,数据库更关注IOPS和延迟,而备份系统更关注吞吐量。
- SSD和HDD的性能差异巨大。SSD的随机读写性能是HDD的几百倍,但顺序读写性能提升不大。因此,SSD特别适合随机读写密集的应用,如数据库。
- Linux的IO调度算法对磁盘性能有很大影响。对于SSD,应该使用noop或deadline调度算法;对于HDD,应该使用cfq调度算法。
调优方法论:
- 硬件层面:使用SSD替代HDD,使用RAID提高性能和可靠性。
- 文件系统层面:选择合适的文件系统(XFS适合大文件,ext4适合小文件),挂载时添加noatime、nodiratime参数。
- 内核参数层面:调整page cache大小和刷盘策略,调整IO调度算法。
- 应用层面:减少不必要的磁盘写入,使用内存缓存,批量写入数据。
3.3 网络性能调优:高并发系统的关键
在高并发系统中,网络性能往往是决定系统吞吐量的关键因素。
深入理解:
- TCP的滑动窗口机制是TCP流量控制的核心。滑动窗口的大小决定了发送方在没有收到确认的情况下可以发送的数据量。
- TCP的拥塞控制算法是TCP拥塞控制的核心。不同的拥塞控制算法适用于不同的网络环境。例如,BBR算法在高带宽长延迟的网络环境中表现更好。
- 连接池是提高网络性能的重要手段。通过复用连接,可以避免频繁建立和关闭连接的开销。
调优方法论:
- 调整内核参数:net.core.rmem_max、net.core.wmem_max、net.ipv4.tcp_rmem、net.ipv4.tcp_wmem等。
- 启用TCP BBR拥塞控制算法。
- 使用连接池复用连接。
- 优化应用层协议,减少网络传输量。
四、容器与Kubernetes:2026年绝对核心,所有岗位必问
在2026年,容器和Kubernetes已经成为云计算的事实标准。无论是初级运维还是高级SRE,Kubernetes都是面试中最重要的部分。可以说,不懂Kubernetes,就无法胜任现代运维工作。
4.1 Docker容器:从原理到实践
Docker是容器技术的代表,它彻底改变了软件的交付和部署方式。
深入理解:
- 容器的本质是Linux内核的Namespace和Cgroups。Namespace实现了资源隔离,Cgroups实现了资源限制。
- Docker镜像采用分层存储的设计,每一层都是只读的,容器在镜像的基础上添加了一个可写层。这种设计大大提高了镜像的分发效率和存储利用率。
- Dockerfile是构建镜像的脚本,编写高效的Dockerfile是容器化的基础。
面试高频考点:
- 容器和虚拟机的区别是什么?
- Docker镜像的构建过程是怎样的?
- 如何优化Docker镜像的大小?
4.2 Kubernetes核心概念:从Pod到Service
Kubernetes是一个开源的容器编排平台,它提供了容器的部署、调度、扩缩容、服务发现等功能。
深入理解:
- Pod是Kubernetes的最小调度单元。一个Pod可以包含多个容器,这些容器共享网络和存储资源。
- Service是Kubernetes的服务抽象,它为一组Pod提供了一个统一的访问入口。Service通过标签选择器选择后端Pod。
- Controller是Kubernetes的控制循环,它负责确保集群的实际状态与期望状态一致。常见的Controller包括Deployment、StatefulSet、DaemonSet等。
面试高频考点:
- Pod的生命周期是怎样的?
- Service的类型有哪些?它们的区别是什么?
- Deployment、StatefulSet、DaemonSet的适用场景分别是什么?
4.3 Kubernetes高级特性:从调度到安全
对于中高级岗位,面试官会深入考察Kubernetes的高级特性,如调度策略、存储管理、网络策略、安全机制等。
深入理解:
- Kubernetes的调度器通过过滤和打分两个阶段为Pod选择合适的节点。你可以通过节点亲和性、Pod亲和性、污点和容忍度来影响调度决策。
- Kubernetes的存储系统通过PV和PVC实现了存储的抽象。StorageClass实现了存储的动态供应。
- Kubernetes的网络策略允许你控制Pod之间的网络通信,提高集群的安全性。
- Kubernetes的RBAC(基于角色的访问控制)是集群安全的基础,它允许你精细地控制用户和服务账户的权限。
面试高频考点:
- 什么是污点和容忍度?它们的作用是什么?
- PV和PVC的生命周期是怎样的?
- 如何实现Kubernetes集群的高可用?
4.4 Kubernetes故障排查:从CrashLoopBackOff到节点宕机
Kubernetes集群的故障排查是SRE工程师的日常工作。面试官会通过常见的故障场景,考察你的Kubernetes运维能力。
常见故障及排查步骤:
- CrashLoopBackOff:容器反复崩溃重启。排查步骤:查看Pod事件、查看应用日志、查看上一次崩溃的日志。
- ImagePullBackOff:镜像拉取失败。排查步骤:检查镜像名称和标签是否正确、检查镜像仓库是否可访问、检查是否有拉取镜像的权限。
- Pending:Pod一直处于Pending状态。排查步骤:查看Pod事件、检查是否有足够的资源、检查是否有节点亲和性或污点的限制。
- 节点NotReady:节点状态为NotReady。排查步骤:查看节点事件、检查kubelet服务状态、检查节点资源使用情况、检查网络是否正常。
五、SRE核心概念与实践:从运维到可靠性工程
SRE不仅仅是一个岗位,更是一种工程文化和方法论。它将软件工程的思想应用于运维领域,通过自动化和数据驱动的方式保障系统的稳定性。
5.1 SLI/SLO/SLA:量化服务稳定性的标准
SLI/SLO/SLA是SRE的核心概念,它们将模糊的"系统稳定"转化为可量化、可衡量的指标。
深入理解:
- SLI(服务水平指标)是衡量服务性能的定量指标,如请求延迟、错误率、吞吐量。选择合适的SLI是非常重要的,它应该能够真实反映用户体验。
- SLO(服务水平目标)是服务在一定时间内需要达到的SLI目标值。SLO应该是现实可行的,同时也要有一定的挑战性。
- SLA(服务水平协议)是与用户签订的具有法律约束力的合同,规定了服务达不到SLO时的赔偿措施。SLO通常比SLA更严格,留有缓冲空间。
面试高频考点:
- 如何为一个Web服务选择合适的SLI?
- SLO的周期应该如何确定?
- 当SLO即将被突破时,应该采取哪些措施?
5.2 错误预算:平衡开发速度和系统稳定性
错误预算是SRE最伟大的发明之一,它解决了开发和运维之间长期存在的矛盾。
深入理解:
- 错误预算是服务在一个SLO周期内允许的不可用时间或错误请求数。例如,SLO为99.9%,则每月错误预算为43.2分钟。
- 错误预算的核心思想是:稳定性不是越高越好,而是刚刚好。过高的稳定性会牺牲开发速度,过低的稳定性会影响用户体验。
- 当错误预算充足时,可以快速发布新功能;当错误预算耗尽时,停止发布新功能,专注于稳定性改进。
面试高频考点:
- 错误预算的计算公式是什么?
- 如何使用错误预算进行决策?
- 错误预算耗尽后应该怎么办?
5.3 混沌工程:主动发现系统的薄弱环节
混沌工程是一种通过主动制造故障来验证系统韧性的方法。在复杂的分布式系统中,被动等待故障发生的代价是巨大的。混沌工程可以帮助我们在故障发生之前发现并解决问题。
深入理解:
- 混沌工程的核心理念是:故障是不可避免的,我们应该拥抱故障,而不是害怕故障。
- 混沌工程实验应该在受控环境中进行,从小范围开始,逐步扩大影响范围。
- 混沌工程的目标不是制造故障,而是发现系统的薄弱环节并加以改进。
典型混沌实验:
- 删除实例:模拟节点宕机,测试自动恢复能力。
- 延迟网络:模拟高延迟,验证服务降级逻辑。
- 网络分区:模拟网络故障,测试分布式系统一致性。
- 并发冲击:模拟突发流量,检查系统瓶颈。
- 资源耗尽:模拟CPU、内存、磁盘空间不足,测试系统容错能力。
5.4 故障处理最佳实践:从发现到复盘
故障处理是SRE工程师的核心工作。一个优秀的SRE工程师不仅能够快速解决故障,还能够从故障中学习,防止类似故障再次发生。
故障响应流程:
关键原则:
- 先恢复服务,再排查根因。
- 保留现场,便于事后分析。
- 建立清晰的故障升级流程。
- 编写详细的故障处理手册(Runbook)。
六、可观测性:2026年SRE的核心能力
在分布式系统时代,可观测性已经成为SRE工程师的核心能力。没有良好的可观测性,故障排查就像大海捞针。
6.1 可观测性的三大支柱:指标、日志、链路追踪
可观测性的三大支柱是指标、日志和链路追踪,它们从不同的角度反映了系统的状态。
深入理解:
- 指标(Metrics):数值型数据,可聚合和统计,如CPU使用率、请求QPS、错误率。指标适合用于监控告警和趋势分析。
- 日志(Logs):离散的事件记录,包含详细的上下文信息,如应用日志、系统日志。日志适合用于故障排查和根因分析。
- 链路追踪(Traces):记录请求在分布式系统中的完整流转过程,展示各个服务之间的调用关系和耗时。链路追踪适合用于分布式系统的性能分析和故障定位。
面试高频考点:
- 指标、日志、链路追踪的区别是什么?
- 如何选择合适的可观测性工具?
- 如何实现全链路追踪?
6.2 Prometheus:云原生监控的事实标准
Prometheus是目前最流行的开源监控系统,它已经成为云原生监控的事实标准。
深入理解:
- Prometheus采用拉取模型获取监控数据,这种模型具有更好的可扩展性和可靠性。
- Prometheus的数据模型是时间序列,每个时间序列由指标名称和一组标签唯一标识。标签是Prometheus最强大的功能之一,它允许你对数据进行灵活的过滤和聚合。
- PromQL是Prometheus的查询语言,掌握PromQL是使用Prometheus的基础。
面试高频考点:
- Prometheus的四种指标类型是什么?它们的区别是什么?
- 如何使用PromQL计算QPS和错误率?
- Prometheus的高可用方案有哪些?
6.3 2026年可观测性的最新趋势
在2026年,可观测性领域发生了巨大的变化,AI技术的引入彻底改变了可观测性的格局。
最新趋势:
- AI驱动的可观测性:使用生成式AI自动化模式识别、根因分析和故障预测。AI可以从海量的监控数据中自动发现异常,并给出修复建议。
- 统一可观测性平台:整合指标、日志、链路追踪和用户体验数据,提供统一的视图和分析能力。
- 持续可观测性:将可观测性融入CI/CD流程,在发布前检测性能问题,防止有问题的代码上线。
- AI工作负载可观测性:针对大模型应用的特殊指标,如Token吞吐量、模型延迟、GPU利用率、显存使用率等。
七、自动化运维与DevOps:从手工操作到基础设施即代码
自动化是SRE的核心原则之一。SRE工程师的目标是将所有重复的手工操作自动化,从而提高效率、减少人为错误。
7.1 基础设施即代码(IaC):基础设施管理的革命
基础设施即代码是指使用代码来定义和管理基础设施,而不是通过手工操作。IaC使得基础设施的变更可追溯、可重复、可审计。
深入理解:
- Terraform是目前最流行的IaC工具,它支持几乎所有的云平台和基础设施服务。
- IaC的核心思想是声明式编程,你只需要定义基础设施的期望状态,工具会自动将实际状态调整为期望状态。
- IaC应该和应用代码一样,纳入版本控制系统,并进行代码审查。
面试高频考点:
- 基础设施即代码的优势是什么?
- Terraform的工作原理是什么?
- 如何管理Terraform的状态文件?
7.2 GitOps:云原生时代的持续部署
GitOps是一种基于Git的持续部署方法,它将Git作为唯一的事实来源,所有基础设施和应用配置都存储在Git仓库中。
深入理解:
- GitOps的核心思想是:任何变更都应该通过Git提交来完成。不允许直接在生产环境进行手工操作。
- Argo CD是目前最流行的GitOps工具,它可以自动将Git仓库中的配置同步到Kubernetes集群。
- GitOps大大提高了部署的安全性和可靠性,所有变更都有Git提交记录,便于审计和回滚。
面试高频考点:
- GitOps的优势是什么?
- Argo CD的工作原理是什么?
- GitOps和传统CI/CD的区别是什么?
7.3 自动化运维工具链:构建高效的运维体系
一个完整的自动化运维体系需要多种工具的配合。在2026年,主流的自动化运维工具链包括:
- 配置管理:Ansible、Puppet、Chef
- 基础设施即代码:Terraform、CloudFormation
- CI/CD:Jenkins、GitLab CI、GitHub Actions
- GitOps:Argo CD、Flux CD
- 监控告警:Prometheus、Grafana、Alertmanager
- 日志管理:ELK Stack、Loki
- 链路追踪:Jaeger、Zipkin
- 混沌工程:ChaosMesh、Litmus
八、数据库与中间件:数据是企业的核心资产
数据库和中间件是应用系统的核心组件,它们的稳定性直接影响整个系统的稳定性。SRE工程师必须掌握常见数据库和中间件的运维和调优。
8.1 Redis:高性能缓存与键值数据库
Redis是目前最流行的缓存和键值数据库,它的高性能和丰富的数据结构使其在互联网应用中得到了广泛的应用。
深入理解:
- Redis的高性能源于其纯内存操作和IO多路复用模型。虽然Redis是单线程的,但它的性能可以达到每秒数十万次操作。
- Redis 6.0之后引入了多线程,但核心命令处理依然是单线程的。多线程主要用于处理网络IO和协议解析。
- Redis的持久化机制包括RDB和AOF。RDB是快照持久化,AOF是追加式持久化。在实际应用中,通常会同时使用两种持久化机制。
面试高频考点:
- Redis缓存穿透、击穿、雪崩的区别及解决方法?
- Redis的持久化机制有哪些?它们的优缺点是什么?
- Redis集群的工作原理是什么?
8.2 MySQL:关系型数据库的王者
MySQL是目前最流行的关系型数据库,几乎所有的互联网公司都在使用MySQL。
深入理解:
- MySQL的主从复制是实现高可用和读写分离的基础。主从复制的原理是主库将数据变更记录到二进制日志,从库读取并执行这些日志。
- MySQL的性能调优是一个系统工程,涉及到硬件、操作系统、MySQL配置、SQL语句和索引等多个层面。
- 慢查询是MySQL最常见的性能问题。优化慢查询的第一步是开启慢查询日志,找到执行时间长的SQL语句。
面试高频考点:
- MySQL主从复制的原理是什么?
- 如何优化MySQL的性能?
- 什么是索引?索引的工作原理是什么?
8.3 消息队列:分布式系统的解耦利器
消息队列是分布式系统中用于解耦、异步和削峰填谷的重要组件。常见的消息队列包括Kafka、RabbitMQ、RocketMQ等。
深入理解:
- Kafka是目前最流行的分布式消息队列,它的高吞吐量和高可靠性使其特别适合大数据和日志处理场景。
- 消息队列的核心概念包括:生产者、消费者、主题、分区、偏移量。
- 消息队列的常见问题包括:消息丢失、消息重复、消息顺序性。
面试高频考点:
- Kafka的工作原理是什么?
- 如何保证消息不丢失?
- 如何保证消息的顺序性?
九、安全与合规:企业的生命线
在数字化时代,安全已经成为企业的生命线。尤其是在金融、医疗等行业,安全和合规是不可逾越的红线。
9.1 容器安全:云原生时代的安全挑战
容器和Kubernetes的普及带来了新的安全挑战。容器安全已经成为云原生安全的核心。
容器安全最佳实践:
- 镜像安全:使用可信的基础镜像,在CI阶段集成镜像扫描工具,对镜像进行签名校验。
- 运行时安全:使用非root用户运行容器,限制容器的资源使用,禁用不必要的权限,使用运行时安全工具监控容器异常行为。
- 集群安全:启用Kubernetes RBAC权限控制,使用Admission Webhook进行准入控制,加密etcd数据,启用网络策略。
9.2 网络安全:防御外部攻击的第一道防线
网络安全是系统安全的第一道防线。SRE工程师必须掌握基本的网络安全知识,能够配置防火墙、入侵检测系统等安全设备。
网络安全最佳实践:
- 最小权限原则:只开放必要的端口和服务。
- 定期更新系统和软件,修复安全漏洞。
- 使用强密码和密钥认证,禁用密码登录。
- 配置防火墙和入侵检测系统,监控网络异常流量。
- 定期进行安全扫描和渗透测试。
9.3 金融系统灾备建设:业务连续性的保障
对于金融系统来说,业务连续性是至关重要的。灾备建设是保障业务连续性的关键。
金融系统灾备建设的关键要求:
- 数据零丢失:核心交易数据必须保证零丢失。
- RTO(恢复时间目标):核心系统RTO≤30分钟,关键系统RTO≤5分钟。
- RPO(恢复点目标):核心系统RPO=0。
- 架构要求:采用"两地三中心"架构,即生产中心、同城灾备中心、异地灾备中心。
- 演练要求:定期进行灾难恢复演练,至少每年一次。
十、系统设计与稳定性保障:高级SRE的必备能力
对于高级SRE岗位,面试官会重点考察你的系统设计能力和稳定性保障能力。这些问题没有标准答案,主要考察你的思维方式和解决复杂问题的能力。
10.1 高可用系统设计:避免单点故障
高可用是系统设计的首要目标。一个高可用的系统应该能够在部分组件故障的情况下继续提供服务。
高可用系统设计原则:
- 无单点故障:所有组件都要有冗余,避免单点故障。
- 故障隔离:一个组件的故障不应该影响其他组件。
- 自动恢复:系统能够自动检测故障并进行恢复。
- 降级熔断:在系统负载过高或部分组件故障时,能够降级非核心功能,保障核心功能的可用性。
面试高频考点:
- 如何设计一个高可用的Web服务架构?
- 如何设计一个高可用的数据库架构?
- 如何设计一个高可用的消息队列架构?
10.2 容量规划:未雨绸缪的艺术
容量规划是保障系统稳定性的重要手段。一个好的容量规划能够在业务增长的同时,保证系统的性能和可用性。
容量规划的步骤:
关键原则:
- 预留足够的缓冲空间,应对突发流量。
- 考虑峰值流量,而不是平均流量。
- 进行压力测试,验证系统的最大承载能力。
10.3 混沌工程实践:打造韧性系统
混沌工程是打造韧性系统的重要方法。通过主动注入故障,我们可以发现系统的薄弱环节并加以改进。
混沌工程实践步骤:
结语:成为一名优秀的SRE工程师
在2026年,SRE工程师已经成为互联网行业最有价值的技术岗位之一。但成为一名优秀的SRE工程师并不容易,它需要你具备扎实的技术基础、丰富的实战经验、良好的沟通能力和持续学习的精神。
给求职者的建议:
最后,我想说的是,SRE不仅仅是一份工作,更是一种责任。我们守护着互联网的稳定性,保障着亿万用户的体验。这是一份充满挑战但也充满成就感的工作。希望这篇文章能够帮助你在面试中脱颖而出,成为一名优秀的SRE工程师。
附录:2026年Kubernetes高级面试题与真实故障排查案例
一、2026年Kubernetes高级面试题(15道精选,覆盖最新特性与生产实践)
1. 解释Kubernetes 1.35+引入的**动态资源调整(DRA)**特性,它解决了什么问题?与传统的resources.limits有什么区别?
答案:
- 核心概念:DRA(Dynamic Resource Allocation)是Kubernetes 1.30+正式GA的特性,允许在不重启Pod的情况下动态调整容器的CPU、内存、GPU等资源配额。
- 解决的问题:
- 传统Kubernetes中资源配额是静态的,一旦Pod创建就无法修改,导致资源浪费或不足
- 对于显存占用波动极大的AI推理服务(如vLLM处理超长上下文),静态配置要么浪费资源,要么导致OOM
- 无法根据实时负载动态调整资源
- 与传统limits的区别:
特性传统resources.limits动态资源调整(DRA) 修改方式 必须删除重建Pod 实时修改Pod spec,无需重启 生效时间 Pod重启后 秒级生效 业务影响 服务中断 无感知 适用场景 资源需求稳定的应用 资源需求波动大的应用(AI推理、大数据处理) - 2026年实践:几乎所有头部企业的AI平台都已采用DRA管理GPU资源,资源利用率平均提升40%以上。
2. Kubernetes 1.32+原生支持的Sidecar容器与传统Sidecar有什么区别?它解决了哪些痛点?
答案:
- 传统Sidecar的痛点:
- Sidecar容器与主容器并行启动,无法保证Sidecar先于主容器启动
- Sidecar容器会阻止Pod正常终止,导致Pod Terminating状态长时间存在
- 无法单独管理Sidecar的生命周期
- 原生Sidecar的改进:
- 启动顺序控制:原生Sidecar会先于所有主容器启动,只有当所有Sidecar就绪后才会启动主容器
- 终止顺序控制:主容器终止后才会终止Sidecar容器
- 独立的生命周期管理:可以单独重启Sidecar容器而不影响主容器
- 资源隔离:原生Sidecar有自己独立的资源配额和健康检查
- 2026年实践:Istio、Linkerd等服务网格已全面迁移到原生Sidecar,解决了长期困扰用户的启动和终止问题。
3. 如何在Kubernetes上高效调度**大语言模型(LLM)**训练和推理任务?请结合2026年的最新技术栈说明。
答案:
- GPU资源共享:
- 使用NVIDIA GPU Operator和MIG(Multi-Instance GPU)技术,将一张A100/H100切分为多个逻辑实例
- 对于小模型推理,使用vGPU技术实现GPU时间片共享,提高利用率
- 注意:逻辑隔离存在"噪声邻居"问题,需配合QoS和显存限制严格控制
- 拓扑感知调度:
- 利用Kubernetes 1.30+增强的Topology Manager,确保Pod调度到NUMA亲和性最佳的节点
- 对于多卡大模型(如70B+参数),必须保证GPU属于同一NVLink拓扑域,减少跨卡通信延迟
- 使用Volcano或Kubeflow MPI Operator实现Gang Scheduling,确保所有训练节点同时就绪
- 弹性伸缩:
- 结合KEDA和Prometheus,根据GPU利用率、请求队列长度或Token吞吐量实现推理服务的自动扩缩容
- 支持缩容到0以节省成本
- 使用预测性扩缩容,基于历史流量数据提前扩容,应对突发流量
- 推理优化:
- 集成vLLM或TGI作为推理后端,利用PagedAttention技术提高显存利用率
- 使用Kubernetes的HPA进行并发控制,避免单个Pod过载
- 实现模型热加载,减少模型切换时间
4. 解释eBPF在Kubernetes网络中的优势,为什么2026年它已经成为大规模生产环境的标配?
答案:
- eBPF的核心优势:
- 性能更高:将网络逻辑直接编译到内核态执行,无需像iptables那样在内核和用户态之间频繁切换。在大规模集群(数千节点/Pod)下,iptables规则链过长会导致性能急剧下降,而eBPF性能几乎线性增长
- 可观测性更强:天生支持强大的网络可观测性,能清晰看到HTTP/GRPC级别的调用链、延迟和错误率
- 安全性更好:支持基于身份的网络安全策略,不仅限于IP/端口,能够识别Pod和服务身份
- 功能更丰富:除了基础的网络转发和负载均衡,还支持服务网格、流量加密、网络策略、性能分析等功能
- 为什么2026年成为标配:
- Cilium已经成为CNCF毕业项目,被AWS、Azure、Google等主流云厂商采用为默认CNI
- Kubernetes 1.30+原生支持eBPF作为kube-proxy的替代方案
- 随着集群规模的扩大和AI工作负载的增加,传统iptables的性能瓶颈越来越明显
- eBPF生态已经非常成熟,有大量的工具和解决方案
5. 什么是预测性调度?它与传统Kubernetes调度有什么区别?2026年主流的实现方案是什么?
答案:
- 传统调度的问题:基于节点当前的资源使用率进行调度,没有考虑未来的资源变化,容易导致资源碎片和调度不均衡
- 预测性调度的核心思想:基于历史资源使用数据和时间序列预测模型,预测节点未来的资源使用率,从而做出更优的调度决策
- 2026年主流实现方案:
- Prometheus + Prophet:使用Prometheus收集历史资源数据,使用Facebook Prophet进行时间序列预测
- 自定义调度器插件:基于Kubernetes Scheduler Framework开发预测性调度插件,在打分阶段考虑预测的资源使用率
- 云厂商托管方案:阿里云、AWS等主流云厂商的Kubernetes服务已经内置了预测性调度功能
- 优势:
- 提高资源利用率,平均提升15%-25%
- 减少资源碎片
- 避免调度到即将过载的节点
- 更好地应对突发流量
6. Kubernetes 1.34+引入的ComputeClass解决了什么问题?它与NodeAffinity有什么区别?
答案:
- 解决的问题:随着云资源异构化(x86、ARM、RISC-V、GPU、TPU、FPGA等),传统的NodeAffinity和NodeSelector已经无法满足复杂的算力需求。例如,一个Deployment需要同时部署到x86和RISC-V节点,并且要求高性能的CPU和内存,使用NodeAffinity会非常复杂且难以维护。
- ComputeClass的核心概念:ComputeClass是一种新的API资源,用于定义复合算力需求,如isa=riscv64, perf=high, memory=fast。调度器会自动将Pod调度到满足ComputeClass要求的节点上。
- 与NodeAffinity的区别:
特性NodeAffinityComputeClass 表达能力 基于标签的布尔表达式 声明式的复合算力需求 可维护性 复杂的规则难以维护 集中定义,易于管理 可移植性 与特定集群的标签绑定 抽象了底层硬件差异,跨集群可移植 适用场景 简单的节点选择需求 复杂的异构算力需求
7. 什么是Gang Scheduling?为什么它对AI训练任务至关重要?Kubernetes上有哪些主流的实现?
答案:
- Gang Scheduling的核心概念:Gang Scheduling(帮派调度)是一种调度策略,它要求一组相关的Pod必须同时被调度。如果其中任何一个Pod无法被调度,那么整个组的Pod都不会被调度。
- 为什么对AI训练任务至关重要:
- 分布式AI训练任务通常需要多个节点同时参与计算
- 如果部分节点被调度而其他节点没有被调度,那么已经被调度的节点会一直等待,浪费资源
- 严重情况下会导致资源死锁
- Kubernetes上的主流实现:
- Volcano:CNCF毕业项目,专门为AI、大数据等高性能计算场景设计的调度器,原生支持Gang Scheduling
- Kubeflow MPI Operator:专门用于MPI作业的调度器,支持Gang Scheduling
- Kubernetes Scheduler Framework插件:可以通过自定义插件实现Gang Scheduling功能
8. 解释**Pod Security Standards(PSS)**与已废弃的Pod Security Policies(PSP)的区别。2026年Kubernetes安全的最佳实践是什么?
答案:
- PSP的问题:
- 配置复杂,难以使用
- 全局生效,无法按命名空间灵活配置
- 缺乏细粒度的控制
- PSS的改进:
- 定义了三种标准的安全策略:Privileged、Baseline、Restricted
- 按命名空间生效,可以为不同的命名空间配置不同的安全策略
- 配置简单,易于使用
- 与Kubernetes的其他安全特性(如RBAC、NetworkPolicy)更好地集成
- 2026年Kubernetes安全最佳实践:
- 三层纵深防御:
- 第一层:命名空间级强制执行PSS Restricted策略
- 第二层:Pod/Container级配置SecurityContext,禁止特权容器、只读根文件系统、非root用户运行
- 第三层:系统级使用Seccomp和AppArmor限制系统调用
- 网络安全:默认拒绝所有流量,使用NetworkPolicy显式允许必要的Pod间通信;使用服务网格实现mTLS加密所有东西向流量
- 身份认证与授权:使用OIDC集成企业身份源;RBAC遵循最小权限原则
- 供应链安全:使用Trivy/Clair扫描镜像漏洞;使用Cosign对镜像进行签名;使用OPA/Gatekeeper进行准入控制
- 运行时安全:使用Falco监控异常系统调用和容器行为
9. 什么是镜像拉取失败雪崩?如何预防和解决这个问题?
答案:
- 镜像拉取失败雪崩的现象:当镜像仓库出现故障或网络问题时,大量Pod同时尝试拉取镜像,导致镜像仓库过载,进一步加剧镜像拉取失败,形成恶性循环,最终导致整个集群的Pod无法启动。
- 根因:
- Kubernetes的默认镜像拉取策略是IfNotPresent,但当节点上没有镜像时会尝试拉取
- 当镜像拉取失败时,kubelet会不断重试,导致大量的拉取请求
- 镜像仓库没有足够的能力处理突发的大量拉取请求
- 预防和解决方法:
- 配置镜像拉取重试策略:调整kubelet的–image-pull-retry-timeout和–image-pull-progress-deadline参数,减少重试频率
- 使用镜像缓存:在每个节点上部署镜像缓存代理(如Harbor Proxy Cache、Dragonfly),减少对中心镜像仓库的依赖
- 预拉取镜像:在发布前将镜像预拉取到所有节点上
- 配置镜像拉取限流:在镜像仓库前部署负载均衡器,配置限流策略
- 使用多镜像仓库:配置多个镜像仓库作为备份,当主仓库故障时自动切换到备份仓库
10. 什么是HPA抖动风暴?如何避免?
答案:
- HPA抖动风暴的现象:HPA(Horizontal Pod Autoscaler)不断地扩缩容Pod数量,导致Pod频繁创建和删除,影响服务稳定性,浪费资源。
- 根因:
- HPA的扩缩容阈值设置过近
- 指标波动过大
- 没有配置冷却时间或冷却时间过短
- 避免方法:
- 设置合理的扩缩容阈值:扩容阈值和缩容阈值之间应该有足够的间隔,例如扩容阈值为70%,缩容阈值为30%
- 配置冷却时间:调整HPA的–horizontal-pod-autoscaler-downscale-stabilization参数,默认是5分钟,可以根据实际情况适当延长
- 使用平滑指标:使用指标的平均值而不是瞬时值,例如使用5分钟的平均CPU利用率
- 限制扩缩容速率:配置HPA的behavior字段,限制每分钟最多扩容和缩容的Pod数量
- 使用预测性HPA:基于历史指标数据预测未来的负载,提前扩缩容,避免抖动
11. 解释etcd的Raft协议。当etcd集群出现脑裂时,如何恢复?
答案:
- Raft协议的核心概念:Raft是一种分布式一致性算法,用于保证etcd集群中所有节点的数据一致性。Raft通过选举leader、日志复制和安全性保证来实现一致性。
- 脑裂的原因:当etcd集群的网络出现分区时,可能会出现多个leader,导致数据不一致。
- 脑裂的恢复步骤:
- 停止所有etcd节点
- 找到数据最新的节点:比较各个节点的raft_term和commit_index,选择数据最新的节点作为新的leader
- 重置数据最新节点的集群信息:修改数据最新节点的member/snap/db文件,删除其他节点的信息
- 启动数据最新节点:以单节点模式启动数据最新节点
- 重新添加其他节点:将其他节点作为新的成员添加到集群中
- 验证集群状态:检查集群的健康状态和数据一致性
- 预防措施:
- 部署奇数个etcd节点(通常3个或5个)
- 确保etcd节点之间的网络稳定
- 定期备份etcd数据
12. 什么是Kubernetes的准入控制?2026年主流的准入控制器有哪些?它们的作用是什么?
答案:
- 准入控制的核心概念:准入控制是Kubernetes API Server的一个重要组件,它在API请求被持久化到etcd之前对请求进行拦截和验证。准入控制器可以修改请求对象或拒绝请求。
- 2026年主流的准入控制器:
- NamespaceLifecycle:防止删除正在使用的命名空间
- LimitRanger:强制实施命名空间的资源限制
- ResourceQuota:强制实施命名空间的资源配额
- ServiceAccount:自动为Pod分配Service Account
- DefaultStorageClass:为没有指定StorageClass的PVC自动分配默认的StorageClass
- PodSecurity:实施Pod Security Standards
- OPA Gatekeeper:通用的策略引擎,允许用户使用Rego语言定义自定义策略
- Kyverno:专为Kubernetes设计的策略引擎,使用YAML定义策略,比OPA Gatekeeper更易于使用
- 作用:
- 强制实施安全策略
- 控制资源使用
- 确保配置符合最佳实践
- 防止错误配置
13. 如何实现Kubernetes集群的零停机升级?需要注意哪些问题?
答案:
- 零停机升级的步骤:
- 升级控制平面:
- 逐个升级控制平面节点,确保每次只有一个控制平面节点不可用
- 升级kube-apiserver、kube-controller-manager、kube-scheduler和etcd
- 验证控制平面的健康状态
- 升级工作节点:
- 使用kubectl cordon命令标记节点为不可调度
- 使用kubectl drain命令驱逐节点上的Pod
- 升级节点上的kubelet、kube-proxy和容器运行时
- 重启节点
- 使用kubectl uncordon命令标记节点为可调度
- 重复以上步骤,直到所有工作节点都升级完成
- 验证集群状态:
- 检查所有节点的状态
- 检查所有Pod的状态
- 运行测试用例,验证服务的可用性
- 需要注意的问题:
- 备份数据:升级前备份etcd数据和重要的配置
- 检查兼容性:确保应用和Kubernetes新版本兼容
- 配置PodDisruptionBudget:确保在驱逐Pod时不会影响服务的可用性
- 控制升级速度:不要同时升级太多节点,避免影响集群的容量
- 准备回滚方案:如果升级出现问题,能够快速回滚到之前的版本
14. 什么是多集群管理?2026年主流的多集群管理方案有哪些?它们的优缺点是什么?
答案:
- 多集群管理的核心概念:多集群管理是指同时管理多个Kubernetes集群,包括集群的部署、配置、监控、运维和应用部署。
- 2026年主流的多集群管理方案:
方案优点缺点 Karmada CNCF毕业项目,功能丰富,支持多云、多集群应用部署和调度;与Kubernetes原生API兼容 学习曲线较陡;配置复杂 Open Cluster Management(OCM) 由Red Hat主导,专注于多集群的生命周期管理和应用交付;与OpenShift集成良好 社区活跃度不如Karmada Argo CD 主要用于多集群的GitOps应用部署;简单易用,与Git集成良好 缺乏集群生命周期管理功能 云厂商托管方案:EKS Anywhere、AKS Arc、GKE Fleet 与云厂商的其他服务集成良好;易于使用 厂商锁定 - 适用场景:
- 多云部署
- 混合云部署
- 边缘计算
- 多环境管理(开发、测试、生产)
15. 解释Kubernetes的服务网格。2026年服务网格的最新趋势是什么?
答案:
- 服务网格的核心概念:服务网格是一个专门用于处理服务间通信的基础设施层。它通过在每个服务旁边注入一个Sidecar代理,实现服务间的流量管理、安全、可观测性等功能,而无需修改应用代码。
- 2026年服务网格的最新趋势:
- eBPF化:使用eBPF替代传统的Sidecar代理,减少资源开销和延迟。Cilium Service Mesh已经成为主流的eBPF服务网格解决方案
- 无Sidecar化:部分功能从Sidecar代理转移到内核或控制平面,减少Sidecar的资源开销
- AI原生:专门针对AI工作负载优化,支持gRPC流式调用、大文件传输、GPU资源感知的流量调度
- 统一可观测性:整合指标、日志、链路追踪和用户体验数据,提供统一的可观测性平台
- 安全增强:支持零信任架构,提供细粒度的访问控制和流量加密
二、2025-2026年3个真实Kubernetes线上故障排查案例
案例一:凌晨3点的集群雪崩:Liveness探针配置不当 + CNI IP池耗尽 + 内存泄漏三重暴击
故障概览:
- 时间:2025年1月15日 03:17 AM
- 影响范围:生产集群prod-bj-01,1247个Pod进入CrashLoopBackOff状态,核心业务API可用性跌至12%
- MTTR:2小时43分钟
- 根因:Liveness探针配置不当引发Pod频繁重启,导致CNI IP地址池耗尽,进而加剧内存泄漏,形成级联故障
故障现象:
排查过程:
第一步:快速遏制故障
- 立即停止所有CI/CD流水线,防止新的Pod被创建
- 临时扩容CNI IP地址池,从/24扩大到/22,增加可用IP数量
- 重启部分故障节点,释放被占用的IP地址
第二步:定位根因
- 查看Pod的重启次数,发现某个核心微服务的Pod重启次数最高,平均每2分钟重启一次
- 查看该微服务的Liveness探针配置,发现探针的超时时间设置为1秒,失败阈值设置为3次
- 查看应用日志,发现该微服务存在内存泄漏问题,内存使用率随着时间逐渐升高
- 当内存使用率升高到一定程度时,应用响应变慢,导致Liveness探针超时失败
- Liveness探针失败后,kubelet会杀死容器并重启它
- 容器重启时,会释放旧的IP地址,但由于CNI插件的bug,部分IP地址没有被正确回收
- 随着容器不断重启,可用IP地址越来越少,最终导致IP地址池耗尽
- IP地址池耗尽后,新的Pod无法创建,已经存在的Pod也无法重启,导致整个集群雪崩
解决方案:
临时解决方案:
- 调整Liveness探针的超时时间为10秒,失败阈值为5次
- 增加该微服务的内存配额
- 手动清理未被回收的IP地址
永久解决方案:
- 修复应用的内存泄漏问题
- 升级CNI插件到最新版本,修复IP地址回收bug
- 优化Liveness探针配置,使用更合适的探针类型和参数
- 增加IP地址池使用率的监控告警,阈值设置为80%
- 建立Pod重启次数的监控告警,及时发现异常重启的Pod
经验教训:
案例二:etcd磁盘写满导致整个集群不可用
故障概览:
- 时间:2026年2月18日 14:22 PM
- 影响范围:生产集群prod-sh-02,控制平面完全不可用,所有API操作失败,但已运行的Pod网络正常
- MTTR:47分钟
- 根因:etcd的默认空间配额为2GB,由于大量的ConfigMap和Secret被频繁创建和删除,导致etcd数据量快速增长,最终耗尽磁盘空间
故障现象:
排查过程:
第一步:确认故障原因
- 登录etcd节点,执行df -h命令,确认/var/lib/etcd目录磁盘已满
- 执行ETCDCTL_API=3 etcdctl –endpoints=https://127.0.0.1:2379 –cacert=/etc/kubernetes/pki/etcd/ca.crt –cert=/etc/kubernetes/pki/etcd/server.crt –key=/etc/kubernetes/pki/etcd/server.key endpoint status命令,确认etcd数据库空间已超过配额
第二步:紧急恢复服务
- 执行ETCDCTL_API=3 etcdctl –endpoints=https://127.0.0.1:2379 –cacert=/etc/kubernetes/pki/etcd/ca.crt –cert=/etc/kubernetes/pki/etcd/server.crt –key=/etc/kubernetes/pki/etcd/server.key defrag命令,对etcd数据库进行碎片整理
- 碎片整理完成后,etcd会释放部分空间,kube-apiserver会自动恢复
- 立即清理无用的ConfigMap和Secret,释放更多空间
第三步:定位数据增长原因
- 执行ETCDCTL_API=3 etcdctl –endpoints=https://127.0.0.1:2379 –cacert=/etc/kubernetes/pki/etcd/ca.crt –cert=/etc/kubernetes/pki/etcd/server.crt –key=/etc/kubernetes/pki/etcd/server.key get / –prefix –keys-only | grep -E "(configmaps|secrets)" | wc -l命令,发现集群中有超过10万个ConfigMap和Secret
- 进一步排查发现,某个CI/CD系统每次构建都会创建一个新的ConfigMap,并且不会自动删除旧的ConfigMap
- 该CI/CD系统已经运行了6个月,累计创建了超过8万个ConfigMap
解决方案:
临时解决方案:
- 手动删除无用的ConfigMap和Secret
- 增加etcd的磁盘空间
- 调整etcd的空间配额,从2GB增加到8GB
永久解决方案:
- 修复CI/CD系统,添加自动清理旧ConfigMap和Secret的功能
- 配置etcd的自动压缩和碎片整理策略
- 增加etcd数据库大小和磁盘使用率的监控告警,阈值设置为70%
- 建立资源配额管理,限制每个命名空间的ConfigMap和Secret数量
经验教训:
案例三:动态资源调整(DRA)配置不当导致GPU资源泄漏
故障概览:
- 时间:2026年3月25日 09:45 AM
- 影响范围:AI推理集群ai-prod-01,GPU资源利用率从60%突然降至15%,大量推理请求排队
- MTTR:1小时12分钟
- 根因:DRA插件的bug导致GPU资源在Pod删除后没有被正确释放,形成资源泄漏
故障现象:
排查过程:
第一步:确认资源泄漏
- 对比Kubernetes显示的GPU资源分配情况和实际的GPU使用情况,确认存在资源泄漏
- 查看最近的操作记录,发现昨天晚上升级了DRA插件到最新版本
- 查看DRA插件的日志,发现有大量的错误信息,显示failed to release GPU resource: device not found
第二步:紧急恢复服务
- 回滚DRA插件到上一个稳定版本
- 重启所有GPU节点的kubelet服务,释放被泄漏的GPU资源
- 重启所有GPU Pod,重新分配GPU资源
第三步:定位bug原因
- 查看DRA插件的代码变更,发现最新版本引入了一个新的GPU资源管理逻辑
- 当Pod被删除时,DRA插件会尝试释放GPU资源,但如果GPU设备已经被内核卸载,就会导致释放失败
- 由于DRA插件没有正确处理这种异常情况,导致GPU资源被永久标记为已分配,无法被重新使用
解决方案:
临时解决方案:
- 回滚DRA插件到上一个稳定版本
- 建立GPU资源泄漏的监控告警,定期对比Kubernetes显示的资源分配情况和实际的资源使用情况
- 当发现资源泄漏时,自动重启kubelet服务释放资源
永久解决方案:
- 升级DRA插件到修复了bug的版本
- 完善DRA插件的错误处理逻辑,确保资源能够被正确释放
- 在升级任何集群组件前,先在测试环境进行充分的测试
- 建立灰度发布机制,逐步升级集群组件,降低故障影响范围
经验教训:
