配置镜像目标架构

随着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版本,操作如下:

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择应用 > Helm

  3. Helm页面,检查是否有ack-onepilot,且Chart版本≥3.0.13。如果没有,请在运维管理 > 组件管理页面,查找ack-onepilot,进行安装或升级。

  4. 安装ack-onepilot完成后,在应用 > Helm页面,卸载ack-arms-pilot或arms-pilot。

操作步骤

您可在创建或部署应用时,配置镜像目标架构。

  1. 登录EDAS控制台,在左侧导航栏单击应用管理 > 应用列表,在顶部菜单栏选择地域并在页面上方选择微服务空间,然后在应用列表页面左上角单击创建应用

  2. 应用基本信息页签,选择集群类型Kubernetes集群,然后单击下一步

  3. 应用配置页签的镜像目标架构右侧,选择所需架构,单击下一步

    • linux/amd64:指构建的镜像支持运行在Linux x86_64平台架构上。

    • linux/arm64:指构建的镜像支持运行在Linux arm_64平台架构上。

    如果您希望在一个集群里同时存在linux/amd64linux/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,让构建任务调度至指定机器。请参见如何调整镜像构建资源限制?, 调整资源限制加速构建镜像。

  4. 应用高级设置页签,根据业务需求配置相关参数。

  5. 完成设置后单击创建应用,然后在应用创建完成页签,单击确定创建应用

  6. 应用变更预检确认对话框,单击开始预检

    1. 应用变更预检确认的下一页,确认预检项和预检结果,单击继续

    2. 可选:如您有更改以上预检项,请单击重新检测

    应用创建可能需要几分钟,创建过程中,可以通过查看变更记录跟踪应用的创建流程。创建完成后,返回应用总览页面,查看实例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的机器,请按以下步骤操作:

  1. 在ACK集群管控页面添加新的arm64节点池,节点池配置中添加污点kubernetes.io/arch=arm64,且Effect设置为NoSchedule,确保只有指定运行在ARM节点上的应用和组件才会被调度至ARM节点上。操作入口,请参见创建节点池

  2. 在EDAS应用高级设置页签配置调度策略,设置节点亲和性调度容忍,调度至arm64的应用。

    image.pngimage.png

构建镜像任务一直在执行中或失败时,怎么办

构建仓库类型为ACR仓库时,当构建镜像任务一直在执行中或失败时,可通过以下命令查看相关状态。

  1. 执行以下命令,查询构建镜像的Pod状态及名称。

    kubectl get pods -o wide | grep -i 应用名 | grep imagebuild
  2. 执行以下命令,查看构建镜像日志。

    kubectl logs Pod名称

应用Pod状态为Error或CrashLoopBackOff时,怎么办

  1. 执行以下命令,查询Pod日志。

    kubectl logs Pod名称

    日志显示:

    exec /bin/sh: exec format error

    请检查所选镜像架构是否包含节点架构。如果不包含,请参见如何在一个已经运行应用的集群上,添加不同架构的Worker,并调度至新架构Worker,完成相关配置。

应用启动或执行很慢时,怎么办

  1. 在Pod容器中运行以下命令:

    ps -ef | grep java

    java命令前有qemu字样,表明当前节点使用qemu模式运行该镜像。请参见如何在一个已经运行应用的集群上,添加不同架构的Worker,并调度至新架构Worker,完成相关配置。

相关文档

非WAR包、JAR包创建及部署应用场景下,支持多镜像目标架构参考文档如下所示: