이 페이지에서는 Arm 아키텍처에서 지원하는 노드를 요청하도록 Google Kubernetes Engine (GKE) Autopilot 배포를 구성하는 방법을 보여줍니다.
Autopilot의 ARM 아키텍처 정보
Autopilot 클러스터는 특정 하드웨어 요구사항이 있는 워크로드에 대해 컴퓨팅 클래스를 제공합니다. 이러한 컴퓨팅 클래스 중 일부는 amd64 및 arm64와 같은 여러 CPU 아키텍처를 지원합니다.
ARM 노드 사용 사례
Arm 아키텍처를 사용하는 노드는 비슷한 x86 노드보다 더 비용 효율적인 성능을 제공합니다. 다음과 같은 상황에서 Autopilot 워크로드에 Arm을 선택해야 합니다.
- 개발자 환경은 빌드 및 테스트에 ARM 아키텍처를 사용합니다.
- Arm CPU에서 실행되는 Android 기기용 애플리케이션을 개발합니다.
- 멀티 아키텍처 이미지를 사용하고 워크로드를 실행하면서 비용을 최적화하길 원합니다.
시작하기 전에
시작하기 전에 다음 태스크를 수행했는지 확인합니다.
- Google Kubernetes Engine API를 사용 설정합니다. Google Kubernetes Engine API 사용 설정
- 이 태스크에 Google Cloud CLI를 사용하려면
설치한 후
초기화합니다.
gcloud CLI를 이전에 gcloud CLI를 설치했으면 최신
버전을
gcloud components update명령어를 실행하여 가져옵니다. 이전 gcloud CLI 버전에서는 이 문서의 명령어를 실행하지 못할 수 있습니다.
- Arm 노드의 요구사항 및 제한사항을 검토합니다.
요구사항
autopilot-armComputeClass를 사용하려면 클러스터에서 GKE 버전 1.35.3-gke.1389000 이상을 실행해야 합니다.- Autopilot ComputeClass를 사용하는
GKE Standard 클러스터에서 스마트 기본값 (예:
kubernetes.io/arch: arm64라벨만 지정),autopilot-arm-spotComputeClass 또는autopilot-armComputeClass와 같은 기능을 사용하려면 클러스터에서 버전 1.36.0-gke.3302001 이상을 실행해야 합니다. - C4A, N4A 또는 Tau T2A Compute Engine 머신 유형에 대한 할당량이 있는지 확인합니다.
- Arm 아키텍처를 위해 빌드된 컨테이너 이미지가 있는 포드가 있는지 확인합니다.
Autopilot에서 ARM 노드를 요청하는 방법
Arm 노드에서 포드를 실행하도록 Autopilot에 지시하려면 nodeSelector 또는 노드 어피니티 규칙을 사용하여 다음 선택기 중 하나를 지정합니다 (GKE 유형 및 버전에 따라 다름).
Autopilot 클러스터 (스마트 기본값): 아키텍처 유형만 지정합니다.
kubernetes.io/arch: arm64
워크로드가 Autopilot 클러스터에서 실행되는 경우 범용 Arm 플랫폼이 선택됩니다.
Autopilot ComputeClass를 사용하는 Autopilot 클러스터 또는 Standard 클러스터 (ComputeClass만 해당): ComputeClass를 지정합니다.
cloud.google.com/compute-class: autopilot-arm(또는autopilot-arm-spot)
이 클래스를 선택하면 컨테이너 최적화 Arm 플랫폼 (또는 스팟 VM 변형)에서 워크로드가 예약되고 허용 중에 필요한
kubernetes.io/arch: arm64선택기가 포드에 자동으로 추가됩니다.명시적 선택 (이전 GKE 버전): 버전 1.35.3-gke.1389000 이상이지만 1.36.0-gke.3302001 이전 버전을 실행하는 Autopilot 클러스터에서 범용 Arm 플랫폼을 선택하려면 다음 선택기를 모두 지정합니다. 이 조합은 이전 버전과의 호환성을 위해 최신 GKE 버전에서도 지원됩니다.
cloud.google.com/compute-class: autopilot-armkubernetes.io/arch: arm64
특정 하드웨어 요구사항이 있는 워크로드의 경우: 다음 중 하나를 지정합니다.
- Standard 클러스터의
kubernetes.io/arch: arm64. GKE는 기본적으로 포드를C4A머신 유형에 배치합니다. cloud.google.com/machine-family: ARM_MACHINE_SERIES.ARM_MACHINE_SERIES를C4A,N4A, 또는T2A와 같은 Arm 머신 시리즈로 바꿉니다. GKE는 지정된 시리즈에 포드를 배치합니다.
- Standard 클러스터의
기본적으로 Performance를 제외한 라벨을 사용하면 해당 노드에 사용 가능한 용량이 있는 경우 GKE에서 다른 포드를 동일한 노드에 배치할 수 있습니다.
각 포드에 전용 노드를 요청하려면 아키텍처 또는 머신 계열 라벨과 함께 매니페스트에 cloud.google.com/compute-class: Performance 라벨을 추가합니다. 자세한 내용은
머신
시리즈를 선택하여 Autopilot 포드 성능 최적화를 참고하세요.
또는 arm64 라벨과 함께 Scale-Out 라벨을 사용하여 T2A를 요청할 수 있습니다.
Spot 포드의 ARM 아키텍처를 요청할 수도 있습니다.
워크로드를 배포하면 Autopilot이 다음을 수행합니다.
- 포드를 실행하도록 ARM 노드를 자동으로 프로비저닝합니다.
- 새 노드를 자동으로 taint하여 ARM이 아닌 포드가 이러한 노드에 예약되지 않도록 합니다.
- 새 노드에서 예약을 허용하도록 ARM 포드에 자동으로 톨러레이션(toleration)을 추가합니다.
ARM 아키텍처에 대한 요청 예시
다음 예시 사양은 노드 선택기 또는 노드 어피니티 규칙을 사용하여 Autopilot에서 ARM 아키텍처를 요청하는 방법을 보여줍니다.
nodeSelector
다음 예시 매니페스트는 스마트 기본값을 사용하여 Autopilot 컨테이너 최적화 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:
kubernetes.io/arch: arm64
containers:
- name: nginx-arm
image: nginx
resources:
requests:
cpu: 2000m
memory: 2Gi
또는 ComputeClass를 명시적으로 지정하여 컨테이너 최적화 Arm 플랫폼
을 요청할 수 있습니다 (autopilot-arm 또는 스팟 VM의 경우 autopilot-arm-spot
).
...
spec:
nodeSelector:
cloud.google.com/compute-class: autopilot-arm
...
Autopilot 컨테이너 최적화 노드 대신 특정 하드웨어를 요청하려면 ComputeClass를 바꾸거나 선택기에 cloud.google.com/machine-family: C4A를 추가합니다.
nodeAffinity
노드 어피니티를 사용하여 Arm 노드를 요청할 수 있습니다.
다음 예시 매니페스트는 스마트 기본값을 사용하여 Autopilot 컨테이너 최적화 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: kubernetes.io/arch
operator: In
values:
- arm64
Autopilot 컨테이너 최적화 노드 대신 특정 하드웨어를 요청하려면 kubernetes.io/arch를 특정 머신 계열 어피니티 규칙으로 바꾸거나 Performance 또는 Scale-Out과 같은 클래스를 요청합니다.
권장사항
- 파이프라인의 일부로 멀티 아키텍처 이미지를 빌드 및 사용합니다. 멀티 아키텍처 이미지는 x86 노드에 배치되었더라도 포드가 실행되도록 합니다.
- 워크로드 매니페스트에 아키텍처 및 컴퓨팅 클래스를 명시적으로 요청합니다. 그렇지 않으면 Arm이 아닐 수 있는 선택한 컴퓨팅 클래스의 기본 아키텍처가 Autopilot에 사용됩니다.
가용성
다음 리전에서 Arm 아키텍처에 Autopilot 워크로드를 배포할 수 있습니다. us-east1, us-west1, europe-west1, europe-west2, europe-west4, asia-southeast1, us-central1.
문제 해결
일반적인 오류 및 문제 해결 정보는 ARM 워크로드 문제 해결을 참조하세요.
다음 단계
- Autopilot 클러스터 아키텍처 자세히 알아보기
- 포드의 수명 주기 알아보기
- 사용 가능한 Autopilot 컴퓨팅 클래스 알아보기
- 각 플랫폼의 기본, 최소, 최대 리소스 요청에 대해 알아보기