Google Distributed Cloud에서 워크로드는 하나 이상의 사용자 클러스터에서 실행됩니다. 이 문서에서는 사용자 클러스터를 만드는 방법을 보여줍니다. 이 페이지는 기술 인프라를 설정, 모니터링, 관리하는 관리자, 설계자, 운영자를 위해 작성되었습니다. Google Cloud 콘텐츠에서 참조하는 일반적인 역할 및 예시 작업에 대해 자세히 알아보려면 일반 GKE Enterprise 사용자 역할 및 작업을 참조하세요.
사용자 클러스터를 만드는 데 사용할 수 있는 몇 가지 도구가 있습니다.
gkectl
- Google Cloud 콘솔
Google Cloud CLI
- Terraform
이러한 도구 중 3개(콘솔, gcloud CLI, Terraform)는 GKE On-Prem API의 클라이언트입니다.
사용할 도구에 대한 안내는 클러스터 수명 주기 관리 도구 선택을 참조하세요.
시작하기 전에
아직 수행하지 않았으면 다음 문서에 설명된 대로 Google Cloud 리소스를 설정합니다.
Fleet 호스트 프로젝트를 설정할 때 도구 선택에 유의하세요. GKE On-Prem API 클라이언트 중 하나를 선택한 경우 사용 설정해야 하는 추가 API가 있기 때문입니다. API 목록은 Fleet 호스트 프로젝트에서 API 사용 설정을 참고하세요.
사용자 클러스터를 만들기 전에 사용자 클러스터를 관리할 관리자 클러스터가 있어야 합니다. 아직 사용자 클러스터를 만들지 않았다면 관리자 워크스테이션 및 관리자 클러스터를 만듭니다.
설치하려는 사용자 클러스터의 버전을 확인합니다. 사용자 클러스터를 만들 때 일반적으로 관리자 클러스터 버전과 일치하는 버전을 설치합니다. 하지만 해당 버전 이상의 패치 버전을 설치할 수 있으며 버전 1.28 이상에서는 사용자 클러스터가 관리자 클러스터보다 최대 2개의 부 버전이 더 높을 수 있습니다.
Controlplane V2를 사용 설정하는 것이 좋습니다. Controlplane V2가 사용 설정되었으면 사용자 클러스터의 컨트롤 플레인이 사용자 클러스터 자체의 하나 이상의 노드에서 실행됩니다. 버전 1.30 이상을 설치하려면 Controlplane V2가 필요합니다. 대안은 kubeception을 사용하는 사용자 클러스터를 만드는 것입니다. kubeception의 경우 사용자 클러스터의 컨트롤 플레인은 관리자 클러스터의 하나 이상의 노드에서 실행됩니다.
IP 주소 계획 문서를 검토하고 사용 가능한 IP 주소가 충분한지 확인합니다.
부하 분산 개요를 검토하고 사용하려는 부하 분산기 종류에 대한 결정을 다시 확인합니다. 번들 MetalLB 분산기를 사용하거나 원하는 부하 분산기를 수동으로 구성할 수 있습니다. 수동 부하 분산의 경우 사용자 클러스터를 만들기 전에 부하 분산기를 설정해야 합니다.
필요한 노드 풀 수와 각 풀에서 실행할 운영체제를 생각합니다.
관리자 클러스터와 사용자 클러스터에 별도의 vSphere 클러스터를 사용할지, 별도의 데이터 센터를 사용할지 여부를 생각합니다. 또한 vCenter Server의 개별 인스턴스를 사용할지 여부도 생각합니다.
버전 1.29 이상에서는 서버 측 프리플라이트 검사가 기본적으로 사용 설정됩니다. 서버 측 프리플라이트 검사에는 추가 방화벽 규칙이 필요합니다. 관리자 클러스터의 방화벽 규칙에서 '프리플라이트 검사'를 검색하고 필요한 모든 방화벽 규칙이 구성되었는지 확인합니다.
서버 측 프리플라이트 검사를 사용하면
gkectl
을 사용하여 사용자 클러스터를 만들 때 프리플라이트 검사가 관리자 워크스테이션에서 로컬로 실행되는 대신 관리자 클러스터에서 실행됩니다. Google Cloud 콘솔, Google Cloud CLI 또는 Terraform을 사용하여 사용자 클러스터를 만드는 경우에도 서버 측 프리플라이트 검사가 실행됩니다.
사용자 클러스터 만들기
gkectl
절차 개요
gkectl
을 사용하여 사용자 클러스터를 만드는 기본 단계는 다음과 같습니다.
- 관리자 워크스테이션에 연결
- 관리자 워크스테이션은 사용자 클러스터를 만드는 데 필요한 도구가 있는 머신입니다.
- 구성 파일 작성
- 사용자 클러스터 구성 파일, 사용자 인증 정보 구성 파일, IP 블록 파일을 완료하여 새 클러스터의 세부정보를 지정합니다.
- (선택사항) OS 이미지를 vSphere로 가져오고 해당되는 경우 컨테이너 이미지를 비공개 레지스트리로 푸시합니다.
gkectl prepare
를 실행합니다.
- 사용자 클러스터 만들기
gkectl create cluster
를 실행하여 구성 파일에 지정된 대로 클러스터를 만듭니다.
- 사용자 클러스터 실행 여부 확인
kubectl
을 사용하여 클러스터 노드를 확인합니다.
이 절차를 마치면 실행 중인 사용자 클러스터가 준비되며 여기에 워크로드를 배포할 수 있습니다.
VPC 서비스 제어를 사용하는 경우 일부 gkectl
명령어를 실행할 때 "Validation Category: GCP - [UNKNOWN] GCP
service: [Stackdriver] could not get GCP services"
같은 오류가 표시될 수 있습니다. 이러한 오류를 방지하려면 명령어에 --skip-validation-gcp
매개변수를 추가하세요.
구성 파일 작성
관리자 워크스테이션에서 이 단계를 수행합니다.
gkeadm
이 관리 워크스테이션을 만들 때 user-cluster.yaml
이라는 구성 파일을 생성했습니다. 이 구성 파일은 사용자 클러스터를 만들기 위한 것입니다.
사용자 클러스터 구성 파일 문서를 살펴보고 구성 파일을 숙지합니다. 다음 단계를 완료할 때 참조되므로 이 문서를 개별 탭 또는 창으로 열어 두는 것이 좋을 수 있습니다.
name
name
필드를 사용자 클러스터용으로 선택한 이름으로 설정합니다.
gkeOnPremVersion
이 필드는 이미 채워져 있습니다. Google Distributed Cloud 버전을 지정합니다. 예를 들면 1.30.100-gke.96
입니다.
enableControlplaneV2
Controlplane V2가 사용 설정된 사용자 클러스터를 만들려면 enableControlplaneV2
를 true
로 설정합니다.
Controlplane V2가 사용 설정되면 사용자 클러스터의 컨트롤 플레인은 사용자 클러스터 자체의 노드에서 실행됩니다. Controlplane V2를 사용 설정하는 것이 좋습니다.
kubeception
이 필드를 false
로 설정하면 클러스터는 kubecetption을 사용합니다.
kubeception을 사용하면 사용자 클러스터의 컨트롤 플레인이 관리자 클러스터의 노드에서 실행됩니다.
kubeception 클러스터의 경우 다음 안내를 따르세요.
enableControlplaneV2
을false
로 설정합니다.controlPlaneIPBlock
섹션은 입력하지 마세요.관리자 클러스터의 IP 블록 파일에서 사용자 클러스터의 컨트롤 플레인 노드에 대한 IP 주소를 지정합니다.
enableDataplaneV2
enableDataplaneV2를 true
로 설정합니다.
vCenter
관리자 클러스터 구성 파일의 vCenter
섹션에 설정한 값은 전역입니다. 즉, 관리자 클러스터 및 연결된 사용자 클러스터에 적용됩니다.
사용자 클러스터를 만들 때마다 전역 vCenter
값 중 일부를 재정의할 수 있습니다.
전역 vCenter
값을 재정의하려면 사용자 클러스터 구성 파일의 vCenter
섹션에 있는 관련 필드를 입력합니다.
특히 관리자 클러스터와 사용자 클러스터에 별도의 vSphere 클러스터를 사용하고 관리자 클러스터와 사용자 클러스터에 별도의 데이터 센터를 사용할 수 있습니다.
데이터 센터 1개와 vSphere 클러스터 1개 사용
기본 옵션은 관리자 클러스터와 사용자 클러스터에 데이터 센터 하나와 vSphere 클러스터 하나를 사용하는 것입니다. 이 옵션의 경우 사용자 클러스터 구성 파일에서 vCenter
값을 설정하지 마세요. vCenter
값은 관리자 클러스터에서 상속됩니다.
별도의 vSphere 클러스터 사용
자체 vSphere 클러스터에 있는 사용자 클러스터를 만들려면 사용자 클러스터 구성 파일에서 vCenter.cluster
값을 지정합니다.
관리자 클러스터와 사용자 클러스터가 별도의 vSphere 클러스터에 있으면 같은 데이터 센터나 다른 데이터 센터에 있을 수 있습니다.
별도의 vSphere 데이터 센터 사용
사용자 클러스터와 관리자 클러스터는 서로 다른 데이터 센터에 있을 수 있습니다. 이 경우 두 클러스터도 별도의 vSphere 클러스터에 있습니다.
사용자 클러스터 구성 파일에 vCenter.datacenter
를 지정하는 경우 다음 사항도 지정해야 합니다.
vCenter.networkName
vCenter.datastore
또는vCenter.storagePolicyName
vCenter.cluster
또는vCenter.resourcePool
별도의 vCenter 계정 사용
사용자 클러스터는 관리자 클러스터와는 다른 vCenter 계정(다른 vCenter.credentials
사용)을 사용할 수 있습니다. 관리자 클러스터의 vCenter 계정에는 관리자 클러스터 데이터 센터에 대한 액세스 권한이 필요하지만 사용자 클러스터의 vCenter 계정에는 사용자 클러스터 데이터 센터에 대한 액세스 권한만 필요합니다.
별도의 vCenter 서버 인스턴스 사용
특정 상황에서는 자체 vCenter Server 인스턴스를 사용하는 사용자 클러스터를 만드는 것이 좋습니다. 즉, 관리자 클러스터 및 연결된 사용자 클러스터에 서로 다른 vCenter Server 인스턴스가 사용됩니다.
예를 들어 에지 위치에서 vCenter Server를 실행하는 물리적 머신과 ESXi를 실행하는 하나 이상의 물리적 머신을 사용할 수 있습니다. 그러면 vCenter Server의 로컬 인스턴스를 사용하여 데이터 센터, 클러스터, 리소스 풀, 데이터 스토어, 폴더를 포함한 vSphere 객체 계층 구조를 만들 수 있습니다.
사용자 클러스터 구성 파일의 전체 vCenter
섹션을 작성합니다. 특히 관리자 클러스터 구성 파일에 지정한 vCenter Server 주소와 다른 vCenter.address
값을 지정합니다. 예를 들면 다음과 같습니다.
vCenter: address: "vc-edge.example" datacenter: "vc-edge" cluster: "vc-edge-workloads" resourcePool: "vc-edge-pool datastore: "vc-edge-datastore caCertPath: "/usr/local/google/home/me/certs/edge-cacert.pem" credentials: fileRef: path: "credential.yaml" entry: "vCenter-edge" folder: "edge-vm-folder"
또한 network.vCenter.networkName
필드를 채웁니다.
network
워커 노드가 IP 주소를 가져오는 방법을 결정합니다. 옵션은 다음과 같습니다.
미리 설정한 DHCP 서버에서
network.ipMode.type
을"dhcp"
로 설정합니다.제공한 고정 IP 주소 목록에서 가져옵니다.
network.ipMode.type
을"static"
으로 설정하고 고정 IP 주소를 제공하는 IP 블록 파일을 만듭니다. IP 블록 파일의 예시는 작성된 구성 파일 예시를 참조하세요.
워커 노드에 고정 IP 주소를 사용하려면 network.ipMode.ipBlockFilePath
필드를 채웁니다.
사용자 클러스터의 컨트롤 플레인 노드는 사용자가 제공하는 고정 주소 목록에서 IP를 가져와야 합니다. 이는 워커 노드가 DHCP 서버에서 주소를 가져올 경우에도 마찬가지입니다. 컨트롤 플레인 노드에 고정 IP 주소를 지정하려면 network.controlPlaneIPBlock
섹션을 입력합니다. 고가용성(HA) 사용자 클러스터가 필요한 경우 3개의 IP 주소를 지정합니다. 그렇지 않으면 IP 주소를 1개 지정합니다.
hostConfig
섹션을 입력하여 DNS 및 NTP 서버를 지정합니다. 이러한 DNS 및 NTP 서버는 컨트롤 플레인 노드용입니다. 워커 노드에 고정 IP 주소를 사용하는 경우 이러한 DNS 및 NTP 서버가 워커 노드에도 사용됩니다.
network.podCIDR 및 network.serviceCIDR에는 미리 입력된 값이 있으며, 네트워크에서 이미 사용 중인 주소와 충돌하지 않는 한 그대로 유지할 수 있습니다. Kubernetes는 이러한 범위를 사용하여 클러스터의 포드 및 서비스에 IP 주소를 할당합니다.
DHCP 서버를 사용하거나 고정 IP 주소 목록을 지정하는지에 관계없이 사용자 클러스터에 사용할 수 있도록 충분한 IP 주소가 필요합니다. 필요한 IP 주소 수에 대한 설명은 IP 주소 계획을 참조하세요.
loadBalancer
사용자 클러스터의 Kubernetes API 서버에 대해 VIP를 별도로 설정합니다. 사용자 클러스터의 인그레스 서비스에 대해 다른 VIP를 설정합니다. VIP를 loadBalancer.vips.controlPlaneVIP
및 loadBalancer.vips.ingressVIP
의 값으로 제공합니다.
사용할 부하 분산의 유형을 결정합니다. 옵션은 다음과 같습니다.
MetalLB 번들 부하 분산.
loadBalancer.kind
를"MetalLB"
로 설정합니다. 또한loadBalancer.metalLB.addressPools
섹션을 입력하고 노드 풀 중 최소 하나 이상에서enableLoadBalancer
를true
로 설정합니다. 자세한 내용은 MetalLB를 사용한 번들 부하 분산을 참조하세요.수동 부하 분산.
loadBalancer.kind
를"ManualLB"
로 설정하고manualLB
섹션을 입력합니다. 자세한 내용은 수동 부하 분산 사용 설정을 참조하세요.
부하 분산 옵션에 대한 상세 설명은 부하 분산 개요를 참조하세요.
advancedNetworking
이그레스 NAT 게이트웨이를 만들려면 advancedNetworking을 true
로 설정합니다.
multipleNetworkInterfaces
포드에 여러 네트워크 인터페이스를 구성할지 여부를 결정하고 이에 따라 multipleNetworkInterfaces를 설정합니다.
storage
vSphere CSI 구성요소 배포를 중지하려면 storage.vSphereCSIDisabled를 true
로 설정하세요.
masterNode
masterNode
섹션에서 사용자 클러스터에 원하는 컨트롤 플레인 노드 수를 1개 또는 3개로 지정할 수 있습니다. 컨트롤 플레인 노드의 데이터 스토어와 노드의 자동 크기 조절 사용 설정 여부를 지정할 수도 있습니다.
network.controlPlaneIPBlock
섹션에서 컨트롤 플레인 노드에 IP 주소를 지정했음을 기억하세요.
nodePools
노드 풀은 구성이 모두 동일한 클러스터의 노드 그룹입니다. 예를 들어 풀 하나의 노드는 Windows를 실행하고 다른 풀의 노드는 Linux를 실행할 수 있습니다.
nodePools
섹션을 입력하여 노드 풀을 최소 하나 이상 지정해야 합니다.
자세한 내용은 노드 풀 및 노드 풀 만들기 및 관리를 참조하세요.
antiAffinityGroups
antiAffinityGroups.enabled
를
true
또는
false
로 설정합니다.
이 필드는 Google Distributed Cloud에서 워커 노드에 대해 Distributed Resource Scheduler(DRS) 안티-어피니티 규칙을 만들어 데이터 센터에 있는 3개 이상의 물리적 호스트에 분산되도록 하는지 여부를 지정합니다.
stackdriver
클러스터에 Cloud Logging 및 Cloud Monitoring을 사용 설정하려면 stackdriver
섹션을 입력합니다.
이 섹션은 기본적으로 필요합니다. 즉, 이 섹션을 입력하지 않으면 gkectl create cluster
를 실행할 때 --skip-validation-stackdriver
플래그를 포함해야 합니다.
새 클러스터에 대한 다음 요구사항을 참고하세요.
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가 동일하지 않으면 클러스터 생성에 실패합니다.
1.28 이상에서는 원하는 경우 Fleet 및 Connect 서비스가 gkeConnect.location
에서 실행되는 리전을 지정할 수 있습니다. 이 필드를 포함하지 않으면 클러스터는 이러한 서비스의 전역 인스턴스를 사용합니다.
구성 파일에 gkeConnect.location
을 포함하는 경우 지정하는 리전은 cloudAuditLogging.clusterLocation
, stackdriver.clusterLocation
, gkeOnPremAPI.location
에서 구성된 리전과 동일해야 합니다. 리전이 동일하지 않으면 클러스터 생성에 실패합니다.
gkeOnPremAPI
1.16 이상에서 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의 서비스 이름)을 중지합니다. 자세한 내용은 서비스 사용 중지를 참조하세요.
usageMetering
클러스터에 사용량 측정을 사용 설정하려면 usageMetering
섹션을 입력합니다.
cloudAuditLogging
클러스터의 Kubernetes API 서버의 감사 로그를 Cloud 감사 로그와 통합하려면 cloudAuditLogging
섹션을 입력합니다.
새 클러스터에 대한 다음 요구사항을 참고하세요.
cloudAuditLogging.projectID
의 ID는gkeConnect.projectID
및stackdriver.projectID
의 ID와 동일해야 합니다.cloudAuditLogging.clusterLocation
의 리전은gkeConnect.location
(필드가 구성 파일에 포함된 경우) 및stackdriver.clusterLocation
에 설정된 리전과 동일해야 합니다. 또한gkeOnPremAPI.enabled
가true
인 경우gkeOnPremAPI.location
에 동일한 리전을 설정해야 합니다.
프로젝트 ID와 리전이 동일하지 않으면 클러스터 생성에 실패합니다.
작성된 구성 파일 예시
다음은 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
user-cluster.yaml
cat user-cluster.yaml apiVersion: v1 kind: UserCluster name: "my-user-cluster" gkeOnPremVersion: 1.30.100-gke.96 enableControlplaneV2: true enableDataplaneV2: true network: hostConfig: dnsServers: - "203.0.113.2" - "198.51.100.2" ntpServers: - "216.239.35.4" ipMode: type: "static" ipBlockFilePath: "user-ipblock.yaml" serviceCIDR: 10.96.0.0/20 podCIDR: 192.168.0.0/16 controlPlaneIPBlock: netmask: "255.255.255.0" gateway: "172.16.21.1" ips: - ip: "172.16.21.6" hostname: "cp-vm-1" - ip: "172.16.21.7" hostname: "cp-vm-2" - ip: "172.16.21.8" hostname: "cp-vm-3" loadBalancer: vips: controlPlaneVIP: "172.16.21.40" ingressVIP: "172.16.21.30" kind: MetalLB metalLB: addressPools: - name: "address-pool-1" addresses: - "172.16.21.30-172.16.21.39" masterNode: cpus: 4 memoryMB: 8192 replicas: 3 nodePools: - name: "worker-node-pool" cpus: 4 memoryMB: 8192 replicas: 3 enableLoadBalancer: true antiAffinityGroups: enabled: true 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
앞의 예시에서 이해가 필요한 중요 부분은 다음과 같습니다.
워커 노드의 고정 IP 주소는 IP 블록 파일에 지정됩니다. 워커 노드가 3개뿐인데도 IP 블록 파일은 주소가 4개입니다. 추가 IP 주소는 클러스터 업그레이드, 업데이트, 자동 복구 중에 필요합니다.
DNS 및 NTP 서버는
hostConfig
섹션에 지정됩니다. 이 예시에서 이러한 DNS 및 NTP 서버는 컨트롤 플레인 노드 및 워커 노드용입니다. 이는 워커 노드에 고정 IP 주소가 있기 때문입니다. 워커 노드가 DHCP 서버에서 IP 주소를 가져온 경우 이러한 DNS 및 NTP 서버는 컨트롤 플레인 노드에만 사용됩니다.3개의 컨트롤 플레인 노드에 대한 고정 IP 주소는 사용자 클러스터 구성 파일의
network.controlPlaneIPBlock
섹션에 지정됩니다. 이 블록에는 추가 IP 주소가 필요하지 않습니다.Controlplane V2가 사용 설정되었습니다.
masterNode.replicas
필드가3
으로 설정되므로 클러스터는 고가용성 컨트롤 플레인을 갖게 됩니다.컨트롤 플레인 VIP와 인그레스 VIP는 모두 워커 노드 및 컨트롤 플레인 노드와 동일한 VLAN에 있습니다.
LoadBalancer 유형의 서비스를 위해 설정된 VIP는 사용자 클러스터 구성 파일의
loadBalancer.metalLB.addressPools
섹션에 지정됩니다. 이러한 VIP는 워커 노드 및 컨트롤 플레인 노드와 동일한 VLAN에 있습니다. 이 섹션에 지정된 VIP 집합에는 인그레스 VIP가 포함되어야 하며 컨트롤 플레인 VIP가 포함되면 안 됩니다.사용자 클러스터 구성 파일에는
vCenter
섹션이 없습니다. 따라서 사용자 클러스터에 관리자 클러스터와 동일한 vSphere 리소스가 사용됩니다.
구성 파일 유효성 검사
사용자 클러스터 구성 파일을 입력한 후 gkectl check-config
를 실행하여 파일이 유효한지 확인합니다.
gkectl check-config --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
다음을 바꿉니다.
ADMIN_CLUSTER_KUBECONFIG: 관리자 클러스터의 kubeconfig 파일 경로입니다.
USER_CLUSTER_CONFIG: 사용자 클러스터 구성 파일의 경로입니다.
명령어가 실패 메시지를 반환하면 문제를 해결하고 파일을 다시 검사합니다.
시간이 오래 걸리는 검사를 건너뛰려면 --fast
플래그를 전달합니다.
개별 검사를 건너뛰려면 --skip-validation-xxx
플래그를 사용합니다. check-config
명령어에 대해 자세히 알아보려면 실행 전 검사 실행을 참조하세요.
3. (선택사항) OS 이미지를 vSphere로 가져오고 컨테이너 이미지를 비공개 레지스트리로 푸시
다음 중 하나라도 해당하는 경우 gkectl prepare
를 실행합니다.
사용자 클러스터가 관리자 클러스터와 다른 vSphere 데이터 센터에 있습니다.
사용자 클러스터에 관리자 클러스터와 다른 vCenter Server가 있습니다.
사용자 클러스터는 관리자 클러스터에서 사용하는 비공개 레지스트리와 다른 비공개 Container Registry를 사용합니다.
gkectl prepare --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --bundle-path BUNDLE \ --user-cluster-config USER_CLUSTER_CONFIG
다음을 바꿉니다.
ADMIN_CLUSTER_KUBECONFIG: 관리자 클러스터 kubeconfig 파일의 경로입니다.
BUNDLE: 번들 파일의 경로입니다. 이 파일은
/var/lib/gke/bundles/
의 관리자 워크스테이션에 있습니다. 예를 들면 다음과 같습니다./var/lib/gke/bundles/gke-onprem-vsphere-1.30.100-gke.96-full.tgz
USER_CLUSTER_CONFIG: 사용자 클러스터 구성 파일의 경로입니다.
4. 사용자 클러스터 만들기
사용자 클러스터를 만듭니다.
gkectl create cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
VPC 서비스 제어를 사용하는 경우 일부 gkectl
명령어를 실행할 때 "Validation Category: GCP - [UNKNOWN] GCP
service: [Stackdriver] could not get GCP services"
같은 오류가 표시될 수 있습니다. 이러한 오류를 방지하려면 명령어에 --skip-validation-gcp
매개변수를 추가하세요.
사용자 클러스터 kubeconfig 파일 찾기
gkectl create cluster
명령어는 현재 디렉터리에 USER_CLUSTER_NAME-kubeconfig
라는 kubeconfig 파일을 만듭니다. 나중에 사용자 클러스터와 상호 작용하려면 이 kubeconfig 파일이 필요합니다.
kubeconfig 파일에는 사용자 클러스터의 이름이 포함되어 있습니다. 클러스터 이름을 보려면 다음을 실행합니다.
kubectl config get-clusters --kubeconfig USER_CLUSTER_KUBECONFIG
출력에 클러스터의 이름이 표시됩니다. 예를 들면 다음과 같습니다.
NAME my-user-cluster
원하는 경우 kubeconfig 파일의 이름과 위치를 변경할 수 있습니다.
5. 사용자 클러스터 실행 여부 확인
사용자 클러스터 실행 여부 확인:
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
Console
시작하기
Google Cloud 콘솔에서 Google Distributed Cloud 클러스터 만들기 페이지로 이동합니다.
클러스터를 만들 Google Cloud 프로젝트를 선택합니다. 선택한 프로젝트는 Fleet 호스트 프로젝트로도 사용됩니다. 이 프로젝트는 관리자 클러스터가 등록된 프로젝트와 같아야 합니다. 사용자 클러스터가 생성되면 선택한 프로젝트의 Fleet에 자동으로 등록됩니다.
클러스터 기본사항
클러스터에 대한 기본 정보를 입력합니다.
사용자 클러스터의 이름을 입력합니다.
관리자 클러스터의 목록에서 관리자 클러스터를 선택합니다. 관리자 클러스터를 만들 때 이름을 지정하지 않았으면 이름은
gke-admin-[HASH]
형식으로 생성됩니다. 관리자 클러스터 이름이 인식되지 않으면 관리자 워크스테이션에서 다음 명령어를 실행합니다.KUBECONFIG=ADMIN_CLUSTER_KUBECONFIG kubectl get OnPremAdminCluster -n kube-system -o=jsonpath='{.items[0].metadata.name}'
사용하려는 관리자 클러스터가 표시되지 않으면 문제 해결 섹션을 참조하세요. 관리자 클러스터는 클러스터 기본사항 드롭다운 목록에 표시되지 않습니다.
GCP API 위치 필드의 목록에서 Google Cloud 리전을 선택합니다. 이 설정은 다음 API 및 서비스가 실행되는 리전을 지정합니다.
- GKE On-Prem API(
gkeonprem.googleapis.com
) - Fleet 서비스(
gkehub.googleapis.com
) - 연결 서비스(
gkeconnect.googleapis.com
)
이 설정은 다음 항목이 저장되는 리전도 제어합니다.
- GKE On-Prem API가 클러스터 수명 주기를 관리하는 데 필요한 사용자 클러스터 메타데이터
- 시스템 구성요소의 Cloud Logging 및 Cloud Monitoring 데이터
- Cloud 감사 로그에서 만든 관리자 감사 로그
클러스터 이름, 프로젝트, 위치에 따라 Google Cloud의 클러스터가 고유하게 식별됩니다.
- GKE On-Prem API(
사용자 클러스터의 Google Distributed Cloud 버전을 선택합니다.
클러스터 생성자는 클러스터에 대한 클러스터 관리자 권한을 부여받습니다. 필요한 경우 승인 섹션의 클러스터 관리자 필드에 클러스터를 관리할 다른 사용자의 이메일 주소를 입력하세요.
클러스터가 생성되면 GKE On-Prem API는 클러스터에 Kubernetes 역할 기반 액세스 제어(RBAC) 정책을 적용하여 사용자 및 다른 관리자에게 모든 네임스페이스의 클러스터 내 모든 리소스에 대한 전체 액세스 권한을 제공하는 Kubernetes
clusterrole/cluster-admin
역할을 부여합니다.다음을 클릭하여 컨트롤 플레인 섹션으로 이동합니다.
제어 영역
컨트롤 플레인 섹션의 모든 필드가 기본값으로 설정됩니다. 기본값을 검토하고 원하는 경우 필요에 따라 변경합니다.
컨트롤 플레인 노드 vCPU 필드에 사용자 클러스터의 각 컨트롤 플레인 노드에 대한 vCPU 수(최소 4개)를 입력합니다.
컨트롤 플레인 노드 메모리 필드에 사용자 클러스터의 컨트롤 플레인에 대한 메모리 크기를 MiB(최소 8,192이고 4의 배수여야 함) 단위로 입력합니다.
컨트롤 플레인 노드에서 사용자 클러스터의 컨트롤 플레인 노드 수를 선택합니다. 예를 들어 개발 환경에는 컨트롤 플레인 노드 1개를 선택하고 고가용성(HA), 프로덕션 환경에는 컨트롤 플레인 노드 3개를 선택할 수 있습니다.
필요한 경우 노드 크기 자동 조절을 선택합니다. 크기 조절은 노드에 할당되는 vCPU 및 메모리 리소스가 자동으로 조절됨을 의미합니다. 사용 설정된 경우 사용자 클러스터의 컨트롤 플레인 노드는 사용자 클러스터에 있는 워커 노드 수에 따라 크기가 조정됩니다. 따라서 사용자 클러스터에 워커 노드를 더 추가하면 컨트롤 플레인 노드 크기가 증가합니다.
선택적으로 컨트롤 플레인 v2 사용 설정을 선택합니다. Controlplane V2를 사용 설정하면 사용자 클러스터의 컨트롤 플레인이 관리자 클러스터(kubeception이라고 부름) 대신 사용자 클러스터 자체의 하나 이상의 노드에서 실행됩니다.
컨트롤 플레인 v2 사용 설정을 선택하면 컨트롤 플레인 노드 IP 섹션이 표시됩니다. 게이트웨이의 IP 주소, 서브넷 마스크, 컨트롤 플레인 노드의 IP 주소를 입력합니다.
Controlplane V2가 사용 설정되었으면 vCPU 및 메모리 필드가 사용자 클러스터의 컨트롤 플레인 노드에 적용됩니다. 노드 수는 입력하는 IP 주소 수에 따라 결정됩니다. Controlplane V2가 사용 설정되지 않았으면 vCPU, 메모리, 컨트롤 플레인 노드 필드 수가 관리자 클러스터의 노드에 적용됩니다. 관리자 클러스터에 대해 충분한 IP 주소를 설정해야 합니다.
다음을 클릭하여 네트워킹 섹션으로 이동합니다.
네트워킹
이 섹션에서는 클러스터의 노드, 포드, 서비스의 IP 주소를 지정합니다. 사용자 클러스터에는 노드마다 IP 주소 하나가 있어야 하고 클러스터 업그레이드, 업데이트, 자동 복구 중에 필요한 임시 노드용 추가 IP 주소가 있어야 합니다. 자세한 내용은 사용자 클러스터에 필요한 IP 주소 수를 참조하세요.
노드 IP 섹션에서 사용자 클러스터의 IP 모드를 선택합니다. 다음 중 하나를 선택합니다.
DHCP: 클러스터 노드가 DHCP 서버에서 IP 주소를 가져오도록 하려면 DHCP를 선택합니다.
고정: 클러스터 노드에 고정 IP 주소를 제공하거나 수동 부하 분산을 설정하려면 고정을 선택합니다.
DHCP를 선택한 경우 다음 단계로 건너뛰고 서비스 및 포드 CIDR을 지정합니다. 고정 IP 모드에 다음 정보를 입력합니다.
사용자 클러스터용 게이트웨이의 IP 주소를 입력합니다.
사용자 클러스터 노드의 서브넷 마스크를 입력합니다.
IP 주소 섹션에서 IP 주소를 입력하고 원하는 경우 사용자 클러스터에 있는 노드의 호스트 이름을 입력합니다. 개별 IP v4 주소(예: 192.0.2.1) 또는 IPv4 주소의 CIDR 블록(예: 192.0.2.0/24)을 입력할 수 있습니다.
CIDR 블록을 입력하는 경우 호스트 이름을 입력하지 마세요.
개별 IP 주소를 입력할 경우 호스트 이름을 선택적으로 입력할 수 있습니다. 호스트 이름을 입력하지 않으면 Google Distributed Cloud가 vSphere의 VM 이름을 호스트 이름으로 사용합니다.
필요에 따라 + IP 주소 추가를 클릭하여 IP 주소를 더 입력합니다.
서비스 및 포드 CIDR 섹션에서 콘솔은 Kubernetes 서비스 및 포드에 다음 주소 범위를 제공합니다.
- 서비스 CIDR: 10.96.0.0/20
- 포드 CIDR: 192.168.0.0/16
자체 주소 범위를 입력하려면 포드 및 서비스의 IP 주소에서 권장사항을 참조하세요.
고정 IP 모드 또는 컨트롤 플레인 v2 사용 설정을 선택한 경우 호스트 구성 섹션에서 다음 정보를 지정합니다.
- DNS 서버의 IP 주소를 입력합니다.
- NTP 서버의 IP 주소를 입력합니다.
- 원하는 경우 DNS 검색 도메인을 입력합니다.
다음을 클릭하여 부하 분산기 섹션으로 이동합니다.
부하 분산기
클러스터에 설정할 부하 분산기를 선택합니다. 자세한 내용은 부하 분산기 개요를 참조하세요.
목록에서 부하 분산기 유형을 선택합니다.
MetalLB와 함께 번들로 제공
MetalLB를 사용하여 번들 부하 분산을 구성합니다. 관리자 클러스터가 SeeSaw 또는 MetalLB를 사용하는 경우에만 사용자 클러스터에 MetalLB를 사용할 수 있습니다. 이 옵션에는 최소한의 구성만 필요합니다. MetalLB는 클러스터 노드에서 직접 실행되며 추가 VM이 필요하지 않습니다. MetalLB 사용의 이점과 다른 부하 분산 옵션과의 비교에 대한 자세한 내용은 MetalLB를 사용한 번들 부하 분산을 참조하세요.주소 풀 섹션에서 다음과 같이 주소 풀을 최소 하나 이상 구성합니다.
주소 풀의 이름을 입력합니다.
인그레스 VIP를 포함하는 IP 주소 범위를 CIDR 표기법(예: 192.0.2.0/26) 또는 범위 표기법(예: 192.0.2.64-192.0.2.72)으로 입력합니다. 풀에 단일 IP 주소를 지정하려면 /32를 CIDR 표기법으로 사용합니다(예: 192.0.2.1/32).
LoadBalancer
유형 서비스의 IP 주소가 인그레스 VIP와 동일한 IP 주소 범위에 없으면 + IP 주소 범위 추가를 클릭하고 다른 주소 범위를 입력합니다.각 풀의 IP 주소는 겹칠 수 없으며 클러스터 노드와 동일한 서브넷에 있어야 합니다.
IP 주소 할당에서 다음 중 하나를 선택합니다.
자동: MetalLB 컨트롤러가 주소 풀의 IP 주소를
LoadBalancer
유형의 서비스에 자동으로 할당하도록 하려면 이 옵션을 선택합니다.수동: 풀의 주소를 사용하여
LoadBalancer
유형의 서비스 주소를 수동으로 지정하려면 이 옵션을 선택합니다.
MetalLB 컨트롤러가 .0 또는 .255로 끝나는 풀의 주소를 사용하지 않도록 하려면 버그가 있는 IP 주소 방지를 클릭합니다. 이렇게 하면 버그가 있는 소비자 기기가 특수한 IP 주소로 전송된 트래픽을 실수로 차단하는 문제를 방지할 수 있습니다.
완료하면 완료를 클릭합니다.
필요한 경우 주소 풀 추가를 클릭합니다.
가상 IP 섹션에서 다음을 입력합니다.
컨트롤 플레인 VIP: 사용자 클러스터의 Kubernetes API 서버로 전송되는 트래픽에 사용할 대상 IP 주소입니다. 사용자 클러스터의 Kubernetes API 서버가 관리자 클러스터의 노드에서 실행됩니다. 이 IP 주소는 관리자 클러스터 노드와 동일한 L2 도메인에 있어야 합니다. 주소 풀 섹션에 이 주소를 추가하지 마세요.
인그레스 VIP: 인그레스 프록시의 부하 분산기에서 구성할 IP 주소입니다. 주소 풀 섹션의 주소 풀에 이 주소를 추가해야 합니다.
계속을 클릭합니다.
F5 BIG-IP
관리자 클러스터에서 F5 BIG-IP를 사용하는 경우에만 사용자 클러스터에 F5 BIG-IP를 사용할 수 있습니다. Google Distributed Cloud와 통합하기 전에 F5 BIG-IP ADC를 설치하고 구성합니다.F5 사용자 이름과 비밀번호는 관리자 클러스터에서 상속됩니다.
가상 IP 섹션에서 다음을 입력합니다.
컨트롤 플레인 VIP: Kubernetes API 서버로 전송되는 트래픽에 사용할 대상 IP 주소입니다.
인그레스 VIP: 인그레스 프록시의 부하 분산기에서 구성할 IP 주소입니다.
주소 필드에 F5 BIG-IP 부하 분산기의 주소를 입력합니다.
파티션 필드에 사용자 클러스터용으로 만든 BIG-IP 파티션의 이름을 입력합니다.
sNAT 풀 이름 필드에 SNAT 풀 이름을 입력합니다(해당되는 경우).
계속을 클릭합니다.
수동
관리자 클러스터에 수동 부하 분산기가 사용되는 경우에만 사용자 클러스터에 대해 수동 부하 분산기를 사용할 수 있습니다. Google Distributed Cloud에서 Kubernetes API 서버와 인그레스 프록시는 각각LoadBalancer
유형의 Kubernetes 서비스에서 노출됩니다. 이러한 서비스의 30000~32767 범위에서 고유한 nodePort
값을 선택합니다. 인그레스 프록시의 경우 HTTP 및 HTTPS 트래픽 모두에 nodePort
값을 선택합니다. 자세한 내용은 수동 부하 분산 모드 사용 설정을 참조하세요.
가상 IP 섹션에서 다음을 입력합니다.
컨트롤 플레인 VIP: Kubernetes API 서버로 전송되는 트래픽에 사용할 대상 IP 주소입니다.
인그레스 VIP: 인그레스 프록시의 부하 분산기에서 구성할 IP 주소입니다.
컨트롤 플레인 노드 포트 필드에 Kubernetes API 서버의
nodePort
값을 입력합니다.인그레스 HTTP 노드 포트 필드에 인그레스 프록시에 대한 HTTP 트래픽의
nodePort
값을 입력합니다.인그레스 HTTPS 노드 포트 필드에 인그레스 프록시에 대한 HTTPS 트래픽의
nodePort
값을 입력합니다.Konnectivity 서버 노드 포트 필드에 Konnectivity 서버의
nodePort
값을 입력합니다.계속을 클릭합니다.
기능
이 섹션에서는 클러스터에 사용 설정된 기능과 작업을 보여줍니다.
다음 기능은 자동으로 사용 설정되어 있으며 중지될 수 없습니다.
시스템 서비스의 Cloud Logging
시스템 서비스의 Cloud Monitoring
다음은 기본적으로 사용 설정되어 있지만 중지될 수 있습니다.
vSphere CSI 드라이버 사용 설정: vSphere 컨테이너 스토리지 플러그인이라고도 합니다. 컨테이너 스토리지 인터페이스(CSI) 드라이버는 vSphere에 배포된 Kubernetes 클러스터에서 실행되어 vSphere 스토리지에 영구 볼륨을 프로비저닝합니다. 자세한 내용은 vSphere 컨테이너 스토리지 인터페이스 드라이버 사용을 참조하세요.
안티-어피니티 그룹 사용 설정: VMware Distributed Resource Scheduler(DRS) 안티-어피니티 규칙이 사용자 클러스터 노드에 자동으로 생성되므로 데이터 센터에서 물리적 호스트 최소 3개 이상에 분산됩니다. vSphere 환경에서 요구사항을 충족하는지 확인합니다.
다음을 클릭하여 노드 풀을 구성합니다.
노드 풀
하나 이상의 노드 풀이 있는 클러스터가 생성됩니다. 노드 풀은 이 클러스터에서 만든 워커 노드 그룹의 템플릿입니다. 자세한 내용은 노드 풀 만들기 및 관리를 참조하세요.
노드 풀 기본값 섹션에서 다음을 완료합니다.
- 노드 풀 이름을 입력하거나 이름으로 'default-pool'을 수락합니다.
- 풀에 있는 각 노드의 vCPUs 수를 입력합니다. 사용자 클러스터 작업자당 최소 4개입니다.
- 풀의 각 노드에 대한 메모리 크기를 메비바이트(MiB) 단위로 입력합니다(사용자 클러스터 워커 노드당 최소 8,192MiB이며 4의 배수여야 함).
- 노드 필드에 풀의 노드 수를 입력합니다(최솟값 3). 네트워킹 섹션에서 노드 IP의 고정 IP 주소를 입력한 경우 이러한 사용자 클러스터 노드를 수용할 수 있는 충분한 IP 주소를 입력했는지 확인합니다.
- OS 이미지 유형(Ubuntu, Ubuntu Containerd, COS)을 선택합니다.
- 부팅 디스크 크기를 기비바이트(GiB) 단위(최소 40GiB)로 입력합니다.
- MetalLB를 부하 분산기로 사용하는 경우 하나 이상의 노드 풀에서 MetalLB를 사용 설정해야 합니다. MetalLB 부하 분산에 이 노드 풀 사용을 선택한 상태로 두거나 MetalLB에 사용할 다른 노드 풀을 추가합니다.
노드 풀 메타데이터(선택사항) 섹션에서 Kubernetes 라벨 및 taint를 추가하려면 다음 안내를 따르세요.
- + Kubernetes 라벨 추가를 클릭합니다. 라벨의 키 및 값을 입력합니다. 필요한 경우 반복합니다.
- + taint 추가를 클릭합니다. taint의 키, 값, 효과를 입력합니다. 필요한 경우 반복합니다.
확인 및 완료를 클릭하여 사용자 클러스터를 만듭니다. 사용자 클러스터를 만드는 데 15분 이상 걸립니다. 콘솔은 설정을 확인하고 데이터 센터에 클러스터를 만들 때 상태 메시지를 표시합니다.
설정 확인 중에 오류가 발생하면 콘솔에 오류 메시지가 표시됩니다. 오류 메시지는 구성 문제를 해결하고 클러스터를 만들려고 시도할 수 있도록 아주 명확해야 합니다.
발생 가능한 오류와 해결 방법에 대한 자세한 내용은 Google Cloud 콘솔에서 사용자 클러스터 생성 문제 해결을 참조하세요.
gcloud CLI
다음 명령어를 사용하여 사용자 클러스터를 만듭니다.
gcloud container vmware clusters create
클러스터를 만든 후 다음 명령어를 사용하여 적어도 하나 이상의 노드 풀을 만들어야 합니다.
gcloud container vmware node-pools create
클러스터 및 노드 풀을 만들기 위한 대부분의 플래그는 사용자 클러스터 구성 파일의 필드에 해당합니다. 시작하는 데 도움을 얻기 위해 예시 섹션의 전체 명령어를 시도해볼 수 있습니다.
정보 수집
클러스터를 만드는 데 필요한 정보를 수집합니다.
관리자 클러스터의 이름과 Fleet 멤버십 위치를 가져옵니다.
gcloud container fleet memberships list \ --project=FLEET_HOST_PROJECT_ID
FLEET_HOST_PROJECT_ID
를 관리자 클러스터가 등록된 프로젝트의 ID로 바꿉니다.출력은 다음과 비슷합니다.
NAME EXTERNAL_ID LOCATION admin-cluster-1 bb7803b4-8438-4b22-859f-4559b4b29072 global admin-cluster-2 ee16ee2b-6ec0-49fc-9413-3c89cbc70854 global admin-cluster-3 fc2b7ef5-39ff-4b63-b919-04c5adc67be4 us-west1
위치는 Fleet 및 Connect 서비스가 실행되는 위치를 지정합니다. 1.28 이전에 생성된 관리자 클러스터는 전역 Fleet 및 Connect 서비스에서 관리됩니다. 1.28 이상에서는 관리자 클러스터를 만들 때
global
또는 Google Cloud 리전을 지정할 수 있습니다. 다음에 나오는 명령어 예시의--admin-cluster-membership-location
플래그에 리전을 지정합니다.사용 가능한 버전 목록을 가져옵니다.
gcloud container vmware clusters query-version-config \ --admin-cluster-membership=ADMIN_CLUSTER_NAME \ --admin-cluster-membership-project=FLEET_HOST_PROJECT_ID \ --admin-cluster-membership-location=ADMIN_CLUSTER_REGION \ --location=REGION
다음을 바꿉니다.
ADMIN_CLUSTER_NAME
: 관리자 클러스터 이름FLEET_HOST_PROJECT_ID
: 관리자 클러스터가 등록된 프로젝트의 ID입니다.ADMIN_CLUSTER_REGION
: 관리자 클러스터의 Fleet 멤버십 리전입니다. 전역 또는 Google Cloud 리전입니다.gcloud container fleet memberships list
출력에서 관리자 클러스터 위치를 사용합니다.REGION
: 사용자 클러스터를 만들 때 사용할 Google Cloud 리전입니다. 이 리전은 GKE On-Prem API가 실행되고 메타데이터를 저장하는 리전입니다.관리자 클러스터가 GKE On-Prem API에 등록된 경우 관리자 클러스터와 동일한 리전을 사용합니다. 관리자 클러스터의 리전을 찾으려면 다음 명령어를 실행합니다.
gcloud container vmware admin-clusters list \ --project=FLEET_HOST_PROJECT_ID \ --location=-
관리자 클러스터가 GKE On-Prem API에 등록되어 있지 않은 경우
us-west1
또는 다른 지원되는 리전을 지정합니다. 이후에 GKE On-Prem API에 관리자 클러스터를 등록하는 경우 사용자 클러스터가 있는 리전과 동일한 리전을 사용합니다.
gcloud container vmware clusters query-version-config
명령어 출력은 다음과 비슷합니다.versions: - isInstalled: true version: 1.28.800-gke.109 - version: 1.29.0-gke.1456 - version: 1.29.100-gke.248 - version: 1.29.200-gke.245 - version: 1.29.300-gke.184
이 명령어는 사용자 클러스터 생성 또는 업그레이드에 사용할 수 있는 버전에 관한 설명도 출력합니다. 사용자 클러스터를 만들거나 업그레이드하는 데 사용할 수 있는 버전은
isInstalled: true
로 주석 처리됩니다. 관리자 클러스터에 해당 버전의 사용자 클러스터를 관리하는 데 필요한 버전별 구성요소가 있다는 의미입니다. 관리자 클러스터에 설치된 버전을 사용하려면 예 섹션으로 건너뛰어 사용자 클러스터를 만드세요.
상위 버전 설치
관리자 클러스터는 다른 버전의 사용자 클러스터를 관리할 수 있습니다. query-version-config
명령어의 출력에는 클러스터를 만들 때 사용할 수 있는 다른 버전이 나열됩니다. 관리자 클러스터보다 최신 버전의 사용자 클러스터를 만들려면 다음과 같이 관리자 클러스터가 해당 버전의 사용자 클러스터를 관리하는 데 필요한 구성요소를 다운로드하고 배포해야 합니다.
gcloud container vmware admin-clusters update ADMIN_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --location=REGION \ --required-platform-version=VERSION
VERSION
을 query-version-config
명령어의 출력에 나열된 버전 중 하나로 바꿉니다.
명령어는 --required-platform-version
에 지정하는 구성요소 버전을 관리자 클러스터에 다운로드한 후 구성요소를 배포합니다. 이제 지정된 버전으로 사용자 클러스터를 만들 수 있습니다.
gcloud container vmware clusters query-version-config
를 다시 실행하면 지정한 버전에 isInstalled: true
주석이 추가됩니다.
예시
다음 예에서는 Controlplane V2가 사용 설정된 경우 서로 다른 부하 분산기로 사용자 클러스터를 만드는 방법을 보여줍니다. Controlplane V2를 사용하면 사용자 클러스터의 컨트롤 플레인이 사용자 클러스터 자체의 하나 이상의 노드에서 실행됩니다. Controlplane V2를 사용 설정하는 것이 좋으며 버전 1.30 이상에서는 새 사용자 클러스터에 Controlplane V2가 사용 설정되어 있어야 합니다. 사용 가능한 부하 분산 옵션에 대한 자세한 내용은 부하 분산기 개요를 참고하세요.
대부분의 예시에서는 컨트롤 플레인 노드를 구성하는 데 기본값을 사용합니다. 기본값을 변경하려면 컨트롤 플레인 플래그 섹션에 설명된 플래그를 포함합니다. 필요한 경우 일부 vSphere 설정을 변경할 수도 있습니다.
gcloud
명령어를 실행하여 클러스터를 만들기 전에 --validate-only
를 포함하여 gcloud
명령어에 플래그를 지정한 구성을 검사할 수 있습니다. 클러스터를 만들 준비가 되었으면 이 플래그를 삭제하고 명령어를 실행합니다.
gcloud container vmware clusters create
명령어를 실행하고 1분 이상이 경과된 후 오류가 발생하면 다음 명령어를 실행하여 클러스터가 부분적으로 생성되었는지 확인합니다.
gcloud container vmware clusters list \ --project=FLEET_HOST_PROJECT_ID \ --location=-
출력에 클러스터가 나열되지 않으면 오류를 수정하고 gcloud container vmware clusters create
를 다시 실행합니다.
클러스터가 출력에 나열되면 다음 명령어를 사용하여 클러스터를 삭제합니다.
gcloud container vmware clusters delete USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --location=REGION \ --force \ --allow-missing
그런 다음 오류를 수정하고 gcloud container vmware clusters create
를 다시 실행합니다.
클러스터가 실행된 후 노드 풀 만들기 섹션의 설명에 따라 워크로드를 배포하기 전에 노드 풀을 추가해야 합니다.
MetalLB 및 DHCP
이 예시에서는 클러스터 워커 노드에 대해 IP 주소를 가져오기 위해 번들 MetalLB 부하 분산기 및 DHCP 서버를 사용해서 사용자 클러스터를 만드는 방법을 보여줍니다.관리자 클러스터에서 MetalLB를 사용하는 경우에만 사용자 클러스터에 MetalLB를 사용할 수 있습니다. 이 부하 분산 옵션은 최소한의 구성이 필요합니다. MetalLB는 클러스터 노드에서 직접 실행되며 추가 VM이 필요하지 않습니다. MetalLB 사용의 이점과 다른 부하 분산 옵션과의 비교에 대한 자세한 내용은 MetalLB를 사용한 번들 부하 분산을 참조하세요.
이 예시 명령어는 다음과 같은 특성을 가진 사용자 클러스터를 만들며, 환경에 맞게 필요에 따라 수정할 수 있습니다.
플래그 | 설명 |
---|---|
--admin-users |
사용자와 다른 사용자에게 클러스터에 대한 전체 관리 권한을 부여합니다. |
--enable-control-plane-v2 |
버전 1.30 이상에서 권장되고 필요한 Controlplane V2를 사용 설정합니다. |
--control-plane-ip-block |
제어 영역 노드의 IP 주소 1개. 고가용성(HA) 사용자 클러스터를 만들려면 IP 주소 3개를 지정하고 --replicas=3 플래그를 추가합니다. |
--metal-lb-config-address-pools |
MetalLB 부하 분산기를 위한 2개의 주소 풀. 주소 풀은 하나 이상 필요하며 필요한 경우 더 지정할 수 있습니다. 편의상 이 예시에는 인그레스 VIP의 IP 주소가 주소 풀 중 하나에 있어야 한다는 것을 알리기 위해 'ingress-vip-pool'이라는 이름의 주소 풀이 포함되어 있습니다. IP 주소에 /32 를 추가하여 단일 IP 주소에 대한 CIDR을 지정합니다. |
gcloud container vmware clusters create USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --admin-cluster-membership=ADMIN_CLUSTER_NAME \ --admin-cluster-membership-project=FLEET_HOST_PROJECT_ID \ --admin-cluster-membership-location=ADMIN_CLUSTER_REGION \ --location=REGION \ --version=VERSION \ --admin-users=YOUR_EMAIL_ADDRESS \ --admin-users=ANOTHER_EMAIL_ADDRESS \ --service-address-cidr-blocks=10.96.0.0/20 \ --pod-address-cidr-blocks=192.168.0.0/16 \ --metal-lb-config-address-pools='pool=NAME,avoid-buggy-ips=AVOID_BUGGY_IPS,manual-assign=MANUAL_ASSIGN,addresses=IP_ADDRESS_RANGE_1' \ --metal-lb-config-address-pools='pool=ingress-vip-pool,avoid-buggy-ips=False,manual-assign=True,addresses=INGRESS_VIP/32' \ --enable-control-plane-v2 \ --dns-servers=DNS_SERVER_1 \ --ntp-servers=NTP_SERVER_1 \ --control-plane-ip-block 'gateway=CP_GATEWAY,netmask=CP_NETMASK,ips=CP_IP_ADDRESS_1 CP_HOST_1' \ --control-plane-vip=CONTROL_PLANE_VIP \ --ingress-vip=INGRESS_VIP \ --enable-dhcp
다음을 바꿉니다.
-
USER_CLUSTER_NAME
: 사용자 클러스터의 이름입니다. 클러스터를 만든 후에는 이름을 변경할 수 없습니다. 이름은 다음 조건을 충족해야 합니다.- 40자(영문 기준) 이하여야 합니다.
- 소문자 영숫자 문자 또는 하이픈(
-
)만 포함해야 합니다. - 알파벳 문자로 시작해야 합니다.
- 영숫자 문자로 끝나야 합니다.
-
FLEET_HOST_PROJECT_ID
: 클러스터를 만들려는 프로젝트의 ID입니다. 지정된 프로젝트는 Fleet 호스트 프로젝트로도 사용됩니다. 이 프로젝트는 관리자 클러스터가 등록된 프로젝트와 같아야 합니다. 사용자 클러스터가 생성되면 선택한 프로젝트의 Fleet에 자동으로 등록됩니다. 클러스터를 만든 후에는 Fleet 호스트 프로젝트를 변경할 수 없습니다. -
ADMIN_CLUSTER_NAME
: 사용자 클러스터를 관리하는 관리자 클러스터의 이름입니다.--admin-cluster-membership
플래그에서 다음 형식의 완전히 지정된 클러스터 이름을 사용할 수 있습니다.projects/FLEET_HOST_PROJECT_ID/locations/ADMIN_CLUSTER_REGION/memberships/ADMIN_CLUSTER_NAME
또는 예시 명령어와 같이
--admin-cluster-membership
을 관리자 클러스터 이름으로 설정할 수 있습니다. 관리자 클러스터 이름만 사용하는 경우--admin-cluster-membership-project
를 사용하여 관리자 클러스터의 프로젝트 ID를 설정하고 위치를--admin-cluster-membership-location
으로 설정합니다. 관리자 클러스터 위치는global
또는 Google Cloud 리전입니다. 리전을 찾아야 할 경우gcloud container fleet memberships list
를 실행합니다. -
REGION
: GKE On-Prem API(gkeonprem.googleapis.com
), Fleet 서비스(gkehub.googleapis.com
) 및 Connect 서비스(gkeconnect.googleapis.com
)가 실행되는 Google Cloud 리전입니다.us-west1
또는 다른 지원되는 리전을 지정합니다. 클러스터를 만든 후에는 리전을 변경할 수 없습니다. 이 설정은 다음이 저장되는 리전을 지정합니다.- GKE On-Prem API가 클러스터 수명 주기를 관리하는 데 필요한 사용자 클러스터 메타데이터
- 시스템 구성요소의 Cloud Logging 및 Cloud Monitoring 데이터
- Cloud 감사 로그에서 만든 관리자 감사 로그
클러스터 이름, 프로젝트, 위치에 따라 Google Cloud의 클러스터가 고유하게 식별됩니다.
-
VERSION
: 사용자 클러스터의 Google Distributed Cloud 버전입니다. -
YOUR_EMAIL_ADDRESS
및ANOTHER_EMAIL_ADDRESS
:--admin-users
플래그를 포함하지 않으면 클러스터 생성자로서 기본적으로 클러스터 관리자 권한이 부여됩니다. 그러나 다른 사용자를 관리자로 지정하기 위해--admin-users
를 포함할 경우 기본값이 재정의되고 자신의 이메일 주소와 다른 관리자의 이메일 주소를 모두 포함해야 합니다. 예를 들어 두 명의 관리자를 추가하려면 다음 안내를 따르세요.--admin-users=sara@example.com \ --admin-users=amal@example.com
클러스터가 생성되면 GKE On-Prem API는 클러스터에 Kubernetes 역할 기반 액세스 제어(RBAC) 정책을 적용하여 사용자 및 다른 관리자에게 모든 네임스페이스의 클러스터 내 모든 리소스에 대한 전체 액세스 권한을 제공하는 Kubernetes
clusterrole/cluster-admin
역할을 부여합니다.
-
SERVICE_CIDR_BLOCK
: 클러스터의 서비스에 사용할 CIDR 형식의 IP 주소 범위입니다. /24 범위 이상이어야 합니다.예:
--service-address-cidr-blocks=10.96.0.0/20
-
POD_CIDR_BLOCK
: 클러스터의 포드에 사용할 CIDR 형식의 IP 주소 범위입니다. /18 범위 이상이어야 합니다.예:
--pod-address-cidr-blocks=192.168.0.0/16
-
--metal-lb-config-address-pools
: MetalLB 부하 분산기에서 사용할 주소 풀의 구성을 지정하려면 이 플래그를 포함합니다. 플래그 값의 형식은 다음과 같습니다.--metal-lb-config-address-pool 'pool=NAME,avoid-buggy-ips=True|False,manual-assign=True|False,addresses=IP_ADDRESS_RANGE_1;IP_ADDRESS_RANGE_2;...' \
이 값에는
pool
,avoid-buggy-ip
,manual-assign
,addresses
키워드로 시작하는 세그먼트가 있습니다. 각 세그먼트는 쉼표로 구분합니다.-
pool
: 풀에 대해 선택한 이름입니다. -
avoid-buggy-ips
1: 이 값을True
로 설정하면 MetalLB 컨트롤러가 .0 또는 .255로 끝나는 IP 주소를 서비스에 할당하지 않습니다. 이렇게 하면 버그가 있는 소비자 기기가 특수한 IP 주소로 전송된 트래픽을 실수로 차단하는 문제를 방지할 수 있습니다. 지정되지 않은 경우 기본값은False
입니다. -
manual-assign
: MetalLB 컨트롤러가 이 풀의 IP 주소를 서비스에 자동으로 할당하지 않도록 하려면 이를True
로 설정합니다. 그러면 개발자는LoadBalancer
유형의 서비스를 만들고 풀에서 주소 중 하나를 수동으로 지정할 수 있습니다. 지정하지 않으면manual-assign
이False
로 설정됩니다. -
addresses
목록에서 각 주소는 CIDR 표기법을 사용하거나 하이픈으로 연결된 범위 형식이어야 합니다. 인그레스 VIP와 같이 풀에 단일 IP 주소를 지정하려면 /32를 CIDR 표기법으로 사용합니다(예:192.0.2.1/32
).
다음에 유의하세요.
- 전체 값은 작은따옴표로 묶어야 합니다.
- 공백은 허용되지 않습니다.
- 각 IP 주소 범위를 세미콜론으로 구분합니다.
예를 들면 다음과 같습니다.
--metal-lb-config-address-pool 'pool=pool1,avoid-buggy-ips=True,manual-assign=True,addresses=10.251.134.80/32;192.168.1.0/26;192.168.1.2-192.168.1.3'
-
-
CONTROL_PLANE_VIP
: 사용자 클러스터의 Kubernetes API 서버에 대해 부하 분산기에서 구성하도록 선택한 IP 주소입니다.예:
--control-plane-vip=203.0.113.3
-
INGRESS_VIP
: 인그레스 프록시의 부하 분산기에서 구성하도록 선택한 IP 주소입니다.예:
--ingress-vip=10.251.134.80
인그레스 VIP의 IP 주소는 MetalLB 주소 풀 중 하나여야 합니다.
--enable-dhcp
: 클러스터 노드가 제공된 DHCP 서버에서 해당 IP 주소를 가져오도록 하려면--enable-dhcp
를 포함합니다. 클러스터 노드에 대해 고정 IP 주소를 제공하거나 수동 부하 분산을 설정하려는 경우에는 이 플래그를 포함하지 마세요.
MetalLB 및 고정 IP
이 예시에서는 번들 MetalLB 부하 분산기를 사용하고 클러스터 워커 노드에 고정 IP 주소를 할당하여 사용자 클러스터를 만드는 방법을 보여줍니다.관리자 클러스터에서 MetalLB를 사용하는 경우에만 사용자 클러스터에 MetalLB를 사용할 수 있습니다. 이 부하 분산 옵션은 최소한의 구성이 필요합니다. MetalLB는 클러스터 노드에서 직접 실행되며 추가 VM이 필요하지 않습니다. MetalLB 사용의 이점과 다른 부하 분산 옵션과의 비교에 대한 자세한 내용은 MetalLB를 사용한 번들 부하 분산을 참조하세요.
이 예시 명령어는 다음과 같은 특성을 가진 사용자 클러스터를 만들며, 환경에 맞게 필요에 따라 수정할 수 있습니다.
플래그 | 설명 |
---|---|
--admin-users |
사용자와 다른 사용자에게 클러스터에 대한 전체 관리 권한을 부여합니다. |
--enable-control-plane-v2 |
버전 1.30 이상에서 권장되고 필요한 Controlplane V2를 사용 설정합니다. |
--control-plane-ip-block |
제어 영역 노드의 IP 주소 1개. 고가용성(HA) 사용자 클러스터를 만들려면 IP 주소 3개를 지정하고 --replicas=3 플래그를 추가합니다. |
--metal-lb-config-address-pools |
MetalLB 부하 분산기를 위한 2개의 주소 풀. 주소 풀은 하나 이상 필요하며 필요한 경우 더 지정할 수 있습니다. 편의상 이 예시에는 인그레스 VIP의 IP 주소가 주소 풀 중 하나에 있어야 한다는 것을 알리기 위해 'ingress-vip-pool'이라는 이름의 주소 풀이 포함되어 있습니다. IP 주소에 /32 를 추가하여 단일 IP 주소에 대한 CIDR을 지정합니다. |
--static-ip-config-ip-blocks |
클러스터의 워커 노드에 대한 IP 주소 4개. 여기에는 업그레이드 및 업데이트 중에 사용할 수 있는 추가 노드의 주소가 포함됩니다. 필요한 경우 더 많은 IP 주소를 지정할 수 있습니다. 호스트 이름은 선택사항입니다. |
gcloud container vmware clusters create USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --admin-cluster-membership=ADMIN_CLUSTER_NAME \ --admin-cluster-membership-project=FLEET_HOST_PROJECT_ID \ --admin-cluster-membership-location=ADMIN_CLUSTER_REGION \ --location=REGION \ --version=VERSION \ --admin-users=YOUR_EMAIL_ADDRESS \ --admin-users=ANOTHER_EMAIL_ADDRESS \ --service-address-cidr-blocks=10.96.0.0/20 \ --pod-address-cidr-blocks=192.168.0.0/16 \ --metal-lb-config-address-pools='pool=NAME,avoid-buggy-ips=AVOID_BUGGY_IPS,manual-assign=MANUAL_ASSIGN,addresses=IP_ADDRESS_RANGE_1' \ --metal-lb-config-address-pools='pool=ingress-vip-pool,avoid-buggy-ips=False,manual-assign=True,addresses=INGRESS_VIP/32' \ --enable-control-plane-v2 \ --control-plane-ip-block 'gateway=CP_GATEWAY,netmask=CP_NETMASK,ips=CP_IP_ADDRESS_1 CP_HOST_1' \ --control-plane-vip=CONTROL_PLANE_VIP \ --ingress-vip=INGRESS_VIP \ --static-ip-config-ip-blocks='gateway=GATEWAY,netmask=NETMASK,ips=IP_ADDRESS_1 HOST_1;IP_ADDRESS_2 HOST_2;IP_ADDRESS_3 HOST_3;IP_ADDRESS_4 HOST_4' \ --dns-servers=DNS_SERVER_1 \ --ntp-servers=NTP_SERVER_1
다음을 바꿉니다.
-
USER_CLUSTER_NAME
: 사용자 클러스터의 이름입니다. 클러스터를 만든 후에는 이름을 변경할 수 없습니다. 이름은 다음 조건을 충족해야 합니다.- 40자(영문 기준) 이하여야 합니다.
- 소문자 영숫자 문자 또는 하이픈(
-
)만 포함해야 합니다. - 알파벳 문자로 시작해야 합니다.
- 영숫자 문자로 끝나야 합니다.
-
FLEET_HOST_PROJECT_ID
: 클러스터를 만들려는 프로젝트의 ID입니다. 지정된 프로젝트는 Fleet 호스트 프로젝트로도 사용됩니다. 이 프로젝트는 관리자 클러스터가 등록된 프로젝트와 같아야 합니다. 사용자 클러스터가 생성되면 선택한 프로젝트의 Fleet에 자동으로 등록됩니다. 클러스터를 만든 후에는 Fleet 호스트 프로젝트를 변경할 수 없습니다. -
ADMIN_CLUSTER_NAME
: 사용자 클러스터를 관리하는 관리자 클러스터의 이름입니다.--admin-cluster-membership
플래그에서 다음 형식의 완전히 지정된 클러스터 이름을 사용할 수 있습니다.projects/FLEET_HOST_PROJECT_ID/locations/ADMIN_CLUSTER_REGION/memberships/ADMIN_CLUSTER_NAME
또는 예시 명령어와 같이
--admin-cluster-membership
을 관리자 클러스터 이름으로 설정할 수 있습니다. 관리자 클러스터 이름만 사용하는 경우--admin-cluster-membership-project
를 사용하여 관리자 클러스터의 프로젝트 ID를 설정하고 위치를--admin-cluster-membership-location
으로 설정합니다. 관리자 클러스터 위치는global
또는 Google Cloud 리전입니다. 리전을 찾아야 할 경우gcloud container fleet memberships list
를 실행합니다. -
REGION
: GKE On-Prem API(gkeonprem.googleapis.com
), Fleet 서비스(gkehub.googleapis.com
) 및 Connect 서비스(gkeconnect.googleapis.com
)가 실행되는 Google Cloud 리전입니다.us-west1
또는 다른 지원되는 리전을 지정합니다. 클러스터를 만든 후에는 리전을 변경할 수 없습니다. 이 설정은 다음이 저장되는 리전을 지정합니다.- GKE On-Prem API가 클러스터 수명 주기를 관리하는 데 필요한 사용자 클러스터 메타데이터
- 시스템 구성요소의 Cloud Logging 및 Cloud Monitoring 데이터
- Cloud 감사 로그에서 만든 관리자 감사 로그
클러스터 이름, 프로젝트, 위치에 따라 Google Cloud의 클러스터가 고유하게 식별됩니다.
-
VERSION
: 사용자 클러스터의 Google Distributed Cloud 버전입니다. -
YOUR_EMAIL_ADDRESS
및ANOTHER_EMAIL_ADDRESS
:--admin-users
플래그를 포함하지 않으면 클러스터 생성자로서 기본적으로 클러스터 관리자 권한이 부여됩니다. 그러나 다른 사용자를 관리자로 지정하기 위해--admin-users
를 포함할 경우 기본값이 재정의되고 자신의 이메일 주소와 다른 관리자의 이메일 주소를 모두 포함해야 합니다. 예를 들어 두 명의 관리자를 추가하려면 다음 안내를 따르세요.--admin-users=sara@example.com \ --admin-users=amal@example.com
클러스터가 생성되면 GKE On-Prem API는 클러스터에 Kubernetes 역할 기반 액세스 제어(RBAC) 정책을 적용하여 사용자 및 다른 관리자에게 모든 네임스페이스의 클러스터 내 모든 리소스에 대한 전체 액세스 권한을 제공하는 Kubernetes
clusterrole/cluster-admin
역할을 부여합니다.
-
SERVICE_CIDR_BLOCK
: 클러스터의 서비스에 사용할 CIDR 형식의 IP 주소 범위입니다. /24 범위 이상이어야 합니다.예:
--service-address-cidr-blocks=10.96.0.0/20
-
POD_CIDR_BLOCK
: 클러스터의 포드에 사용할 CIDR 형식의 IP 주소 범위입니다. /18 범위 이상이어야 합니다.예:
--pod-address-cidr-blocks=192.168.0.0/16
-
--metal-lb-config-address-pools
: MetalLB 부하 분산기에서 사용할 주소 풀의 구성을 지정하려면 이 플래그를 포함합니다. 플래그 값의 형식은 다음과 같습니다.--metal-lb-config-address-pool 'pool=NAME,avoid-buggy-ips=True|False,manual-assign=True|False,addresses=IP_ADDRESS_RANGE_1;IP_ADDRESS_RANGE_2;...' \
이 값에는
pool
,avoid-buggy-ip
,manual-assign
,addresses
키워드로 시작하는 세그먼트가 있습니다. 각 세그먼트는 쉼표로 구분합니다.-
pool
: 풀에 대해 선택한 이름입니다. -
avoid-buggy-ips
1: 이 값을True
로 설정하면 MetalLB 컨트롤러가 .0 또는 .255로 끝나는 IP 주소를 서비스에 할당하지 않습니다. 이렇게 하면 버그가 있는 소비자 기기가 특수한 IP 주소로 전송된 트래픽을 실수로 차단하는 문제를 방지할 수 있습니다. 지정되지 않은 경우 기본값은False
입니다. -
manual-assign
: MetalLB 컨트롤러가 이 풀의 IP 주소를 서비스에 자동으로 할당하지 않도록 하려면 이를True
로 설정합니다. 그러면 개발자는LoadBalancer
유형의 서비스를 만들고 풀에서 주소 중 하나를 수동으로 지정할 수 있습니다. 지정하지 않으면manual-assign
이False
로 설정됩니다. -
addresses
목록에서 각 주소는 CIDR 표기법을 사용하거나 하이픈으로 연결된 범위 형식이어야 합니다. 인그레스 VIP와 같이 풀에 단일 IP 주소를 지정하려면 /32를 CIDR 표기법으로 사용합니다(예:192.0.2.1/32
).
다음에 유의하세요.
- 전체 값은 작은따옴표로 묶어야 합니다.
- 공백은 허용되지 않습니다.
- 각 IP 주소 범위를 세미콜론으로 구분합니다.
예를 들면 다음과 같습니다.
--metal-lb-config-address-pool 'pool=pool1,avoid-buggy-ips=True,manual-assign=True,addresses=10.251.134.80/32;192.168.1.0/26;192.168.1.2-192.168.1.3'
-
-
CONTROL_PLANE_VIP
: 사용자 클러스터의 Kubernetes API 서버에 대해 부하 분산기에서 구성하도록 선택한 IP 주소입니다.예:
--control-plane-vip=203.0.113.3
-
INGRESS_VIP
: 인그레스 프록시의 부하 분산기에서 구성하도록 선택한 IP 주소입니다.예:
--ingress-vip=10.251.134.80
인그레스 VIP의 IP 주소는 MetalLB 주소 풀 중 하나여야 합니다.
-
--static-ip-config-ip-blocks
: 사용자 클러스터의 워커 노드에 대한 기본 게이트웨이, 서브넷 마스크, 고정 IP 주소 목록을 지정합니다. 플래그 값의 형식은 다음과 같습니다.--static-ip-config-ip-blocks 'gateway=GATEWAY,netmask=NETMASK,ips=IP_ADDRESS_1;IP_ADDRESS_2 HOST_2;...'
이 값에는
gateway
,netmask
,ips
키워드로 시작하는 세그먼트가 있습니다. 세그먼트를 쉼표로 구분합니다.다음에 유의하세요.
- 전체 값은 작은따옴표로 묶어야 합니다.
- IP 주소와 호스트 이름 사이인 경우를 제외하고 공백은 허용되지 않습니다.
IP 주소 목록에서 다음을 수행합니다.
- 개별 IP 주소 또는 IP 주소의 CIDR 블록을 지정할 수 있습니다.
- 각 IP 주소 또는 CIDR 블록을 세미콜론으로 구분합니다.
- 개별 IP 주소의 경우 선택적으로 IP 주소 뒤에 호스트 이름을 지정할 수 있습니다. IP 주소와 호스트 이름을 공백으로 구분합니다. 호스트 이름을 지정하지 않는 경우 Google Distributed Cloud가 vSphere의 VM 이름을 호스트 이름으로 사용합니다.
- CIDR 블록을 지정하는 경우 호스트 이름 값을 지정하지 마세요.
예를 들면 다음과 같습니다.
--static-ip-config-ip-blocks 'gateway=172.16.23.254,netmask=255.255.252.0,ips=172.16.20.10;172.16.20.11 host2;172.16.20.12/30'
-
DNS_SERVER
: VM에 대한 쉼표로 구분된 DNS 서버의 IP 주소입니다. -
DNS_SEARCH_DOMAIN
: 사용할 호스트에 대한 쉼표로 구분된 DNS 검색 도메인 목록입니다. 이러한 도메인은 도메인 검색 목록의 일부로 사용됩니다.예를 들면 다음과 같습니다.
--dns-search-domains example.com,examplepetstore.com
-
NTP_SERVER
: 사용할 VM에 대한 쉼표로 구분된 시간 서버의 IP 주소 목록입니다.
수동 LB 및 고정 IP
이 예시에서는 수동 부하 분산기를 사용하고 클러스터 워커 노드에 고정 IP 주소를 할당하여 사용자 클러스터를 만드는 방법을 보여줍니다.관리자 클러스터에 수동 부하 분산기가 사용되는 경우에만 사용자 클러스터에 대해 수동 부하 분산기를 사용할 수 있습니다. Google Distributed Cloud에서 로그 집계에 사용되는 Kubernetes API 서버, 인그레스 프록시, 부가기능 서비스는 각각 LoadBalancer
유형의 Kubernetes 서비스에 의해 노출됩니다. 이러한 서비스의 30000~32767 범위에서 고유한 nodePort
값을 선택합니다. 인그레스 프록시의 경우 HTTP 및 HTTPS 트래픽 모두에 nodePort
값을 선택합니다. 자세한 내용은 수동 부하 분산 모드 사용 설정을 참조하세요.
이 예시 명령어는 다음과 같은 특성을 가진 사용자 클러스터를 만들며, 환경에 맞게 필요에 따라 수정할 수 있습니다.
플래그 | 설명 |
---|---|
--admin-users |
사용자와 다른 사용자에게 클러스터에 대한 전체 관리 권한을 부여합니다. |
--enable-control-plane-v2 |
버전 1.30 이상에서 권장되고 필요한 Controlplane V2를 사용 설정합니다. |
--control-plane-ip-block |
제어 영역 노드의 IP 주소 1개. 고가용성(HA) 사용자 클러스터를 만들려면 IP 주소 3개를 지정하고 --replicas=3 플래그를 추가합니다. |
--static-ip-config-ip-blocks |
클러스터의 워커 노드에 대한 IP 주소 4개. 여기에는 업그레이드 및 업데이트 중에 사용할 수 있는 추가 노드의 주소가 포함됩니다. 필요한 경우 더 많은 IP 주소를 지정할 수 있습니다. 호스트 이름은 선택사항입니다. |
gcloud container vmware clusters create USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --admin-cluster-membership=ADMIN_CLUSTER_NAME \ --admin-cluster-membership-project=FLEET_HOST_PROJECT_ID \ --admin-cluster-membership-location=ADMIN_CLUSTER_REGION \ --location=REGION \ --version=VERSION \ --admin-users=YOUR_EMAIL_ADDRESS \ --admin-users=ANOTHER_EMAIL_ADDRESS \ --service-address-cidr-blocks=10.96.0.0/20 \ --pod-address-cidr-blocks=192.168.0.0/16 \ --enable-control-plane-v2 \ --control-plane-ip-block 'gateway=CP_GATEWAY,netmask=CP_NETMASK,ips=CP_IP_ADDRESS_1 CP_HOST_1' \ --control-plane-vip=CONTROL_PLANE_VIP \ --ingress-vip=INGRESS_VIP \ --ingress-http-node-port=INGRESS_HTTP_NODE_PORT \ --ingress-https-node-port=INGRESS_HTTPS_NODE_PORT \ --static-ip-config-ip-blocks='gateway=GATEWAY,netmask=NETMASK,ips=IP_ADDRESS_1 HOST_1;IP_ADDRESS_2 HOST_2;IP_ADDRESS_3 HOST_3;IP_ADDRESS_4 HOST_4' \ --dns-servers=DNS_SERVER_1 \ --ntp-servers=NTP_SERVER_1
다음을 바꿉니다.
-
USER_CLUSTER_NAME
: 사용자 클러스터의 이름입니다. 클러스터를 만든 후에는 이름을 변경할 수 없습니다. 이름은 다음 조건을 충족해야 합니다.- 40자(영문 기준) 이하여야 합니다.
- 소문자 영숫자 문자 또는 하이픈(
-
)만 포함해야 합니다. - 알파벳 문자로 시작해야 합니다.
- 영숫자 문자로 끝나야 합니다.
-
FLEET_HOST_PROJECT_ID
: 클러스터를 만들려는 프로젝트의 ID입니다. 지정된 프로젝트는 Fleet 호스트 프로젝트로도 사용됩니다. 이 프로젝트는 관리자 클러스터가 등록된 프로젝트와 같아야 합니다. 사용자 클러스터가 생성되면 선택한 프로젝트의 Fleet에 자동으로 등록됩니다. 클러스터를 만든 후에는 Fleet 호스트 프로젝트를 변경할 수 없습니다. -
ADMIN_CLUSTER_NAME
: 사용자 클러스터를 관리하는 관리자 클러스터의 이름입니다.--admin-cluster-membership
플래그에서 다음 형식의 완전히 지정된 클러스터 이름을 사용할 수 있습니다.projects/FLEET_HOST_PROJECT_ID/locations/ADMIN_CLUSTER_REGION/memberships/ADMIN_CLUSTER_NAME
또는 예시 명령어와 같이
--admin-cluster-membership
을 관리자 클러스터 이름으로 설정할 수 있습니다. 관리자 클러스터 이름만 사용하는 경우--admin-cluster-membership-project
를 사용하여 관리자 클러스터의 프로젝트 ID를 설정하고 위치를--admin-cluster-membership-location
으로 설정합니다. 관리자 클러스터 위치는global
또는 Google Cloud 리전입니다. 리전을 찾아야 할 경우gcloud container fleet memberships list
를 실행합니다. -
REGION
: GKE On-Prem API(gkeonprem.googleapis.com
), Fleet 서비스(gkehub.googleapis.com
) 및 Connect 서비스(gkeconnect.googleapis.com
)가 실행되는 Google Cloud 리전입니다.us-west1
또는 다른 지원되는 리전을 지정합니다. 클러스터를 만든 후에는 리전을 변경할 수 없습니다. 이 설정은 다음이 저장되는 리전을 지정합니다.- GKE On-Prem API가 클러스터 수명 주기를 관리하는 데 필요한 사용자 클러스터 메타데이터
- 시스템 구성요소의 Cloud Logging 및 Cloud Monitoring 데이터
- Cloud 감사 로그에서 만든 관리자 감사 로그
클러스터 이름, 프로젝트, 위치에 따라 Google Cloud의 클러스터가 고유하게 식별됩니다.
-
VERSION
: 사용자 클러스터의 Google Distributed Cloud 버전입니다. -
YOUR_EMAIL_ADDRESS
및ANOTHER_EMAIL_ADDRESS
:--admin-users
플래그를 포함하지 않으면 클러스터 생성자로서 기본적으로 클러스터 관리자 권한이 부여됩니다. 그러나 다른 사용자를 관리자로 지정하기 위해--admin-users
를 포함할 경우 기본값이 재정의되고 자신의 이메일 주소와 다른 관리자의 이메일 주소를 모두 포함해야 합니다. 예를 들어 두 명의 관리자를 추가하려면 다음 안내를 따르세요.--admin-users=sara@example.com \ --admin-users=amal@example.com
클러스터가 생성되면 GKE On-Prem API는 클러스터에 Kubernetes 역할 기반 액세스 제어(RBAC) 정책을 적용하여 사용자 및 다른 관리자에게 모든 네임스페이스의 클러스터 내 모든 리소스에 대한 전체 액세스 권한을 제공하는 Kubernetes
clusterrole/cluster-admin
역할을 부여합니다.
-
SERVICE_CIDR_BLOCK
: 클러스터의 서비스에 사용할 CIDR 형식의 IP 주소 범위입니다. /24 범위 이상이어야 합니다.예:
--service-address-cidr-blocks=10.96.0.0/20
-
POD_CIDR_BLOCK
: 클러스터의 포드에 사용할 CIDR 형식의 IP 주소 범위입니다. /18 범위 이상이어야 합니다.예:
--pod-address-cidr-blocks=192.168.0.0/16
CONTROL_PLANE_VIP
: 사용자 클러스터의 Kubernetes API 서버에 대해 부하 분산기에서 구성하도록 선택한 IP 주소입니다.예:
--control-plane-vip=203.0.113.3
INGRESS_VIP
: 인그레스 프록시의 부하 분산기에서 구성하도록 선택한 IP 주소입니다.예:
--ingress-vip=203.0.113.4
INGRESS_HTTP_NODE_PORT
: 인그레스 프록시로 전송되는 HTTP 트래픽의nodePort
값입니다(예:30243
).INGRESS_HTTPS_NODE_PORT
: 인그레스 프록시로 전송되는 HTTPS 트래픽의nodePort
값입니다(예:30879
).
-
--static-ip-config-ip-blocks
: 사용자 클러스터의 워커 노드에 대한 기본 게이트웨이, 서브넷 마스크, 고정 IP 주소 목록을 지정합니다. 플래그 값의 형식은 다음과 같습니다.--static-ip-config-ip-blocks 'gateway=GATEWAY,netmask=NETMASK,ips=IP_ADDRESS_1;IP_ADDRESS_2 HOST_2;...'
이 값에는
gateway
,netmask
,ips
키워드로 시작하는 세그먼트가 있습니다. 세그먼트를 쉼표로 구분합니다.다음에 유의하세요.
- 전체 값은 작은따옴표로 묶어야 합니다.
- IP 주소와 호스트 이름 사이인 경우를 제외하고 공백은 허용되지 않습니다.
IP 주소 목록에서 다음을 수행합니다.
- 개별 IP 주소 또는 IP 주소의 CIDR 블록을 지정할 수 있습니다.
- 각 IP 주소 또는 CIDR 블록을 세미콜론으로 구분합니다.
- 개별 IP 주소의 경우 선택적으로 IP 주소 뒤에 호스트 이름을 지정할 수 있습니다. IP 주소와 호스트 이름을 공백으로 구분합니다. 호스트 이름을 지정하지 않는 경우 Google Distributed Cloud가 vSphere의 VM 이름을 호스트 이름으로 사용합니다.
- CIDR 블록을 지정하는 경우 호스트 이름 값을 지정하지 마세요.
예를 들면 다음과 같습니다.
--static-ip-config-ip-blocks 'gateway=172.16.23.254,netmask=255.255.252.0,ips=172.16.20.10;172.16.20.11 host2;172.16.20.12/30'
-
DNS_SERVER
: VM에 대한 쉼표로 구분된 DNS 서버의 IP 주소입니다. -
DNS_SEARCH_DOMAIN
: 사용할 호스트에 대한 쉼표로 구분된 DNS 검색 도메인 목록입니다. 이러한 도메인은 도메인 검색 목록의 일부로 사용됩니다.예를 들면 다음과 같습니다.
--dns-search-domains example.com,examplepetstore.com
-
NTP_SERVER
: 사용할 VM에 대한 쉼표로 구분된 시간 서버의 IP 주소 목록입니다.
컨트롤 플레인 플래그
컨트롤 플레인 구성에 기본값이 아닌 값을 사용하려면 다음 플래그 중 하나 이상을 포함합니다.
--cpus=vCPUS
: 사용자 클러스터의 각 컨트롤 플레인 노드에 대한 vCPU 수(최소 4개)입니다. 지정하지 않으면 기본값이 vCPU 4개입니다.--memory=MEMORY
: 사용자 클러스터의 각 컨트롤 플레인에 대한 메비바이트(MiB) 단위의 메모리 크기입니다. 최솟값은 8,192이고 4의 배수여야 합니다. 지정하지 않으면 기본값이 8,192입니다.--replicas=NODES
: 사용자 클러스터의 컨트롤 플레인 노드 수입니다. 예를 들어 개발 환경에는 컨트롤 플레인 노드 1개를 선택하고 고가용성(HA), 프로덕션 환경에는 컨트롤 플레인 노드 3개를 선택할 수 있습니다.--enable-auto-resize
: 사용자 클러스터에 대한 컨트롤 플레인 노드의 자동 크기 조절을 사용 설정하려면--enable-auto-resize
를 포함합니다. 크기 조절은 노드에 할당되는 vCPU 및 메모리 리소스가 자동으로 조절됨을 의미합니다. 사용 설정된 경우 사용자 클러스터의 컨트롤 플레인 노드는 사용자 클러스터에 있는 워커 노드 수에 따라 크기가 조정됩니다. 따라서 사용자 클러스터에 워커 노드를 더 추가하면 컨트롤 플레인 노드 크기가 증가합니다.--enable-control-plane-v2
: 권장되는 Controlplane V2를 사용 설정하려면 이 플래그를 포함합니다. Controlplane V2가 사용 설정되었으면 사용자 클러스터의 컨트롤 플레인이 사용자 클러스터 자체의 하나 이상의 노드에서 실행됩니다. 버전 1.30 이상에서는 Controlplane V2가 필요합니다.Controlplane V2를 사용 설정하는 경우 다음 플래그도 지정해야 합니다.
--dns-servers=DNS_SERVER_1,...
: VM에 대해 쉼표로 구분된 DNS 서버의 IP 주소입니다.--ntp-servers=NTP_SERVER_1,...
: 사용할 VM에 대한 쉼표로 구분된 시간 서버의 IP 주소 목록입니다.--control-plane-ip-block
의 형식은 다음과 같습니다.--control-plane-ip-block 'gateway=CP_GATEWAY,netmask=CP_NETMASK,ips=CP_IP_ADDRESS_1;CP_IP_ADDRESS_2 CP_HOST_2'
값에
gateway
,netmask
,ips
키워드로 시작하는 세그먼트가 있습니다. 세그먼트를 쉼표로 구분합니다.다음에 유의하세요.
- 전체 값은 작은따옴표로 묶어야 합니다.
IP 주소와 호스트 이름 사이인 경우를 제외하고 공백은 허용되지 않습니다.
IP 주소 목록에서 다음을 수행합니다.
개별 IP 주소 또는 IP 주소의 CIDR 블록을 지정할 수 있습니다.
각 IP 주소 또는 CIDR 블록을 세미콜론으로 구분합니다.
개별 IP 주소의 경우 선택적으로 IP 주소 뒤에 호스트 이름을 지정할 수 있습니다. IP 주소와 호스트 이름을 공백으로 구분합니다.
CIDR 블록을 지정하는 경우 호스트 이름 값을 지정하지 마세요.
예를 들면 다음과 같습니다.
--control-plane-ip-block 'gateway=192.168.0.1,netmask=255.0.0.0,ips=192.168.1.1;192.168.1.2 hostname-2;192.168.2.2/28`
선택사항:
--dns-search-domains=DNS_SEARCH_DOMAIN_1,...
: 사용할 호스트에 대한 쉼표로 구분된 DNS 검색 도메인 목록입니다. 이러한 도메인은 도메인 검색 목록의 일부로 사용됩니다.예를 들면 다음과 같습니다.
--dns-search-domains example.com,examplepetstore.com
플래그 및 해당 설명의 전체 목록은 gcloud CLI 참조를 확인하세요.
vSphere 플래그
필요에 따라 다음 선택적인 플래그를 지정합니다.
--disable-aag-config
: 이 플래그를 포함하지 않으면 VMware Distributed Resource Scheduler(DRS) 안티-어피니티 규칙이 사용자 클러스터 노드에 대해 자동으로 생성되어 데이터 센터에서 최소 3개 이상의 물리적 호스트에 걸쳐 분산됩니다. vSphere 환경에서 요구사항을 충족하는지 확인합니다. 클러스터가 요구사항을 충족하지 않으면 이 플래그를 포함합니다.--disable-vsphere-csi
: 이 플래그를 포함하지 않으면 vSphere 컨테이너 스토리지 인터페이스(CSI) 구성요소가 사용자 클러스터에 표시됩니다. CSI 드라이버는 vSphere에 배포된 기본 Kubernetes 클러스터에서 실행되어 vSphere 스토리지에 영구 볼륨을 프로비저닝합니다. 자세한 내용은 vSphere 컨테이너 스토리지 인터페이스 드라이버 사용을 참조하세요. CSI 구성요소를 배포하지 않으려면 이 플래그를 포함합니다.플래그 및 해당 설명의 전체 목록은 gcloud CLI 참조를 확인하세요.
클러스터 생성 진행률 추적
클러스터 생성 명령어의 출력은 다음과 비슷합니다.
Waiting for operation [projects/example-project-12345/locations/us-west1/operations/operation-1679543737105-5f7893fd5bae9-942b3f97-75e59179] to complete.
예시 출력에서
operation-1679543737105-5f7893fd5bae9-942b3f97-75e59179
문자열은 장기 실행 작업의OPERATION_ID
입니다. 다음 명령어를 실행하여 작업 상태를 확인할 수 있습니다.gcloud container vmware operations describe OPERATION_ID \ --project=FLEET_HOST_PROJECT_ID \ --location=REGION
자세한 내용은 gcloud container vmware operations를 참조하세요.
사용자 클러스터를 만드는 데 15분 이상 걸립니다. Google Cloud 콘솔의 GKE 클러스터 페이지에서 클러스터를 볼 수 있습니다.
노드 풀 만들기
클러스터를 만든 후에는 워크로드를 배포하기 전 노드 풀을 하나 이상 만들어야 합니다.
gcloud container vmware node-pools create NODE_POOL_NAME \ --cluster=USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --location=REGION \ --image-type=IMAGE_TYPE \ --boot-disk-size=BOOT_DISK_SIZE \ --cpus=vCPUS \ --memory=MEMORY \ --replicas=NODES \ --enable-load-balancer
다음을 바꿉니다.
NODE_POOL_NAME
: 노드 풀에 대해 선택한 이름입니다. 이름은 다음 조건을 충족해야 합니다.- 40자(영문 기준) 이하여야 합니다.
- 소문자 영숫자 문자 또는 하이픈(
-
)만 포함해야 합니다. - 알파벳 문자로 시작해야 합니다.
- 영숫자 문자로 끝나야 합니다.
USER_CLUSTER_NAME
: 새로 생성된 사용자 클러스터의 이름입니다.FLEET_HOST_PROJECT_ID
: 클러스터가 등록된 프로젝트의 IDREGION
: 클러스터를 만들 때 지정한 Google Cloud 리전입니다.IMAGE_TYPE
: 노드 풀의 VM에서 실행할 OS 이미지 유형입니다.ubuntu_containerd
또는cos
중 하나로 설정합니다.BOOT_DISK_SIZE
: 풀에 있는 각 노드의 부팅 디스크 크기(GiB)입니다. 최솟값은 40GiB입니다.vCPUs
: 노드 풀의 각 노드에 대한 vCPU 수입니다. 최솟값은 4입니다.MEMORY
: 풀의 각 노드에 대한 메모리 크기(MiB)입니다. 최솟값은 사용자 클러스터 워커 노드당 8,192MiB이고 값이 4의 배수여야 합니다.NODES
: 노드 풀의 노드 수입니다. 최솟값은 3입니다.MetalLB를 부하 분산기로 사용하려는 경우에는 선택적으로, MetalLB 스피커가 풀의 노드에서 실행되도록 허용하려는 경우
--enable-load-balancer
를 포함합니다. 하나 이상의 노드 풀에서 MetalLB를 사용 설정해야 합니다. 이 플래그를 포함하지 않으면 MetalLB에 사용할 다른 노드 풀을 만들어야 합니다.선택적인 플래그에 대한 자세한 내용은 노드 풀 추가 및 gcloud CLI 참조를 확인하세요.
gcloud 명령어 예시
MetalLB 및 DHCP
gcloud container vmware clusters create user-cluster-1 \ --project=example-project-12345 \ --location=us-west1 \ --admin-cluster-membership=projects/example-project-12345/locations/us-west1/memberships/admin-cluster-1 \ --version=1.30.0-gke.1930 \ --admin-users=sara@example.com \ --admin-users=amal@example.com \ --enable-dhcp \ --service-address-cidr-blocks=10.96.0.0/20 \ --pod-address-cidr-blocks=192.168.0.0/16 \ --metal-lb-config-address-pools='pool=lb-pool-1,manual-assign=False,avoid-buggy-ips=True,addresses=192.0.2.0/26;pool=lb-ingress-vip-pool,manual-assign=True,addresses=198.51.100.1/32' \ --enable-control-plane-v2 \ --control-plane-vip=203.0.113.1 \ --ingress-vip=198.51.100.1
--metal-lb-config-address-pools
플래그에 대한 설명은 부하 분산기를 참조하세요.
MetalLB 및 고정 IP
gcloud container vmware clusters create user-cluster-3 \ --project=example-project-12345 \ --location=europe-west1 \ --admin-cluster-membership=projects/example-project-12345/locations/global/memberships/admin-cluster-1 \ --version=1.30.0-gke.1930 \ --admin-users=sara@example.com \ --admin-users=amal@example.com \ --static-ip-config-ip-blocks='gateway=192.0.2.254,netmask=255.255.255.0,ips=192.0.2.10 user-vm-1;192.0.2.11 user-vm-2' \ --static-ip-config-ip-blocks='gateway=192.0.2.254,netmask=255.255.255.0,ips=192.0.2.12 user-vm-3;192.0.2.13 extra-vm' \ --dns-servers=203.0.113.1,203.0.113.2 \ --dns-search-domains=example.com,altostrat.com \ --ntp-servers=203.0.113.3,203.0.113.4 \ --service-address-cidr-blocks=10.96.0.0/20 \ --pod-address-cidr-blocks=192.168.0.0/16 \ --enable-control-plane-v2 \ --control-plane-ip-block 'gateway=192.0.2.254,netmask=255.255.255.0,ips=198.51.100.1 cp-vm-1;198.51.100.2 cp-vm-2;198.51.100.3 cp-vm-3' \ --replicas=3 \ --metal-lb-config-address-pools='pool=lb-pool-1,manual-assign=False,avoid-buggy-ips=True,addresses=192.0.2.0/26;lb-ingress-vip-pool,manual-assign=True,addresses=198.51.100.1/32' \ --control-plane-vip=172.16.20.61 \ --ingress-vip=172.16.20.62
수동 LB 및 고정 IP
gcloud container vmware clusters create user-cluster-4 \ --project=example-project-12345 \ --location=asia-east1 \ --admin-cluster-membership=projects/example-project-12345/locations/asia-east1/memberships/admin-cluster-1 \ --version=1.30.0-gke.1930 \ --admin-users=sara@example.com \ --admin-users=amal@example.com \ --static-ip-config-ip-blocks='gateway=192.0.2.254,netmask=255.255.255.0,ips=192.0.2.10 user-vm-1;192.0.2.11 user-vm-2';ips=192.0.2.12 user-vm-3;192.0.2.13 extra-vm'\ --dns-servers=203.0.113.1,203.0.113.2 \ --ntp-servers=203.0.113.3,203.0.113.4 \ --service-address-cidr-blocks=10.96.0.0/20 \ --pod-address-cidr-blocks=192.168.0.0/16 \ --enable-control-plane-v2 \ --control-plane-ip-block 'gateway=192.0.2.254,netmask=255.255.255.0,ips=198.51.100.1 cp-vm-1;198.51.100.2 cp-vm-2;198.51.100.3 cp-vm-3' \ --replicas=3 \ --control-plane-vip=192.0.2.60 \ --ingress-vip=192.0.2.50 \ --ingress-http-node-port=30243 \ --ingress-https-node-port=30879
Terraform
시작하기 전에
관리자 클러스터의 이름과 Fleet 멤버십 위치를 가져옵니다.
gcloud container fleet memberships list \ --project=FLEET_HOST_PROJECT_ID
FLEET_HOST_PROJECT_ID
를 관리자 클러스터가 등록된 프로젝트의 ID로 바꿉니다.출력은 다음과 비슷합니다.
NAME EXTERNAL_ID LOCATION admin-cluster-1 bb7803b4-8438-4b22-859f-4559b4b29072 global admin-cluster-2 ee16ee2b-6ec0-49fc-9413-3c89cbc70854 global admin-cluster-3 fc2b7ef5-39ff-4b63-b919-04c5adc67be4 us-west1
위치는 Fleet 및 Connect 서비스가 실행되는 위치를 지정합니다. 1.28 이전에 생성된 관리자 클러스터는 전역 Fleet 및 Connect 서비스에서 관리됩니다. 1.28 이상에서는 클러스터를 만들 때
global
또는 Google Cloud 리전을 지정할 수 있습니다.사용 가능한 버전 목록을 가져옵니다.
gcloud container vmware clusters query-version-config \ --admin-cluster-membership=ADMIN_CLUSTER_NAME \ --admin-cluster-membership-project=FLEET_HOST_PROJECT_ID \ --admin-cluster-membership-location=ADMIN_CLUSTER_REGION \ --location=REGION
다음을 바꿉니다.
ADMIN_CLUSTER_NAME
: 관리자 클러스터 이름FLEET_HOST_PROJECT_ID
: 관리자 클러스터가 등록된 프로젝트의 ID입니다.ADMIN_CLUSTER_REGION
: 관리자 클러스터의 Fleet 멤버십 리전입니다. 전역 또는 Google Cloud 리전입니다.gcloud container fleet memberships list
출력에서 관리자 클러스터 위치를 사용합니다.REGION
: 클러스터를 만들 때 사용할 Google Cloud 리전입니다. GKE On-Prem API와 Fleet 및 Connect 서비스가 실행되는 리전입니다.us-west1
또는 다른 지원되는 리전을 지정합니다.
이 명령어 출력은 다음과 비슷합니다.
versions: - isInstalled: true version: 1.14.3-gke.25 - version: 1.14.4-gke.54 - version: 1.15.0-gke.581
사용자 클러스터를 만드는 데 사용할 수 있는 버전은
isInstalled=true
로 주석 처리됩니다. 관리자 클러스터에 해당 버전의 사용자 클러스터를 관리하는 데 필요한 버전별 구성요소가 있다는 의미입니다. 사용 가능한 다른 버전으로 사용자 클러스터를 만들려면 관리자 클러스터 버전보다 최신 버전 설치를 참조하세요.
예
다음 기본 구성 샘플을 사용해서 번들 MetalLB 부하 분산기와 하나의 노드 풀이 포함된 사용자 클러스터를 만들 수 있습니다.
자세한 내용과 다른 예시는 google_gkeonprem_vmware_cluster
참고 문서를 확인하세요.
terraform.tfvars
에서 변수 설정
이 샘플은 main.tf
에 전달할 변수 파일 예시를 제공합니다. 여기에서는 번들 MetalLB 부하 분산기를 구성하고, 제공하는 DHCP 서버에서 IP 주소를 가져오도록 클러스터 노드를 사용 설정하는 방법을 보여줍니다.
anthos-samples
저장소를 클론하고 Terraform 샘플이 있는 디렉터리로 변경합니다.git clone https://github.com/GoogleCloudPlatform/anthos-samples cd anthos-samples/anthos-onprem-terraform/avmw_user_cluster_metallb
terraform.tfvars.sample
파일의 사본을 만듭니다.cp terraform.tfvars.sample terraform.tfvars
terraform.tfvars
의 매개변수 값을 수정합니다.아래 목록에서 변수를 설명합니다.
project_id
: 클러스터를 만들려는 프로젝트의 ID. 지정된 프로젝트는 Fleet 호스트 프로젝트로도 사용됩니다. 이 프로젝트는 관리자 클러스터가 등록된 프로젝트와 같아야 합니다. 사용자 클러스터가 생성되면 선택한 프로젝트의 Fleet에 자동으로 등록됩니다. 클러스터를 만든 후에는 Fleet 호스트 프로젝트를 변경할 수 없습니다.region
: GKE On-Prem API(gkeonprem.googleapis.com
), Fleet 서비스(gkehub.googleapis.com
) 및 Connect 서비스(gkeconnect.googleapis.com
)가 실행되는 Google Cloud 리전입니다.us-west1
또는 다른 지원되는 리전을 지정합니다.admin_cluster_name
: 사용자 클러스터를 관리하는 관리자 클러스터의 이름 이 예시에서는 관리자 클러스터가 리전으로 전역을 사용한다고 가정합니다. 리전 관리자 클러스터가 있는 경우 다음 단계를 따르세요.- 텍스트 편집기에서
main.tf
를 엽니다. - 다음과 같이
admin_cluster_membership
을 검색합니다.
admin_cluster_membership = "projects/${var.project_id}/locations/global/memberships/${var.admin_cluster_name}"
global
을 관리자 클러스터에서 사용하는 리전으로 변경하고 파일을 저장합니다.
- 텍스트 편집기에서
on_prem_version
: 사용자 클러스터의 Google Distributed Cloud 버전입니다. 일반적으로 관리자 클러스터와 동일한 버전을 지정합니다. 더 최신 버전을 지정하려면 관리자 클러스터 버전보다 최신 버전을 설치합니다. 관리자 클러스터 버전을 모르면 관리자 클러스터 버전보다 최신 버전 설치의 첫 번째 단계인gcloud container vmware clusters query-version-config
를 실행합니다.admin_user_emails
: 클러스터에 대한 관리자 권한을 부여할 사용자의 이메일 주소 목록입니다. 클러스터를 관리하려면 이메일 주소를 추가해야 합니다.클러스터가 생성되면 GKE On-Prem API는 클러스터에 Kubernetes 역할 기반 액세스 제어(RBAC) 정책을 적용하여 관리자에게 모든 네임스페이스의 클러스터 내 모든 리소스에 대한 전체 액세스 권한을 제공하는 Kubernetes
clusterrole/cluster-admin
역할을 부여합니다. 이렇게 하면 사용자가 Google ID를 사용하여 콘솔에 로그인할 수 있습니다.cluster_name
: 선택한 사용자 클러스터의 이름입니다. 클러스터를 만든 후에는 이름을 변경할 수 없습니다. 이름은 다음 조건을 충족해야 합니다.- 40자(영문 기준) 이하여야 합니다.
- 소문자 영숫자 문자 또는 하이픈(
-
)만 포함해야 합니다. - 알파벳 문자로 시작해야 합니다.
- 영숫자 문자로 끝나야 합니다.
control_plane_node_cpus
: 사용자 클러스터의 각 컨트롤 플레인 노드에 대한 vCPU 수입니다. 최솟값은 vCPU 4개입니다.control_plane_node_memory
: 사용자 클러스터의 각 컨트롤 플레인에 대한 메비바이트(MiB) 단위의 메모리 크기입니다. 최솟값은 8,192이고 4의 배수여야 합니다.control_plane_node_replicas
: 사용자 클러스터의 컨트롤 플레인 노드 수입니다. 예를 들어 개발 환경에는 컨트롤 플레인 노드 1개를 입력하고 고가용성(HA), 프로덕션 환경에는 컨트롤 플레인 노드 3개를 입력할 수 있습니다.control_plane_vip
: 사용자 클러스터의 Kubernetes API 서버에 대해 부하 분산기에서 구성하도록 선택한 가상 IP 주소(VIP)입니다.ingress_vip
: 인그레스 프록시의 부하 분산기에서 구성하도록 선택한 IP 주소입니다.lb_address_pools
: MetalLB 부하 분산기에서 사용할 주소 풀을 정의하는 맵 목록입니다. 인그레스 VIP는 이러한 풀 중 하나에 있어야 합니다. 다음 사항을 지정합니다.name
: 풀의 이름입니다.addresses
: CIDR 표기법 또는 하이픈으로 연결된 범위 형식의 IP 주소 범위입니다. 인그레스 VIP와 같이 풀에 단일 IP 주소를 지정하려면 /32를 CIDR 표기법으로 사용합니다(예:192.0.2.1/32
).
예시 IP 주소를 사용자 값으로 바꾸고 필요한 경우 주소 풀을 추가합니다.
변경사항을
terraform.tfvars
에 저장합니다.main.tf
를 선택적으로 변경하지 않으려면 다음에 있는 클러스터와 노드 풀 하나 만들기 섹션으로 건너뜁니다.
선택사항: main.tf
에서 클러스터 설정 구성
이 섹션에서는 main.tf
에서 수행할 수 있는 몇 가지 선택적인 구성 변경사항에 대해 설명합니다. 변경하기 전 main.tf
를 백업합니다.
cp main.tf main.tf.bak
워커 노드 IP 주소 지정 모드
기본적으로 main.tf
는 클러스터의 워커 노드에 IP 주소를 할당하도록 제공하는 DHCP 서버를 사용하도록 클러스터를 구성합니다. DHCP는 network_config
블록 내에 dhcp_config
맵을 포함하여 구성됩니다. 워커 노드에 대해 고정 IP 주소를 제공하려면 main.tf
를 다음과 같이 변경합니다.
network_config
블록을 바꾸고static_ip_config
블록을 포함합니다. 예를 들면 다음과 같습니다.network_config { service_address_cidr_blocks = ["10.96.0.0/12"] pod_address_cidr_blocks = ["192.168.0.0/16"] host_config { dns_servers = ["10.254.41.1"] ntp_servers = ["216.239.35.8"] } static_ip_config { ip_blocks { netmask = "255.255.252.0" gateway = "10.251.31.254" ips { ip = "10.251.30.153" hostname = "vm-1" } ips { ip = "10.251.31.206" hostname = "vm-2" } ips { ip = "10.251.31.193" hostname = "vm-3" } ips { ip = "10.251.30.230" hostname = "vm-4" } } } }
다음을 사용자 값으로 바꿉니다.
service_address_cidr_blocks
: 클러스터의 서비스에 사용할 CIDR 형식의 IP 주소 범위입니다. /24 범위 이상이어야 합니다.pod_address_cidr_blocks
: 클러스터의 포드에 사용할 CIDR 형식의 IP 주소 범위입니다. /18 범위 이상이어야 합니다.dns_servers
: VM에 대한 DNS 서버의 IP 주소 목록입니다.ntp_servers
: 사용할 VM에 대해 시간 서버의 IP 주소 목록입니다.static_ip_config
블록에서netmask
및gateway
값을 네트워크의 주소로 바꿉니다.ip
및hostname
을 워커 노드의 IP 주소와 호스트 이름으로 바꿉니다.
Controlplane V2 구성
기본적으로 main.tf
는 관리자 클러스터(kubeception 모델이라고 부름)의 하나 이상의 노드에서 실행하도록 사용자 클러스터의 컨트롤 플레인을 구성합니다. 원하는 경우 Controlplane V2를 사용 설정할 수 있습니다. Controlplane V2가 사용 설정되었으면 사용자 클러스터의 컨트롤 플레인이 사용자 클러스터 자체의 하나 이상의 노드에서 실행됩니다. Controlplane V2를 구성하려면 main.tf
를 다음과 같이 변경합니다.
admin_cluster_membership
이 있는 줄 뒤에 다음 줄을 추가합니다.enable_control_plane_v2 = "true"
control_plane_v2_config
맵을network_config
블록에 추가합니다. 예를 들면 다음과 같습니다.control_plane_v2_config { control_plane_ip_block { netmask = "255.255.252.0" gateway = "10.250.71.254" ips { ip = "10.250.68.54" hostname = "cpv2-vm1" } ips { ip = "10.250.68.128" hostname = "cpv2-vm2" } ips { ip = "10.250.71.50" hostname = "cpv2-vm3" } } }
netmask
및gateway
의 값을 해당 네트워크의 IP 주소로 바꿉니다.ip
및hostname
를 해당 컨트롤 플레인 노드의 IP 주소로 바꿉니다.
클러스터 및 하나의 노드 풀 만들기
Terraform 계획을 초기화하고 만듭니다.
terraform init
Terraform은 Google Cloud 제공업체와 같은 필요한 라이브러리를 설치합니다.
구성을 검토하고 필요한 경우 변경합니다.
terraform plan
Terraform 계획을 적용하여 사용자 클러스터를 만듭니다.
terraform apply
사용자 클러스터를 만드는 데 15분 이상 소요되고 노드 풀을 만드는 데 다시 15분 정도 소요됩니다. Google Cloud 콘솔의 GKE 클러스터 페이지에서 클러스터를 볼 수 있습니다.
문제 해결
클러스터 생성 및 업그레이드 문제 해결을 참조하세요.