容器服务ACK已完整支持云服务器Arm节点池的生命周期管理,包括节点添加、扩容、升级、删除。同时ACR支持多架构镜像的管理,使用统一镜像部署在Arm和x86节点池中,简化ACK基础组件和用户应用在多架构集群中的管理。本文详细介绍了如何创建Arm集群和节点池以及将应用部署到Arm节点上。

使用限制

  • 配置Arm节点池的集群版本≥1.20。
  • Arm节点的操作系统只支持Alibaba Cloud Linux 3。
  • 组件中心中支持Arm的组件列表:
    • 核心组件
    • 日志和监控
    • 存储
    • 网络
  • 应用市场的组件不支持Arm。

步骤一:创建Arm集群和节点池

方案一:创建集群时添加Arm节点

使用这种方案,您可以创建一个只包含Arm节点的新集群。

创建集群,详细信息请参见创建Kubernetes托管版集群。在集群创建过程中,进行节点池配置时,在实例规格区域,架构选择ARM计算,然后按需选择所需实例规格。然后配置其他参数,完成集群创建。
说明

方案二:创建一个Arm节点池

使用这种方案,您可以在已有集群上创建一个包含Arm节点的节点池。

创建节点池,详细信息请参见创建节点池。在节点池创建过程中,在实例规格区域,架构选择ARM计算,然后按需选择所需实例规格。然后配置其他参数,完成节点池创建。
说明

步骤二:将应用部署到Arm节点上

为了让应用运行在Arm节点上,您的应用需要支持Arm架构。您可以使用多架构容器镜像,或者推送针对Arm编译的容器镜像。

指定应用运行在Arm节点上

如果您的集群中既有Arm节点也有非Arm节点,且您的应用只支持Arm架构,您需要指定应用运行在Arm节点上,以免应用Pod被调度到非Arm节点上导致启动失败。

所有Arm节点上默认带有Label:kubernetes.io/arch=arm64,您可以通过Pod nodeSelector指定应用运行在Arm节点上。使用如下实例,可以将nginx部署在Arm节点上。
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      nodeSelector:
        kubernetes.io/arch: arm64 #指定Arm节点。
      containers:
      - name: nginx
        image: nginx:1.14.2

使用多架构容器镜像

多架构容器镜像支持在一个镜像内包含多种架构的镜像,例如同时支持amd64和Arm的镜像,它可以运行在Arm节点上,也可以运行在amd64节点上。为了推送多架构镜像,镜像客户端和镜像服务器都需要支持多架构,目前阿里云镜像服务ACR已经支持多架构镜像。

下面的实例演示如何构建和推送一个nginx多架构镜像。

  1. 准备支持amd64的镜像和支持Arm的镜像。本例中使用的两个镜像为registry.cn-hangzhou.aliyuncs.com/acs/myapp:amd64registry.cn-hangzhou.aliyuncs.com/acs/myapp:arm
  2. 执行如下命令,创建多架构镜像。
    docker manifest create registry.cn-hangzhou.aliyuncs.com/acs/myapp \
        --amend registry.cn-hangzhou.aliyuncs.com/acs/myapp:amd64 \
        --amend registry.cn-hangzhou.aliyuncs.com/acs/myapp:arm64
  3. 使用docker manifest push命令,将多架构镜像registry.cn-hangzhou.aliyuncs.com/acs/myapp:latest推送到镜像仓库。
    docker manifest push registry.cn-hangzhou.aliyuncs.com/acs/myapp
    接下来就可以在Pod中使用这个镜像了。

将社区多架构镜像同步到自己的仓库中

很多开源软件都提供了容器镜像,并且支持多架构。为了让应用在ACK上部署更快,您可以将这些镜像同步到您自己的ACR仓库中。下面以nginx:1.23.2为例,介绍如何在自己的ACR仓库中添加一份nginx多架构镜像。

  1. 执行如下命令,拉取amd64镜像,并将tag重命名为nginx:1.23.2-amd64
    docker pull --platform linux/amd64 nginx:1.23.2
    docker tag nginx:1.23.2 nginx:1.23.2-amd64
  2. 执行如下命令,拉取Arm镜像,并将tag重命名为nginx:1.23.2-arm64
    docker pull --platform linux/arm64 nginx:1.23.2
    docker tag nginx:1.23.2 nginx:1.23.2-arm64
  3. 执行如下命令,创建多架构镜像,请将下面的仓库地址替换成您的仓库地址。
    docker manifest create registry.cn-hangzhou.aliyuncs.com/acs/nginx:1.23.2 \ #
        --amend nginx:1.23.2-arm64 \
        --amend nginx:1.23.2-amd64
  4. 执行如下命令,推送多架构镜像,请将下面的仓库地址替换成您的仓库地址。
    docker manifest push registry.cn-hangzhou.aliyuncs.com/acs/nginx:1.23.2

相关文档

云服务器ECS ARM实例规格族