사용자 클러스터 만들기

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을 사용하여 사용자 클러스터를 만드는 기본 단계는 다음과 같습니다.

  1. 관리자 워크스테이션에 연결
    관리자 워크스테이션은 사용자 클러스터를 만드는 데 필요한 도구가 있는 머신입니다.
  2. 구성 파일 작성
    사용자 클러스터 구성 파일, 사용자 인증 정보 구성 파일, IP 블록 파일을 완료하여 새 클러스터의 세부정보를 지정합니다.
  3. (선택사항) OS 이미지를 vSphere로 가져오고 해당되는 경우 컨테이너 이미지를 비공개 레지스트리로 푸시합니다.
    gkectl prepare를 실행합니다.
  4. 사용자 클러스터 만들기
    gkectl create cluster를 실행하여 구성 파일에 지정된 대로 클러스터를 만듭니다.
  5. 사용자 클러스터 실행 여부 확인
    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.0-gke.1930입니다.

enableControlplaneV2

Controlplane V2가 사용 설정된 사용자 클러스터를 만들려면 enableControlplaneV2true로 설정합니다.

Controlplane V2가 사용 설정되면 사용자 클러스터의 컨트롤 플레인은 사용자 클러스터 자체의 노드에서 실행됩니다. Controlplane V2를 사용 설정하는 것이 좋습니다.

kubeception

이 필드를 false로 설정하면 클러스터는 kubecetption을 사용합니다. kubeception을 사용하면 사용자 클러스터의 컨트롤 플레인이 관리자 클러스터의 노드에서 실행됩니다.

kubeception 클러스터의 경우 다음 안내를 따르세요.

  • enableControlplaneV2false로 설정합니다.

  • controlPlaneIPBlock 섹션은 입력하지 마세요.

  • 관리자 클러스터의 IP 블록 파일에서 사용자 클러스터의 컨트롤 플레인 노드에 대한 IP 주소를 지정합니다.

enableDataplaneV2

enableDataplaneV2true로 설정합니다.

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.podCIDRnetwork.serviceCIDR에는 미리 입력된 값이 있으며, 네트워크에서 이미 사용 중인 주소와 충돌하지 않는 한 그대로 유지할 수 있습니다. Kubernetes는 이러한 범위를 사용하여 클러스터의 포드 및 서비스에 IP 주소를 할당합니다.

DHCP 서버를 사용하거나 고정 IP 주소 목록을 지정하는지에 관계없이 사용자 클러스터에 사용할 수 있도록 충분한 IP 주소가 필요합니다. 필요한 IP 주소 수에 대한 설명은 IP 주소 계획을 참조하세요.

loadBalancer

사용자 클러스터의 Kubernetes API 서버에 대해 VIP를 별도로 설정합니다. 사용자 클러스터의 인그레스 서비스에 대해 다른 VIP를 설정합니다. VIP를 loadBalancer.vips.controlPlaneVIPloadBalancer.vips.ingressVIP의 값으로 제공합니다.

사용할 부하 분산의 유형을 결정합니다. 옵션은 다음과 같습니다.

부하 분산 옵션에 대한 상세 설명은 부하 분산 개요를 참조하세요.

advancedNetworking

이그레스 NAT 게이트웨이를 만들려면 advancedNetworkingtrue로 설정합니다.

multipleNetworkInterfaces

포드에 여러 네트워크 인터페이스를 구성할지 여부를 결정하고 이에 따라 multipleNetworkInterfaces를 설정합니다.

storage

vSphere CSI 구성요소 배포를 중지하려면 storage.vSphereCSIDisabledtrue로 설정하세요.

masterNode

masterNode 섹션에서 사용자 클러스터에 원하는 컨트롤 플레인 노드 수를 1개 또는 3개로 지정할 수 있습니다. 컨트롤 플레인 노드의 데이터 스토어와 노드의 자동 크기 조절 사용 설정 여부를 지정할 수도 있습니다.

network.controlPlaneIPBlock 섹션에서 컨트롤 플레인 노드에 IP 주소를 지정했음을 기억하세요.

nodePools

노드 풀은 구성이 모두 동일한 클러스터의 노드 그룹입니다. 예를 들어 풀 하나의 노드는 Windows를 실행하고 다른 풀의 노드는 Linux를 실행할 수 있습니다.

nodePools 섹션을 입력하여 노드 풀을 최소 하나 이상 지정해야 합니다.

자세한 내용은 노드 풀노드 풀 만들기 및 관리를 참조하세요.

antiAffinityGroups

antiAffinityGroups.enabledtrue 또는 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.projectIDcloudAuditLogging.projectID의 ID와 동일해야 합니다.

  • stackdriver.clusterLocation에 설정된 Google Cloud 리전은 cloudAuditLogging.clusterLocationgkeConnect.location에 설정된 리전과 동일해야 합니다(구성 파일에 필드가 포함된 경우). 또한 gkeOnPremAPI.enabledtrue인 경우 gkeOnPremAPI.location에 동일한 리전을 설정해야 합니다.

프로젝트 ID와 리전이 동일하지 않으면 클러스터 생성에 실패합니다.

gkeConnect

사용자 클러스터를 Google Cloud Fleet에 등록해야 합니다.

gkeConnect 섹션을 입력하여 Fleet 호스트 프로젝트 및 연결된 서비스 계정을 지정합니다. gkeConnect.projectID의 ID는 stackdriver.projectIDcloudAuditLogging.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.enabledfalse로 설정합니다. 프로젝트에 클러스터를 등록하지 않으려면 프로젝트에서 gkeonprem.googleapis.com(GKE On-Prem API의 서비스 이름)을 중지합니다. 자세한 내용은 서비스 사용 중지를 참조하세요.

usageMetering

클러스터에 사용량 측정을 사용 설정하려면 usageMetering 섹션을 입력합니다.

cloudAuditLogging

클러스터의 Kubernetes API 서버의 감사 로그를 Cloud 감사 로그와 통합하려면 cloudAuditLogging 섹션을 입력합니다.

새 클러스터에 대한 다음 요구사항을 참고하세요.

  • cloudAuditLogging.projectID의 ID는 gkeConnect.projectIDstackdriver.projectID의 ID와 동일해야 합니다.

  • cloudAuditLogging.clusterLocation의 리전은 gkeConnect.location(필드가 구성 파일에 포함된 경우) 및 stackdriver.clusterLocation에 설정된 리전과 동일해야 합니다. 또한 gkeOnPremAPI.enabledtrue인 경우 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.0-gke.1930
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.0-gke.1930-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

시작하기

  1. Google Cloud 콘솔에서 Google Distributed Cloud 클러스터 만들기 페이지로 이동합니다.

    Google Distributed Cloud 클러스터 만들기로 이동

  2. 클러스터를 만들 Google Cloud 프로젝트를 선택합니다. 선택한 프로젝트는 Fleet 호스트 프로젝트로도 사용됩니다. 이 프로젝트는 관리자 클러스터가 등록된 프로젝트와 같아야 합니다. 사용자 클러스터가 생성되면 선택한 프로젝트의 Fleet에 자동으로 등록됩니다.

클러스터 기본사항

클러스터에 대한 기본 정보를 입력합니다.

  1. 사용자 클러스터의 이름을 입력합니다.

  2. 관리자 클러스터의 목록에서 관리자 클러스터를 선택합니다. 관리자 클러스터를 만들 때 이름을 지정하지 않았으면 이름은 gke-admin-[HASH] 형식으로 생성됩니다. 관리자 클러스터 이름이 인식되지 않으면 관리자 워크스테이션에서 다음 명령어를 실행합니다.

    KUBECONFIG=ADMIN_CLUSTER_KUBECONFIG
    kubectl get OnPremAdminCluster -n kube-system -o=jsonpath='{.items[0].metadata.name}'
    

    사용하려는 관리자 클러스터가 표시되지 않으면 문제 해결 섹션을 참조하세요. 관리자 클러스터는 클러스터 기본사항 드롭다운 목록에 표시되지 않습니다.

  3. 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의 클러스터가 고유하게 식별됩니다.

  4. 사용자 클러스터의 Google Distributed Cloud 버전을 선택합니다.

  5. 클러스터 생성자는 클러스터에 대한 클러스터 관리자 권한을 부여받습니다. 필요한 경우 승인 섹션의 클러스터 관리자 필드에 클러스터를 관리할 다른 사용자의 이메일 주소를 입력하세요.

    클러스터가 생성되면 GKE On-Prem API는 클러스터에 Kubernetes 역할 기반 액세스 제어(RBAC) 정책을 적용하여 사용자 및 다른 관리자에게 모든 네임스페이스의 클러스터 내 모든 리소스에 대한 전체 액세스 권한을 제공하는 Kubernetes clusterrole/cluster-admin 역할을 부여합니다.

  6. 다음을 클릭하여 컨트롤 플레인 섹션으로 이동합니다.

제어 영역

컨트롤 플레인 섹션의 모든 필드가 기본값으로 설정됩니다. 기본값을 검토하고 원하는 경우 필요에 따라 변경합니다.

  1. 컨트롤 플레인 노드 vCPU 필드에 사용자 클러스터의 각 컨트롤 플레인 노드에 대한 vCPU 수(최소 4개)를 입력합니다.

  2. 컨트롤 플레인 노드 메모리 필드에 사용자 클러스터의 컨트롤 플레인에 대한 메모리 크기를 MiB(최소 8,192이고 4의 배수여야 함) 단위로 입력합니다.

  3. 컨트롤 플레인 노드에서 사용자 클러스터의 컨트롤 플레인 노드 수를 선택합니다. 예를 들어 개발 환경에는 컨트롤 플레인 노드 1개를 선택하고 고가용성(HA), 프로덕션 환경에는 컨트롤 플레인 노드 3개를 선택할 수 있습니다.

  4. 필요한 경우 노드 크기 자동 조절을 선택합니다. 크기 조절은 노드에 할당되는 vCPU 및 메모리 리소스가 자동으로 조절됨을 의미합니다. 사용 설정된 경우 사용자 클러스터의 컨트롤 플레인 노드는 사용자 클러스터에 있는 워커 노드 수에 따라 크기가 조정됩니다. 따라서 사용자 클러스터에 워커 노드를 더 추가하면 컨트롤 플레인 노드 크기가 증가합니다.

  5. 선택적으로 컨트롤 플레인 v2 사용 설정을 선택합니다. Controlplane V2를 사용 설정하면 사용자 클러스터의 컨트롤 플레인이 관리자 클러스터(kubeception이라고 부름) 대신 사용자 클러스터 자체의 하나 이상의 노드에서 실행됩니다.

    컨트롤 플레인 v2 사용 설정을 선택하면 컨트롤 플레인 노드 IP 섹션이 표시됩니다. 게이트웨이의 IP 주소, 서브넷 마스크, 컨트롤 플레인 노드의 IP 주소를 입력합니다.

    Controlplane V2가 사용 설정되었으면 vCPU 및 메모리 필드가 사용자 클러스터의 컨트롤 플레인 노드에 적용됩니다. 노드 수는 입력하는 IP 주소 수에 따라 결정됩니다. Controlplane V2가 사용 설정되지 않았으면 vCPU, 메모리, 컨트롤 플레인 노드 필드 수가 관리자 클러스터의 노드에 적용됩니다. 관리자 클러스터에 대해 충분한 IP 주소를 설정해야 합니다.

  6. 다음을 클릭하여 네트워킹 섹션으로 이동합니다.

네트워킹

이 섹션에서는 클러스터의 노드, 포드, 서비스의 IP 주소를 지정합니다. 사용자 클러스터에는 노드마다 IP 주소 하나가 있어야 하고 클러스터 업그레이드, 업데이트, 자동 복구 중에 필요한 임시 노드용 추가 IP 주소가 있어야 합니다. 자세한 내용은 사용자 클러스터에 필요한 IP 주소 수를 참조하세요.

  1. 노드 IP 섹션에서 사용자 클러스터의 IP 모드를 선택합니다. 다음 중 하나를 선택합니다.

    • DHCP: 클러스터 노드가 DHCP 서버에서 IP 주소를 가져오도록 하려면 DHCP를 선택합니다.

    • 고정: 클러스터 노드에 고정 IP 주소를 제공하거나 수동 부하 분산을 설정하려면 고정을 선택합니다.

  2. DHCP를 선택한 경우 다음 단계로 건너뛰고 서비스 및 포드 CIDR을 지정합니다. 고정 IP 모드에 다음 정보를 입력합니다.

    1. 사용자 클러스터용 게이트웨이의 IP 주소를 입력합니다.

    2. 사용자 클러스터 노드의 서브넷 마스크를 입력합니다.

    3. IP 주소 섹션에서 IP 주소를 입력하고 원하는 경우 사용자 클러스터에 있는 노드의 호스트 이름을 입력합니다. 개별 IP v4 주소(예: 192.0.2.1) 또는 IPv4 주소의 CIDR 블록(예: 192.0.2.0/24)을 입력할 수 있습니다.

      • CIDR 블록을 입력하는 경우 호스트 이름을 입력하지 마세요.

      • 개별 IP 주소를 입력할 경우 호스트 이름을 선택적으로 입력할 수 있습니다. 호스트 이름을 입력하지 않으면 Google Distributed Cloud가 vSphere의 VM 이름을 호스트 이름으로 사용합니다.

    4. 필요에 따라 + IP 주소 추가를 클릭하여 IP 주소를 더 입력합니다.

  3. 서비스 및 포드 CIDR 섹션에서 콘솔은 Kubernetes 서비스 및 포드에 다음 주소 범위를 제공합니다.

    • 서비스 CIDR: 10.96.0.0/20
    • 포드 CIDR: 192.168.0.0/16

    자체 주소 범위를 입력하려면 포드 및 서비스의 IP 주소에서 권장사항을 참조하세요.

  4. 고정 IP 모드 또는 컨트롤 플레인 v2 사용 설정을 선택한 경우 호스트 구성 섹션에서 다음 정보를 지정합니다.

    1. DNS 서버의 IP 주소를 입력합니다.
    2. NTP 서버의 IP 주소를 입력합니다.
    3. 원하는 경우 DNS 검색 도메인을 입력합니다.
  5. 다음을 클릭하여 부하 분산기 섹션으로 이동합니다.

부하 분산기

클러스터에 설정할 부하 분산기를 선택합니다. 자세한 내용은 부하 분산기 개요를 참조하세요.

목록에서 부하 분산기 유형을 선택합니다.

MetalLB와 함께 번들로 제공

MetalLB를 사용하여 번들 부하 분산을 구성합니다. 관리자 클러스터가 SeeSaw 또는 MetalLB를 사용하는 경우에만 사용자 클러스터에 MetalLB를 사용할 수 있습니다. 이 옵션에는 최소한의 구성만 필요합니다. MetalLB는 클러스터 노드에서 직접 실행되며 추가 VM이 필요하지 않습니다. MetalLB 사용의 이점과 다른 부하 분산 옵션과의 비교에 대한 자세한 내용은 MetalLB를 사용한 번들 부하 분산을 참조하세요.

  1. 주소 풀 섹션에서 다음과 같이 주소 풀을 최소 하나 이상 구성합니다.

    1. 주소 풀의 이름을 입력합니다.

    2. 인그레스 VIP를 포함하는 IP 주소 범위를 CIDR 표기법(예: 192.0.2.0/26) 또는 범위 표기법(예: 192.0.2.64-192.0.2.72)으로 입력합니다. 풀에 단일 IP 주소를 지정하려면 /32를 CIDR 표기법으로 사용합니다(예: 192.0.2.1/32).

    3. LoadBalancer 유형 서비스의 IP 주소가 인그레스 VIP와 동일한 IP 주소 범위에 없으면 + IP 주소 범위 추가를 클릭하고 다른 주소 범위를 입력합니다.

      각 풀의 IP 주소는 겹칠 수 없으며 클러스터 노드와 동일한 서브넷에 있어야 합니다.

    4. IP 주소 할당에서 다음 중 하나를 선택합니다.

      • 자동: MetalLB 컨트롤러가 주소 풀의 IP 주소를 LoadBalancer 유형의 서비스에 자동으로 할당하도록 하려면 이 옵션을 선택합니다.

      • 수동: 풀의 주소를 사용하여 LoadBalancer 유형의 서비스 주소를 수동으로 지정하려면 이 옵션을 선택합니다.

    5. MetalLB 컨트롤러가 .0 또는 .255로 끝나는 풀의 주소를 사용하지 않도록 하려면 버그가 있는 IP 주소 방지를 클릭합니다. 이렇게 하면 버그가 있는 소비자 기기가 특수한 IP 주소로 전송된 트래픽을 실수로 차단하는 문제를 방지할 수 있습니다.

    6. 완료하면 완료를 클릭합니다.

  2. 필요한 경우 주소 풀 추가를 클릭합니다.

  3. 가상 IP 섹션에서 다음을 입력합니다.

    • 컨트롤 플레인 VIP: 사용자 클러스터의 Kubernetes API 서버로 전송되는 트래픽에 사용할 대상 IP 주소입니다. 사용자 클러스터의 Kubernetes API 서버가 관리자 클러스터의 노드에서 실행됩니다. 이 IP 주소는 관리자 클러스터 노드와 동일한 L2 도메인에 있어야 합니다. 주소 풀 섹션에 이 주소를 추가하지 마세요.

    • 인그레스 VIP: 인그레스 프록시의 부하 분산기에서 구성할 IP 주소입니다. 주소 풀 섹션의 주소 풀에 이 주소를 추가해야 합니다.

  4. 계속을 클릭합니다.

F5 BIG-IP

관리자 클러스터에서 F5 BIG-IP를 사용하는 경우에만 사용자 클러스터에 F5 BIG-IP를 사용할 수 있습니다. Google Distributed Cloud와 통합하기 전에 F5 BIG-IP ADC를 설치하고 구성합니다.

F5 사용자 이름과 비밀번호는 관리자 클러스터에서 상속됩니다.

  1. 가상 IP 섹션에서 다음을 입력합니다.

    • 컨트롤 플레인 VIP: Kubernetes API 서버로 전송되는 트래픽에 사용할 대상 IP 주소입니다.

    • 인그레스 VIP: 인그레스 프록시의 부하 분산기에서 구성할 IP 주소입니다.

  2. 주소 필드에 F5 BIG-IP 부하 분산기의 주소를 입력합니다.

  3. 파티션 필드에 사용자 클러스터용으로 만든 BIG-IP 파티션의 이름을 입력합니다.

  4. sNAT 풀 이름 필드에 SNAT 풀 이름을 입력합니다(해당되는 경우).

  5. 계속을 클릭합니다.

수동

관리자 클러스터에 수동 부하 분산기가 사용되는 경우에만 사용자 클러스터에 대해 수동 부하 분산기를 사용할 수 있습니다. Google Distributed Cloud에서 Kubernetes API 서버와 인그레스 프록시는 각각 LoadBalancer 유형의 Kubernetes 서비스에서 노출됩니다. 이러한 서비스의 30000~32767 범위에서 고유한 nodePort 값을 선택합니다. 인그레스 프록시의 경우 HTTP 및 HTTPS 트래픽 모두에 nodePort 값을 선택합니다. 자세한 내용은 수동 부하 분산 모드 사용 설정을 참조하세요.

  1. 가상 IP 섹션에서 다음을 입력합니다.

    • 컨트롤 플레인 VIP: Kubernetes API 서버로 전송되는 트래픽에 사용할 대상 IP 주소입니다.

    • 인그레스 VIP: 인그레스 프록시의 부하 분산기에서 구성할 IP 주소입니다.

  2. 컨트롤 플레인 노드 포트 필드에 Kubernetes API 서버의 nodePort 값을 입력합니다.

  3. 인그레스 HTTP 노드 포트 필드에 인그레스 프록시에 대한 HTTP 트래픽의 nodePort 값을 입력합니다.

  4. 인그레스 HTTPS 노드 포트 필드에 인그레스 프록시에 대한 HTTPS 트래픽의 nodePort 값을 입력합니다.

  5. Konnectivity 서버 노드 포트 필드에 Konnectivity 서버의 nodePort 값을 입력합니다.

  6. 계속을 클릭합니다.

기능

이 섹션에서는 클러스터에 사용 설정된 기능과 작업을 보여줍니다.

  1. 다음 기능은 자동으로 사용 설정되어 있으며 중지될 수 없습니다.

  2. 다음은 기본적으로 사용 설정되어 있지만 중지될 수 있습니다.

    • vSphere CSI 드라이버 사용 설정: vSphere 컨테이너 스토리지 플러그인이라고도 합니다. 컨테이너 스토리지 인터페이스(CSI) 드라이버는 vSphere에 배포된 Kubernetes 클러스터에서 실행되어 vSphere 스토리지에 영구 볼륨을 프로비저닝합니다. 자세한 내용은 vSphere 컨테이너 스토리지 인터페이스 드라이버 사용을 참조하세요.

    • 안티-어피니티 그룹 사용 설정: VMware Distributed Resource Scheduler(DRS) 안티-어피니티 규칙이 사용자 클러스터 노드에 자동으로 생성되므로 데이터 센터에서 물리적 호스트 최소 3개 이상에 분산됩니다. vSphere 환경에서 요구사항을 충족하는지 확인합니다.

  3. 다음을 클릭하여 노드 풀을 구성합니다.

노드 풀

하나 이상의 노드 풀이 있는 클러스터가 생성됩니다. 노드 풀은 이 클러스터에서 만든 워커 노드 그룹의 템플릿입니다. 자세한 내용은 노드 풀 만들기 및 관리를 참조하세요.

  1. 노드 풀 기본값 섹션에서 다음을 완료합니다.

    1. 노드 풀 이름을 입력하거나 이름으로 'default-pool'을 수락합니다.
    2. 풀에 있는 각 노드의 vCPUs 수를 입력합니다. 사용자 클러스터 작업자당 최소 4개입니다.
    3. 풀의 각 노드에 대한 메모리 크기를 메비바이트(MiB) 단위로 입력합니다(사용자 클러스터 워커 노드당 최소 8,192MiB이며 4의 배수여야 함).
    4. 노드 필드에 풀의 노드 수를 입력합니다(최솟값 3). 네트워킹 섹션에서 노드 IP의 고정 IP 주소를 입력한 경우 이러한 사용자 클러스터 노드를 수용할 수 있는 충분한 IP 주소를 입력했는지 확인합니다.
    5. OS 이미지 유형(Ubuntu, Ubuntu Containerd, COS)을 선택합니다.
    6. 부팅 디스크 크기를 기비바이트(GiB) 단위(최소 40GiB)로 입력합니다.
    7. MetalLB를 부하 분산기로 사용하는 경우 하나 이상의 노드 풀에서 MetalLB를 사용 설정해야 합니다. MetalLB 부하 분산에 이 노드 풀 사용을 선택한 상태로 두거나 MetalLB에 사용할 다른 노드 풀을 추가합니다.
  2. 노드 풀 메타데이터(선택사항) 섹션에서 Kubernetes 라벨taint를 추가하려면 다음 안내를 따르세요.

    1. + Kubernetes 라벨 추가를 클릭합니다. 라벨의 을 입력합니다. 필요한 경우 반복합니다.
    2. + taint 추가를 클릭합니다. taint의 , , 효과를 입력합니다. 필요한 경우 반복합니다.
  3. 확인 및 완료를 클릭하여 사용자 클러스터를 만듭니다. 사용자 클러스터를 만드는 데 15분 이상 걸립니다. 콘솔은 설정을 확인하고 데이터 센터에 클러스터를 만들 때 상태 메시지를 표시합니다.

    설정 확인 중에 오류가 발생하면 콘솔에 오류 메시지가 표시됩니다. 오류 메시지는 구성 문제를 해결하고 클러스터를 만들려고 시도할 수 있도록 아주 명확해야 합니다.

    발생 가능한 오류와 해결 방법에 대한 자세한 내용은 Google Cloud 콘솔에서 사용자 클러스터 생성 문제 해결을 참조하세요.

gcloud CLI

다음 명령어를 사용하여 사용자 클러스터를 만듭니다.

gcloud container vmware clusters create

클러스터를 만든 후 다음 명령어를 사용하여 적어도 하나 이상의 노드 풀을 만들어야 합니다.

gcloud container vmware node-pools create

클러스터 및 노드 풀을 만들기 위한 대부분의 플래그는 사용자 클러스터 구성 파일의 필드에 해당합니다. 시작하는 데 도움을 얻기 위해 예시 섹션의 전체 명령어를 시도해볼 수 있습니다.

정보 수집

클러스터를 만드는 데 필요한 정보를 수집합니다.

  1. 관리자 클러스터의 이름과 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 플래그에 리전을 지정합니다.

  2. 사용 가능한 버전 목록을 가져옵니다.

    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

VERSIONquery-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

이 예시에서는 번들 MetalLB 부하 분산기와 DHCP 서버를 사용하여 사용자 클러스터를 만들어 클러스터 워커 노드의 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을 지정합니다.
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_ADDRESSANOTHER_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-ips1: 이 값을 True로 설정하면 MetalLB 컨트롤러가 .0 또는 .255로 끝나는 IP 주소를 서비스에 할당하지 않습니다. 이렇게 하면 버그가 있는 소비자 기기가 특수한 IP 주소로 전송된 트래픽을 실수로 차단하는 문제를 방지할 수 있습니다. 지정되지 않은 경우 기본값은 False입니다.
    • manual-assign: MetalLB 컨트롤러가 이 풀의 IP 주소를 서비스에 자동으로 할당하지 않도록 하려면 이를 True로 설정합니다. 그러면 개발자는 LoadBalancer 유형의 서비스를 만들고 풀에서 주소 중 하나를 수동으로 지정할 수 있습니다. 지정하지 않으면 manual-assignFalse로 설정됩니다.
    • 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_ADDRESSANOTHER_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-ips1: 이 값을 True로 설정하면 MetalLB 컨트롤러가 .0 또는 .255로 끝나는 IP 주소를 서비스에 할당하지 않습니다. 이렇게 하면 버그가 있는 소비자 기기가 특수한 IP 주소로 전송된 트래픽을 실수로 차단하는 문제를 방지할 수 있습니다. 지정되지 않은 경우 기본값은 False입니다.
    • manual-assign: MetalLB 컨트롤러가 이 풀의 IP 주소를 서비스에 자동으로 할당하지 않도록 하려면 이를 True로 설정합니다. 그러면 개발자는 LoadBalancer 유형의 서비스를 만들고 풀에서 주소 중 하나를 수동으로 지정할 수 있습니다. 지정하지 않으면 manual-assignFalse로 설정됩니다.
    • 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_ADDRESSANOTHER_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: 클러스터가 등록된 프로젝트의 ID

  • REGION: 클러스터를 만들 때 지정한 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

시작하기 전에

  1. 관리자 클러스터의 이름과 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 리전을 지정할 수 있습니다.

  2. 사용 가능한 버전 목록을 가져옵니다.

    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 주소를 가져오도록 클러스터 노드를 사용 설정하는 방법을 보여줍니다.

  1. anthos-samples 저장소를 클론하고 Terraform 샘플이 있는 디렉터리로 변경합니다.

    git clone https://github.com/GoogleCloudPlatform/anthos-samples
    cd anthos-samples/anthos-onprem-terraform/avmw_user_cluster_metallb
    
  2. terraform.tfvars.sample 파일의 사본을 만듭니다.

    cp terraform.tfvars.sample terraform.tfvars
    
  3. terraform.tfvars의 매개변수 값을 수정합니다.

    project_id                  = "FLEET_HOST_PROJECT_ID"
    region                      = "REGION"
    admin_cluster_name          = "ADMIN_CLUSTER_NAME"
    on_prem_version             = "VERSION"
    admin_user_emails           = ["YOUR_EMAIL_ADDRESS", "ADMIN_2_EMAIL_ADDRESS"]
    cluster_name                = "avmw-user-cluster-metallb"
    control_plane_node_cpus     = 4
    control_plane_node_memory   = 8192
    control_plane_node_replicas = 3
    control_plane_vip           = "CONTROL_PLANE_VIP"
    ingress_vip                 = "INGRESS_VIP"
    lb_address_pools            = [
        { name = "lbpool_1", addresses = ["10.200.0.51-10.200.0.70"] }
    ]
    

    아래 목록에서 변수를 설명합니다.

    • 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: 사용자 클러스터를 관리하는 관리자 클러스터의 이름 이 예시에서는 관리자 클러스터가 리전으로 전역을 사용한다고 가정합니다. 리전 관리자 클러스터가 있는 경우 다음 단계를 따르세요.

      1. 텍스트 편집기에서 main.tf를 엽니다.
      2. 다음과 같이 admin_cluster_membership을 검색합니다.
      admin_cluster_membership = "projects/${var.project_id}/locations/global/memberships/${var.admin_cluster_name}"
      1. 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 주소를 사용자 값으로 바꾸고 필요한 경우 주소 풀을 추가합니다.

  4. 변경사항을 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를 다음과 같이 변경합니다.

  1. 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"
            }
          }
        }
      }
    
  2. 다음을 사용자 값으로 바꿉니다.

    • 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 블록에서 netmaskgateway 값을 네트워크의 주소로 바꿉니다. iphostname을 워커 노드의 IP 주소와 호스트 이름으로 바꿉니다.

Controlplane V2 구성

기본적으로 main.tf는 관리자 클러스터(kubeception 모델이라고 부름)의 하나 이상의 노드에서 실행하도록 사용자 클러스터의 컨트롤 플레인을 구성합니다. 원하는 경우 Controlplane V2를 사용 설정할 수 있습니다. Controlplane V2가 사용 설정되었으면 사용자 클러스터의 컨트롤 플레인이 사용자 클러스터 자체의 하나 이상의 노드에서 실행됩니다. Controlplane V2를 구성하려면 main.tf를 다음과 같이 변경합니다.

  1. admin_cluster_membership이 있는 줄 뒤에 다음 줄을 추가합니다.

      enable_control_plane_v2 = "true"
    
  2. 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"
          }
        }
      }
    
  3. netmaskgateway의 값을 해당 네트워크의 IP 주소로 바꿉니다. iphostname를 해당 컨트롤 플레인 노드의 IP 주소로 바꿉니다.

클러스터 및 하나의 노드 풀 만들기

  1. Terraform 계획을 초기화하고 만듭니다.

    terraform init
    

    Terraform은 Google Cloud 제공업체와 같은 필요한 라이브러리를 설치합니다.

  2. 구성을 검토하고 필요한 경우 변경합니다.

    terraform plan
    
  3. Terraform 계획을 적용하여 사용자 클러스터를 만듭니다.

    terraform apply
    

    사용자 클러스터를 만드는 데 15분 이상 소요되고 노드 풀을 만드는 데 다시 15분 정도 소요됩니다. Google Cloud 콘솔의 GKE 클러스터 페이지에서 클러스터를 볼 수 있습니다.

문제 해결

클러스터 생성 및 업그레이드 문제 해결을 참조하세요.

다음 단계