QAT加速器设备可以提升系统的加密处理能力,适用于高性能加解密能力的业务应用,例如Web服务器、数据库和其他需要大量安全通信的服务,在确保数据安全的同时,减轻CPU的负担,提升整体系统性能。 您可以在ACK集群Pro版中部署ack-qat-deviceplugin组件,以便使用阿里云第八代Intel Sapphire Rapids神龙节点上的QAT设备为业务应用中的加解密、压缩解压缩等操作提速。
相关概念
Intel QuickAssist Technology(QAT)
英特尔® QAT是英特尔® 至强® 可扩展处理器上集成的工作负载加速器,可从CPU内核分担关键的数据压缩和解压缩、加密和解密以及公钥数据加密任务,并加速这些操作,从而帮助提高CPU性能和效率,减少数据占用空间。更多信息,请参见intel官方文档。
ack-qat-deviceplugin组件
ack-qat-deviceplugin组件基于龙蜥社区开源intel-accel-plugin-qat开发,便于您在ACK集群Pro版中使用QAT,它可以将阿里云第八代Intel Sapphire Rapids神龙节点上的QAT设备,通过Kubernetes的Device Plugin机制,将QAT设备作为特定资源按需分配给集群中运行的Nginx、Envoy等业务应用,加速加解密、压缩解压缩等操作并节省计算资源。
使用限制
使用QAT加速加解密、压缩解压缩的QAT实例必须满足以下要求:
实例规格:ecs.ebmg8i和ecs.ebmc8i系列裸金属实例,本文以ecs.ebmg8i.48xlarge为例介绍。
说明ecs.ebmg8i和ecs.ebmc8i系列裸金属实例需要提交工单加白名单使用。该实例仅在部分地域可购买使用,可售地域与库存情况请查询ECS实例规格可购买地域总览。
操作系统:Alibaba Cloud Linux UEFI 3.2104 Security Enhanced。
如果您已经在集群中部署了其他QAT设备的Device Plugin应用,请先将其卸载以免冲突。
前提条件
已创建ACK集群Pro版。具体操作,请参见创建Kubernetes托管版集群。
已安装Helm。具体操作,请参见安装Helm。
步骤一:配置节点加入脚本
首次使用QAT设备之前,您需要先使用以下脚本更新内核参数并重启节点。
为避免重复配置,建议您为ecs.ebmg8i和ecs.ebmc8i系列的实例创建专用节点池,并将以下脚本内容配置到专用节点池的实例自定义数据中,请勿在实例预自定义数据中配置,否则,会导致节点加入失败。更多信息,请参见创建节点池。
yum install kernel-0:5.10.134-16.1.al8.x86_64 -y
if [ $? -ne 0 ];then
echo "Error: yum update failed"
fi
yum install kernel-modules -y
if [ $? -ne 0 ];then
echo "Error: yum install kernel-modules failed"
fi
kernel_path=$(grubby --default-kernel)
kernel_args="intel_iommu=on iommu=pt"
grubby --update-kernel=$kernel_path --args=$kernel_args
reboot -f
步骤二:通过Helm部署ack-qat-deviceplugin
执行以下命令,安装ack-qat-deviceplugin。
helm install ack-qat-deviceplugin https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/pre/charts-incubator/ack-qat-deviceplugin-0.1.2.tgz \ --set regionId="cn-beijing" \ --set setup.vf_per_pf="16" \ --set setup.enabled_mode="asym;dc"
参数
是否可选
说明
默认值
regionId
可选
集群所在地域,配置后使用内网镜像。
无
setup.vf_per_pf
可选
每个PF可扩展出VF的数量,即硬件物理设备上可扩展的虚拟化空间数量。取值:0~16。
16
setup.enabled_mode
可选
QAT设备支持
sym
、asym
、dc
三种驱动。更多驱动信息,请参见sysfs-driver-qat。sym
:用于加速对称加解密。asym
:用于加速非对称加解密。dc
:用于加速压缩解压缩。
最多可选择支持2种驱动,驱动之间用英文半角分号(;)分隔。例如
aymc;dc
表示用于加速非对称加解密与压缩解压缩。asym;dc
执行以下命令,为需要部署ack-qat-deviceplugin的节点打上默认的Label。
kubectl label node cn-beijing.172.17.XX.XX "alibabacloud.com/type"="ebmg8i"
组件安装完后,等待几分钟,确认组件Pod状态正常,即集群的
kube-system
下的ack-qat-deviceplugin
状态变为running
后,执行以下命令查询节点的可用VF资源。kubectl get nodes -o go-template='{{range .items}}{{.metadata.name}}{{"\n"}}{{range $k,$v:=.status.allocatable}}{{" "}}{{$k}}{{": "}}{{$v}}{{"\n"}}{{end}}{{end}}'
预期输出:
cn-beijing.172.17.XX.XX cpu: 189280m ephemeral-storage: 113783349470 hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 1027672932Ki pods: 2133 qat.intel.com/cy2_dc2: 32
预期输出中
qat.intel.com/cy2_dc2: 32
表示资源的数量为32,对于ecs.ebmg8i.48xlarge实例节点,应包含setup.vf_per_pf
×2的资源数量,本例中setup.vf_per_pf
默认值为16.qat.intel.com/cy{}_dc{}
资源指1个QAT设备包括的加解密(cy
)与压缩解压缩(dc
)的工作队列数量。对于ecs.ebmg8i.48xlarge实例节点,1个QAT设备包含2个加解密工作队列,2个压缩解压缩工作队列。
步骤三:部署应用并分配QAT设备资源
本节以intel官方的boringSSL+Envoy demo为例,介绍如何使用QAT设备为业务应用的TLS加解密提速。其中,BoringSSL为开源的安全加密库;Envoy为通用的云原生网关,用于支持微服务架构下服务间的通信。
使用以下命令,创建证书并使用证书创建Secret。
openssl req -x509 -new -batch -nodes -subj '/CN=localhost' -keyout key.pem -out cert.pem kubectl create secret tls envoy-tls-secret --cert cert.pem --key key.pem
参考以下示例,以ConfigMap的方式创建Envoy配置文件,其中,Envoy需要开启private_key_providers特性。
部署Envoy应用及服务,将上述Secret与ConfigMap作为Volumes配置到应用中。
Envoy镜像需要使用支持Intel QAT设备加速TLS、GZIP等功能的龙蜥社区envoy-accel镜像。更多详情,请参见龙蜥社区镜像平台envoy-accel。
说明您还可以使用龙蜥镜像平台中其他支持QAT设备加速的nginx-accel、openresty-accel等应用的镜像与示例。
其中单进程Envoy需要1个加解密和1个压缩解压缩设备,因此设置
qat.intel.com/cy2_dc2
资源的limit
为1。验证QAT设备已完成加密解密操作。
使用以下命令,记录访问前QAT设备的使用计数。
#登录Envoy部署节点。 cat /sys/kernel/debug/qat_4xxx_0000\:e8\:00.0/fw_counters
预期输出:
使用以下命令,通过证书访问服务。
#Client端,即创建Secret时所在的机器上执行。 kubectl port-forward svc/helloenvoy 32296:9000 curl --cacert cert.pem https://localhost:32296 -v
预期输出:
使用以下命令,记录访问后QAT设备的使用计数。
#登录Envoy部署节点。 cat /sys/kernel/debug/qat_4xxx_0000\:e8\:00.0/fw_counters
预期输出:
预期输出表明,QAT使用计数已增加。
相关文档
基于Envoy的QAT设备加速效果,请参见龙蜥社区QAT实测效果。