컨테이너 워크로드 배포를 허용하는 Kubernetes 클러스터를 만듭니다. 클러스터는 영역 리소스이며 여러 영역에 걸쳐 있을 수 없습니다. 다중 영역 배포에서 클러스터를 운영하려면 각 영역에서 클러스터를 수동으로 만들어야 합니다.
시작하기 전에
Kubernetes 클러스터를 만드는 데 필요한 권한을 얻으려면 조직 IAM 관리자에게 사용자 클러스터 관리자 역할 (user-cluster-admin
)을 부여해 달라고 요청하세요. 이 역할은 네임스페이스에 바인딩되지 않습니다.
에어 갭이 적용된 Google Distributed Cloud (GDC)의 Kubernetes 클러스터에는 다음과 같은 제한이 있습니다.
- 조직당 16개의 클러스터
- 클러스터당 42개의 워커 노드, 최소 3개의 워커 노드
- 클러스터당 포드 4,620개
- 노드당 pod 110개
포드 CIDR 블록 구성
클러스터는 IP 주소를 할당할 때 다음 논리를 따릅니다.
- Kubernetes는 각 노드에 256개 주소로 구성된 /24 CIDR 블록을 할당합니다. 이 수량은 사용자 클러스터의 노드당 기본 최대 포드 수인 110개를 준수합니다.
- 노드에 할당된 CIDR 블록 크기는 노드당 최대 포드 수에 따라 다릅니다.
- 블록에 포함되는 주소 수는 항상 노드당 최대 포드 수의 두 배 이상입니다.
110개의 포드를 수용하기 위해 노드당 마스크 크기= /24의 기본값이 계산된 방법을 알아보려면 다음 예시를 참고하세요.
Maximum pods per node = 110
Total number of IP addresses required = 2 * 110 = 220
Per node mask size = /24
Number of IP addresses in a /24 = 2(32 - 24) = 256
필요한 노드 수를 기반으로 사용자 클러스터에 구성해야 하는 포드 CIDR 마스크를 확인합니다. CIDR 범위를 구성할 때 클러스터에 추가할 노드를 계획합니다.
Total number of nodes supported = 2(Per node mask size - pod CIDR mask)
기본 노드별 마스크 크기= /24가 있으므로 포드 CIDR 마스크를 지원되는 노드 수에 매핑하는 다음 표를 참고하세요.
포드 CIDR 마스크 | 계산: 2(노드별 마스크 크기 - CIDR 마스크) | 제어 영역 노드를 포함하여 지원되는 최대 노드 수 |
---|---|---|
/21 | 2(24 - 21) | 8 |
/20 | 2(24-20) | 16 |
/19 | 2(24 - 19) | 32 |
/18 | 2(24 - 18) | 64 |
Kubernetes 클러스터 만들기
다음 단계에 따라 Kubernetes 클러스터를 만드세요.
콘솔
탐색 메뉴에서 Kubernetes Engine > 클러스터를 선택합니다.
클러스터 만들기를 클릭합니다.
이름 필드에 클러스터 이름을 지정합니다.
클러스터의 Kubernetes 버전을 선택합니다.
클러스터를 만들 영역을 선택합니다.
프로젝트 연결을 클릭하고 클러스터에 연결할 기존 프로젝트를 선택합니다. 그런 다음 저장을 클릭하고 프로젝트 세부정보 페이지에서 클러스터를 만든 후 프로젝트를 연결하거나 연결 해제할 수 있습니다. 컨테이너 워크로드를 배포하려면 클러스터에 연결된 프로젝트가 있어야 합니다.
다음을 클릭합니다.
클러스터의 네트워크 설정을 구성합니다. 클러스터를 만든 후에는 이러한 네트워크 설정을 변경할 수 없습니다. Kubernetes 클러스터의 기본 및 유일하게 지원되는 인터넷 프로토콜은 인터넷 프로토콜 버전 4(IPv4)입니다.
전용 부하 분산기 노드를 만들려면 만들 노드 수를 입력합니다. 기본적으로 노드는 0개이며 부하 분산기 트래픽은 제어 노드를 통해 실행됩니다.
사용할 서비스 CIDR (클래스 없는 도메인 간 라우팅)을 선택합니다. 배포된 서비스(예: 부하 분산기)에는 이 범위의 IP 주소가 할당됩니다.
사용할 포드 CIDR을 선택합니다. 클러스터는 이 범위에서 포드와 VM에 IP 주소를 할당합니다.
다음을 클릭합니다.
클러스터에 대해 자동 생성된 기본 노드 풀의 세부정보를 검토합니다. edit 수정을 클릭하여 기본 노드 풀을 수정합니다.
노드 풀을 추가로 만들려면 노드 풀 추가를 선택합니다. 기본 노드 풀을 수정하거나 새 노드 풀을 추가할 때 다음 옵션을 사용하여 맞춤설정합니다.
- 노드 풀의 이름을 할당합니다. 노드 풀을 만든 후에는 이름을 수정할 수 없습니다.
- 노드 풀에서 만들 워커 노드 수를 지정합니다.
워크로드 요구사항에 가장 적합한 머신 클래스를 선택합니다. 다음 설정 목록을 확인하세요.
- 머신 유형
- CPU
- 메모리
저장을 클릭합니다.
만들기를 클릭하여 클러스터를 만듭니다.
API
API를 직접 사용하여 새 클러스터를 만들려면 GDC 인스턴스에 커스텀 리소스를 적용하세요.
Cluster
커스텀 리소스를 만들고cluster.yaml
과 같은 YAML 파일로 저장합니다.apiVersion: cluster.gdc.goog/v1 kind: Cluster metadata: name: CLUSTER_NAME namespace: platform spec: clusterNetwork: podCIDRSize: POD_CIDR serviceCIDRSize: SERVICE_CIDR initialVersion: kubernetesVersion: KUBERNETES_VERSION loadBalancer: ingressServiceIPSize: LOAD_BALANCER_POOL_SIZE nodePools: - machineTypeName: MACHINE_TYPE name: NODE_POOL_NAME nodeCount: NUMBER_OF_WORKER_NODES taints: TAINTS labels: LABELS acceleratorOptions: gpuPartitionScheme: GPU_PARTITION_SCHEME releaseChannel: channel: UNSPECIFIED
다음을 바꿉니다.
CLUSTER_NAME
: 클러스터의 이름입니다. 클러스터 이름은-system
로 끝나면 안 됩니다.-system
접미사는 GDC에서 생성한 클러스터용으로 예약되어 있습니다.POD_CIDR
: 포드 가상 IP 주소가 할당되는 네트워크 범위의 크기입니다. 설정하지 않으면 기본값21
이 사용됩니다.SERVICE_CIDR
: 서비스 가상 IP 주소가 할당되는 네트워크 범위의 크기입니다. 설정하지 않으면 기본값23
이 사용됩니다.KUBERNETES_VERSION
: 클러스터의 Kubernetes 버전입니다(예:1.26.5-gke.2100
). 구성할 수 있는 Kubernetes 버전을 나열하려면 클러스터에 사용 가능한 Kubernetes 버전 나열을 참고하세요.LOAD_BALANCER_POOL_SIZE
: 부하 분산기 서비스에서 사용하는 중복되지 않는 IP 주소 풀의 크기입니다. 설정되지 않은 경우 기본값20
이 사용됩니다.MACHINE_TYPE
: 노드 풀의 작업자 노드에 사용할 머신 유형입니다. 구성할 수 있는 항목은 사용 가능한 머신 유형을 참고하세요.NODE_POOL_NAME
: 노드 풀의 이름NUMBER_OF_WORKER_NODES
: 노드 풀에서 프로비저닝할 워커 노드 수입니다.TAINTS
: 이 노드 풀의 노드에 적용할 테인트입니다. 이 필드는 선택 사항입니다.LABELS
: 이 노드 풀의 노드에 적용할 라벨입니다. 키-값 쌍 목록을 포함합니다. 이 필드는 선택사항입니다.GPU_PARTITION_SCHEME
: GPU 워크로드를 실행하는 경우 GPU 파티셔닝 스키마입니다. 예를 들면mixed-2
입니다. 이 필드가 설정되지 않은 경우 GPU가 파티셔닝되지 않습니다. 사용 가능한 다중 인스턴스 GPU (MIG) 프로필은 지원되는 MIG 프로필을 참고하세요.
커스텀 리소스를 GDC 인스턴스에 적용합니다.
kubectl apply -f cluster.yaml --kubeconfig MANAGEMENT_API_SERVER
MANAGEMENT_API_SERVER
를 영역 API 서버의 kubeconfig 경로로 바꿉니다. 타겟 영역의 API 서버에 대한 kubeconfig 파일을 아직 생성하지 않은 경우 로그인을 참고하세요.
Terraform
Terraform 구성 파일에 다음 코드 스니펫을 삽입합니다.
provider "kubernetes" { config_path = "MANAGEMENT_API_SERVER" } resource "kubernetes_manifest" "cluster-create" { manifest = { "apiVersion" = "cluster.gdc.goog/v1" "kind" = "Cluster" "metadata" = { "name" = "CLUSTER_NAME" "namespace" = "platform" } "spec" = { "clusterNetwork" = { "podCIDRSize" = "POD_CIDR" "serviceCIDRSize" = "SERVICE_CIDR" } "initialVersion" = { "kubernetesVersion" = "KUBERNETES_VERSION" } "loadBalancer" = { "ingressServiceIPSize" = "LOAD_BALANCER_POOL_SIZE" } "nodePools" = [{ "machineTypeName" = "MACHINE_TYPE" "name" = "NODE_POOL_NAME" "nodeCount" = "NUMBER_OF_WORKER_NODES" "taints" = "TAINTS" "labels" = "LABELS" "acceleratorOptions" = { "gpuPartitionScheme" = "GPU_PARTITION_SCHEME" } }] "releaseChannel" = { "channel" = "UNSPECIFIED" } } } }
다음을 바꿉니다.
MANAGEMENT_API_SERVER
: 영역 API 서버의 kubeconfig 경로입니다. 타겟 영역의 API 서버에 대한 kubeconfig 파일을 아직 생성하지 않은 경우 로그인에서 자세한 내용을 확인하세요.CLUSTER_NAME
: 클러스터의 이름입니다. 클러스터 이름은-system
로 끝나면 안 됩니다.-system
접미사는 GDC에서 생성한 클러스터용으로 예약되어 있습니다.POD_CIDR
: 포드 가상 IP 주소가 할당되는 네트워크 범위의 크기입니다. 설정하지 않으면 기본값21
이 사용됩니다.SERVICE_CIDR
: 서비스 가상 IP 주소가 할당되는 네트워크 범위의 크기입니다. 설정하지 않으면 기본값23
이 사용됩니다.KUBERNETES_VERSION
: 클러스터의 Kubernetes 버전입니다(예:1.26.5-gke.2100
). 구성할 수 있는 Kubernetes 버전을 나열하려면 클러스터에 사용 가능한 Kubernetes 버전 나열을 참고하세요.LOAD_BALANCER_POOL_SIZE
: 부하 분산기 서비스에서 사용하는 중복되지 않는 IP 주소 풀의 크기입니다. 설정되지 않은 경우 기본값20
이 사용됩니다.MACHINE_TYPE
: 노드 풀의 작업자 노드에 사용할 머신 유형입니다. 구성할 수 있는 항목은 사용 가능한 머신 유형을 참고하세요.NODE_POOL_NAME
: 노드 풀의 이름NUMBER_OF_WORKER_NODES
: 노드 풀에서 프로비저닝할 워커 노드 수입니다.TAINTS
: 이 노드 풀의 노드에 적용할 테인트입니다. 이 필드는 선택 사항입니다.LABELS
: 이 노드 풀의 노드에 적용할 라벨입니다. 키-값 쌍 목록을 포함합니다. 이 필드는 선택사항입니다.GPU_PARTITION_SCHEME
: GPU 워크로드를 실행하는 경우 GPU 파티셔닝 스키마입니다. 예를 들면mixed-2
입니다. 이 필드가 설정되지 않은 경우 GPU가 파티셔닝되지 않습니다. 사용 가능한 다중 인스턴스 GPU (MIG) 프로필은 지원되는 MIG 프로필을 참고하세요.
Terraform을 사용하여 새 Kubernetes 클러스터를 적용합니다.
terraform apply
클러스터에 사용 가능한 Kubernetes 버전 나열
kubectl
CLI를 사용하여 GDC 인스턴스에서 사용 가능한 Kubernetes 버전을 나열할 수 있습니다.
kubectl get userclustermetadata.upgrade.private.gdc.goog \
-o=custom-columns=K8S-VERSION:.spec.kubernetesVersion \
--kubeconfig MANAGEMENT_API_SERVER
MANAGEMENT_API_SERVER
를 클러스터의 영역 API 서버 kubeconfig 경로로 바꿉니다.
결과는 다음과 유사합니다.
K8S-VERSION
1.25.10-gke.2100
1.26.5-gke.2100
1.27.4-gke.500
클러스터에서 GPU 워크로드 지원
Distributed Cloud는 Kubernetes 클러스터에 NVIDIA GPU 지원을 제공하며 GPU 기기를 사용자 워크로드로 실행합니다. 예를 들어 GPU 환경에서 인공지능 (AI) 및 머신러닝 (ML) 노트북을 실행하는 것이 좋습니다. AI 및 ML 노트북을 활용하기 전에 클러스터에서 GPU 기기를 지원하는지 확인하세요. GPU 지원은 GPU 머신이 프로비저닝된 클러스터에 대해 기본적으로 사용 설정됩니다.
클러스터는 GDC 콘솔 또는 API를 직접 사용하여 만들 수 있습니다. 연결된 컨테이너에서 GPU 워크로드를 지원하도록 클러스터에 GPU 머신을 프로비저닝해야 합니다. 자세한 내용은 Kubernetes 클러스터 만들기를 참고하세요.
GPU는 정적으로 할당됩니다. 처음 4개의 GPU는 항상 사전 학습된 인공지능 (AI) 및 머신러닝 (ML) API와 같은 워크로드에 전용으로 사용됩니다. 이러한 GPU는 Kubernetes 클러스터에서 실행되지 않습니다. 나머지 GPU는 Kubernetes 클러스터에서 사용할 수 있습니다. AI 및 ML 노트북은 Kubernetes 클러스터에서 실행됩니다.
AI 및 ML API, 노트북과 같은 구성요소를 사용할 수 있도록 올바른 클러스터 유형에 GPU 머신을 할당해야 합니다.