AWS용 GKE에서 ARM 워크로드 실행

AWS용 GKE를 사용하면 Arm 기반 AWS Graviton 프로세서용으로 빌드된 Arm 워크로드를 실행할 수 있습니다.

제한사항

  • 1.24.8-gke.1300 이전의 Kubernetes 버전을 실행하는 Arm 노드 풀은 Arm 워크로드가 Arm이 아닌 노드에 예약되는 것을 방지하기 위해 노드 풀을 생성하는 동안 taint를 자동으로 추가합니다. 1.24.8-gke.1300 이상 버전의 클러스터에 있는 Arm 노드 풀은 더 이상 이 taint를 추가하지 않습니다. 1.24.8-gke.1300 이전 클러스터에서 업그레이드하는 경우 이 taint를 직접 만들거나 업그레이드할 때 이를 고려해야 합니다.

  • AWS용 GKE의 Arm 노드 풀은 Anthos Service Mesh, 구성 동기화 또는 정책 컨트롤러를 지원하지 않습니다. 이러한 제품은 x86 노드 풀에서 실행해야 합니다.

  • Kubernetes 버전 1.24를 실행하는 클러스터는 Connect 에이전트 실행을 위해 x86 노드 풀이 필요합니다. 클러스터가 Kubernetes 버전 1.25 이상을 실행하는 경우 x86 노드 풀이 필요하지 않습니다.

이 페이지에서는 Arm 노드 풀을 만드는 방법, 멀티 아키텍처 이미지가 Arm 워크로드를 배포하는 권장 방법인 이유, Arm 워크로드를 예약하는 방법을 설명합니다.

시작하기 전에

Arm 워크로드의 노드 풀을 만들기 전에 다음 리소스가 필요합니다.

  • 노드 풀을 만들 기존 AWS 클러스터. 이 클러스터는 Kubernetes 버전 1.24 이상을 실행해야 합니다.
  • 노드 풀 VM의 IAM 인스턴스 프로필.
  • 노드 풀 VM이 실행될 서브넷.
  • 클러스터가 Kubernetes 버전 1.24를 실행하는 경우 x86 노드 풀이 Connect 에이전트를 실행해야 합니다.

    AWS용 GKE에서 노드 풀을 만드는 방법에 대한 자세한 내용은 노드 풀 만들기를 참조하세요.

Arm 노드 풀 만들기

AWS용 GKE는 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: 노드 풀 VM의 IAM 인스턴스 프로필

  • NODE_VERSION: 노드 풀의 각 노드에 설치할 Kubernetes 버전(1.24버전 이상) 예를 들면 1.24.3-gke.200입니다.

  • MIN_NODES: 노드 풀에 포함할 수 있는 최소 노드 수

  • MAX_NODES: 노드 풀에 포함할 수 있는 최대 노드 수

  • MAX_PODS_PER_NODE: 풀의 단일 노드에 생성할 수 있는 최대 포드 수

  • GOOGLE_CLOUD_LOCATION: Google Cloud의 이름

    노드 풀이 관리될 Google Cloud 위치의 이름

  • NODEPOOL_SUBNET: 노드 풀이 실행될 서브넷의 ID입니다. 이 서브넷이 VPC의 기본 CIDR 블록 외부에 있으면 추가 단계를 수행해야 합니다. 자세한 내용은 보안 그룹을 참조하세요.

  • SSH_KEY_PAIR_NAME: SSH 액세스를 위해 생성된 AWS SSH 키 쌍의 이름입니다(선택사항).

  • CONFIG_KMS_KEY_ARN: 사용자 데이터를 암호화하는 AWS KMS 키의 Amazon 리소스 이름(ARN)입니다.

멀티 아키텍처 이미지 이해하기

컨테이너 이미지는 Arm 워크로드를 실행하려는 노드의 아키텍처와 호환되어야 합니다. 컨테이너 이미지가 ARM과 호환되는지 확인하려면 멀티 아키텍처('multi-arch') 이미지를 사용하는 것이 좋습니다.

멀티 아키텍처 이미지는 아키텍처 여러 개를 지원할 수 있는 이미지입니다. 단일 태그가 있는 단일 이미지처럼 보이지만 다양한 머신 아키텍처에서 실행할 이미지 집합을 포함합니다. 멀티 아키텍처 이미지는 Docker 이미지 Manifest V2 스킴 2 또는 OCI 이미지 색인 사양과 호환됩니다.

클러스터에 멀티 아키텍처 이미지를 배포할 때 컨테이너 런타임은 배포할 노드 아키텍처와 호환되는 올바른 이미지를 자동으로 선택합니다. 워크로드의 멀티 아키텍처 이미지가 있으면 여러 아키텍처 전반에서 이 워크로드를 배포할 수 있습니다. 단일 아키텍처 이미지를 호환되지 않는 노드로 예약하면 로드 시에 오류가 발생합니다.

Arm 워크로드에서 멀티 아키텍처 이미지를 사용하는 방법에 대한 자세한 내용은 Google Kubernetes Engine(GKE) 문서의 Arm 워크로드를 위한 멀티 아키텍처 이미지 빌드를 참조하세요.

다음 단계