组件介绍
pcc-device-plugin 是 TKE 提供的机密计算设备插件,用于将节点上的 AMD SEV-SNP 硬件设备(
/dev/sev-guest)和 PCC 通信 Socket(/var/run/pcc)自动暴露给业务容器。该组件基于 Kubernetes Device Plugin 框架实现,以 DaemonSet 形式部署在启用了机密计算能力的原生节点上,支持 Pod 通过标准资源请求方式获取机密计算设备访问权限,实现机密计算工作负载的自动化调度与资源隔离。部署在集群内的 Kubernetes 对象
Kubernetes 对象名称 | 类型 | 请求资源 | 所属 Namespace |
pcc-device-plugin | DaemonSet | CPU: 100m,Memory: 200Mi | kube-system |
限制条件
仅支持原生节点,节点机型需为启用了 AMD SEV-SNP 的实例(如 SA5 系列)。
节点需具有
tke.cloud.tencent.com/pcc-device-plugin: "true" 标签(由节点池开启机密计算时自动注入)。节点上需同时存在
/dev/sev-guest 设备和 /var/run/pcc 目录,缺少任一组件将无法启动。默认每节点最多支持 16 个机密计算容器同时运行(可通过
--resource-count 参数调整)。每个容器获得相同的
/dev/sev-guest 设备挂载,不支持设备独占或分片。使用方法
安装组件
1. 登录 容器服务控制台,选择左侧导航栏中的集群。
2. 在集群管理页面单击目标集群 ID,进入集群详情页。
3. 选择左侧菜单栏中的组件管理,进入组件列表页面。
4. 在组件列表页面中选择新建,并在新建组件页面中勾选 pcc-device-plugin。
5. 单击完成即可创建组件。
说明:
安装前请确保集群中存在启用了机密计算的原生节点(SA5 系列),且节点已具有
tke.cloud.tencent.com/pcc-device-plugin: "true" 标签。业务 Pod 使用
安装组件后,业务容器通过在
resources.limits 中声明 tke.cloud.tencent.com/pcc-device: 1 即可获取机密计算设备:apiVersion: v1kind: Podmetadata:name: confidential-appspec:nodeSelector:tke.cloud.tencent.com/pcc-device-plugin: "true"containers:- name: appimage: my-confidential-app:latestresources:limits:tke.cloud.tencent.com/pcc-device: 1
容器启动后将自动获得以下挂载:
/dev/sev-guest:AMD SEV-SNP 设备节点(读写权限)。/var/run/pcc:PCC 通信 Socket 目录(读写权限)。工作原理
pcc-device-plugin 以 DaemonSet 形式运行,启动后执行以下流程:
1. 设备探测:检测节点上是否存在
/dev/sev-guest 和 /var/run/pcc,若缺失则退出。2. 注册资源:向 kubelet 注册扩展资源
tke.cloud.tencent.com/pcc-device,并上报虚拟设备列表(默认 16 个)。3. 响应分配:当 Pod 请求该资源时,kubelet 调用 Allocate 接口,插件为容器挂载设备和 Socket。
4. 自动恢复:通过 inotify 监听 kubelet Socket 目录,当 kubelet 重启时自动重新注册,无需人工干预。
命令行参数
参数 | 默认值 | 说明 |
--pcc-device | /dev/sev-guest | PCC 设备节点路径。 |
--pcc-socket-path | /var/run/pcc | PCC 通信 Socket 路径,以 hostPath 形式挂载到容器内。 |
--resource-name | tke.cloud.tencent.com/pcc-device | 注册到 kubelet 的扩展资源名称。 |
--resource-count | 16 | 节点上声明的虚拟设备数量,即单节点最大机密计算容器并发数。 |
--v | 0 | 日志详细级别,DaemonSet 默认传入 1。 |
故障排查
现象 | 可能原因 | 排查方法 |
Pod 持续 Pending,提示 Insufficient tke.cloud.tencent.com/pcc-device | 插件未运行或未注册成功 | 执行 kubectl -n kube-system get ds pcc-device-plugin 检查 DaemonSet 状态,查看插件日志确认是否有 "Registered device plugin with Kubelet" 输出。 |
插件 CrashLoopBackOff,日志报 "detect device /dev/sev-guest failed" | 节点非 SEV-SNP 实例 | 在节点上执行 ls /dev/sev-guest 确认设备存在,非机密计算机型不应调度本插件。 |
插件 CrashLoopBackOff,日志报 "detect socket path /var/run/pcc failed" | 节点未创建 /var/run/pcc 目录 | 在节点上执行 ls /var/run/pcc 确认目录存在。 |
业务 Pod 启动后 /dev/sev-guest 不可读写 | DaemonSet 缺少 privileged 权限 | 检查 DaemonSet 配置中 securityContext.privileged 是否为 true。 |
kubelet 重启后 Pod 无法调度到该资源 | inotify 监听未生效 | 查看插件日志是否出现 "inotify: ...kubelet.sock created, restarting.",正常情况下插件会自动重新注册。 |
验证资源是否注册成功:
kubectl describe node <node-name> | grep -A5 "Allocatable:"# 应能看到:# tke.cloud.tencent.com/pcc-device: 16