Google Distributed Cloud에서 워크로드는 하나 이상의 사용자 클러스터에서 실행됩니다. 이 페이지에서는 Google Distributed Cloud 토폴로지 도메인에서 사용할 사용자 클러스터를 만드는 방법을 보여줍니다. 토폴로지 도메인을 사용하려면 Google Distributed Cloud 버전 1.31 이상이 필요합니다.
토폴로지 도메인을 설정하려면 고급 클러스터를 사용 설정해야 합니다. 고급 클러스터 미리보기에는 다음과 같은 제한사항이 있습니다.
- 새 1.31 클러스터의 경우 클러스터 생성 시점에만 고급 클러스터를 사용 설정할 수 있습니다.
- 고급 클러스터를 사용 설정한 후에는 클러스터를 1.32로 업그레이드할 수 없습니다. 테스트 환경에서만 고급 클러스터를 사용 설정합니다.
이 페이지는 기술 인프라를 설정, 모니터링, 관리하는 관리자, 설계자, 운영자를 위해 작성되었습니다. Google Cloud 콘텐츠에서 참조하는 일반적인 역할 및 예시 작업에 대해 자세히 알아보려면 일반 GKE Enterprise 사용자 역할 및 작업을 참고하세요.
시작하기 전에
관리자 워크스테이션 만들기에 설명된 대로 관리자 워크스테이션을 설정했고 로그인할 수 있는지 확인합니다. 관리자 워크스테이션에는 사용자 클러스터를 만드는 데 필요한 도구가 포함되어 있습니다. 관리자 워크스테이션에서 이 문서의 모든 단계를 수행합니다.
아직 수행하지 않았다면 다음 문서에 설명된 대로 Google Cloud 리소스를 설정합니다.
사용자 클러스터를 만들기 전에 사용자 클러스터를 관리할 관리자 클러스터가 있어야 합니다. 아직 만들지 않았다면 관리자 워크스테이션 및 토폴로지 도메인과 함께 사용할 관리자 클러스터를 만듭니다.
설치하려는 사용자 클러스터의 버전을 확인합니다. 사용자 클러스터를 만들 때 일반적으로 관리자 클러스터 버전과 일치하는 버전을 설치합니다. 사용자 클러스터에 다른 버전을 설치하려면 버전 규칙을 참고하세요.
IP 주소 계획 문서를 검토하고 사용 가능한 IP 주소가 충분한지 확인합니다.
수동 부하 분산을 위해 부하 분산기를 구성합니다. 사용자 클러스터를 만들기 전에 부하 분산기를 설정해야 합니다.
필요한 노드 풀 수와 각 풀에서 실행할 운영체제를 생각합니다.
vCenter Server의 각 인스턴스에 액세스하는 데 필요한 정보를 수집합니다. vSphere 인프라 구성 파일의
Secret
섹션과VSphereInfraConfig.credentials.vCenters
섹션을 작성하려면 이 정보가 필요합니다. 필요한 정보를 얻는 방법은 다음을 참고하세요.
절차 개요
gkectl
을 사용하여 사용자 클러스터를 만드는 기본 단계는 다음과 같습니다.
- 사용자 클러스터 구성 파일 작성
- 사용자 클러스터 구성 파일에서 새 클러스터의 세부정보를 지정합니다.
- IP 블록 파일 작성
- IP 블록 파일에서 게이트웨이, 넷마스크, 컨트롤 플레인 노드, 선택적으로 워커 노드의 IP 주소를 지정합니다.
- 사용자 클러스터 만들기
gkectl create cluster
를 실행하여 구성 파일에 지정된 대로 클러스터를 만듭니다.
- 사용자 클러스터 실행 여부 확인
kubectl
을 사용하여 클러스터 노드를 확인합니다.
이 절차를 마치면 실행 중인 사용자 클러스터가 준비되며 여기에 워크로드를 배포할 수 있습니다.
사용자 클러스터 구성 파일 작성
gkeadm
을 사용하여 관리자 워크스테이션을 만든 경우 gkeadm
은 사용자 클러스터 구성 파일의 템플릿을 생성했습니다.user-cluster.yaml
또한 gkeadm
에는 일부 필드도 채워져 있습니다.
gkeadm
을 사용하여 관리자 워크스테이션을 만들지 않은 경우 gkectl
을 사용하여 사용자 클러스터 구성 파일의 템플릿을 생성할 수 있습니다.
사용자 클러스터 구성 파일의 템플릿을 생성하려면 다음 안내를 따르세요.
gkectl create-config cluster --config=OUTPUT_FILENAME --gke-on-prem-version=VERSION
다음을 바꿉니다.
OUTPUT_FILENAME
: 생성된 템플릿에 대해 선택한 경로. 이 플래그를 생략하면 gkectl
은 파일 이름을 user-cluster.yaml
로 지정하고 현재 디렉터리에 넣습니다.
VERSION
: 원하는 버전 번호. 예를 들면 gkectl create-config cluster --gke-on-prem-version=1.31.0-gke.889
입니다.
사용자 클러스터 구성 파일 문서를 살펴보고 구성 파일을 숙지합니다. 다음 단계를 완료할 때 참조되므로 이 문서를 개별 탭 또는 창으로 열어 두는 것이 좋을 수 있습니다.
name
name
필드를 사용자 클러스터용으로 선택한 이름으로 설정합니다.
gkeOnPremVersion
이 필드는 이미 채워져 있습니다. Google Distributed Cloud 버전을 지정합니다. 예를 들면 1.31.0-gke.889
입니다.
enableAdvancedCluster
enableAdvancedCluster
를 true
로 설정합니다.
enableControlplaneV2
Controlplane V2는 모든 1.30 이상 사용자 클러스터에 필요합니다. enableControlplaneV2
를 true
로 설정합니다.
Controlplane V2가 사용 설정되면 사용자 클러스터의 컨트롤 플레인은 사용자 클러스터 자체의 노드에서 실행됩니다.
enableDataplaneV2
enableDataplaneV2를 true
로 설정합니다.
vCenter
이 섹션 전체를 삭제합니다. 대신 vSphere 인프라 구성 파일에서 토폴로지 도메인별로 vCenter 정보를 구성합니다.
network
구성 파일에서 다음을 삭제합니다.
- 전체
network.hostConfig
섹션 이 정보는 토폴로지 도메인별로 vSphere 인프라 구성 파일에 구성됩니다. network.vCenter.networkName
필드 이 필드는 토폴로지 도메인별로 vSphere 인프라 구성 파일에 구성됩니다.- 전체
network.controlPlaneIPBlock
섹션 게이트웨이, 네트워크 마스크, 컨트롤 플레인 노드의 IP 주소는 IP 블록 파일에 구성됩니다.
- 전체
network.ipMode.ipBlockFilePath
를 IP 블록 파일의 경로로 설정합니다.워커 노드가 IP 주소를 가져오는 방법을 결정합니다. 옵션은 다음과 같습니다.
미리 설정한 DHCP 서버에서
network.ipMode.type
을"dhcp"
로 설정합니다.IP 블록 파일에 제공한 고정 IP 주소 목록에서 가져옵니다.
network.ipMode.type
을"static"
로 설정합니다.
사용자 클러스터의 제어 영역 노드는 사용자가 IP 블록 파일에 제공하는 고정 주소 목록에서 IP를 가져와야 합니다. 이는 워커 노드가 DHCP 서버에서 주소를 가져올 경우에도 마찬가지입니다.
DHCP 서버를 사용하거나 고정 IP 주소 목록을 지정하는지에 관계없이 사용자 클러스터에 사용할 수 있도록 충분한 IP 주소가 필요합니다. 필요한 IP 주소 수에 대한 설명은 IP 주소 계획을 참조하세요.
network.podCIDR 및 network.serviceCIDR에는 미리 입력된 값이 있으며, 네트워크에서 이미 사용 중인 주소와 충돌하지 않는 한 그대로 유지할 수 있습니다. Kubernetes는 이러한 범위를 사용하여 클러스터의 포드 및 서비스에 IP 주소를 할당합니다.
loadBalancer
사용자 클러스터의 Kubernetes API 서버에 대해 VIP를 별도로 설정합니다. VIP를
loadBalancer.vips.controlPlaneVIP
의 값으로 제공합니다.사용자 클러스터의 인그레스 서비스에 대해 다른 VIP를 설정합니다. VIP를
loadBalancer.vips.ingressVIP
의 값으로 제공합니다.loadBalancer.kind
를"ManualLB"
로 설정하고manualLB
섹션을 입력합니다. 자세한 내용은 수동 부하 분산 사용 설정을 참조하세요.
advancedNetworking
이그레스 NAT 게이트웨이를 만들려면 advancedNetworking을 true
로 설정합니다.
multipleNetworkInterfaces
multipleNetworkInterfaces를 false
로 설정합니다. 토폴로지 도메인에서는 포드용 다중 네트워크 인터페이스가 지원되지 않습니다.
storage
vSphere CSI 구성요소 배포를 사용 중지하려면 storage.vSphereCSIDisabled를 true
로 설정하세요.
masterNode
사용자 클러스터의 제어 영역 노드에 CPU와 메모리를 지정하려면
masterNode
섹션에서cpus
및memoryMB
필드를 입력합니다.고가용성 (HA) 클러스터만 지원됩니다.
replicas
필드를3
로 설정하여 클러스터에 제어 영역 노드가 3개 있다고 지정합니다.제어 영역 노드의 자동 크기 조절을 사용 설정하려면
autoResize.enabled
를true
로 설정합니다.전체
masterNode.vsphere
섹션을 삭제합니다.masterNode.topologyDomains
필드에 컨트롤 플레인 노드가 속할 토폴로지 도메인의 이름을 입력합니다.
nodePools
노드 풀은 구성이 모두 동일한 클러스터의 워커 노드 그룹입니다. 예를 들어 노드 풀마다 별도의 토폴로지 도메인을 설정할 수 있습니다. nodePools
섹션을 입력하여 노드 풀을 하나 이상 지정해야 합니다.
지정하는 각 노드 풀에 대해 다음을 실행합니다.
nodePools[i].topologyDomains
필드에 노드 풀을 배치할 토폴로지 도메인의 이름을 입력합니다.nodePools[i].vsphere.tags
를 제외하고nodePools[i].vsphere
섹션의 모든 필드를 삭제합니다. 이 정보는 토폴로지 도메인별로 vSphere 인프라 구성 파일에 지정됩니다.
# advanced-cluster-change #
nodePools[i].osImageType
을 ubuntu_cgroupv2
또는 ubuntu_containerd
로 설정합니다.
노드 풀에 관한 일반적인 정보는 노드 풀 및 노드 풀 만들기 및 관리를 참고하세요.
antiAffinityGroups
antiAffinityGroups.enabled
를 false
로 설정합니다.
Distributed Resource Scheduler(DRS) 안티어피니티 규칙은 토폴로지 도메인에서 지원되지 않습니다.
stackdriver
stackdriver
섹션을 작성하여 클러스터에 Cloud Logging 및 Cloud Monitoring을 사용 설정합니다.
다음 요구사항을 참고하세요.
stackdriver.projectID
의 ID는gkeConnect.projectID
및cloudAuditLogging.projectID
의 ID와 동일해야 합니다.stackdriver.clusterLocation
에 설정된 Google Cloud 리전은cloudAuditLogging.clusterLocation
및gkeConnect.location
에 설정된 리전과 동일해야 합니다. 또한gkeOnPremAPI.enabled
가true
인 경우gkeOnPremAPI.location
에 동일한 리전을 설정해야 합니다.
프로젝트 ID와 리전이 동일하지 않으면 클러스터 생성에 실패합니다.
gkeConnect
사용자 클러스터를 Google Cloud Fleet에 등록해야 합니다.
gkeConnect
섹션을 입력하여 Fleet 호스트 프로젝트 및 연결된 서비스 계정을 지정합니다. gkeConnect.projectID
의 ID는 stackdriver.projectID
및 cloudAuditLogging.projectID
에 설정된 ID와 동일해야 합니다. 프로젝트 ID가 동일하지 않으면 클러스터 생성에 실패합니다.
원하는 경우 gkeConnect.location
에서 Fleet 및 Connect 서비스가 실행되는 리전을 지정할 수 있습니다. 이 필드를 포함하지 않으면 클러스터는 이러한 서비스의 전역 인스턴스를 사용합니다.
구성 파일에 gkeConnect.location
을 포함하는 경우 지정하는 리전은 cloudAuditLogging.clusterLocation
, stackdriver.clusterLocation
, gkeOnPremAPI.location
에서 구성된 리전과 동일해야 합니다. 리전이 동일하지 않으면 클러스터 생성에 실패합니다.
gkeOnPremAPI
이 섹션에서는 클러스터를 GKE On-Prem API에 등록하는 방법을 설명합니다.
gkectl
명령줄 도구는 토폴로지 도메인을 사용하는 클러스터에 사용할 수 있는 유일한 클러스터 수명 주기 관리 도구입니다. Google Cloud 콘솔, Google Cloud CLI, Terraform은 토폴로지 도메인을 사용하는 클러스터에 지원되지 않지만, 원하는 경우 클러스터를 만들 때 GKE On-Prem API에 클러스터를 등록할 수 있습니다.
GKE On-Prem API가Google Cloud 프로젝트에 사용 설정된 경우 프로젝트의 모든 클러스터가 stackdriver.clusterLocation
에 구성된 리전의 GKE On-Prem API에 자동으로 등록됩니다. gkeOnPremAPI.location
리전은 cloudAuditLogging.clusterLocation
, gkeConnect.location
, stackdriver.clusterLocation
에 지정된 리전과 동일해야 합니다.
GKE On-Prem API에서 프로젝트의 모든 클러스터를 등록하려면 프로젝트의 GKE On-Prem API를 활성화하고 사용하기 위해 시작하기 전에의 단계를 수행해야 합니다.
GKE On-Prem API에서 클러스터를 등록하지 않으려면 이 섹션을 포함하고
gkeOnPremAPI.enabled
를false
로 설정합니다. 프로젝트에 클러스터를 등록하지 않으려면 프로젝트에서gkeonprem.googleapis.com
(GKE On-Prem API의 서비스 이름)을 중지합니다. 자세한 내용은 서비스 사용 중지를 참조하세요.
cloudAuditLogging
클러스터의 Kubernetes API 서버의 감사 로그를 Cloud 감사 로그와 통합하려면 cloudAuditLogging
섹션을 입력합니다.
다음 요구사항을 참고하세요.
# advanced-cluster-change #
cloudAuditLogging.serviceAccountKeyPath
를 stackdriver.serviceAccountKeyPath
와 동일한 경로로 설정합니다.
cloudAuditLogging.projectID
의 ID는gkeConnect.projectID
및stackdriver.projectID
의 ID와 동일해야 합니다.cloudAuditLogging.clusterLocation
의 리전은gkeConnect.location
(필드가 구성 파일에 포함된 경우) 및stackdriver.clusterLocation
에 설정된 리전과 동일해야 합니다. 또한gkeOnPremAPI.enabled
가true
인 경우gkeOnPremAPI.location
에 동일한 리전을 설정해야 합니다.
프로젝트 ID와 리전이 동일하지 않으면 클러스터 생성에 실패합니다.
preparedSecrets
preparedSecrets
필드를 삭제합니다.
토폴로지 도메인이 사용 설정된 경우 준비된 사용자 인증 정보는 지원되지 않습니다.
작성된 구성 파일 예시
다음은 IP 블록 파일과 사용자 클러스터 구성 파일의 예시입니다.
user-ipblock.yaml
blocks: - netmask: 255.255.255.0 gateway: 172.16.21.1 ips: - ip: 172.16.21.2 hostname: worker-vm-1 - ip: 172.16.21.3 hostname: worker-vm-2 - ip: 172.16.21.4 hostname: worker-vm-3 - ip: 172.16.21.5 hostname: worker-vm-4 - netmask: 255.255.255.0 gateway: 100.115.223.254 ips: - ip: 100.115.222.205 hostname: cp-1 isControlPlane: true - ip: 100.115.222.206 hostname: cp-2 isControlPlane: true - ip: 100.115.222.207 hostname: cp-3 isControlPlane: true
user-cluster.yaml
cat user-cluster.yaml apiVersion: v1 kind: UserCluster name: "my-user-cluster" gkeOnPremVersion: 1.31.0-gke.889 enableAdvancedCluster: true enableControlplaneV2: true enableDataplaneV2: true network: ipMode: type: "static" ipBlockFilePath: "user-ipblock.yaml" serviceCIDR: 10.96.0.0/20 podCIDR: 192.168.0.0/16 loadBalancer: vips: controlPlaneVIP: "100.115.222.200" ingressVIP: "172.16.21.30" kind: "ManualLB" manualLB: ingressHTTPNodePort: 32527 ingressHTTPSNodePort: 30139 controlPlaneNodePort: 30968 masterNode: cpus: 4 memoryMB: 8192 replicas: 3 nodePools: - name: "worker-node-pool1" cpus: 4 memoryMB: 8192 replicas: 3 topologyDomains: - "domain1" antiAffinityGroups: enabled: false gkeConnect: projectID: "my-project-123" location: "us-central1" registerServiceAccountKeyPath: "connect-register-sa-2203040617.json" stackdriver: projectID: "my-project-123" clusterLocation: "us-central1" enableVPC: false serviceAccountKeyPath: "log-mon-sa-2203040617.json" autoRepair: enabled: true
앞의 예시에서 이해가 필요한 중요 부분은 다음과 같습니다.
nodePools.replicas
필드는3
으로 설정됩니다. 즉,"worker-node-pool"
에는 워커 노드가 3개 있습니다.network.ipMode.type
가"static"
로 설정되어 있으므로 모든 워커 노드는 고정 IP 주소를 사용합니다.컨트롤 플레인 노드와 워커 노드의 IP 주소는 IP 블록 파일에 지정됩니다. 워커 노드가 3개뿐인데도 IP 블록 파일은 워커 노드의 주소가 4개입니다. 추가 작업자 노드 IP 주소는 클러스터 업그레이드, 업데이트, 자동 복구 중에 필요합니다. 컨트롤 플레인 노드의 IP 주소에는
isControlPlane: true
플래그가 있습니다.고급 클러스터, Controlplane V2, Dataplane V2가 사용 설정됩니다.
masterNode.replicas
필드가3
으로 설정되므로 클러스터는 고가용성 컨트롤 플레인을 갖게 됩니다.제어 영역 VIP는 제어 영역 노드와 동일한 VLAN에 있고 인그레스 VIP는 워커 노드와 동일한 VLAN에 있습니다.
IP 블록 파일 작성
IP 블록 파일의 템플릿을 사용자 클러스터 구성 파일의 network.ipMode.ipBlockFilePath
필드에 지정한 디렉터리의 파일에 복사합니다. 관리자 클러스터와 각 사용자 클러스터에 대해 별도의 IP 블록 파일을 만듭니다.
게이트웨이, 네트워크 마스크, 컨트롤 플레인 노드의 IP 주소를 IP 블록 파일에 추가합니다. 각 컨트롤 플레인 노드 IP 주소에 대해 이전 예와 같이 isControlPlane: true
를 추가합니다. 고가용성 (HA) 사용자 클러스터가 필요한 경우 3개의 IP 주소를 지정합니다. 그렇지 않으면 IP 주소를 1개 지정합니다. 컨트롤 플레인 노드에 지정하는 IP 주소 수는 사용자 클러스터 구성 파일의 masterNode.replicas
필드에 있는 수와 일치해야 합니다.
network.ipMode.type
이 "static"
로 설정된 경우 워커 노드의 IP 주소를 IP 블록 파일에 추가합니다. 클러스터 업그레이드, 업데이트, 자동 복구 중에 사용할 IP 주소를 하나 더 지정해야 합니다.
IP 블록 파일의 각 게이트웨이 주소는 vSphere 인프라 구성 파일의 topologyDomains[i].network.gateway
필드에 지정된 주소와 일치해야 합니다. 자세한 내용은 토폴로지 도메인 예시를 참고하세요.
사용자 클러스터 만들기
다음 명령어를 실행하여 사용자 클러스터를 만듭니다.
gkectl create cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
사용자 클러스터 kubeconfig 파일 찾기
gkectl create cluster
명령어는 현재 디렉터리에 USER_CLUSTER_NAME-kubeconfig
라는 kubeconfig 파일을 만듭니다. 나중에 사용자 클러스터와 상호 작용하려면 이 kubeconfig 파일이 필요합니다.
kubeconfig 파일에는 사용자 클러스터의 이름이 포함되어 있습니다. 클러스터 이름을 보려면 다음을 실행합니다.
kubectl config get-clusters --kubeconfig USER_CLUSTER_KUBECONFIG
출력에 클러스터의 이름이 표시됩니다. 예를 들면 다음과 같습니다.
NAME my-user-cluster
원하는 경우 kubeconfig 파일의 이름과 위치를 변경할 수 있습니다.
사용자 클러스터 실행 여부 확인
사용자 클러스터 실행 여부 확인:
kubectl get nodes --kubeconfig USER_CLUSTER_KUBECONFIG
USER_CLUSTER_KUBECONFIG를 사용자 클러스터 kubeconfig 파일 경로로 바꿉니다.
출력에 사용자 클러스터 노드가 표시됩니다. 예를 들면 다음과 같습니다.
cp-vm-1 Ready control-plane,master 18m cp-vm-2 Ready control-plane,master 18m cp-vm-3 Ready control-plane,master 18m worker-vm-1 Ready 6m7s worker-vm-2 Ready 6m6s worker-vm-3 Ready 6m14s
PodTemplate
구성
토폴로지 라벨은 토폴로지 도메인의 노드 라벨에 채워집니다.
토폴로지 도메인 설정에서 기본 제약 조건인 "topology.kubernetes.io/zone"
를 토폴로지 키로 사용하지 않는 한, 해당하는 경우 배포, StatefulSet 또는 ReplicaSet의 pod 템플릿에서 토폴로지 키를 구성해야 합니다.
예를 들어 토폴로지 라벨에서 키를 "topology.examplepetstore.com/zone"
로 정의했다고 가정해 보겠습니다. PodTemplate
에서 키를 topologySpreadConstraints.topologyKey
필드의 값으로 지정합니다. 이를 통해 Kubernetes 스케줄러는 토폴로지 도메인에 포드를 배포하여 고가용성을 보장하고 장애 발생 시 단일 영역에 과도하게 집중되는 것을 방지할 수 있습니다.
문제 해결
클러스터 생성 및 업그레이드 문제 해결을 참조하세요.
다음 단계
- Google Cloud 콘솔에서 클러스터에 연결합니다.
- 애플리케이션 배포