노드 풀 만들기

AWS용 GKE에서 노드 풀을 만들려면 다음 리소스를 제공해야 합니다.

노드에 SSH로 액세스하려면 EC2 키 쌍 만들기를 수행하면 됩니다.

표준 노드 풀 만들기

이러한 리소스를 사용할 수 있게 되면 다음 명령어로 노드 풀을 만들 수 있습니다.

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 \
    --tags "Name=CLUSTER_NAME-NODE_POOL_NAME"

다음을 바꿉니다.

  • NODE_POOL_NAME: 노드 풀에 대해 선택한 이름
  • CLUSTER_NAME: 노드 풀을 연결할 클러스터의 이름
  • INSTANCE_TYPE: 이 노드 풀에 원하는 AWS 머신 인스턴스 유형(예: m5.large)
  • ROOT_VOLUME_SIZE: 각 노드의 루트 볼륨에 원하는 크기(Gb)
  • NODEPOOL_PROFILE: 노드 풀 VM의 IAM 인스턴스 프로필 IAM 인스턴스 프로필 업데이트 방법에 대한 자세한 내용은 AWS IAM 인스턴스 프로필 업데이트를 참조하세요.
  • NODE_VERSION: 노드 풀의 각 노드에 설치할 Kubernetes 버전(예: '1.29.3-gke.600')
  • MIN_NODES: 노드 풀에 포함할 수 있는 최소 노드 수
  • MAX_NODES: 노드 풀에 포함할 수 있는 최대 노드 수
  • MAX_PODS_PER_NODE: 풀의 단일 노드에 생성할 수 있는 최대 포드 수
  • GOOGLE_CLOUD_LOCATION: 이 노드 풀이 관리될 Google Cloud 위치의 이름
  • NODEPOOL_SUBNET: 노드 풀이 실행될 서브넷의 ID입니다.
    • 클러스터의 포드/서비스 IP 범위와 노드 풀 서브넷 네트워크 간에는 겹치지 않아야 합니다. 클러스터의 포드 및 서비스 IP 범위 선택에 대한 자세한 내용은 클러스터의 CIDR 범위 선택을 참조하세요.
    • 이 서브넷이 VPC 기본 CIDR 블록 외부에 있으면 몇 가지 추가 단계가 필요합니다. 자세한 내용은 보안 그룹을 참조하세요.
  • SSH_KEY_PAIR_NAME: SSH 액세스를 위해 생성된 AWS SSH 키 쌍의 이름입니다(선택사항).
  • CONFIG_KMS_KEY_ARN: 사용자 데이터를 암호화하는 AWS KMS 키의 Amazon 리소스 이름(ARN)입니다.

있는 경우 --tags 매개변수는 노드 풀에 있는 모든 노드에 지정된 태그를 적용합니다. 이 예시에서는 풀의 모든 노드에 노드가 속한 클러스터와 노드 풀의 이름으로 태그를 지정합니다.

Spot 인스턴스 노드 풀

AWS용 GKE는 미리보기 기능으로 AWS Spot 인스턴스 노드 풀을 지원합니다. Spot 인스턴스 노드 풀은 AWS에서 더 저렴한 비용으로 제공되는 Amazon EC2 Spot 인스턴스의 풀입니다.

스테이트리스(Stateless), 내결함성, 가변형 애플리케이션의 경우 Spot 인스턴스로 비용을 절감할 수 있습니다. 하지만 유연하지 않거나, 스테이트풀(Stateful)이거나, 내결함성이 없거나, 인스턴스 노드 간에 긴밀하게 결합된 워크로드에는 적합하지 않습니다. Spot 인스턴스는 EC2에서 용량이 다시 필요할 때 Amazon EC2에 의해 중단될 수 있으므로 Spot 시장의 변동성에 영향을 받습니다. 워크로드 용량을 보장해야 하고 간헐적인 사용 불가 기간을 감당할 수 없는 경우 Spot 인스턴스 노드 풀 대신 표준 노드 풀을 선택하세요.

AWS용 GKE는 용량 가용성이 가장 높은 Spot 인스턴스 풀을 선택하여 중단 위험을 최소화하는 데 집중하는 할당 전략을 사용합니다. 이 접근 방식은 이미지 및 미디어 렌더링이나 딥 러닝과 같이 중단 비용이 높은 워크로드에서 특히 유용합니다. 구체적으로, Spot 인스턴스 할당 전략의 설명과 같이 capacityOptimized 할당 전략이 구현되었습니다.

Spot 노드 풀 만들기

Spot 인스턴스 노드 풀을 만들려면 다음 명령어를 실행합니다.

gcloud container aws node-pools create NODE_POOL_NAME \
    --cluster CLUSTER_NAME \
    --spot-instance-types INSTANCE_TYPE_LIST \
    --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 \
    --tags "Name=CLUSTER_NAME-NODE_POOL_NAME"

다음을 바꿉니다.

  • NODE_POOL_NAME: 이 노드 풀에 할당하려는 이름입니다.
  • CLUSTER_NAME: 이 노드 풀을 연결하려는 클러스터의 이름입니다.
  • INSTANCE_TYPE_LIST: AWS EC2 인스턴스 유형의 쉼표로 구분된 목록입니다. 노드 풀은 이러한 인스턴스 유형으로 스팟 인스턴스를 프로비저닝합니다. 인스턴스 유형의 CPU 아키텍처, CPU 수, 메모리 양이 동일해야 합니다. 예: 'c6g.large,c6gd.large,c6gn.large,c7g.large,t4g.medium'. Amazon EC2 인스턴스 선택기 도구를 사용하면 CPU 및 메모리 구성이 동일한 인스턴스 유형을 찾을 수 있습니다.
  • ROOT_VOLUME_SIZE: 각 노드의 루트 볼륨에 원하는 크기(Gb)
  • NODEPOOL_PROFILE: 노드 풀 VM의 IAM 인스턴스 프로필
  • NODE_VERSION: 노드 풀의 각 노드에 설치할 Kubernetes 버전(예: '1.29.3-gke.600')
  • MIN_NODES: 노드 풀에 포함할 수 있는 최소 노드 수
  • MAX_NODES: 노드 풀에 포함할 수 있는 최대 노드 수
  • MAX_PODS_PER_NODE: 풀의 단일 노드에 생성할 수 있는 최대 포드 수
  • GOOGLE_CLOUD_LOCATION: 이 노드 풀이 관리될 Google Cloud 위치의 이름
  • NODEPOOL_SUBNET: 노드 풀이 실행될 서브넷의 ID입니다.
    • 클러스터의 포드/서비스 IP 범위와 노드 풀 서브넷 네트워크 간에는 겹치지 않아야 합니다. 클러스터의 포드 및 서비스 IP 범위 선택에 대한 자세한 내용은 클러스터의 CIDR 범위 선택을 참조하세요.
    • 이 서브넷이 VPC 기본 CIDR 블록 외부에 있으면 몇 가지 추가 단계가 필요합니다. 자세한 내용은 보안 그룹을 참조하세요.
  • SSH_KEY_PAIR_NAME: SSH 액세스를 위해 생성된 AWS SSH 키 쌍의 이름입니다(선택사항).
  • CONFIG_KMS_KEY_ARN: 사용자 데이터를 암호화하는 AWS KMS 키의 Amazon 리소스 이름(ARN)입니다.

INSTANCE_TYPE_LIST 필드에 여러 인스턴스 유형을 나열하는 것이 좋습니다. 이 권장사항이 중요한 이유는, 노드 풀이 단일 인스턴스 유형으로만 구성되면 원하는 가용성 영역에서 해당 인스턴스 유형을 사용할 수 없는 경우 노드 풀이 새 노드를 프로비저닝할 수 없기 때문입니다. 이로 인해 애플리케이션의 가용성이 저하되고 서비스 중단이 발생할 수 있습니다.

spot-instance-types 필드는 instance-type 필드와 상호 배타적입니다. 즉, 이러한 필드 중 하나만 제공할 수 있습니다.