题干与适用场景
集群使用 Dynamic Resource Allocation(DRA)分配 GPU 或网络设备。容器需要读取已分配设备的 PCI 地址、接口名或驱动属性,但不应获得 Kubernetes API 权限。请设计从驱动到容器的元数据链路,并说明版本、隔离、失败和升级策略。
面试官考察点
- 是否理解 DRA 驱动、ResourceClaim、kubelet 与容器之间的责任边界。
- 是否能说明元数据文件的路径、生成时机、挂载和清理生命周期。
- 是否处理驱动不可信字段、跨节点泄露、版本兼容和 Pod 重启。
- 是否知道该能力的 feature state 与适用版本,避免把 alpha 当成稳定契约。
回答前需要澄清的问题
- 元数据是设备发现信息、网络配置,还是包含凭据的敏感数据?
- 应用需要哪些字段和版本,能否容忍字段缺失或延迟出现?
- 集群和节点版本是否支持 DRA device metadata,驱动是否使用官方库?
- 设备重新分配、Pod 重启、驱动升级或节点故障时,文件如何失效?
30 秒回答框架
我会让驱动只声明与当前 ResourceClaim 关联的非敏感元数据,由 kubelet 在设备准备阶段生成版本化 JSON,并以只读方式挂载到容器约定路径。应用只读文件,不访问 API;文件的创建、更新、卸载与 Pod 生命周期绑定。字段做 schema 校验和大小限制,驱动失败时 Pod 进入可观测的失败状态。由于该能力处于 alpha,必须保留版本探测和降级到环境变量、启动探针或旧驱动路径的方案。
分步骤深入解答
1. 定义数据和信任边界
DRA 负责把设备分配给 ResourceClaim,驱动了解实际设备,应用只需要消费结果。元数据应限于设备属性或网络接口细节,不放私钥、令牌或可跨租户识别的信息。驱动输入必须绑定 claim、request 和 node,防止把其他设备信息写入当前 Pod。
2. 选择稳定的投递方式
官方文档描述了容器内的 well-known 路径,并以 JSON 文件呈现设备属性。使用只读挂载和确定的目录层级,应用通过文件读取而非 API 查询。文件内容应带 schema 或版本字段,让应用能拒绝未知版本并提供兼容逻辑。
3. 处理生命周期和失败
在设备分配和准备成功后生成文件;unprepare、Pod 删除或 claim 释放时清理。生成失败、文件写入失败或 JSON 不合法时,不能暴露半成品,应让 kubelet/驱动报告可观测错误并阻止应用误用。重启后重新从当前 claim 状态生成,不复用旧节点文件。
4. 规划升级和观测
把驱动库、kubelet、节点和应用版本矩阵写入部署契约。监控文件生成延迟、失败率、字段校验失败、驱动版本和 Pod 重启;通过日志记录 claim、request 和 node 标识,但不记录敏感元数据内容。alpha 能力升级时用兼容 schema 和明确 feature gate 验证。
高质量示范回答
我会把 device metadata 设计成 DRA 分配结果的只读投影。驱动只为当前 ResourceClaim 和节点写入非敏感设备属性,kubelet 在设备准备完成后将版本化 JSON 通过 well-known 路径只读挂载给容器,应用不需要 Kubernetes API 权限。生成前校验 claim、request、node 关联、字段白名单和大小;生成后做 schema 校验,失败则不挂载半成品并报告可观测错误。设备释放或 Pod 删除时清理,重启后按当前 claim 重新生成。由于该能力是 alpha,我会做版本探测、feature gate、旧路径或显式环境变量降级,并监控生成失败、延迟和驱动版本,避免把实验性文件格式写成跨版本保证。
常见错误
- 让容器读取 Kubernetes API 或授予过宽的 RBAC。
- 把驱动返回的所有字段原样暴露,包含凭据或其他租户设备信息。
- 没有版本字段、白名单和 JSON schema 校验。
- Pod 重启或 claim 释放后仍保留旧节点的文件。
- 生成失败时挂载空文件,让应用误以为设备可用。
- 把 alpha feature 当成所有版本都兼容的稳定 API。
追问及应对
为什么不直接写环境变量?
环境变量适合少量静态值,但难表达多个设备、结构化字段和动态生命周期。只读 JSON 文件更适合结构化元数据,同时应提供版本和失败语义。
如何防止跨租户信息泄露?
以 claim、request 和 node 作为写入授权边界,只允许驱动写入当前分配的设备;字段白名单过滤敏感属性,挂载目录按 Pod 隔离,并通过权限和测试验证不可读取其他 claim。
alpha 能力如何上线?
先确认集群版本、feature state、驱动库和 kubelet 兼容矩阵;用 feature gate 与小范围节点池灰度,准备旧驱动或应用降级,并把 schema 变更纳入回滚和告警。