ARM 아키텍처에 Autopilot 워크로드 배포


이 페이지에서는 Arm 아키텍처에서 지원하는 노드를 요청하도록 Google Kubernetes Engine(GKE) Autopilot 배포를 구성하는 방법을 보여줍니다.

Autopilot의 ARM 아키텍처 정보

Autopilot 클러스터는 특정 하드웨어 요구사항이 있는 워크로드에 대해 컴퓨팅 클래스를 제공합니다. 이러한 컴퓨팅 클래스 중 일부는 amd64arm64와 같은 여러 CPU 아키텍처를 지원합니다.

ARM 노드 사용 사례

Arm 아키텍처를 사용하는 노드는 비슷한 x86 노드보다 더 비용 효율적인 성능을 제공합니다. 다음과 같은 상황에서 Autopilot 워크로드에 Arm을 선택해야 합니다.

  • 개발자 환경은 빌드 및 테스트에 ARM 아키텍처를 사용합니다.
  • Arm CPU에서 실행되는 Android 기기용 애플리케이션을 개발합니다.
  • 멀티 아키텍처 이미지를 사용하고 워크로드를 실행하면서 비용을 최적화하길 원합니다.

Autopilot에서 ARM 노드를 요청하는 방법

포드에 대해 Arm 노드를 요청하려면 Arm 아키텍처를 사용하여 노드를 요청하고 Arm 노드를 지원하는 컴퓨팅 클래스를 요청해야 합니다. 다음 섹션에서는 포드 사양에서 노드 선택기 또는 노드 어피니티 규칙을 사용하여 컴퓨팅 클래스와 ARM 아키텍처를 요청하는 방법을 설명합니다.

ARM 아키텍처를 지원하는 컴퓨팅 클래스 목록은 Autopilot의 컴퓨팅 클래스를 참조하세요.

시작하기 전에

시작하기 전에 다음 태스크를 수행했는지 확인합니다.

  • Google Kubernetes Engine API를 사용 설정합니다.
  • Google Kubernetes Engine API 사용 설정
  • 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화합니다. 이전에 gcloud CLI를 설치한 경우 gcloud components update를 실행하여 최신 버전을 가져옵니다.
  • GKE 버전 1.24.1-gke.1400 이상을 실행하는 GKE Autopilot 클러스터가 있는지 확인합니다. 버전을 설정하려면 create 또는 upgrade 명령어에 --cluster-version 플래그를 사용합니다.
  • T2A Compute Engine 머신 유형에 대한 할당량이 있는지 확인합니다.
  • Arm 아키텍처를 위해 빌드된 컨테이너 이미지가 있는 포드가 있는지 확인합니다.

컴퓨팅 클래스 및 ARM 아키텍처 요청

Autopilot에 ARM 아키텍처를 지원하는 컴퓨팅 클래스에 포드를 배치하도록 지시하려면 nodeSelector 또는 노드 어피니티 규칙에 다음 라벨을 모두 지정합니다.

cloud.google.com/compute-class: COMPUTE_CLASS
kubernetes.io/arch: arm64

COMPUTE_CLASS를 ARM 아키텍처를 지원하는 컴퓨팅 클래스 이름(예: Scale-Out)으로 바꿉니다.

워크로드를 배포하면 Autopilot이 다음을 수행합니다.

  1. 포드를 실행하도록 ARM 노드를 자동으로 프로비저닝합니다.
  2. 새 노드를 자동으로 taint하여 ARM이 아닌 포드가 이러한 노드에 예약되지 않도록 합니다.
  3. 새 노드에서 예약을 허용하도록 ARM 포드에 자동으로 톨러레이션(toleration)을 추가합니다.

Spot 포드의 ARM 아키텍처를 요청할 수도 있습니다.

ARM 아키텍처에 대한 요청 예시

다음 예시 사양은 노드 선택기 또는 노드 어피니티 규칙을 사용하여 Autopilot에서 ARM 아키텍처를 요청하는 방법을 보여줍니다.

nodeSelector

다음 예시 매니페스트는 nodeSelector에서 Arm 노드를 요청하는 방법을 보여줍니다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-arm
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-arm
  template:
    metadata:
      labels:
        app: nginx-arm
    spec:
      nodeSelector:
        cloud.google.com/compute-class: Scale-Out
        kubernetes.io/arch: arm64
      containers:
      - name: nginx-arm
        image: nginx
        resources:
          requests:
            cpu: 2000m
            memory: 2Gi

nodeAffinity

노드 어피니티를 사용하여 Arm 노드를 요청할 수 있습니다. 사용할 노드 어피니티 유형을 지정할 수도 있습니다.

  • requiredDuringSchedulingIgnoredDuringExecution: 지정된 컴퓨팅 클래스 및 아키텍처를 사용해야 합니다.
  • preferredDuringSchedulingIgnoredDuringExecution: 가능한 한 지정된 컴퓨팅 클래스 및 아키텍처를 사용합니다. 예를 들어 기존 x86 노드를 할당할 수 있으면 GKE가 새 Arm 노드를 프로비저닝하는 대신 x86 노드에 포드를 배치합니다. 멀티 아키텍처 이미지 매니페스트를 사용하지 않는 한 포드가 다운됩니다. 원하는 특정 아키텍처를 명시적으로 요청하는 것이 좋습니다.

다음 매니페스트 예시에서는 Scale-Out 클래스와 ARM 노드가 필요합니다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-arm
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-arm
  template:
    metadata:
      labels:
        app: nginx-arm
    spec:
      terminationGracePeriodSeconds: 25
      containers:
      - name: nginx-arm
        image: nginx
        resources:
          requests:
            cpu: 2000m
            memory: 2Gi
            ephemeral-storage: 1Gi
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: cloud.google.com/compute-class
                operator: In
                values:
                - Scale-Out
              - key: kubernetes.io/arch
                operator: In
                values:
                - arm64

권장사항

  • 파이프라인의 일부로 멀티 아키텍처 이미지를 빌드 및 사용합니다. 멀티 아키텍처 이미지는 x86 노드에 배치되었더라도 포드가 실행되도록 합니다.
  • 워크로드 매니페스트에 아키텍처 및 컴퓨팅 클래스를 명시적으로 요청합니다. 그렇지 않으면 Arm이 아닐 수 있는 선택한 컴퓨팅 클래스의 기본 아키텍처가 Autopilot에 사용됩니다.

가용성

다음 Google Cloud 리전에서 Arm 아키텍처에 Autopilot 워크로드를 배포할 수 있습니다.

  • us-central1
  • europe-west4
  • asia-southeast1

문제 해결

일반적인 오류 및 문제 해결 정보는 ARM 워크로드 문제 해결을 참조하세요.

다음 단계