배포를 위한 ARM 워크로드 준비


이 페이지에서는 GKE Standard 클러스터의 ARM 노드에서 예약되도록 워크로드를 준비하는 방법을 설명합니다. Autopilot으로 ARM 워크로드를 예약하는 방법에 대한 자세한 내용은 ARM 아키텍처에 Autopilot 워크로드 배포를 참조하세요.

워크로드를 ARM 노드에 성공적으로 예약하려면 다음 항목을 확보해야 합니다.

개요

기본적으로 GKE는 taint(kubernetes.io/arch=arm64:NoSchedule)를 모든 ARM 노드에 배치하여 Intel 또는 AMD 프로세서를 사용하는 Compute Engine 머신 시리즈인 x86 기반 노드에만 워크로드를 예약합니다. 이 taint는 x86 호환 워크로드가 실수로 ARM 노드에 예약되지 않도록 방지합니다. 워크로드를 ARM 노드에 배포하려면 이 페이지에 설명된 필드를 사용하여 스케줄러가 원하는 노드 유형으로 워크로드를 보내도록 안내합니다.

다음 필드 중 하나를 사용합니다.

노드 선택기 또는 노드 어피니티 규칙을 사용하는 경우 워크로드의 컨테이너 이미지를 노드 아키텍처에서 실행할 수 있도록 선언한 경우에만 GKE에서 ARM 호환 워크로드를 예약합니다.

다음 섹션에 설명된 대로 노드 선택기 또는 노드 어피니티 규칙을 사용하여 Arm 호환 워크로드를 예약할 경우 포드가 Arm 노드에서 실행될 수 있도록 GKE가 워크로드 구성에 톨러레이션(toleration)을 자동으로 추가합니다.

워크로드에 추가된 이러한 톨러레이션(toleration)은 Arm 노드에서 워크로드를 예약할 수 있도록 모든 Arm 노드에 추가된 taint(kubernetes.io/arch=arm64:NoSchedule)와 일치합니다.

모든 노드에서 실행될 수 있는 멀티 아키텍처 이미지가 있는 경우와 같은 일부 상황에서는 이 톨러레이션(toleration)을 워크로드 구성에 수동으로 추가해야 할 수 있습니다. 자세한 내용은 톨러레이션(toleration)을 사용해 멀티 아키텍처 워크로드를 모든 아키텍처에 예약을 참조하세요.

노드 선택기를 사용한 ARM 워크로드 예약

사양에 다음 노드 선택기를 추가합니다.

nodeSelector:
    kubernetes.io/arch: arm64

노드 선택기에서 GKE 클러스터의 모든 ARM 노드에 있는 arm64 라벨이 있는 노드에만 이 워크로드를 예약하도록 지정합니다.

이 노드 선택기가 워크로드 구성에 포함된 경우 Arm 노드에서 워크로드를 예약할 수 있게 taint와 일치하도록 GKE가 톨러레이션(toleration)을 추가합니다.

노드 어피니티 규칙을 사용한 ARM 워크로드 예약

노드 어피니티를 사용해도 워크로드를 예약할 수 있습니다.

단일 아키텍처에 워크로드 예약

사양에 다음 노드 어피니티를 추가합니다.

  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: kubernetes.io/arch
            operator: In
            values:
            - arm64

노드 어피니티 규칙에서 GKE 클러스터의 모든 ARM 노드에 있는 arm64 라벨이 있는 노드에만 워크로드가 예약되도록 지정합니다.

이 어피니티 규칙이 워크로드 구성에 포함되었으면 Arm 노드에서 워크로드를 예약할 수 있게 taint와 일치하도록 GKE가 톨러레이션(toleration)을 추가합니다.

x86 및 Arm 아키텍처로 워크로드 예약

x86(Intel 및 AMD 프로세서) 및 Arm 아키텍처 모두 워크로드를 예약하려면 이를 다른 방식으로 지정할 수 있습니다.

톨러레이션(toleration)을 사용해 멀티 아키텍처 워크로드를 모든 아키텍처에 예약

표준 클러스터에서 사용 가능한 아키텍처 유형에 멀티 아키텍처 이미지를 예약하려는 경우 워크로드 사양에 톨러레이션(toleration)만 추가하면 됩니다. 모든 아키텍처 유형으로 워크로드를 예약할 수 있으므로 이 페이지에 설명된 노드 선택기 또는 노드 어피니티 규칙이 필요하지 않습니다.

톨러레이션(toleration)을 추가합니다.

  tolerations:
    - key: kubernetes.io/arch
      operator: Equal
      value: arm64
      effect: NoSchedule

이 톨러레이션(toleration)을 사용하면 GKE에서 모든 아키텍처 유형의 노드에 워크로드를 예약할 수 있습니다.

예를 들어 다음 노드 풀이 있는 클러스터의 경우 다음과 같습니다.

  • my-t2a-node-pool, t2a-standard-16 VM 사용(arm64)
  • my-c2-node-pool, c2-standard-8 VM 사용(amd64)
  • my-t2d-node-pool, t2-standard-48 VM 사용(amd64)

이 클러스터에 멀티 아키텍처 이미지 및 워크로드 구성의 arm64 톨러레이션(toleration)을 사용하는 워크로드를 배포할 경우 GKE가 모든 노드 풀에서 워크로드를 예약할 수 있습니다.

모든 아키텍처에 대해 멀티 아키텍처 워크로드를 예약하기 위해 노드 어피니티 규칙 사용

x86 및 Arm을 포함하여 아키텍처 유형 간 노드에 워크로드를 예약하려는 경우 노드 어피니티 규칙을 사용할 수도 있습니다.e. 노드 어피니티 규칙을 사용하면 워크로드를 예약할 아키텍처 유형을 정확히 지정할 수 있습니다. 이 방법은 Autopilot 클러스터에 워크로드를 예약하는 데 권장됩니다. 자세한 내용은 Arm 아키텍처에 Autopilot 워크로드 배포를 참조하세요.

x86 기반 워크로드의 경우 워크로드를 예약하기 위해 이러한 노드 선택기, 노드 어피니티 규칙, 톨러레이션(toleration)이 필요하지 않습니다. 이미지를 x86 기반 노드에만 예약할 때는 이러한 필드를 사용할 필요가 없습니다.

아키텍처 유형에 워크로드를 예약하려면 노드 어피니티 필드의 values 섹션에 arm64amd64를 모두 나열합니다. amd64에는 x86 프로세서를 사용하는 모든 노드가 포함됩니다.

다음 예시는 Arm 프로세서 또는 x86 프로세서를 사용하는 노드에 이 워크로드를 예약할 수 있도록 지정합니다.

  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: kubernetes.io/arch
            operator: In
            values:
            - arm64
            - amd64

각 아키텍처 유형의 라벨은 다음과 같습니다.

예를 들어 다음 노드 풀과 지정된 노드 어피니티 규칙이 있는 클러스터의 경우 다음과 같습니다.

  • my-t2a-node-pool, t2a-standard-16 VM 사용(arm64)
  • my-c2-node-pool, c2-standard-8 VM 사용(amd64)
  • my-t2d-node-pool, t2-standard-48 VM 사용(amd64)

values 목록에 arm64가 포함된 노드 어피니티 및 멀티 아키텍처 이미지를 사용하는 워크로드를 이 클러스터에 배포할 경우 GKE가 워크로드 구성에 톨러레이션(toleration)을 추가하고 모든 노드 풀에서 워크로드를 예약할 수 있습니다.

워크로드 배포

이제 ARM 호환 워크로드를 예약할 위치를 지정했으므로 워크로드를 배포할 수 있습니다.

GKE 클러스터에 워크로드를 배포할 때의 지침은 아키텍처 유형 간에 동일합니다. 사전에 필요한 단계를 완료하는 한 다른 워크로드를 배포할 때와 같이 Arm 호환 워크로드를 배포할 수 있습니다. 워크로드 배포 예시를 보려면 다음 페이지를 참조하세요.

문제 해결하기

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

다음 단계