应用型专用集成电路ASIC(Application-Specific Integrated Circuit)芯片的计算能力和计算效率是直接根据特定算法的需要进行定制的,所以其具备体积小、功耗低、高可靠性、保密性强、计算性能高、计算效率高等优势。本文介绍如何通过容器服务管理控制台创建托管ASIC集群,及ASIC芯片的使用示例。
背景信息
创建集群过程中,容器服务会进行如下操作:
- 创建ECS,配置管理节点到其他节点的SSH的公钥登录,通过CloudInit安装配置Kubernetes集群。
- 创建安全组,该安全组允许VPC入方向全部ICMP端口的访问。
- 如果您不使用已有的VPC网络,会为您创建一个新的VPC及vSwitch,同时为该vSwitch创建SNAT。
- 创建VPC路由规则。
- 创建NAT网关及EIP。
- 创建RAM用户和AccessKey,该RAM用户拥有ECS的查询、实例创建和删除的权限、添加和删除云盘的权限、SLB的全部权限、云监控的全部权限、VPC的全部权限、日志服务的全部权限、NAS的全部权限。Kubernetes集群会根据您部署的配置相应的动态创建SLB、云盘、VPC路由规则。
- 创建内网SLB,暴露6443端口。
- 创建公网SLB,暴露6443、8443和22端口(如果您在创建集群的时候选择开放公网SSH登录,则会暴露22端口;如果您选择不开放公网SSH访问,则不会暴露22端口)。
使用限制
- 用户账户需有100元的余额并通过实名认证,否则无法创建按量付费的ECS实例和负载均衡。
- Kubernetes集群版本不低于1.20.11。
- ACK集群仅支持专有网络VPC。
- 每个账号默认可以创建的云资源有一定的配额,如果超过配额创建集群会失败。请在创建集群前确认您的配额。
- 关于ACK集群配额限制的详情,请参见配额限制。重要 每个账户初始默认状况下VPC路由条目不超过200条,意味着您的Kubernetes集群的网络模式是Flannel时,集群的节点数最大不能超过200个(网络模式是Terway则不受该影响)。如集群需要更多节点数,您需要先对目标VPC申请提高配额。
- 每个账号默认最多可以创建100个安全组。
- 每个账号默认最多可以创建60个按量付费的负载均衡实例。
- 每个账号默认最多可以创建20个EIP。
- 关于ACK集群配额限制的详情,请参见配额限制。
- ECS实例使用限制:
支持创建按量付费和包年包月的ECS实例。
说明 实例创建后,您可以通过ECS管理控制台将按量付费转预付费,请参见按量付费转包年包月。
操作步骤
- 登录容器服务管理控制台。
- 在控制台左侧导航栏,单击集群。
- 在集群列表页面,单击页面右上角的集群模板。
- 在选择集群模板页面的托管集群区域,选择异构计算托管集群,并单击创建。
- 在ACK托管版页面,完成集群配置。
- 单击下一步:节点池配置,完成Worker节点配置。
- 单击下一步:组件配置,完成组件配置。
配置项 描述 Ingress 设置是否安装Ingress组件。默认选中Nginx Ingress。更多信息,请参见Nginx Ingress高级用法。 说明 如果您选中创建Ingress Dashboard,则需要同步安装日志服务组件。服务发现 设置是否安装NodeLocal DNSCache组件,默认安装NodeLocal DNSCache。
NodeLocal DNSCache用于运行DNS缓存代理以提升域名解析性能和稳定性。关于NodeLocal DNSCache的更多信息,请参见使用NodeLocal DNSCache。
存储插件 设置存储插件,支持Flexvolume和CSI。Kubernetes集群通过Pod可自动绑定阿里云云盘、NAS、OSS存储服务。请参见存储管理-Flexvolume和存储管理-CSI。 监控插件 设置是否启用云监控插件。默认选中在ECS节点上安装云监控插件和使用Prometheus监控服务,前者用于在云监控控制台查看所创建ECS实例的监控信息。
报警配置 选中使用默认报警模板配置报警,开启默认报警规则。详细介绍,请参见容器服务报警管理。
日志服务 设置是否启用日志服务,您可使用已有Project或新建一个Project。默认选中使用日志服务。创建应用时,您可通过简单配置,快速使用日志服务,详情参见通过日志服务采集Kubernetes容器日志。
默认选中使用日志服务,您还可以选择是否在日志服务控制台中创建Ingress Dashboard或者安装node-problem-detector并创建事件中心。
控制平面组件日志 选中开启,将从ACK控制层收集托管集群控制平面组件日志到您账号中的SLS日志服务的Log Project中。更多信息,请参见收集ACK Pro版集群控制平面组件日志。
工作流引擎 设置是否使用AGS。说明 当前只有白名单用户可以使用该功能。- 如果选中AGS,则创建集群时系统自动安装AGS工作流插件。
- 如果不选中,则需要手动安装AGS工作流插件,请参见AGS命令行帮助。
- 单击下一步:确认配置。
- 选中服务协议并单击创建集群。说明 一个包含多节点的Kubernetes集群的创建时间一般约为十分钟。
- 集群创建成功后,查看集群节点挂载的ASIC设备。
- 在集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏,选择 。
- 选择创建集群时配置的节点,单击操作列的 ,查看该节点挂载的ASIC设备。
使用ASIC设备
NETINT公司在Docker Hub提供了Base镜像,您可以使用这些镜像构建您的镜像。关于NETINT镜像地址,请参见netint/ni_xcoder_release。
以下介绍如何提交一个申请NETINT ASIC设备的任务。
- 使用Kubectl工具连接ACK托管集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。
- 执行以下命令查看集群某个节点总的NETINT ASIC设备数。NETINT ASIC设备的扩展资源名称为
netint.ca/ASIC
。kubectl get nodes <NODE_NAME> -o yaml
预期输出:
从预期输出可得,该节点中包含12张NETINT ASIC卡。...... #省略其他资源信息。 status: allocatable: cpu: 101900m ephemeral-storage: "114022843818" hugepages-1Gi: "0" hugepages-2Mi: "0" memory: 185176524Ki #该节点总共有12张NETINT ASIC卡。 netint.ca/ASIC: "12" pods: "64" capacity: cpu: "104" ephemeral-storage: 123722704Ki hugepages-1Gi: "0" hugepages-2Mi: "0" memory: 196499916Ki netint.ca/ASIC: "12" pods: "64"
- 提交一个申请NETINT ASIC设备的任务。
- 执行以下命令查看Pod的运行状态是否处于Running。
kubectl get po -l app=test-asic
预期输出:
由预期输出可得,Pod的NAME READY STATUS RESTARTS AGE test-asic-zt6ck 1/1 Running 0 19s
STATUS
为Running
。 - 执行以下命令登录到Pod中。
kubectl exec -ti test-asic-zt6ck bash
- 在Pod中执行以下命令初始化NETINT ASIC设备。
ni_rsrc_mon
预期输出:NI resource not init'd, continue .. Reading device file: nvme11 Reading device file: nvme9 Compatible minimum FW ver: 258, FW API flavors: 1E, minimum API ver: 9 1. /dev/nvme9 /dev/nvme9n1 num_hw: 2 2. /dev/nvme11 /dev/nvme11n1 num_hw: 2 Creating shm_name: NI_SHM_CODERS lck_name: /dev/shm/NI_LCK_CODERS 0. nvme9 decoder h/w id 0 create Creating shm_name: NI_shm_d0 , lck_name /dev/shm/NI_lck_d0 ni_rsrc_get_one_device_info written out. decoder h/w id 0 update encoder h/w id 1 create Creating shm_name: NI_shm_e0 , lck_name /dev/shm/NI_lck_e0 ni_rsrc_get_one_device_info written out. encoder h/w id 1 update 1. nvme11 decoder h/w id 0 create Creating shm_name: NI_shm_d1 , lck_name /dev/shm/NI_lck_d1 ni_rsrc_get_one_device_info written out. decoder h/w id 0 update encoder h/w id 1 create Creating shm_name: NI_shm_e1 , lck_name /dev/shm/NI_lck_e1 ni_rsrc_get_one_device_info written out. encoder h/w id 1 update ************************************************** 2 devices retrieved from current pool at start up Wed Dec 1 06:46:07 2021 up 00:00:00 v258R1E09 Num decodes: 2 BEST INDEX LOAD MODEL_LOAD MEM INST DEVICE NAMESPACE L 0 0 0 0 0 /dev/nvme9 /dev/nvme9n1 1 0 0 0 0 /dev/nvme11 /dev/nvme11n1 Num encodes: 2 BEST INDEX LOAD MODEL_LOAD MEM INST DEVICE NAMESPACE L 0 0 0 0 0 /dev/nvme9 /dev/nvme9n1 1 0 0 0 0 /dev/nvme11 /dev/nvme11n1 **************************************************
- 执行以下命令验证NETINT ASIC设备是否可用。
bash run_ffmpeg.sh
预期输出:
从预期输出可得,测试结果为PASS,表示NETINT ASIC设备可用。Choose an option: 1) check pci device 6) test 265 decoder 2) check nvme list 7) test 264 encoder 3) rsrc_init 8) test 265 encoder 4) ni_rsrc_mon 9) test 264->265 transcoder 5) test 264 decoder 10) Quit #? 6 You chose 6 which is test 265 decoder Input #0, hevc, from '../libxcoder/test/akiyo_352x288p25.265': Duration: N/A, bitrate: N/A Stream #0:0: Video: hevc (Main), yuv420p(tv), 352x288, 25 fps, 25 tbr, 1200k tbn, 25 tbc Stream mapping: Stream #0:0 -> #0:0 (hevc (h265_ni_dec) -> rawvideo (native)) Output #0, rawvideo, to 'output_6.yuv': Metadata: encoder : Lavf58.29.100 Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 352x288, q=2-31, 30412 kb/s, 25 fps, 25 tbn, 25 tbc Metadata: encoder : Lavc58.54.100 rawvideo frame= 300 fps=0.0 q=-0.0 Lsize= 44550kB time=00:00:11.88 bitrate=30720.0kbits/s speed=44.4x video:44550kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000% Decoder HW[0] INST[127]-average usage:27% Complete! output_6.yuv has been generated. PASS: output_6.yuv matches checksum.