이 문서에서는 Google Distributed Cloud (GDC) 오프라인 영역에서 표준 Kubernetes 클러스터를 만드는 방법을 설명합니다. 표준 클러스터는 포함된 관리 서비스의 최소 집합을 포함하는 프로젝트 범위의 구성 가능한 Kubernetes 클러스터를 제공합니다. 표준 클러스터는 공유 클러스터보다 서비스 구성에 더 많은 유연성을 제공하지만 관리 오버헤드도 더 많이 필요합니다. Standard 클러스터에 대한 자세한 내용은 Kubernetes 클러스터 구성을 참고하세요.
표준 클러스터는 영역 리소스이며 여러 영역에 걸쳐 있을 수 없습니다. 멀티 영역 유니버스에서 클러스터를 운영하려면 각 영역에서 클러스터를 수동으로 만들어야 합니다.
이 문서는 조직 내에서 컨테이너 워크로드를 관리하는 애플리케이션 운영자 그룹의 애플리케이션 개발자와 같은 독자를 대상으로 합니다. 자세한 내용은 GDC 오프라인 문서의 대상을 참고하세요.
시작하기 전에
표준 클러스터에 액세스하고 이를 관리할 수 있도록 적절하게 설정되어 있는지 확인합니다. 자세한 내용은 표준 클러스터에 대한 액세스 관리를 참고하세요.
표준 클러스터를 만드는 데 필요한 권한을 얻으려면 조직 IAM 관리자에게 프로젝트 IAM 관리자(
project-iam-admin) 및 표준 클러스터 관리자 (standard-cluster-admin) 역할을 부여해 달라고 요청하세요. 이러한 역할은 프로젝트 네임스페이스에 바인딩됩니다.Kubernetes 클러스터에 대해 다음과 같은 Google Distributed Cloud (GDC) 에어 갭 제한을 계획하세요.
- 조직당 16개의 클러스터
- 클러스터당 42개의 워커 노드, 최소 3개의 워커 노드
- 클러스터당 포드 4,620개
- 노드당 pod 110개
포드 CIDR 블록 계획
워크로드에 적절한 크기의 포드 CIDR 블록을 할당하려면 Kubernetes 클러스터를 만들기 전에 필요한 IP 주소 수를 계산해야 합니다. 클러스터를 만든 후에는 대부분의 네트워킹 매개변수를 변경할 수 없습니다.
Kubernetes 클러스터는 IP 주소를 할당할 때 다음 논리를 따릅니다.
- Kubernetes는 각 노드에 256개 주소로 구성된
/24CIDR 블록을 할당합니다. 이 수량은 Kubernetes 클러스터의 노드당 기본 최대 포드 수인 110개를 준수합니다. - 노드에 할당된 CIDR 블록 크기는 노드당 최대 포드 수에 따라 다릅니다.
- 블록에 포함되는 주소 수는 항상 노드당 최대 포드 수의 두 배 이상입니다.
노드당 마스크 크기= /24의 기본값이 110개의 포드를 수용하도록 계산된 방법을 알아보려면 다음 예시를 참고하세요.
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
필요한 노드 수를 기반으로 Kubernetes 클러스터에 구성해야 하는 필수 포드 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 클러스터의 포드 CIDR 블록을 계산한 후 다음 섹션의 클러스터 생성 워크플로의 일부로 구성합니다.
Standard 클러스터 만들기
표준 클러스터를 만들려면 다음 단계를 완료하세요.
API
Cluster커스텀 리소스를 만들고cluster.yaml과 같은 YAML 파일로 저장합니다.apiVersion: cluster.gdc.goog/v1 kind: Cluster metadata: name: CLUSTER_NAME namespace: PROJECT_NAME spec: clusterNetwork: podCIDRSize: POD_CIDR serviceCIDRSize: SERVICE_CIDR initialVersion: kubernetesVersion: KUBERNETES_VERSION 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에서 생성한 클러스터용으로 예약되어 있습니다.PROJECT_NAME: 클러스터를 만들 프로젝트의 이름입니다.POD_CIDR: 포드 가상 IP 주소가 할당되는 네트워크 범위의 크기입니다. 설정하지 않으면 기본값21이 사용됩니다.SERVICE_CIDR: 서비스 가상 IP 주소가 할당되는 네트워크 범위의 크기입니다. 설정하지 않으면 기본값23이 사용됩니다.KUBERNETES_VERSION: 클러스터의 Kubernetes 버전입니다(예:1.26.5-gke.2100). 구성할 수 있는 Kubernetes 버전을 나열하려면 클러스터에 사용 가능한 Kubernetes 버전 나열을 참고하세요.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_SERVERMANAGEMENT_API_SERVER를 영역 API 서버의 kubeconfig 경로로 바꿉니다. 타겟 영역의 API 서버에 대한 kubeconfig 파일을 아직 생성하지 않은 경우 로그인을 참고하세요.
표준 클러스터 생성을 완료하는 데 최대 60분이 걸릴 수 있습니다.
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" = "PROJECT_NAME" } "spec" = { "clusterNetwork" = { "podCIDRSize" = "POD_CIDR" "serviceCIDRSize" = "SERVICE_CIDR" } "initialVersion" = { "kubernetesVersion" = "KUBERNETES_VERSION" } "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에서 생성한 클러스터용으로 예약되어 있습니다.PROJECT_NAME: 클러스터를 만들 프로젝트의 이름입니다.POD_CIDR: 포드 가상 IP 주소가 할당되는 네트워크 범위의 크기입니다. 설정하지 않으면 기본값21이 사용됩니다.SERVICE_CIDR: 서비스 가상 IP 주소가 할당되는 네트워크 범위의 크기입니다. 설정하지 않으면 기본값23이 사용됩니다.KUBERNETES_VERSION: 클러스터의 Kubernetes 버전입니다(예:1.26.5-gke.2100). 구성할 수 있는 Kubernetes 버전을 나열하려면 클러스터에 사용 가능한 Kubernetes 버전 나열을 참고하세요.MACHINE_TYPE: 노드 풀의 워커 노드에 사용할 머신 유형입니다. 구성할 수 있는 항목은 사용 가능한 머신 유형을 참고하세요.NODE_POOL_NAME: 노드 풀의 이름입니다.NUMBER_OF_WORKER_NODES: 노드 풀에 프로비저닝할 작업자 노드 수입니다.TAINTS: 이 노드 풀의 노드에 적용할 테인트입니다. 이 필드는 선택 사항입니다.LABELS: 이 노드 풀의 노드에 적용할 라벨입니다. 키-값 쌍 목록을 포함합니다. 이 필드는 선택사항입니다.GPU_PARTITION_SCHEME: GPU 워크로드를 실행하는 경우 GPU 파티셔닝 스키마입니다. 이 필드는 선택 사항입니다. 예를 들면mixed-2입니다. 이 필드가 설정되지 않은 경우 GPU가 파티셔닝되지 않습니다. 사용 가능한 멀티 인스턴스 GPU (MIG) 프로필에 대한 자세한 내용은 지원되는 MIG 프로필을 참고하세요.
Terraform을 사용하여 새 표준 클러스터를 적용합니다.
terraform apply
표준 클러스터 생성을 완료하는 데 최대 60분이 걸릴 수 있습니다.