Google Distributed Cloud (GDC) 에어 갭을 사용하면 GDC에서 GKE를 사용하여 생성한 후 Kubernetes 클러스터를 관리할 수 있습니다. 이 서비스를 사용하면 다음과 같은 워크플로를 통해 변화하는 컨테이너 워크로드 요구사항에 적응하고 기존 클러스터 노드를 유지할 수 있습니다.
공유 클러스터를 프로젝트에 연결 및 분리: 클러스터를 만든 후 공유 클러스터를 여러 프로젝트에 연결 및 분리하여 공유 클러스터 워크로드의 범위를 변경합니다.
조직의 클러스터 보기: 조직의 클러스터를 나열하여 컨테이너 워크로드에 사용할 수 있는 항목을 추적합니다.
Kubernetes 버전 나열: 최신 Kubernetes 버전에 해당하는 클러스터의 기능을 파악하기 위해 클러스터의 Kubernetes 버전을 확인합니다.
업데이트 가능한 클러스터 속성 보기:
Cluster맞춤 리소스 정의 내에서 변경할 수 있는 속성을 확인합니다.
이 문서는 여러 프로젝트에 걸쳐 있는 클러스터에서 호스팅되는 컨테이너 워크로드를 관리하는 플랫폼 관리자 그룹의 IT 관리자와 단일 프로젝트 내에서 애플리케이션 워크로드를 생성하는 애플리케이션 운영자 그룹의 개발자를 대상으로 합니다. 자세한 내용은 GDC 오프라인 문서의 대상을 참고하세요.
시작하기 전에
이 문서의 작업을 완료하려면 필요한 권한을 요청하고 환경을 준비해야 합니다.
IAM 역할 요청
Kubernetes 클러스터를 유지관리하는 데 필요한 권한을 얻으려면 특정 역할이 있어야 합니다. 필요한 역할은 조직 범위 공유 클러스터 또는 프로젝트 범위 표준 클러스터 내에서 작업하는지에 따라 다릅니다. 자세한 내용은 Kubernetes 클러스터 구성을 참고하세요.
공유 클러스터 역할
공유 Kubernetes 클러스터와 리소스를 보고 유지관리하려면 조직 IAM 관리자에게 수행할 작업에 따라 다음 역할을 부여해 달라고 요청하세요.
프로젝트 생성자 (
project-creator): 프로젝트 리소스를 만들거나 봅니다. 공유 클러스터를 프로젝트에 연결하려면 이 역할이 필요합니다.프로젝트 편집자 (
project-editor): 프로젝트 리소스를 삭제, 업데이트 또는 조회합니다. 이 역할은 프로젝트에서 공유 클러스터를 분리하는 데 필요합니다.사용자 클러스터 뷰어 (
user-cluster-viewer): 공유 클러스터와 해당 리소스를 봅니다. 이 역할은 관리 API 서버에서 호스팅되는 공유 클러스터의 관리 영역 API에 대한 액세스를 제공합니다.
이러한 역할은 프로젝트 네임스페이스에 바인딩되지 않습니다.
표준 클러스터 역할
표준 Kubernetes 클러스터와 해당 리소스를 보려면 프로젝트 IAM 관리자에게 표준 클러스터 뷰어 (standard-cluster-viewer) 역할을 부여해 달라고 요청하세요. 이 역할은 관리 API 서버에서 호스팅되는 표준 클러스터의 관리 플레인 API에 대한 액세스를 제공합니다.
이 역할은 프로젝트 네임스페이스에 바인딩됩니다.
개발 환경 준비
API를 사용하여 Kubernetes 클러스터에 대해 명령어를 실행하려면 다음 리소스가 있어야 합니다.
Kubernetes 클러스터 이름을 찾거나 플랫폼 관리자 그룹의 구성원에게 클러스터 이름을 묻습니다.
Kubernetes 클러스터 이름을 사용하여 이 안내의
CLUSTER_NAME을 바꿉니다.관리 API 서버의 kubeconfig 파일을 로그인하여 생성합니다.
관리 API 서버의 kubeconfig 경로를 사용하여 이 안내의
MANAGEMENT_API_SERVER를 바꿉니다.
프로젝트 계층 구조에서 클러스터 이동
프로젝트는 서비스 인스턴스를 논리적으로 그룹화합니다. GDC 프로젝트 계층 구조에서 공유 Kubernetes 클러스터를 추가 및 삭제하여 서비스를 적절하게 그룹화할 수 있습니다. 표준 클러스터는 단일 프로젝트로 범위가 지정되므로 프로젝트 계층 구조에서 이동할 수 없습니다.
공유 클러스터에 프로젝트 연결
GDC 콘솔에서 공유 클러스터를 만들 때는 컨테이너 워크로드를 성공적으로 배포하기 전에 프로젝트를 하나 이상 연결해야 합니다. 기존 클러스터에 프로젝트를 추가해야 하는 경우 다음 단계를 완료하세요.
콘솔
- 탐색 메뉴에서 Kubernetes Engine > 클러스터를 선택합니다.
- 클러스터 목록에서 클러스터 이름을 클릭하여 클러스터 세부정보 페이지를 엽니다.
- 프로젝트 연결을 선택합니다.
- 사용 가능한 프로젝트 목록에서 클러스터에 연결할 프로젝트 이름을 클릭합니다.
- 저장을 클릭합니다.
API
클러스터의 새
ProjectBinding커스텀 리소스를 만듭니다.kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: resourcemanager.gdc.goog/v1 kind: ProjectBinding metadata: name: CLUSTER_NAME-PROJECT_NAME namespace: platform labels: resourcemanager.gdc.goog/projectbinding-for-user-project: "true" spec: clusterRef: name: CLUSTER_NAME selector: nameSelector: matchNames: - PROJECT_NAME EOF다음을 바꿉니다.
MANAGEMENT_API_SERVER: 영역 API 서버의 kubeconfig 경로입니다.CLUSTER_NAME: 클러스터의 이름입니다.PROJECT_NAME: 클러스터를 바인딩할 프로젝트의 이름입니다. 각ProjectBinding리소스는 하나의 클러스터에만 매핑될 수 있습니다. 프로젝트에 여러 클러스터에 대한 액세스가 필요한 경우 각 클러스터에 대해 고유한ProjectBinding를 만들어야 합니다.
Terraform
Terraform 구성 파일에 다음 코드 스니펫을 삽입하여
ProjectBinding맞춤 리소스를 만듭니다.provider "kubernetes" { config_path = "MANAGEMENT_API_SERVER" } resource "kubernetes_manifest" "PROJECT_BINDING_RESOURCE_NAME" { manifest = { "apiVersion" = "resourcemanager.gdc.goog/v1" "kind" = "ProjectBinding" "metadata" = { "name" = "CLUSTER_NAME-PROJECT_NAME" "namespace" = "platform" "labels" = { "resourcemanager.gdc.goog/projectbinding-for-user-project" = "true" } } "spec" = { "clusterRef" = { "name" = "CLUSTER_NAME" } "selector" = { "nameSelector" = { "matchNames" = [ "PROJECT_NAME", ] } } } } }다음을 바꿉니다.
MANAGEMENT_API_SERVER: 영역 API 서버의 kubeconfig 경로입니다.PROJECT_BINDING_RESOURCE_NAME: 프로젝트 바인딩의 Terraform 리소스 이름입니다(예:CLUSTER_NAME-PROJECT_NAME-binding). 이 이름은 Terraform에서 프로젝트 바인딩을 식별하는 데 사용되며 GDC에서는 사용되지 않습니다.CLUSTER_NAME: 클러스터의 이름입니다. 각ProjectBinding리소스는 하나의 클러스터에만 매핑될 수 있습니다. 프로젝트에서 여러 클러스터에 대한 액세스가 필요한 경우 각 클러스터에 대해 고유한ProjectBinding를 만들어야 합니다.PROJECT_NAME: 바인드할 프로젝트의 이름입니다. 각ProjectBinding리소스는 하나의 클러스터에만 매핑될 수 있습니다. 프로젝트에 여러 클러스터에 대한 액세스가 필요한 경우 각 클러스터에 대해 고유한ProjectBinding를 만들어야 합니다.
새 프로젝트 바인딩을 적용합니다.
terraform apply
공유 클러스터에서 프로젝트 분리
공유 클러스터에서 프로젝트를 분리하면 클러스터에서 실행되는 워크로드가 삭제되는 등 상당한 변경사항이 발생할 수 있습니다. 공유 클러스터에서 프로젝트를 분리하기 전에 결과를 이해해야 합니다.
기존 공유 클러스터에서 프로젝트를 분리하려면 다음 단계를 완료하세요.
콘솔
- 탐색 메뉴에서 Kubernetes Engine > 클러스터를 선택합니다.
- 클러스터 목록에서 클러스터를 클릭하여 클러스터 세부정보 페이지를 엽니다.
- 클러스터에서 분리할 프로젝트의 delete 분리를 클릭합니다.
API
프로젝트와 클러스터를 연결하는
ProjectBinding리소스를 삭제합니다.kubectl --kubeconfig MANAGEMENT_API_SERVER delete projectbinding \ CLUSTER_NAME-PROJECT_NAME -n platform다음을 바꿉니다.
MANAGEMENT_API_SERVER: 영역 API 서버의 kubeconfig 경로입니다.CLUSTER_NAME: 클러스터의 이름입니다.PROJECT_NAME: 클러스터에서 분리할 프로젝트의 이름
Terraform
프로젝트 바인딩 리소스를 삭제합니다.
terraform destroy -target kubernetes_manifest.PROJECT_BINDING_RESOURCE_NAMEPROJECT_BINDING_RESOURCE_NAME을 삭제할 프로젝트 바인딩의 Terraform 리소스 이름(예:CLUSTER_NAME-PROJECT_NAME-binding)으로 바꿉니다. 이 이름은 Terraform에서 프로젝트 바인딩을 식별하는 데 사용되며 GDC에서는 사용되지 않습니다.
프로젝트 또는 조직의 모든 클러스터 보기
프로젝트 또는 조직에서 사용 가능한 모든 Kubernetes 클러스터(상태, Kubernetes 버전, 기타 세부정보 포함)를 볼 수 있습니다.
Kubernetes 클러스터는 영역 리소스이므로 영역별로만 클러스터를 나열할 수 있습니다.
콘솔
프로젝트 선택기에서 프로젝트 또는 조직을 선택합니다.
표준 클러스터는 프로젝트 범위이고 공유 클러스터는 조직 범위입니다. 적절한 Kubernetes 클러스터 유형을 보려면 올바른 범위를 선택하세요.
탐색 메뉴에서 Kubernetes Engine > 클러스터를 선택합니다.
조직에서 사용할 수 있는 모든 공유 클러스터가 상태 및 기타 정보와 함께 표시됩니다.

gdcloud
영역에서 사용 가능한 Kubernetes 클러스터를 나열합니다.
gdcloud clusters list출력은 다음과 비슷합니다.
CLUSTERREF.NAME READINESS.STATE TYPE CURRENTVERSION.USERCLUSTERVERSION CURRENTVERSION.SUPPORT.STATUS user-vm-1 Ready user 1.15.0-gdch.394225-1.28.15-gke.1200 In Support user-vm-2 Ready user 1.15.0-gdch.394225-1.29.12-gke.800 In Support
API
영역에서 사용 가능한 Kubernetes 클러스터를 나열합니다.
kubectl get clusters.cluster.gdc.goog -n KUBERNETES_CLUSTER_NAMESPACE \ --kubeconfig MANAGEMENT_API_SERVER다음을 바꿉니다.
MANAGEMENT_API_SERVER: 영역 API 서버의 kubeconfig 경로입니다.KUBERNETES_CLUSTER_NAMESPACE: 클러스터의 네임스페이스입니다. 공유 클러스터의 경우platform네임스페이스를 사용합니다. 표준 클러스터의 경우 클러스터의 프로젝트 네임스페이스를 사용합니다.
출력은 다음과 비슷합니다.
NAME STATE K8S VERSION user-vm-1 Running 1.25.10-gke.2100 user-test Running 1.26.5-gke.2100
클러스터에 사용 가능한 Kubernetes 버전 나열
GDC 영역에서 사용 가능한 Kubernetes 버전을 나열하여 클러스터에서 액세스할 수 있는 Kubernetes 기능을 확인할 수 있습니다.
영역에서 사용 가능한 Kubernetes 버전을 나열합니다.
kubectl get userclustermetadata.upgrade.private.gdc.goog \ -o=custom-columns=K8S-VERSION:.spec.kubernetesVersion \ --kubeconfig MANAGEMENT_API_SERVERMANAGEMENT_API_SERVER를 클러스터의 영역 API 서버 kubeconfig 파일로 바꿉니다.결과는 다음과 유사합니다.
K8S-VERSION 1.25.10-gke.2100 1.26.5-gke.2100 1.27.4-gke.500
업데이트 가능한 속성 보기
각 Kubernetes 클러스터에는 생성된 후 변경할 수 있는 속성 집합이 있습니다. Cluster 커스텀 리소스의 spec에 있는 변경 가능한 속성만 변경할 수 있습니다. 클러스터가 프로비저닝된 후에는 spec의 일부 속성을 업데이트할 수 없습니다. 업데이트 가능한 속성을 보려면 다음 단계를 완료하세요.
콘솔
탐색 메뉴에서 Kubernetes Engine > 클러스터를 선택합니다.
Kubernetes 클러스터 목록에서 클러스터 이름을 클릭하여 속성을 확인합니다.
수정 가능한 속성에는 edit 수정 아이콘이 있습니다.
API
Cluster사양의 속성 목록과 각 속성에 해당하는 유효한 값을 확인하세요.kubectl explain clusters.cluster.gdc.goog.spec \ --kubeconfig MANAGEMENT_API_SERVERMANAGEMENT_API_SERVER를 영역 API 서버의 kubeconfig 경로로 바꿉니다.출력은 다음과 비슷합니다.
KIND: Cluster VERSION: cluster.gdc.goog/v1 RESOURCE: spec <Object> DESCRIPTION: <empty> FIELDS: clusterNetwork <Object> The cluster network configuration. If unset, the default configurations with pod and service CIDR sizes are used. Optional. Mutable. initialVersion <Object> The GDC air-gapped version information of the user cluster during cluster creation. Optional. Default to use the latest applicable version. Immutable. loadBalancer <Object> The load balancer configuration. If unset, the default configuration with the ingress service IP address size is used. Optional. Mutable. nodePools <[]Object> The list of node pools for the cluster worker nodes. Optional. Mutable. releaseChannel <Object> The release channel a cluster is subscribed to. When a cluster is subscribed to a release channel, GDC maintains the cluster versions for users. Optional. Mutable.GDC 콘솔 또는 kubectl CLI를 사용하여 이러한 설정을 업데이트합니다. 예를 들어 노드 풀의 크기를 조절할 수 있습니다.