为了更好的方便各位开发者和用户了解并应用ECS倚天实例,由阿里云弹性计算联合基础软件团队 & 平头哥 & 安谋科技(arm)等十余位专家、架构师、开发工程师等,共同发起的【倚天实例迁移课程】正式上线,本次系列课程共计10节,共分为基础篇;架构迁移篇;性能优化篇三个篇章,从不同角度为用户带来更加丰富和专业的讲解。
2023年8月31日,系列课程第五节《X86+ARM,容器服务ACK多架构应用部署最佳实践》正式上线,由阿里云云原生应用平台产品专家罗晶主讲,内容涵盖:容器服务ACK简介;ACK支持倚天ARM实例;ACK多架构应用部署最佳实践。
本期节目在阿里云官网、阿里云钉钉视频号、InfoQ官网、阿里云开发者微信视频号、阿里云创新中心直播平台&微信视频号同步播出,同时可以点击【https://developer.aliyun.com/topic/ecs-yitian】进入【倚天实例迁移课程官网】了解更多内容。
以下内容根据罗晶的演讲整理而成,供阅览:
一、容器服务ACK简介
说到容器相信大家应该非常熟悉了,以容器为代表的云原生技术,已经成为释放云价值的最短路径。那么,一个企业为什么要用容器,要用K8s?一般有以下三个方面的考虑:
- 提升运维和研发的效率。以容器镜像、Helm Chart 等符合 OCI 制品标准的方式交付,将应用与应用依赖的环境都打包在一起,确保了不可变基础设施,保障开发、测试、线上环境一致性,极大提升了业务研发/运维的迭代效率。
- 提升业务稳定性。K8s提供了自动容错和故障恢复的能力,可以在出现节点故障时自动做排水调度,自动迁移容器应用,确保业务的高可用。同时,K8s 也提供了丰富的监控和日志功能,帮助用户实时监控应用程序的运行状态和性能指标,降低业务侧导致的故障风险。
- 降低资源成本。本身容器是轻量的虚拟化技术,通过资源共享和隔离的方式,提高对底层服务器资源的利用率。同时,基于K8s弹性伸缩策略,可以在业务波峰时,自动弹性扩容;业务波谷时,自动弹性缩容,无需再提前固采一批服务器,而是基于按量/按需使用云。
目前,像在线业务应用/微服务应用、AI和大数据、分布式云业务场景,都已经跑在K8s平台上,享受容器化、云原生化带来的价值。
那么面向这些场景,阿里云容器服务也为客户提供了丰富的解决方案,阿里云容器产品家族,已经成为企业云原生上云的新界面。阿里云容器服务ACK是全球首批通过 K8s 一致性认证的服务平台,提供高性能的容器应用管理服务,支持企业级K8s容器化应用的生命周期管理。
目前,容器服务也全面升级为 ACK Anywhere,进一步拓展了产品的宽度,ACK 产品覆盖了从公共云、边缘云、到本地数据中心的各个场景,让用户能够根据自己的业务和数据管控等需求,在更适合的位置选择开放、一致的云能力,实现统一集群管理、统一资源调度、统一数据容灾和统一应用交付。
下面介绍一下 ACK 里的子产品:
- ACK 托管版是最普适的形态,由我们托管 K8s 的控制面,用户只用负责ECS 节点的创建及运维。
- ACK Serverless 版是无服务器K8s集群形态,面向 Job/AI/大数据任务,以及流量突发的弹性场景,您连 ECS 节点也无需管理,直接快速创建容器应用。
- ACK Edge 版是面向云、边、端协同管理的 K8s 集群形态,加强了在边缘弱网环境下的自治能力以及对 IoT 端设备的管理能力。
- ACK One 面向多集群/多云的集群形态,提供统一的容器集群管理,统一资源调度、统一数据容灾与统一应用交付。
在分析师报告评估部分,从上图可以看到:在2022 Forrester 容器企业平台评测中,ACK 位居全球领导者、产品能力第一;在 Gartner 的分析报告中,我们连续三年作为国内唯一入选 Gartner 公共云容器服务竞争格局,产品布局全球领先。
阿里云 ACK 的核心优势,总结下来主要有以下三点:
- 稳定安全。ACK 不仅服务了阿里云上数万客户的 IT 架构的容器化转型,同时也对内支撑了阿里巴巴集团的全面云原生化,沉淀了很多大规模性能优化和最佳实践。对客侧,我们提供了全链路观测能力,全托管节点池能力,帮助客户更便捷化运维集群,确保集群的稳定安全。平台数万客户的 IT 架构容器化转型,同时也对内支撑了阿里巴巴集团的全面云原生化,沉淀了很多大规模性能优化和最佳实践。产品上,我们提供了全链路观测能力,全托管节点池能力,帮助客户更便捷化运维集群,确保集群的稳定安全。
- 提效降本。ACK 提供了应用层、资源层多种灵活的弹性策略,帮助您提高资源的利用率。也面向 AI/大数据业务场景,提供了云原生 AI 套件,帮助您提高 GPU 等资源的利用率(共享/隔离),提高容器化 AI 的工程效率。
- 无界兼容。如果是 IDC/多云 K8s,可以把 K8s 接入到 ACK One 中统一的集群管理。如果 IDC/多云异构资源节点希望利旧,或者有 IOT 端设备,ACK Edge 集群做到统一的异构资源接入、容器化统一管理。
二、ACK 支持倚天 ARM 实例
在之前的课程中,大家应该大概了解了倚天ARM实例。倚天710是阿里云针对高并发、高性能和高能效需求而设计的云原生芯片,将领先的芯片设计技术与云场景的需求结合,最终实现了性能和能效比的突破。
倚天710+阿里云 CIPU 全新计算体系架构协同,不仅大幅提升网络、存储 IO 性能,也大幅提升整机 CPU 的密度,保证了稳定性。目前,ECS倚天实例服务于互联网、生命科学、电商等多个业务场景。在常见的视频编解码、数据库、大数据、AI等核心业务场景,性价比最高可提升 80%。
ECS倚天实例已经在阿里云数据中心大规模部署并服务内外部客户,在电商核心交易系统、AI语音推理业务、生命科学、广告推理服务等场景,性价比得到显著提升。
从芯片层面看,ARM 与 X86架构差异在哪里呢?我们从 ALU、Cache、主频三个维度对比。
首先,倚天710具有更高的计算性能。倚天710处理器没有超线程概念,独享物理核,避免了性能争抢的问题。X86 架构是两个 vCPU/HT 共享一个物理核,1份 ALU(逻辑运算单元)。ECS 倚天实例采用的是独享物理核心方式,这可以让算力密集的计算指令不必排队、不必争抢,计算速度更快。
在 Cache 维度,过去 X86 两个 vCPU/HT 共享一二级缓存,会存在相互争抢,性能波动也更加明显,采用倚天710 CPU独享 Cache 设计之后,可以让 vCPU 之间相互不影响,为重负载计算带来更高的性能。
在主频维度,由于 X86 功耗大,高算力负载很容易造成功耗过大,温度上升,因此往往会采用降频进行规避,进而影响了机器的性能。而倚天710的功耗是主 X86 的1/6,没有任何降频问题。倚天710的安全水位可以从 50% 提高到 70%,减少资源浪费。
接下来介绍一下ACK支持倚天ARM实例的管理。
ACK 的定位是全场景适用、灵活可定制的平台级产品,如数据库、大数据、AI、中间件等,都可以部署在ACK平台之上;底层可以统一管理异构基础设施,如 ECS(x86)、ECS(倚天)、GPU、ECI (倚天)、神龙裸金属等。
这些异构资源可以通过不同的节点池来进行精细化的节点运维、节点配置、调度管理等,我们也提供了托管节点池的功能,可以自动完成部分节点运维操作,例如高危CVE漏洞自动修复、部分故障修复等,从而降低节点运维负担。
在异构资源管理之上,ACK 提供 K8s 核心组件托管、版本升级、降低日常维护 K8s 的复杂度。此外,也提供了高效调度、弹性、可观测和诊断的能力,提高业务的稳定性以及资源利用率。
总结一下,在ACK上使用 ARM 实例的价值主要有四点:
- 在 ACK 上使用ECS倚天实例可以将进一步降低资源成本。依托于当前ECS倚天实例高密度、低功耗带来的成本优势,是目前阿里云八代主售实例规格族性价比最高的 ECS 实例产品。我们可以创建 ARM的节点池,或者基于 K8s 弹性伸缩策略,扩容 ECS(倚天)或者 ECI(倚天)实例。
- 提高业务稳定性,由于倚天710低功耗设计,无睿频的设计,可以让计算密集型计算场景性能更加稳定。
- 基于容器 + ECS倚天实例,可以进一步提高部署密度,CPU 安全水位从 50% 提升到 70%,支持承载更多的容器业务。
- 由于我们支持多架构容器镜像构建/部署、支持异构节点统一管理。在从 X86 迁移至倚天 ARM 架构的过程中,使用 ACK 也能降低整体迁移使用的成本。
目前,我们推荐大数据、AI 训练/推理、音视频转码、游戏等计算密集型业务场景使用倚天 ARM。以大数据 Spark 的场景案例来看,由于 ECS 倚天实例由于拥有独立物理核、Cache 更大、网络时延更低等特点,运行 Spark 应用性能收益在 20% 以上,ACK 也提供了 ARM 优化的 Spark 镜像及 Operator,欢迎大家来测评。
三、ACK 多架构应用部署最佳实践
下面我将详细展开介绍从X86到倚天 ARM 实例,ACK 上多架构应用部署最佳实践。
整个流程可以分为四步:
- 在ACR 构建一个多架构的容器镜像。
- 在 ACK 上创建一个ARM节点池。
- 在工作负载上指定调度。
- 最后的相关联的运维管理。
首先让我们看一下第一步,构建多架构容器镜像。说到多架构镜像,就要介绍一下 Image Manifest 以及 Manifest List 的概念了。
容器镜像是由多个镜像层组成的只读的文件,这些文件作为容器运行的只读环境基础,结合可读写层提供容器运行环境。Manifest 是镜像的描述清单,是在镜像的上层的抽象,这个清单文件中也包含了有关于镜像的信息,如 Platform架构信息、layer 层、大小和摘要信息。
而 Manifest List 就是多个 Manifest 镜像描述清单的集合,这个描述清单集合可以通过镜像 TAG 关联访问。可以简单的理解一个 Manifest List 一种用于描述不同 CPU 架构、操作系统和操作系统版本的容器镜像的格式。同一个镜像版本对应不同架构 Manifest。这里的多架构一般是指不同种类的 CPU(如 amd64,arm64)和操作系统(如 linux、windows)。
在客户端下载时,会自动根据当前机器的环境从 Manifest List 中下载与当前平台兼容的镜像,类似拉取请求的路由器。如:在 X86 环境下拉取的镜像为 X86 架构的镜像,在 ARM 环境下拉取的镜像为 ARM 架构的镜像。
阿里云容器镜像服务(ACR)也推出了云原生制品中心,为容器开发者免费提供了来源于阿里云官方、龙蜥社区的安全可信容器基础镜像。包含应用容器化基础 OS镜像、基础语言镜像、AI/大数据相关镜像类别,覆盖ARM、ARM 64、X64、X86-64 多种系统架构。来源于阿里云官方的容器镜像,将由阿里云确保对应的镜像版本更新及镜像安全修复。
大家可以通过系统架构勾选ARM,筛选出适配ARM的多架构镜像。
推荐使用语言相关的多架构容器镜像,Dragonwell、Golang、Openjdk;操作系统类镜像,Alibaba Cloud Linux 3;应用镜像 Nginx、Memcached、Mysql、PGSql 等。我们都有为倚天实例做过适配和软件调优。
ACR EE 直接支持构建多架构容器镜像,当同时选择多个架构时,构建系统会将多个架构的镜像以同一镜像版本的形式推送到镜像仓库。
在 Dockerfile 中需要依赖倚天的 Base Image,可以直接使用前面 ACR 制品中心的多架构 Base Image。在业务代码部分,一般像 Java 解释型语言的源代码有编译器生成字节码,然后再由 Jvm 虚拟机执行。虚拟机将屏蔽不同的CPU指令集,一般不需要重新编译。大部分场景下,您直接替换 Base Image 比如换成 Dragonwell11/17,重新构建打包成容器镜像即可。
像是 C/C++ 编译型语言,必须经过重新编译才能运行在ARM实例上,可以通过阿里 CodeScan 解决源码修改相关的问题。更多详情可参考前面 ECS 倚天实例编程语言适配的相关课程。最终多架构的镜像可以放在同一个镜像版本之下,比如图中,main这个镜像版本下面,有 arm64 和 amd64 的镜像 digest。
推荐在您的 CI/CD 流程中,就自动化内置 ARM 架构镜像的构建和测试。以上图为例,在代码提交后,可以基于CodeScan 这样的工具做ARM依赖检测。在 CI 测试阶段,进行 ARM 自动化 CI 测试。在镜像构建阶段,如果不选用ACR EE,也可以通过 Buildx 这样的 plugin 去拓展构建能力,最终将多架构容器镜像构建并推送至 ACR。在系统集成测试中,也可以把 ARM 集成起来。
前面介绍完了如何构建多架构容器镜像,现在我们将介绍如何在 ACK 中创建 ARM节点池,实现同时管理 X86、ARM节点。
在已有的 ACK 集群下,新建一个 ARM 节点池,选择 alinux 3的 OS。在创建完成后,ARM 节点默认带有污点 kubernetes.io/arch=arm64:NoSchedule,无需担心现有组件和应用被错误调度到 ARM 节点上。如果你使用的是ECI 实例,可以直接复用同一个虚拟节点,虚拟节点支持同时创建 X86 和 ARM 的 ECI 实例。
那么在工作负载上其实只需要稍微指定一下,哪些工作负载调度到 ARM 节点上就可以了,在这里调度又分为两种场景。
第一种场景,在前期测试的业务场景,您可以指定当前的业务仅跑在 ARM 节点池/虚拟节点上,只需在工作负载的yaml上使用nodeSelector nodeAffinity将Pod指定调度至 arm64上。调度器会自动容忍污点 kubernetes.io/arch=arm64:NoSchedule,您不需要额外添加容忍此污点的声明。对应的Pod就调度至ARM节点池上,自动拉取ARM的容器镜像版本。
第二个场景,在后续正式使用时,您希望业务可以在X86和Arm上混跑,进行逐步平滑迁移和流量配置。可以直接在工作负载 yaml 中申明容忍 arm64 的污点,那么 Pod 就可以同时调度至 X86 和 ARM 的机器上了。
完成了工作负载的调度指定,在后续的运维管理中,您也可以通过 ACK 的组件管理,查询并使用适配 ARM 的组件。目前,ACK 核心组件都已支持 ARM 架构,可以帮助您进行可观测、运维的能力增强。
总结一下,ACK 上多架构应用部署的实践还是比较简单的。容器镜像服务 ACR 支持多架构镜像托管/构建。您可以使用 ACR 构建或者本地构建,将多架构镜像推送至 ACR。之后在 ACK 上的 Runtime 会自动根据本地架构类型拉取合适的镜像。
一个 ACK 集群支持同时管理X86节点池和ARM节点池,在工作负载的业务 yaml 中仅需指定调度方式,就可以方便的实现业务在 X86 和 ARM 间平滑迁移和配置。
倚天社区作为一站式的开发者的支撑平台,提供了丰富的业务使用经验,包含软件应用、工具、活动信息等等,欢迎大家登录去社区了解更多咨询,同时可以扫码免费领用倚天ARM云服务器,开启属于你的云上实践之旅。
以上就是我本次课程的全部内容,想要关注更多【倚天实例迁移课程】直播的同学可以点击链接/扫描下方二维码进入活动官网了解更多资讯!