容器服务 PCC Device Plugin 说明

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: app image: my-confidential-app:latest resources: 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

赞 (0)
上一篇 4天前
下一篇 4天前