随着ARM64架构服务端的流行,为了让您选择更加多元化,EDAS在K8s集群中使用WAR、JAR包部署应用时,支持选择多平台架构。本文介绍如何在EDAS控制台配置镜像目标架构。
使用限制
仅支持Kubernetes ACK集群。
仅支持使用WAR、JAR包部署应用的场景。
Java环境为Open JDK≥8或Dragonwell JDK。
当构建仓库类型为ACR仓库时,您使用的是自己的镜像构建机器。此时,需使用Linux内核版本大于4.8的操作系统,版本如下:
Alibaba Cloud Linux全系列
Anolis OS全系列
Ubuntu 18.04.0 LTS +
Centos 8+
前提条件
升级arms-pilot至ack-onepilot 3.0.13版本。您需手工检查及升级arms-pilot版本,操作如下:
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择
。在Helm页面,检查是否有ack-onepilot,且Chart版本≥3.0.13。如果没有,请在
页面,查找ack-onepilot,进行安装或升级。安装ack-onepilot完成后,在
页面,卸载ack-arms-pilot或arms-pilot。
操作步骤
您可在创建或部署应用时,配置镜像目标架构。
登录EDAS控制台,在左侧导航栏单击 ,在顶部菜单栏选择地域并在页面上方选择微服务空间,然后在应用列表页面左上角单击创建应用。
在应用基本信息页签,选择集群类型为Kubernetes集群,然后单击下一步。
在应用配置页签的镜像目标架构右侧,选择所需架构,单击下一步。
linux/amd64:指构建的镜像支持运行在Linux x86_64平台架构上。
linux/arm64:指构建的镜像支持运行在Linux arm_64平台架构上。
如果您希望在一个集群里同时存在linux/amd64、linux/arm64的Worker,存在以下两种使用场景:
场景
建议
优缺点分析
不同的应用运行在不同的架构上
推荐。
优点:可控性高,可避免不同架构的节点性能不一致带来的性能问题。
缺点:需为ARM架构的Worker打上污点,同时调度到ARM架构的应用需配置调度策略。具体操作,请参见如何在一个已经运行应用的集群上,添加不同架构的Worker,并调度至新架构Worker。
同一个应用的Pod被随机调度到不同架构的机器上
不推荐。
优点:无需配置调度策略。
缺点:两种架构的机器性能通常不一致。在负载较重时,对于微服务应用,如果Consumer端使用round robin策略,可能导致性能差的机器工作队列堆积,从而造成运行慢的机器RT拉长,性能好的机器空闲。
多选时,利用多架构镜像技术构建的镜像支持所有选择的平台架构。所使用技术,请参见本地构建和推送多架构镜像到容器镜像服务。
说明当镜像目标架构选择多种架构时,构建时间较长,分为以下两种情况:
构建仓库类型为EDAS镜像仓库时,由于使用EDAS构建机器,机器性能较好,多一种架构构建时间增加10~60秒之间。
构建仓库类型为ACR仓库时,构建机器使用自己的机器,默认限制了CPU性能,多一种架构构建时间增加2~6分钟之间。
建议构建机器使用amd64机器,可通过为机器添加标签
edas.image.build: enable
,让构建任务调度至指定机器。请参见如何调整镜像构建资源限制?, 调整资源限制加速构建镜像。
在应用高级设置页签,根据业务需求配置相关参数。
完成设置后单击创建应用,然后在应用创建完成页签,单击确定创建应用。
在应用变更预检确认对话框,单击开始预检。
在应用变更预检确认的下一页,确认预检项和预检结果,单击继续。
可选:如您有更改以上预检项,请单击重新检测。
应用创建可能需要几分钟,创建过程中,可以通过查看变更记录跟踪应用的创建流程。创建完成后,返回应用总览页面,查看实例Pod的运行状态。若运行状态为运行中,说明应用发布成功。单击Pod的运行状态可以查看应用实例的工作负载(Deployment)、容器组(Pod)和高级配置信息。
说明预检任务将为多架构部署检查以下异常情况。
所选架构没有相应架构的Worker节点。例如,在EDAS中仅选择linux/arm64,但集群只有linux/amd64的Worker节点。
构建仓库类型为ACR仓库且所选架构数量≥1,但集群中无内核版本≥4.8的Worker节点。
对于一些EDAS中较旧的应用,仍在使用非Open JDK、dragonwell JDK的Java环境。
常见问题
如何在一个已经运行应用的集群上,添加不同架构的Worker,并调度至新架构Worker
例如,集群原有linux/amd64的机器,需添加linux/arm64的机器,请按以下步骤操作:
在ACK集群管控页面添加新的arm64节点池,节点池配置中添加污点
kubernetes.io/arch=arm64
,且Effect设置为NoSchedule,确保只有指定运行在ARM节点上的应用和组件才会被调度至ARM节点上。操作入口,请参见创建节点池。在EDAS应用高级设置页签配置调度策略,设置节点亲和性和调度容忍,调度至arm64的应用。
构建镜像任务一直在执行中或失败时,怎么办
构建仓库类型为ACR仓库时,当构建镜像任务一直在执行中或失败时,可通过以下命令查看相关状态。
执行以下命令,查询构建镜像的Pod状态及名称。
kubectl get pods -o wide | grep -i 应用名 | grep imagebuild
执行以下命令,查看构建镜像日志。
kubectl logs Pod名称
应用Pod状态为Error或CrashLoopBackOff时,怎么办
执行以下命令,查询Pod日志。
kubectl logs Pod名称
日志显示:
exec /bin/sh: exec format error
请检查所选镜像架构是否包含节点架构。如果不包含,请参见如何在一个已经运行应用的集群上,添加不同架构的Worker,并调度至新架构Worker,完成相关配置。
应用启动或执行很慢时,怎么办
在Pod容器中运行以下命令:
ps -ef | grep java
若
java
命令前有qemu
字样,表明当前节点使用qemu模式运行该镜像。请参见如何在一个已经运行应用的集群上,添加不同架构的Worker,并调度至新架构Worker,完成相关配置。
相关文档
非WAR包、JAR包创建及部署应用场景下,支持多镜像目标架构参考文档如下所示:
构建多架构容器镜像:
调度负载:调度负载至Arm节点