在 GKE on AWS 中运行 Arm 工作负载

GKE on AWS 可让您运行为基于 Arm 的 AWS Graviton 处理器构建的 Arm 工作负载。

限制

  • 运行版本低于 1.24.8-gke.1300 的 Kubernetes 的 Arm 节点池在创建节点池期间会自动添加污点,以防止 Arm 工作负载被调度到非 Arm 节点上。1.24.8-gke.1300 版或更高版本的集群中的 Arm 节点池不再添加此污点。如果您要从低于 1.24.8-gke.1300 的集群升级,您必须自行创建此污点,否则请在升级时考虑这一点。

  • GKE on AWS 上的 Arm 节点池不支持 Anthos Service Mesh、Config Sync 或 Policy Controller。您必须在 x86 节点池上运行这些产品。

  • 运行 Kubernetes 1.24 版的集群需要 x86 节点池来运行 Connect Agent。如果集群运行的是 Kubernetes 1.25 版或更高版本,则不需要 x86 节点池。

本页面介绍了如何创建 Arm 节点池、多架构映像是部署 Arm 工作负载的推荐方法的原因,以及如何调度 Arm 工作负载。

准备工作

在为 Arm 工作负载创建节点池之前,您需要准备以下资源:

  • 要在其中创建节点池的现有 AWS 集群。此集群必须运行 Kubernetes 1.24 版或更高版本。
  • 适用于节点池虚拟机的 IAM 实例配置文件
  • 节点池虚拟机将在其中运行的子网
  • 如果集群运行的是 Kubernetes 1.24 版,则需要 x86 节点池来运行 Connect Agent

    如需详细了解如何在 GKE on AWS 中创建节点池,请参阅创建节点池

创建 Arm 节点池

GKE on AWS 支持基于 Canonical Ubuntu arm64 最小节点映像和 containerd 运行时构建的节点池。

如需创建 Arm 节点池并将其添加到现有集群,请运行以下命令:

gcloud container aws node-pools create NODE_POOL_NAME \
    --cluster CLUSTER_NAME \
    --instance-type INSTANCE_TYPE \
    --root-volume-size ROOT_VOLUME_SIZE \
    --iam-instance-profile NODEPOOL_PROFILE \
    --node-version NODE_VERSION \
    --min-nodes MIN_NODES \
    --max-nodes MAX_NODES \
    --max-pods-per-node MAX_PODS_PER_NODE \
    --location GOOGLE_CLOUD_LOCATION \
    --subnet-id NODEPOOL_SUBNET \
    --ssh-ec2-key-pair SSH_KEY_PAIR_NAME \
    --config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN

请替换以下内容:

  • NODE_POOL_NAME:您为节点池选择的名称
  • CLUSTER_NAME:要将节点池连接到的集群的名称
  • INSTANCE_TYPE:以下实例类型之一:

    • m6g
    • m6gd
    • t4g
    • r6g
    • r6gd
    • c6g
    • c6gd
    • c6gn
    • x2gd
    • c7g
    • im4gn
    • g5g

      这些实例类型由基于 Arm 的 AWS Graviton 处理器提供支持。您还需要指定所需的实例大小。例如 m6g.medium。如需查看完整列表,请参阅支持的 AWS 实例类型

  • ROOT_VOLUME_SIZE:每个节点的根卷的所需大小(以 Gb 为单位)

  • NODEPOOL_PROFILE:适用于节点池虚拟机的 IAM 实例配置文件

  • NODE_VERSION:要在节点池中的每个节点上安装的 Kubernetes 版本,必须为 1.24 或更高版本。例如 1.24.3-gke.200

  • MIN_NODES:节点池可以包含的节点数下限

  • MAX_NODES:节点池可以包含的节点数上限

  • MAX_PODS_PER_NODE:可以在池中的任何单个节点上创建的 Pod 数上限

  • GOOGLE_CLOUD_LOCATION:Google Cloud 位置的名称

    在其中管理此节点池的位置

  • NODEPOOL_SUBNET:节点池将在其中运行的子网的 ID。如果此子网在 VPC 的主要 CIDR 地址块之外,则您需要执行一些额外的步骤。如需了解详情,请参阅安全群组

  • SSH_KEY_PAIR_NAME:为 SSH 访问创建的 AWS SSH 密钥对的名称(可选)

  • CONFIG_KMS_KEY_ARN:对用户数据进行加密的 AWS KMS 密钥的 Amazon 资源名称 (ARN)

了解多架构映像

容器映像必须与要在其中运行 Arm 工作负载的节点架构兼容。为确保容器映像与 Arm 兼容,我们建议您使用多架构映像。

多架构映像是一种可以支持多个架构的映像。它看起来像具有单个标记的单个映像,但实际包含一组要在不同机器架构上运行的映像。多架构映像与 Docker Image Manifest V2 Scheme 2 或 OCI 映像索引规范兼容。

将多架构映像部署到集群时,容器运行时会自动选择与所部署到的节点的架构兼容的映像。将多架构映像用于工作负载后,您可以跨多个架构部署此工作负载。将单架构映像调度到不兼容的节点上会在加载时导致错误发生。

如需详细了解如何将多架构映像用于 Arm 工作负载,请参阅 Google Kubernetes Engine (GKE) 文档中的为 Arm 工作负载构建多架构映像

后续步骤