관리자 클러스터 만들기

이 페이지에서는 Google Distributed Cloud의 관리자 클러스터를 만드는 방법을 보여줍니다. 관리자 클러스터는 워크로드를 실행하는 사용자 클러스터를 관리합니다. 토폴로지 도메인을 사용하려면 토폴로지 도메인과 함께 사용할 관리자 클러스터 만들기를 참고하세요.

이 페이지는 기술 인프라를 설정, 모니터링, 관리하는 관리자, 설계자, 운영자를 위해 작성되었습니다. Google Cloud 콘텐츠에서 참조하는 일반적인 역할 및 예시 태스크에 대해 자세히 알아보려면 일반 GKE 사용자 역할 및 태스크를 참조하세요.

관리자 클러스터에 대한 자세한 내용은 설치 개요를 참조하세요.

버전 1.33 이상에서는 모든 새 클러스터가 고급 클러스터로 생성됩니다. 고급 클러스터 실행 시 차이점을 검토하세요.

시작하기 전에

  • 관리자 워크스테이션 만들기에 설명된 대로 관리자 워크스테이션을 설정했고 로그인할 수 있는지 확인합니다.

  • 서비스 계정의 JSON 키 파일이 관리자 워크스테이션에 있는지 확인합니다.

  • IP 주소 계획 문서를 검토합니다. 3개의 컨트롤 플레인 노드 및 컨트롤 플레인 VIP에 사용할 수 있는 IP 주소가 충분한지 확인합니다. kubeception 사용자 클러스터를 만들려면 해당 사용자 클러스터의 제어 영역 노드에 사용할 수 있는 충분한 IP 주소가 있어야 합니다.

  • 부하 분산 개요를 검토하고 사용하려는 부하 분산기 종류에 대한 결정을 다시 확인합니다. 수동 부하 분산기의 경우 관리자 클러스터를 만들기 전에 부하 분산기를 설정해야 합니다.

  • gkectl를 사용하여 관리자 클러스터를 만드는 경우 Google Distributed Cloud 구성요소에 공개 또는 비공개 레지스트리를 사용할지 결정합니다. 비공개 Docker 레지스트리 사용에 관한 자세한 내용은 privateRegistry을 참고하세요. Terraform과 Google Cloud 콘솔 모두 시스템 구성요소에 비공개 Docker 레지스트리를 사용하는 것을 지원하지 않습니다.

  • 관리자 클러스터 노드에서 실행하려는 운영체제 유형을 결정합니다.

  • 조직에서 아웃바운드 트래픽이 프록시 서버를 통과해야 하는 경우 필수 API와 Artifact Registry 주소를 허용 목록에 추가해야 합니다.

  • 버전 1.29 이상에서는 서버 측 프리플라이트 검사가 기본적으로 사용 설정됩니다. 서버 측 프리플라이트 검사에는 추가 방화벽 규칙이 필요합니다. 관리자 클러스터의 방화벽 규칙에서 '프리플라이트 검사'를 검색하고 필요한 모든 방화벽 규칙이 구성되었는지 확인합니다. 서버 측 프리플라이트 검사는 관리자 워크스테이션에서 로컬로 실행되는 대신 부트스트랩 클러스터에서 실행됩니다.

원하는 도구로 관리자 클러스터 만들기

이 섹션에서는 gkectl, Terraform, Google Cloud 콘솔을 사용하여 관리자 클러스터를 만드는 단계를 설명합니다. 도구 선택에 도움이 되는 정보와 일부 도구의 제한사항은 클러스터 수명 주기 관리 도구 선택을 참고하세요.

gkectl

절차 개요

관리자 클러스터 만들기에 포함된 기본 단계는 다음과 같습니다.

  1. 구성 파일을 작성합니다.
    관리자 클러스터 구성 파일, 사용자 인증 정보 구성 파일, IP 블록 파일을 완료하고 검증하여 새 관리자의 세부정보를 지정합니다.
  2. OS 이미지를 vSphere로 가져오고 해당되는 경우 컨테이너 이미지를 비공개 레지스트리로 푸시합니다.
    gkectl prepare를 실행합니다.
  3. 관리자 클러스터를 만듭니다.
    gkectl을 사용하여 완료된 구성 파일에 지정된 대로 새 관리자 클러스터를 만듭니다. Google Distributed Cloud는 관리자 클러스터를 만들 때 Docker의 Kubernetes(kind) 클러스터를 배포하여 관리자 클러스터를 만드는 데 필요한 Kubernetes 컨트롤러를 일시적으로 호스팅합니다. 이러한 임시 클러스터를 부트스트랩 클러스터라고 합니다. 사용자 클러스터는 부트스트랩 클러스터를 사용하지 않고 관리 중인 관리자 클러스터를 통해 생성되고 업그레이드됩니다.
  4. 클러스터 관리자가 실행 중인지 확인합니다.
    kubectl을 사용하여 클러스터 노드를 확인합니다.

이 절차를 마치면 사용자 클러스터를 만들고 관리하는 데 사용할 수 있는 관리자 클러스터가 실행됩니다.

VPC 서비스 제어를 사용하는 경우 일부 gkectl 명령어를 실행할 때 "Validation Category: GCP - [UNKNOWN] GCP service: [Stackdriver] could not get GCP services" 같은 오류가 표시될 수 있습니다. 이러한 오류를 방지하려면 명령어에 --skip-validation-gcp 매개변수를 추가하세요.

구성 파일 작성

  • 관리자 워크스테이션에 필수 gkectl 버전이 설치되어 있는지 확인합니다. 일반적으로 클러스터를 만들 때 사용할 버전과 동일한 gkectl 버전을 사용합니다. 클러스터 버전은 클러스터 구성 파일의 gkeOnPremVersion 필드에 지정합니다. 클러스터를 생성할 때는 다음과 같은 버전 규칙이 적용됩니다.

    • gkectl의 마이너 버전은 클러스터의 마이너 버전보다 낮을 수 없습니다. 예를 들어 gkectl 버전 1.29를 사용하여 1.30 클러스터를 생성하는 것은 허용되지 않습니다. 패치 버전은 중요하지 않습니다. 예를 들어 gkectl 버전 1.29.0-gke.1456을 사용하여 패치 버전이 더 높은 1.29.1000-gke.94 클러스터를 생성할 수 있습니다.

    • gkectl 마이너 버전은 클러스터 버전보다 마이너 버전 3개 이상 높을 수 없습니다. 예를 들어 1.28 클러스터를 생성하는 경우 gkectl 버전은 1.29 또는 1.30일 수 있습니다. 하지만 gkectl 버전 1.31은 클러스터 버전보다 마이너 버전이 3개 높기 때문에 사용할 수 없습니다.

    필요한 경우 gkectl 다운로드를 참조하여 지원되는 gkectl 버전을 가져옵니다.

gkeadm을 사용하여 관리자 워크스테이션을 만든 경우 admin-cluster.yaml이라는 구성 파일이 생성됩니다.

gkeadm을 사용하여 관리자 워크스테이션을 만들지 않은 경우 다음 명령어를 관리자 워크스테이션에서 실행하여 admin-cluster.yaml을 생성합니다.

gkectl create-config admin

이 구성 파일은 관리자 클러스터를 만들기 위한 것입니다.

관리자 클러스터 구성 파일 문서를 살펴봐서 구성 파일을 숙지합니다. 다음 단계를 완료할 때 참조되므로 이 문서를 개별 탭 또는 창으로 열어 두는 것이 좋을 수 있습니다.

name

관리자 클러스터 이름을 지정하려면 name 필드를 입력합니다.

bundlePath

번들은 클러스터 구성요소가 포함된 Zip 파일입니다. 관리자 워크스테이션에 포함되어 있습니다. 이 필드는 이미 채워져 있습니다.

vCenter

이 섹션의 필드는 관리자 워크스테이션을 만들 때 입력한 값으로 이미 채워져 있습니다.

enableAdvancedCluster

버전 1.31에서 고급 클러스터 기능을 사용 설정하려면 enableAdvancedClustertrue로 설정합니다.

버전 간에는 다음과 같은 차이점이 있습니다.

  • 버전 1.31에서 고급 클러스터 기능은 미리보기로 제공됩니다.

    • 고급 클러스터 기능은 새로운 1.31 클러스터를 만들 때만 사용 설정할 수 있습니다.

    • 고급 클러스터를 한 번 사용 설정하면, 해당 클러스터는 1.32로 업그레이드할 수 없습니다. 고급 클러스터는 테스트 환경에서만 사용 설정하세요.

  • 버전 1.32에서는 고급 클러스터 기능이 정식 버전입니다.

    • 기본적으로 관리자 클러스터는 고급 클러스터로 생성됩니다. 고급 클러스터가 아닌 클러스터를 만들려면 enableAdvancedClusterfalse로 명시적으로 설정해야 합니다.

    • 고급 클러스터 기능이 사용 설정된 클러스터의 경우 클러스터 업그레이드가 지원됩니다.

  • 버전 1.33 이상에서는 모든 클러스터가 고급 클러스터로 생성됩니다. enableAdvancedClusterfalse로 설정하면 클러스터 만들기가 실패합니다.

network

network.controlPlaneIPBlock 섹션과 network.hostConfig 섹션을 입력합니다. 또한 adminMaster.replicas3으로 설정합니다.

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

필요에 따라 구성 파일의 네트워크 섹션에 있는 나머지 필드를 작성합니다.

loadBalancer

관리자 클러스터의 Kubernetes API 서버에 대해 VIP를 별도로 설정합니다. VIP를 loadBalancer.vips.controlPlaneVIP의 값으로 제공합니다.

자세한 내용은 관리자 클러스터 서브넷의 VIP를 참조하세요.

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

  • MetalLB 번들 부하 분산. loadBalancer.kind"MetalLB"로 설정합니다.

  • 수동 부하 분산. loadBalancer.kind"ManualLB"로 설정하고 manualLB 섹션을 삭제합니다.

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

antiAffinityGroups

필요에 따라 antiAffinityGroups.enabledtrue 또는 false로 설정합니다.

이 필드를 사용하여 Google Distributed Cloud가 관리자 클러스터 노드에 대해 VMware Distributed Resource Scheduler(DRS) 안티-어피니티 규칙을 만들어서 데이터 센터에서 최소 3개 이상의 물리적 호스트에 이를 분산하도록 지정합니다.

adminMaster

관리자 클러스터의 제어 영역 노드에 CPU와 메모리를 지정하려면 adminMaster 섹션에서 cpusmemoryMB 필드를 입력합니다.

관리자 클러스터에는 컨트롤 플레인 노드가 3개 있어야 합니다. adminMaster 섹션의 replicas 필드를 3로 설정합니다.

proxy

관리자 클러스터 노드를 포함할 네트워크가 프록시 서버 뒤에 있는 경우 proxy 섹션을 입력합니다.

privateRegistry

Google Distributed Cloud 구성요소의 컨테이너 이미지를 보관할 위치를 결정합니다. 옵션은 다음과 같습니다.

  • Artifact Registry

  • 자체 비공개 Docker 레지스트리입니다.

    자체 비공개 레지스트리를 사용하려면 privateRegistry 섹션을 입력합니다.

일반 클러스터와 고급 클러스터의 차이점을 비롯해 비공개 레지스트리 사용에 대한 자세한 내용은 비공개 컨테이너 레지스트리 구성을 참고하세요.

componentAccessServiceAccountKeyPath

Google Distributed Cloud는 구성요소 액세스 서비스 계정을 사용하여 Artifact Registry에서 클러스터 구성요소를 다운로드합니다. 이 필드에는 구성요소 액세스 서비스 계정에 대한 JSON 키 파일의 경로가 포함되어 있습니다.

이 필드는 이미 채워져 있습니다.

gkeConnect

gkeConnect 섹션을 입력하여 Google Cloud Fleet에 관리자 클러스터를 등록합니다. 구성 파일에 stackdrivercloudAuditLogging 섹션을 포함하는 경우 gkeConnect.projectID의 ID는 stackdriver.projectIDcloudAuditLogging.projectID에 설정된 ID와 동일해야 합니다. 프로젝트 ID가 동일하지 않으면 클러스터 생성에 실패합니다.

1.28 이상에서는 원하는 경우 Fleet 및 Connect 서비스가 gkeConnect.location에서 실행되는 리전을 지정할 수 있습니다. 이 필드를 포함하지 않으면 클러스터는 이러한 서비스의 전역 인스턴스를 사용합니다.

gkeConnect.location을 포함하는 경우 지정하는 리전은 cloudAuditLogging.clusterLocation, stackdriver.clusterLocation, gkeOnPremAPI.location에서 구성된 리전과 동일해야 합니다. 리전이 동일하지 않으면 클러스터 생성에 실패합니다.

gkeOnPremAPI

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의 서비스 이름)을 중지합니다. 자세한 내용은 서비스 사용 중지를 참조하세요.

stackdriver

클러스터에 Cloud Logging 및 Cloud Monitoring을 사용 설정하려면 stackdriver 섹션을 입력합니다.

이 섹션은 기본적으로 필요합니다. 즉, 이 섹션을 입력하지 않으면 gkectl create admin을 실행할 때 --skip-validation-stackdriver 플래그를 포함해야 합니다.

다음 요구사항을 참고하세요.

  • 고급 클러스터를 사용 설정하는 경우 cloudAuditLogging.serviceAccountKeyPathstackdriver.serviceAccountKeyPath에서 동일한 경로를 지정해야 합니다.

  • stackdriver.projectID의 ID는 gkeConnect.projectIDcloudAuditLogging.projectID의 ID와 동일해야 합니다.

  • stackdriver.clusterLocation에 설정된 Google Cloud 리전은 cloudAuditLogging.clusterLocationgkeConnect.location에 설정된 리전과 동일해야 합니다. 또한 gkeOnPremAPI.enabledtrue로 설정된 경우에는 gkeOnPremAPI.location에도 동일한 리전을 설정해야 합니다.

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

cloudAuditLogging

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

다음 요구사항을 참고하세요.

  • 고급 클러스터를 사용 설정하는 경우 cloudAuditLogging.serviceAccountKeyPathstackdriver.serviceAccountKeyPath에 동일한 경로를 지정해야 합니다.

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

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

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

clusterBackup

관리자 클러스터 백업을 사용 설정하려면 clusterBackup.datastore를 클러스터 백업을 저장할 vSphere Datastore로 설정합니다.

고급 클러스터를 사용 설정하는 경우 이 섹션을 삭제합니다. 관리자 클러스터를 vSphere Datastore에 백업하는 것은 지원되지 않습니다.

autoRepair

관리자 클러스터에 대해 자동 노드 복구를 사용 설정하려면 autoRepair.enabledtrue로 설정합니다.

secretsEncryption

상시 보안 비밀 암호화를 사용 설정하려면 secretsEncryption 섹션을 입력합니다.

고급 클러스터를 사용 설정하는 경우 secretsEncryption.enabledfalse로 설정합니다. 상시 보안 비밀 암호화는 지원되지 않습니다.

osImageType

관리자 클러스터 노드에 사용하려는 OS 이미지 유형을 결정하고 그에 따라 osImageType 섹션을 입력합니다.

고급 클러스터를 사용 설정하는 경우 osImageTypeubuntu_cgroupv2 또는 ubuntu_containerd로 설정합니다.

작성된 구성 파일 예시

다음은 작성된 관리자 클러스터 구성 파일의 예시입니다. 이 구성에 따라 전부는 아니더라도 사용 가능한 기능 중 일부가 사용 설정됩니다.

vc-01-admin-cluster.yaml

apiVersion: v1
kind: AdminCluster
name: "gke-admin-01"
bundlePath: "/var/lib/gke/bundles/gke-onprem-vsphere-1.28.0-gke.1-full.tgz"
vCenter:
  address: "vc01.example"
  datacenter: "vc-01"
  cluster: "vc01-workloads-1"
  resourcePool: "vc-01-pool-1"
  datastore: "vc01-datastore-1"
  caCertPath: "/usr/local/google/home/me/certs/vc01-cert.pem""
  credentials:
    fileRef:
      path: "credential.yaml"
      entry: "vCenter"
network:
  hostConfig:
    dnsServers:
    - "203.0.113.1"
    - "198.51.100.1"
    ntpServers:
    - "216.239.35.4"
  serviceCIDR: "10.96.232.0/24"
  podCIDR: "192.168.0.0/16"
  vCenter:
    networkName: "vc01-net-1"
  controlPlaneIPBlock:
    netmask: "255.255.248.0"
    gateway: "21.0.143.254"
    ips:
    - ip: "21.0.140.226"
      hostname: "admin-cp-vm-1"
    - ip: "21.0.141.48"
      hostname: "admin-cp-vm-2"
    - ip: "21.0.141.65"
      hostname: "admin-cp-vm-3"
loadBalancer:
  vips:
    controlPlaneVIP: "172.16.20.59"
  kind: "MetalLB"
antiAffinityGroups:
  enabled: true
adminMaster:
  cpus: 4
  memoryMB: 16384
  replicas: 3
componentAccessServiceAccountKeyPath: "sa-key.json"
gkeConnect:
  projectID: "my-project-123"
  registerServiceAccountKeyPath: "connect-register-sa-2203040617.json"
stackdriver:
  projectID: "my-project-123"
  clusterLocation: "us-central1"
  enableVPC: false
  serviceAccountKeyPath: "log-mon-sa-2203040617.json"
  disableVsphereResourceMetrics: false
clusterBackup:
  datastore: "vc-01-datastore-bu"
autoRepair:
  enabled: true
osImageType: "ubuntu_containerd"

구성 파일 유효성 검사

관리자 클러스터 구성 파일을 입력한 후 gkectl check-config를 실행하여 파일이 유효한지 확인합니다.

gkectl check-config --config ADMIN_CLUSTER_CONFIG

ADMIN_CLUSTER_CONFIG를 관리자 클러스터 구성 파일의 경로로 바꿉니다.

명령어가 실패 메시지를 반환하면 문제를 해결하고 파일을 다시 검사합니다.

시간이 오래 걸리는 검사를 건너뛰려면 --fast 플래그를 전달합니다. 개별 검사를 건너뛰려면 --skip-validation-xxx 플래그를 사용합니다. check-config 명령어에 대해 자세히 알아보려면 실행 전 검사 실행을 참조하세요.

OS 이미지 가져오기

gkectl prepare를 실행하여 vSphere 환경을 초기화합니다.

gkectl prepare --config ADMIN_CLUSTER_CONFIG

gkectl prepare 명령어는 다음 준비 태스크를 수행합니다.

  • OS 이미지를 vSphere로 가져오고 VM 템플릿으로 표시합니다.

  • 비공개 Docker 레지스트리를 사용하는 경우 컨테이너 이미지를 레지스트리에 푸시합니다.

  • 선택적으로 컨테이너 이미지의 빌드 증명을 검사하여 이미지가 빌드되었고, Google에서 서명되었으며, 배포에 사용할 준비가 되었는지 확인합니다.

관리자 클러스터 만들기

관리자 클러스터를 만듭니다.

gkectl create admin --config ADMIN_CLUSTER_CONFIG

VPC 서비스 제어를 사용하는 경우 일부 gkectl 명령어를 실행할 때 "Validation Category: GCP - [UNKNOWN] GCP service: [Stackdriver] could not get GCP services" 같은 오류가 표시될 수 있습니다. 이러한 오류를 방지하려면 명령어에 --skip-validation-gcp 매개변수를 추가하세요.

실패 후 관리자 클러스터 만들기 재개

관리자 클러스터 만들기가 실패하거나 취소된 경우 create 명령어를 다시 실행할 수 있습니다.

gkectl create admin --config ADMIN_CLUSTER_CONFIG

관리자 클러스터 kubeconfig 파일 찾기

gkectl create admin 명령어는 현재 디렉터리에 kubeconfig라는 kubeconfig 파일을 만듭니다. 나중에 관리자 클러스터와 상호작용하려면 이 kubeconfig 파일이 필요합니다.

kubeconfig 파일에는 관리자 클러스터의 이름이 포함되어 있습니다. 클러스터 이름을 보려면 다음을 실행합니다.

kubectl config get-clusters --kubeconfig ADMIN_CLUSTER_KUBECONFIG

출력에 클러스터의 이름이 표시됩니다. 예를 들면 다음과 같습니다.

NAME
gke-admin-tqk8x

원하는 경우 kubeconfig 파일의 이름과 위치를 변경할 수 있습니다.

checkpoint.yaml 파일 관리

이 섹션은 HA가 아닌 관리자 클러스터에만 적용됩니다. checkpoint.yaml 파일은 HA 관리자 클러스터 생성에 사용되지 않습니다.

관리자 클러스터를 만들기 위해 gkectl create admin 명령어를 실행할 때 관리자 클러스터 데이터 디스크와 동일한 Datastore 폴더에 체크포인트 파일이 생성되었습니다. 기본적으로 이 파일은 이름이 DATA_DISK_NAME‑checkpoint.yaml입니다. DATA_DISK_NAME 길이가 245자 이상이면 vSphere의 파일 이름 제한으로 인해 이름이 DATA_DISK_NAME.yaml입니다.

이 파일에는 관리자 클러스터 상태 및 사용자 인증 정보가 포함되며, 이후 업그레이드를 위해 사용됩니다. 관리자 클러스터 삭제 프로세스를 수행하는 경우가 아니라면 이 파일을 삭제하지 마세요.

vCenter Server 인스턴스에 VM 암호화를 사용 설정한 경우 관리자 클러스터를 만들거나 업그레이드하기 전에 Cryptographic operations.Direct Access 권한이 있어야 합니다. 그렇지 않으면 체크포인트가 업로드되지 않습니다. 이 권한을 얻을 수 없으면 관련 명령어를 실행할 때 숨겨진 플래그 --disable-checkpoint를 사용하여 체크포인트 파일 업로드를 사용 중지할 수 있습니다.

checkpoint.yaml 파일은 gkectl upgrade admin 명령어를 실행할 때 또는 관리자 클러스터에 영향을 주는 gkectl update 명령어를 실행할 때 자동으로 업데이트됩니다.

관리자 클러스터 실행 여부 확인

클러스터가 실행 중인지 확인합니다.

kubectl get nodes --kubeconfig ADMIN_CLUSTER_KUBECONFIG

ADMIN_CLUSTER_KUBECONFIG를 관리자 클러스터 kubeconfig 파일의 경로로 바꿉니다.

출력에 관리자 클러스터 노드가 표시됩니다. 예를 들면 다음과 같습니다.

admin-cp-vm-1   Ready    control-plane,master   ...
admin-cp-vm-2   Ready    control-plane,master   ...
admin-cp-vm-3   Ready    control-plane,master   ...

파일 백업

관리자 클러스터 kubeconfig 파일을 백업하는 것이 좋습니다. 즉, kubeconfig 파일을 관리자 워크스테이션에서 다른 위치로 복사합니다. 그러면 관리자 워크스테이션에 대한 액세스 권한을 상실하거나 관리자 워크스테이션의 kubeconfig 파일이 실수로 삭제된 경우에도 관리자 클러스터에 액세스할 수 있습니다.

또한 관리자 클러스터의 비공개 SSH 키를 백업하는 것이 좋습니다. 그러면 관리자 클러스터에 대한 액세스 권한을 상실한 경우에도 SSH를 사용하여 관리자 클러스터 노드에 연결할 수 있습니다. 이렇게 하면 관리자 클러스터 연결과 관련된 문제를 해결하고 조사할 수 있습니다.

관리자 클러스터에서 admin-cluster-ssh-key라는 파일로 SSH 키를 추출합니다.

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get secrets -n kube-system sshkeys \
    -o jsonpath='{.data.vsphere_tmp}' | base64 -d > admin-cluster-ssh-key

이제 admin-cluster-ssh-key를 원하는 다른 위치에 백업할 수 있습니다.

RBAC 정책

관리자 클러스터 구성 파일의 gkeConnect 섹션을 입력하면 클러스터가 만들기 또는 업데이트 중에 Fleet에 등록됩니다. Fleet 관리 기능을 사용 설정하도록 Google Cloud Connect 에이전트를 배포하고 클러스터가 등록된 프로젝트를 나타내는 Google 서비스 계정을 만듭니다. Connect 에이전트는 클러스터의 Kubernetes API 서버에 대한 요청이 처리되도록 서비스 계정과의 연결을 설정합니다. 이렇게 하면 클러스터와 상호작용할 수 있는 Google Cloud 콘솔에 대한 액세스를 포함하여 Google Cloud의 클러스터 및 워크로드 관리 기능에 액세스할 수 있습니다.

관리자 클러스터의 Kubernetes API 서버에서 Connect 에이전트의 요청을 승인할 수 있어야 합니다. 이를 위해 다음 역할 기반 액세스 제어(RBAC) 정책이 서비스 계정에 구성됩니다.

  • Connect 에이전트가 서비스 계정을 대신하여 Kubernetes API 서버에 요청을 보낼 수 있도록 승인하는 명의 도용 정책입니다.

  • 다른 Kubernetes 리소스에서 허용되는 작업을 지정하는 권한 정책입니다.

Google Cloud 콘솔에서 사용자 클러스터의 수명 주기를 관리할 수 있도록 서비스 계정과 RBAC 정책이 필요합니다.

Terraform

절차 개요

관리자 클러스터를 만들려면 먼저 관리자 워크스테이션에서 gkectl register bootstrap 명령어를 실행해야 합니다. 이 명령어는 관리자 워크스테이션에 Docker의 Kubernetes(kind) 클러스터를 배포합니다. 이 부트스트랩 클러스터는 관리자 클러스터를 만드는 데 필요한 Kubernetes 컨트롤러를 호스팅합니다. 관리자 클러스터를 만들면 부트스트랩 클러스터의 컨트롤러가 노드를 프로비저닝하고, 프리플라이트 검사를 실행하고 Fleet에 관리자 클러스터를 등록합니다. 관리자 클러스터가 성공적으로 생성된 후 부트스트랩 클러스터가 자동으로 삭제됩니다.

Terraform을 사용하여 관리자 클러스터를 만드는 대략적인 단계는 다음과 같습니다.

  1. 구성 파일을 작성합니다.
    google_gkeonprem_vmware_admin_cluster 리소스와 다음 예시를 사용하여 main.tf 구성 파일을 만듭니다.
  2. bootstrap 클러스터를 만듭니다.
    gkectl register bootstrap을 실행하여 부트스트랩 클러스터를 만듭니다. 명령어가 부트스트랩 클러스터 생성을 완료하면 출력에 관리자 클러스터 구성을 완료하라는 메시지가 표시됩니다. 이 프로세스는 관리자 클러스터가 생성될 때까지 계속 실행됩니다.
  3. 관리자 클러스터를 만듭니다.
    다른 터미널 창이나 GKE On-Prem API에 액세스할 수 있는 다른 컴퓨터에서 terraform 명령어를 실행하여 완료된 main.tf 구성 파일에 지정된 대로 새 관리자 클러스터를 만듭니다.

구성 파일 작성

다음 예시에서는 MetalLB를 사용하여 컨트롤 플레인 노드가 3개인 고가용성 (HA) 관리자 클러스터를 만드는 방법을 보여줍니다. 1.28 이상에서는 새 관리자 클러스터가 고가용성이어야 합니다. 이 요구사항으로 인해 control_plane_node.replicas를 3으로 설정해야 합니다.

자세한 내용과 다른 예시는 google_gkeonprem_vmware_admin_cluster 참고 문서를 확인하세요. 시스템 이미지에 비공개 레지스트리를 사용하는 방법에 대한 자세한 내용은 비공개 컨테이너 레지스트리 구성을 참고하세요.

다음 예시에서 자리표시자 변수를 입력한 후 main.tf에 복사하여 붙여넣습니다. gkeadm을 사용하여 관리자 워크스테이션을 만든 경우 관리자 워크스테이션 구성 파일을 열어 vCenter 섹션의 값을 해당 자리표시자 변수에 복사할 수 있습니다.

resource "google_gkeonprem_vmware_admin_cluster" "admin-cluster-metallb" {
  provider = google-beta
  name = "ADMIN_CLUSTER_NAME"
  project = "PROJECT_ID"
  location = "REGION"
  description = "DESCRIPTION"
  bootstrap_cluster_membership = "projects/PROJECT_ID/locations/REGION/memberships/bootstrap-ADMIN_CLUSTER_NAME"
  on_prem_version = "VERSION"
  image_type = "IMAGE_TYPE"
  vcenter {
    address = "VCENTER_ADDRESS"
    datacenter = "DATA_CENTER"
    cluster = "VCENTER_CLUSTER"
    resource_pool = "RESOURCE_POOL"
    datastore = "DATASTORE"
    ca_cert_data = "CA_CERT_DATA"
  }
  network_config {
    service_address_cidr_blocks = ["10.96.232.0/24"]
    pod_address_cidr_blocks = ["192.168.0.0/16"]
    vcenter_network = "NETWORK"
    dhcp_ip_config {
      enabled = true
    }
    host_config {
      dns_servers = ["DNS_SERVERS"]
      ntp_servers = ["NTP_SERVERS"]
    }
    ha_control_plane_config {
      control_plane_ip_block {
        gateway = "GATEWAY"
        netmask = "NETMASK"
        ips {
          hostname = "CONTROL_PLANE_HOST_1"
          ip       = "CONTROL_PLANE_NODE_IP_1"
        }
        ips {
          hostname = "CONTROL_PLANE_HOST_2"
          ip       = "CONTROL_PLANE_NODE_IP_2"
        }
        ips {
          hostname = "CONTROL_PLANE_HOST_3"
          ip       = "CONTROL_PLANE_NODE_IP_3"
        }
      }
    }
  }
  control_plane_node {
     cpus = NUM_CPUS
     memory = MEMORY
     replicas = 3
  }
  load_balancer {
    vip_config {
      control_plane_vip = "CONTROL_PLANE_VIP"
    }
    metal_lb_config {
      enabled = true
    }
  }
}

다음을 바꿉니다.

  • ADMIN_CLUSTER_NAME: 관리자 클러스터 이름입니다. 이름의 최대 길이는 20자(영문 기준)입니다.

  • PROJECT_ID: Google Cloud 프로젝트 ID

  • REGION: GKE On-Prem API (gkeonprem.googleapis.com), Fleet 서비스(gkehub.googleapis.com), Connect 서비스(gkeconnect.googleapis.com)가 실행되는 Google Cloud 리전입니다. us-west1 또는 다른 지원되는 리전을 지정합니다.

    location 필드는 gkectl register bootstrap 명령어의 --location 플래그에 해당합니다.

  • DESCRIPTION: 관리자 클러스터에 대한 설명입니다.

  • VERSION: 클러스터의 Google Distributed Cloud 버전입니다. Terraform을 사용한 클러스터 생성은 버전 1.28 이상에서만 지원됩니다. 여기에 지정하는 버전은 gkectl register bootstrap 명령어의 --bundle-path 플래그에 지정하는 번들 버전과 일치해야 합니다. 버전 목록은 Google Distributed Cloud 버전을 참고하세요.

  • IMAGE_TYPE: 관리자 클러스터 노드에서 실행할 OS 이미지 유형입니다. 'ubuntu_containerd', 'cos', 'ubuntu_cgv2' 또는 'cos_cgv2' 중 하나를 지정합니다.

  • VCENTER_ADDRESS: vCenter Server 주소입니다.

    • 관리자 워크스테이션 구성 파일: vCenter.credentials.address 필드의 값을 사용합니다.

    • vcenter.address 필드는 gkectl register bootstrap 명령어의 --vcenter-address 플래그에 해당합니다.

  • DATA_CENTER: vCenter 데이터 센터의 이름입니다.

    • 관리자 워크스테이션 구성 파일: vCenter.datacenter 필드의 값을 사용합니다.

    • vcenter.datacenter 필드는 gkectl register bootstrap 명령어의 --vcenter-datacenter 플래그에 해당합니다.

  • VCENTER_CLUSTER: vCenter 클러스터의 이름입니다.

    • 관리자 워크스테이션 구성 파일: vCenter.cluster 필드의 값을 사용합니다.

    • vcenter.cluster 필드는 gkectl register bootstrap 명령어의 --vcenter-cluster 플래그에 해당합니다.

  • RESOURCE_POOL: vCenter 리소스 풀의 이름 또는 경로입니다.

    • 관리자 워크스테이션 구성 파일: vCenter.resourcePool 필드의 값을 사용합니다.

    • vcenter.resource_pool 필드는 gkectl register bootstrap 명령어의 --vcenter-resource-pool 플래그에 해당합니다.

  • DATASTORE: vCenter 데이터 저장소의 이름입니다. 지정하는 값은 경로가 아닌 이름이어야 합니다. 경로를 입력해야 하는 경우 folder = "FOLDER" 필드를 추가합니다.

    • 관리자 워크스테이션 구성 파일: vCenter.datastore 필드의 값을 사용합니다.

    • vcenter.datastore 필드는 gkectl register bootstrap 명령어의 --vcenter-datastore 플래그에 해당합니다.

    클러스터 노드에 VM 스토리지 정책을 사용하려면 vcenter.datastore 필드를 삭제하고 대신 vcenter.storage_policy_name를 추가합니다. 또한 gkectl register bootstrap 명령어에 --vcenter-storage-policy 플래그를 추가합니다. vcenter.datastore 또는 vcenter.storage_policy_name 중 하나의 값을 지정해야 하며, 둘 다 지정할 수는 없습니다.

  • FOLDER: 클러스터 VM이 위치하게 될 vCenter 폴더의 이름입니다. 폴더를 사용하지 않는 경우 이 필드를 삭제합니다.

    • 관리자 워크스테이션 구성 파일: vCenter.folder 필드의 값을 사용합니다.

    • vcenter.folder 필드는 gkectl register bootstrap 명령어의 --vcenter-folder 플래그에 해당합니다.

  • CA_CERT_DATA: PEM 형식으로 vCenter CA 인증서를 입력합니다. CA 인증서 데이터를 가져오려면 다음 단계를 따르세요.

    1. 다음 명령어를 실행합니다.

      cat CA_CERT_PATH_LOCAL |  tr '\n' '\\n'
      

      CA_CERT_PATH_LOCAL를 vCenter Server의 루트 CA 인증서 경로로 바꿉니다. gkeadm을 사용하여 관리자 워크스테이션을 만든 경우 관리자 워크스테이션 구성 파일의 caCertPath 필드에 있는 값(로컬 컴퓨터의 경로)을 사용할 수 있습니다. gkeadm CA 인증서 파일을 관리 워크스테이션에 복사했습니다. gkectl register bootstrap 명령어의 --vcenter-ca-cert-path 플래그에 관리자 워크스테이션 경로를 지정해야 합니다.

    2. 이전 명령어에서 출력된 인증서를 복사하여 텍스트 편집기에 붙여넣습니다. 백슬래시 문자(\)의 모든 인스턴스를 줄바꿈 문자 (\n)로 바꿉니다.

    3. 수정된 인증서를 복사하여 CA_CERT_DATA 자리표시자 변수에 붙여넣습니다.

  • NETWORK: vCenter 네트워크의 이름을 입력합니다.

    • 관리자 워크스테이션 구성 파일: vCenter.network 필드의 값을 사용합니다.

    • network_config.vcenter_network 필드는 gkectl register bootstrap 명령어의 --vcenter-network 플래그에 해당합니다.

  • GATEWAY: 컨트롤 플레인 클러스터 노드가 있는 서브넷의 기본 게이트웨이 IP 주소입니다.

  • NETMASK: 컨트롤 플레인 클러스터 노드가 있는 서브넷의 넷마스크입니다.

  • DNS_SERVERS: DNS 서버의 IP 주소입니다.

  • NTP_SERVERS: 시간 (NTP) 서버의 IP 주소입니다.

  • control_plane_ip_block.ips 섹션에 3개의 컨트롤 플레인 노드의 IP 주소와 호스트 이름(선택사항)을 입력합니다. 호스트 이름을 입력하지 않으면 구성에서 hostname 필드를 삭제합니다.

  • NUM_CPUS : 관리자 클러스터의 각 컨트롤 플레인 노드에 대한 vCPU 수입니다. 최소 4개여야 합니다.

  • MEMORY: 관리자 클러스터의 각 컨트롤 플레인 노드에 대한 메모리 용량(메비바이트)입니다. 최소 8192여야 하지만 16384를 권장합니다.

  • CONTROL_PLANE_VIP: 관리자 클러스터의 Kubernetes API 서버에 대해 부하 분산기에서 구성하도록 선택한 IP 주소입니다.

선택사항: 비공개 레지스트리 구성

기본적으로 클러스터를 만들거나 업그레이드하는 중에 Google Distributed Cloud는 구성요소 액세스 서비스 계정을 사용하여 gcr.io/gke-on-prem-release에서 시스템 이미지를 가져옵니다. 원하는 경우 자체 컨테이너 레지스트리 서버를 제공하여 대신 비공개 레지스트리 서버에서 시스템 이미지를 가져오도록 할 수 있습니다.

비공개 레지스트리를 구성하려면 다음 단계를 따르세요.

  1. 구성 파일에 다음을 추가합니다.

      private_registry_config {
        address = "ADDRESS"
        ca_cert = "CA_CERT"
      }
    

    다음을 바꿉니다.

    • ADDRESS: 비공개 레지스트리를 실행하는 머신의 IP 주소 또는 FQDN (정규화된 도메인 이름)입니다.

    • CA_CERT: 비공개 레지스트리의 CA 인증서 공개 키입니다.

  2. 네트워크가 프록시 서버 뒤에 있는 경우 구성 파일에 다음을 추가합니다.

    proxy {
      url: "PROXY_SERVER_ADDRESS"
      no_proxy: "BYPASS_LIST"
    }
    

    다음을 바꿉니다.

    • PROXY_SERVER_ADDRESS: 프록시 서버의 HTTP 주소입니다. 포트 번호가 스키마의 기본 포트와 동일하더라도 포함합니다.

    • BYPASS_LIST: 프록시 서버를 거치지 않아야 하는 IP 주소, IP 주소 범위, 호스트 이름, 도메인 이름의 쉼표로 구분된 목록입니다.

    예:

    url: "http://my-proxy.example.local:80"
    no_proxy: "192.0.2.0/24,my-host.example.local,198.51.100.0"
    

    Google Distributed Cloud가 이러한 주소, 호스트 또는 도메인 중 하나에 요청을 보내면 요청은 프록시 서버를 우회하고 대상으로 직접 전송됩니다.

일반 클러스터와 고급 클러스터의 차이점을 비롯해 비공개 레지스트리 사용에 대한 자세한 내용은 비공개 컨테이너 레지스트리 구성을 참고하세요.

구성 파일 및 계획 확인

main.tf가 있는 디렉터리에서 다음 명령어를 실행합니다.

  1. Terraform을 초기화합니다.

    terraform init
    

    Terraform은 Google Cloud 제공업체와 같은 필요한 라이브러리를 설치합니다. 필요한 경우 maint.tf의 오류를 수정합니다.

  2. Terraform 계획을 만듭니다.

    terraform plan -out tfplan
    

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

계획을 적용하기 전에 다음 섹션에 설명된 대로 부트스트랩 클러스터를 먼저 만들어야 합니다.

부트스트랩 클러스터 만들기

gkectl register bootstrap 명령어를 실행하면 vCenter 계정 사용자 이름과 비밀번호를 묻는 메시지가 표시됩니다. 사용 가능한 사용자 인증 정보가 있는지 확인합니다. gkeadm을 사용하여 관리자 워크스테이션을 만든 경우 사용자 이름과 비밀번호는 credential.yaml 파일에 있습니다.

  1. SSH를 사용하여 관리자 워크스테이션에 로그인합니다.

  2. Google Cloud CLI로 인증합니다.

    gcloud auth login
    
  3. 다음 명령어를 실행하여 부트스트랩 클러스터를 만듭니다. 플래그 값 중 다수는 main.tf 필드와 동일합니다. 하지만 명령어는 제공된 자리표시자 변수에 지정해야 하는 추가 값을 사용합니다.

    gkectl register bootstrap \
        --target-cluster-name=ADMIN_CLUSTER_NAME \
        --project-id=PROJECT_ID \
        --location=REGION \
        --vcenter-address=VCENTER_ADDRESS \
        --vcenter-datacenter=DATA_CENTER \
        --vcenter-cluster=VCENTER_CLUSTER \
        --vcenter-resource-pool=RESOURCE_POOL \
        --vcenter-datastore=DATASTORE \
        --vcenter-network=NETWORK \
        --vcenter-ca-cert-path=CA_CERT_PATH \
        --bundle-path=BUNDLE_PATH \
        --component-access-service-account-key-path=COMPONENT_ACCESS_SA_PATH \
        --register-service-account-key-path=CONNECT_REGISTER_SA_PATH \
        --stackdriver-service-account-key-path=LOG_MON_SA_PATH \
        --cloud-audit-logging-service-account-key-path=CLOUD_AUDIT_SA_PATH
    

    다음을 관리자 워크스테이션 경로로 바꿉니다.

    • CA_CERT_PATH: vCenter Server의 루트 CA 인증서 경로입니다.
    • BUNDLE_PATH: 번들 파일의 경로입니다. gkeadm을 사용하여 관리자 워크스테이션을 만든 경우 번들 파일은 /var/lib/gke/bundles/에 있습니다. 파일 이름은 Google Distributed Cloud 버전에 따라 다릅니다(예: gke-onprem-vsphere-1.31.0-gke.889-full.tgz).
    • COMPONENT_ACCESS_SA_PATH: 구성요소 액세스 서비스 계정의 키 파일 경로입니다.
    • CONNECT_REGISTER_SA_PATH: connect-register 서비스 계정의 키 파일 경로입니다.
    • LOG_MON_SA_PATH: 로깅-모니터링 서비스 계정의 키 파일 경로입니다.
    • CLOUD_AUDIT_SA_PATH: 감사 로깅 서비스 계정의 경로입니다. 감사 로깅 서비스 계정을 만들지 않은 경우 로깅-모니터링 서비스 계정의 키 파일 경로를 지정합니다.

    다음 플래그에 맞게 명령어를 수정합니다.

    • main.tf에서 폴더를 지정한 경우 다음 플래그를 추가합니다. --vcenter-folder=FOLDER
    • main.tf에서 VM 스토리지 정책을 지정한 경우 --vcenter-datastore를 삭제하고 다음 플래그를 추가합니다. --vcenter-storage-policy-name=STORAGE_POLICY_NAME
    • 관리자 워크스테이션이 프록시 서버 뒤에 있는 네트워크에 있는 경우 다음 플래그를 추가합니다.

      • --proxy-url=PROXY_URL
      • --no-proxy=NO_PROXY

      다음을 바꿉니다.

      • PROXY_URL: 프록시 서버의 URL입니다.
      • NO_PROXY: 프록시에서 제외된 도메인 및 IP 주소의 값(쉼표로 구분)입니다.

    플래그를 추가하는 경우 명령줄 연속 백슬래시 문자 (\)를 추가해야 합니다.

  4. 메시지가 표시되면 vCenter 사용자 이름을 입력하거나 복사하여 붙여넣습니다. 사용자 이름이 화면에 다시 표시되지 않습니다.

  5. 메시지가 표시되면 vCenter 비밀번호를 입력하거나 복사하여 붙여넣습니다. 비밀번호가 화면에 다시 표시되지 않습니다.

이 명령어는 여러 유효성 검사를 실행합니다. gkectl이 부트스트랩 클러스터를 성공적으로 만들면 다음과 비슷한 출력이 표시되며 가독성을 위해 잘립니다.

Running workstation validations
- Validation Category: Workstation
    - [SUCCESS] Workstation OS
    - [SUCCESS] Workstation Hardware
    - [SUCCESS] Workstation Package
    - [SUCCESS] Workstation NTP
    - [SUCCESS] Workstation Docker
...
All validation results were SUCCESS.
Unpacking GKE on-prem bundle: /var/lib/gke/bundles/gke-onprem-vsphere-1.31.0-gke.889-full.tgz
...
Successfully created and registered the bootstrap cluster
...
Waiting for preflight checks to run or OnPremAdminCluster to be applied...... -

이 프로세스는 관리자 클러스터가 생성될 때까지 계속 실행됩니다.

관리자 클러스터를 만들기 전에 gkectl register bootstrap 명령어를 종료하면 관리자 클러스터 만들기가 실패하며 다음 명령어를 사용하여 부트스트랩 클러스터를 삭제해야 합니다.

gkectl delete bootstrap \
    --target-cluster-name=ADMIN_CLUSTER_NAME \
    --project-id=PROJECT_ID \
    --location=REGION \
     --register-service-account-key-path=CONNECT_REGISTER_SA_PATH

관리자 클러스터 만들기

Terraform 계획을 적용하여 관리자 클러스터를 만듭니다.

terraform apply "tfplan"

관리자 클러스터를 만드는 데 15분 이상 걸립니다. Google Cloud 콘솔의 GKE 클러스터 페이지에서 클러스터를 볼 수 있습니다.

콘솔

절차 개요

관리자 클러스터를 만들려면 먼저 관리자 워크스테이션에서 gkectl register bootstrap 명령어를 실행해야 합니다. 이 명령어는 관리자 워크스테이션에 Docker의 Kubernetes(kind) 클러스터를 배포합니다. 이 부트스트랩 클러스터는 관리자 클러스터를 만드는 데 필요한 Kubernetes 컨트롤러를 호스팅합니다. 관리자 클러스터를 만들면 부트스트랩 클러스터의 컨트롤러가 노드를 프로비저닝하고, 프리플라이트 검사를 실행하고 Fleet에 관리자 클러스터를 등록합니다. 관리자 클러스터가 성공적으로 생성된 후 부트스트랩 클러스터가 자동으로 삭제됩니다.

콘솔을 사용하여 관리자 클러스터를 만드는 대략적인 단계는 다음과 같습니다.

  1. 콘솔에서 gkectl register bootstrap에 필요한 정보를 입력합니다. 콘솔에 입력한 정보와 함께 gkectl register bootstrap 명령어가 표시됩니다. 표시된 명령어에는 명령어를 실행하기 전에 지정해야 하는 경로의 플래그도 포함되어 있습니다.

  2. 관리 워크스테이션에서 gkectl register bootstrap를 실행하여 부트스트랩 클러스터를 만듭니다. 명령어가 부트스트랩 클러스터 생성을 완료하면 출력에 관리자 클러스터 구성을 완료하라는 메시지가 표시됩니다. 이 프로세스는 관리자 클러스터가 생성될 때까지 계속 실행됩니다.

  3. 콘솔로 돌아가 클러스터를 만드는 데 필요한 정보를 입력합니다. 클러스터 생성 중에 gkectl register bootstrap 명령어는 진행 상황 정보를 출력하고 관리자 워크스테이션에 로그를 작성합니다. 관리자 클러스터가 생성되면 부트스트랩 클러스터가 자동으로 삭제됩니다.

클러스터 구성 시작

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

    VMware에서 클러스터 만들기로 이동

  2. 클러스터를 만들 Google Cloud 프로젝트를 선택합니다.

    다음 섹션에서 부트스트랩 클러스터를 만들면 선택한 프로젝트 ID가 --project-id 플래그의 gkectl register bootstrap 명령어에 표시됩니다.

  3. 관리자 클러스터 만들기가 선택되어 있는지 확인합니다.

  4. 다음: 부트스트랩 환경 설치를 클릭합니다.

부트스트랩 환경 설치

이 섹션에서는 gkectl register bootstrap 명령어에 필요한 정보를 입력합니다. UI 필드에 값을 입력하면 콘솔에서 페이지 하단의 관리 워크스테이션에서 부트스트랩 환경 섹션에 표시된 gkectl register bootstrap 명령의 해당 플래그에 값을 복사합니다.

부트스트랩 환경 기본사항

  1. 관리자 클러스터의 이름을 입력합니다. 콘솔은 페이지 하단에 표시된 gkectl register bootstrap 명령어에서 클러스터 이름을 --target-cluster-name 플래그의 값으로 사용합니다. 이름의 최대 길이는 20자(영문 기준)입니다.

  2. Google Cloud 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 API 위치 필드는 gkectl register bootstrap 명령의 --location 플래그에 해당합니다.

  3. 관리자 클러스터 버전 필드에 클러스터를 만드는 데 사용할 버전을 입력합니다. 여기에서 선택한 버전은 gkectl register bootstrap 명령어의 --bundle-path 플래그에 지정한 번들 버전과 일치해야 합니다.

vCenter 구성

gkeadm을 사용하여 관리자 워크스테이션을 만든 경우 vCenter 섹션의 값을 콘솔의 필드에 복사할 수 있도록 관리자 워크스테이션 구성 파일을 엽니다. 생성된 관리자 클러스터 구성 파일에도 이 정보가 포함되어 있습니다.

이 섹션의 대부분의 필드는 변경할 수 없습니다. 필드가 변경 가능한지 또는 변경할 수 없는지 알아보려면 관리자 클러스터 구성 파일 참조의 vCenter 섹션을 참고하세요.

  1. 주소 필드에 vCenter Server 주소를 입력합니다.

    • 관리자 워크스테이션 구성 파일: vCenter.credentials.address 필드의 값을 사용합니다.

    • 주소 필드는 gkectl register bootstrap 명령어의 --vcenter-address 플래그에 해당합니다.

  2. 데이터 센터 필드에 vCenter 데이터 센터의 이름을 입력합니다.

    • 관리자 워크스테이션 구성 파일: vCenter.datacenter 필드의 값을 사용합니다.

    • 데이터 센터 필드는 gkectl register bootstrap 명령어의 --vcenter-datacenter 플래그에 해당합니다.

  3. 클러스터 이름 필드에 vCenter 클러스터 이름을 입력합니다.

    • 관리자 워크스테이션 구성 파일: vCenter.cluster 필드의 값을 사용합니다.

    • 클러스터 이름 필드는 gkectl register bootstrap 명령어의 --vcenter-cluster 플래그에 해당합니다.

  4. 리소스 풀 필드에 vCenter 리소스 풀의 이름 또는 경로를 입력합니다.

    • 관리자 워크스테이션 구성 파일: vCenter.resourcePool 필드의 값을 사용합니다.

    • 리소스 풀 필드는 gkectl register bootstrap 명령어의 --vcenter-resource-pool 플래그에 해당합니다.

  5. 다음 중 하나를 입력하여 스토리지 옵션을 구성합니다.

    • 데이터 스토어 필드: vCenter 데이터 스토어의 이름을 입력합니다. 지정하는 값은 경로가 아닌 이름이어야 합니다. 경로를 입력해야 하는 경우 폴더 필드에 입력합니다.

      • 관리자 워크스테이션 구성 파일: vCenter.datastore 필드의 값을 사용합니다.

      • 데이터 저장소 필드는 gkectl register bootstrap 명령어의 --vcenter-datastore 플래그에 해당합니다.

    • 스토리지 정책 이름 필드: 클러스터 노드에 대한 VM 스토리지 정책의 이름을 입력합니다. 자세한 내용은 스토리지 정책 구성을 참고하세요.

      • 관리자 워크스테이션 구성 파일: vCenter.storagePolicyName 필드의 값을 사용합니다.

      • 스토리지 정책 이름 필드는 gkectl register bootstrap 명령어의 --vcenter-storage-policy 플래그에 해당합니다.

    데이터 스토어 필드 또는 스토리지 정책 이름 필드 중 하나에 값을 입력해야 하며, 둘 다 입력할 수는 없습니다.

  6. 선택적으로 폴더 필드에 클러스터 VM이 위치할 vCenter 폴더의 이름을 입력합니다.

    • 관리자 워크스테이션 구성 파일: vCenter.folder 필드의 값을 사용합니다.

    • 폴더 필드는 gkectl register bootstrap 명령어의 --vcenter-folder 플래그에 해당합니다.

  7. 네트워크 필드에 vCenter 네트워크의 이름을 입력합니다.

    • 관리자 워크스테이션 구성 파일: vCenter.network 필드의 값을 사용합니다.

    • 네트워크 필드는 gkectl register bootstrap 명령어의 --vcenter-network 플래그에 해당합니다.

  8. CA 인증서 경로 필드에 vCenter Server의 루트 CA 인증서 경로를 입력합니다.

    • gkeadm을 사용하여 관리자 워크스테이션을 만든 경우 gkeadm은 로컬에 있던 CA 인증서 파일을 관리자 워크스테이션에 복사했습니다.

    • CA 인증서 경로 필드는 gkectl register bootstrap 명령어의 --vcenter-ca-cert-path에 해당합니다.

CA 인증서 가져오기

부트스트랩 클러스터를 만든 후 클러스터 기본사항 페이지의 CA 인증서 데이터 필드에 PEM 형식의 vCenter CA 인증서를 제공해야 합니다. 다음 명령어를 실행하여 인증서를 표시합니다.

cat CA_CERT_PATH

CA_CERT_PATH를 vCenter Server의 루트 CA 인증서 경로로 바꿉니다. 이 명령어를 로컬로 실행하는 경우 관리자 워크스테이션 구성 파일의 vCenter.caCertPath에 있는 경로를 사용합니다.

부트스트랩 클러스터가 생성된 후 클러스터 기본사항 페이지의 CA 인증서 데이터 필드에 붙여넣을 수 있도록 전체 인증서를 텍스트 편집기에 복사합니다.

관리자 워크스테이션의 환경 부트스트랩

gkectl register bootstrap 명령어를 실행하면 vCenter 계정 사용자 이름과 비밀번호를 묻는 메시지가 표시됩니다. 사용 가능한 사용자 인증 정보가 있는지 확인합니다. gkeadm을 사용하여 관리자 워크스테이션을 만든 경우 사용자 이름과 비밀번호는 credential.yaml 파일에 있습니다.

  1. 관리자 워크스테이션의 환경 부트스트랩 섹션으로 스크롤하여 gkectl register bootstrap 명령어를 표시합니다.

    관리 워크스테이션으로 이동하여 부트스트랩 클러스터를 만드는 동안 이 페이지를 열어 두세요.

  2. 다음 플래그의 값을 지정할 수 있도록 gkectl register bootstrap 명령어를 텍스트 편집기에 복사하여 붙여넣습니다.

        ./gkectl register bootstrap \
          ...
          --bundle-path=BUNDLE_PATH \
          ...
          --component-access-service-account-key-path=COMPONENT_ACCESS_SA_PATH \
          --register-service-account-key-path=CONNECT_REGISTER_SA_PATH \
          --stackdriver-service-account-key-path=LOG_MON_SA_PATH \
          --cloud-audit-logging-service-account-key-path=CLOUD_AUDIT_SA_PATH
    

    다음을 관리자 워크스테이션 경로로 바꿉니다.

    • BUNDLE_PATH: 번들 파일의 경로입니다. gkeadm을 사용하여 관리자 워크스테이션을 만든 경우 번들 파일은 /var/lib/gke/bundles/에 있습니다. 파일 이름은 Google Distributed Cloud 버전에 따라 다릅니다(예: gke-onprem-vsphere-1.31.0-gke.889-full.tgz).
    • COMPONENT_ACCESS_SA_PATH: 구성요소 액세스 서비스 계정의 키 파일 경로입니다.
    • CONNECT_REGISTER_SA_PATH: connect-register 서비스 계정의 키 파일 경로입니다.
    • LOG_MON_SA_PATH: 로깅-모니터링 서비스 계정의 키 파일 경로입니다.
    • CLOUD_AUDIT_SA_PATH: 감사 로깅 서비스 계정의 경로입니다. 감사 로깅 서비스 계정을 만들지 않은 경우 로깅-모니터링 서비스 계정의 키 파일 경로를 지정합니다.

    또한 gkeadm을 사용하여 관리자 워크스테이션을 만든 경우 gkectl/usr/bin/ 디렉터리에 다운로드되었습니다. 이 경우 gkectl이 현재 작업 디렉터리에 없으므로 명령어 시작 부분에서 ./을 삭제합니다.

  3. SSH를 사용하여 관리자 워크스테이션에 연결합니다.

  4. 명령어를 복사하여 관리자 워크스테이션의 터미널 창에 붙여넣습니다.

  5. 메시지가 표시되면 vCenter 사용자 이름을 입력하거나 복사하여 붙여넣습니다. 사용자 이름이 화면에 다시 표시되지 않습니다.

  6. 메시지가 표시되면 vCenter 비밀번호를 입력하거나 복사하여 붙여넣습니다. 비밀번호가 화면에 다시 표시되지 않습니다.

이 명령어는 여러 유효성 검사를 실행합니다. gkectl이 부트스트랩 클러스터를 성공적으로 만들면 다음과 비슷한 출력이 표시되며 가독성을 위해 잘립니다.

Running workstation validations
- Validation Category: Workstation
    - [SUCCESS] Workstation OS
    - [SUCCESS] Workstation Hardware
    - [SUCCESS] Workstation Package
    - [SUCCESS] Workstation NTP
    - [SUCCESS] Workstation Docker
...
All validation results were SUCCESS.
Unpacking GKE on-prem bundle: /var/lib/gke/bundles/gke-onprem-vsphere-1.31.0-gke.889-full.tgz
...
Successfully created and registered the bootstrap cluster
...
Waiting for preflight checks to run or OnPremAdminCluster to be applied...... -

이 프로세스는 관리자 클러스터가 생성될 때까지 계속 실행됩니다.

관리자 클러스터를 만들기 전에 gkectl register bootstrap 명령어를 종료하면 관리자 클러스터 만들기가 실패하며 다음 명령어를 사용하여 부트스트랩 클러스터를 삭제해야 합니다.

gkectl delete bootstrap \
    --target-cluster-name=ADMIN_CLUSTER_NAME \
    --project-id=PROJECT_ID \
    --location=REGION \
     --register-service-account-key-path=CONNECT_REGISTER_SA_PATH

관리자 클러스터 구성 완료

콘솔로 돌아가 다음 단계를 수행합니다.

  1. 부트스트랩 환경 설치 페이지에서 연결 확인을 클릭합니다.

    성공하면 콘솔에 연결 설정됨이 표시됩니다.

    계속하기 전에 부트스트랩 클러스터에 대한 연결을 설정해야 합니다. 연결이 설정되지 않았으면 gkectl register bootstrap 명령어에 지정한 인수를 확인합니다.

    • --target-cluster-name의 값이 부트스트랩 환경 기본사항 섹션에 표시된 관리자 클러스터 이름과 일치하는지 확인합니다.

    • --project-id 값이 콘솔에서 선택한 프로젝트의 ID와 일치하는지 확인합니다.

    부트스트랩 클러스터 이름, 프로젝트 ID 또는 기타 플래그 값을 변경해야 하는 경우 다음 단계를 따르세요.

    1. gkectl register bootstrap을 종료하려면 Ctrl-C를 입력합니다.
    2. 부트스트랩 클러스터를 삭제합니다.

      gkectl delete bootstrap \
        --target-cluster-name=ADMIN_CLUSTER_NAME \
        --project-id=PROJECT_ID \
        --location=REGION \
        --register-service-account-key-path=CONNECT_REGISTER_SA_PATH
      
    3. gkectl register bootstrap 명령어를 다시 실행합니다.

  2. 다음: 클러스터 기본사항을 클릭하여 관리자 클러스터 구성을 시작합니다.

클러스터 기본사항

  1. CA 인증서 데이터 필드에 이전에 CA 인증서 가져오기 섹션에서 설명한 대로 PEM 형식의 vCenter CA 인증서 전체를 복사하여 붙여넣습니다.

  2. 승인 섹션에 읽기 전용 Kubernetes clusterrole/view 역할을 부여할 사용자의 이메일 주소를 입력합니다. 이메일 주소가 자동으로 추가됩니다. 적용되는 역할 기반 액세스 제어 (RBAC) 정책을 통해 사용자는 Connect 게이트웨이를 통해 읽기 전용 명령어를 실행할 수 있습니다.

  3. Next Control Plane(다음 컨트롤 플레인)을 클릭합니다.

제어 영역

  1. 제어 영역 섹션에서 기본 설정을 검토하고 필요에 따라 변경합니다.

  2. 컨트롤 플레인 노드 IP 섹션에서 다음 필드에 IP 주소를 입력합니다.

    • 게이트웨이: 클러스터 노드가 있는 서브넷의 기본 게이트웨이 IP 주소입니다.

    • 넷마스크: 클러스터 노드가 있는 서브넷의 넷마스크입니다.

    • IP 주소: IP 주소와 호스트 이름(선택사항)을 세 개의 컨트롤 플레인 노드에 입력합니다.

  3. 다음: 네트워킹을 클릭합니다.

네트워킹

이 섹션에서는 관리자 클러스터를 만드는 데 필요한 네트워킹 정보를 지정합니다.

  1. 서비스 및 포드 CIDR 섹션에서 Kubernetes 서비스 및 포드 IP 주소 범위의 기본값을 그대로 사용하거나 다른 CIDR 주소 범위를 입력합니다.

    • 서비스 CIDR: 가능한 가장 작은 범위: /24 가능한 최대 범위: /12

    • 포드 CIDR: 가능한 가장 작은 범위는 /18입니다. 가능한 가장 큰 범위는 /8입니다.

  2. 호스트 구성 섹션에서 클러스터 노드인 VM에서 사용하는 NTP 서버, DNS 서버, DNS 검색 도메인(선택사항)을 지정합니다. 클러스터를 만든 후에는 이러한 값을 수정할 수 없습니다.

  3. 다음: 부하 분산기를 클릭합니다.

부하 분산기

이 섹션에서는 사용할 부하 분산기 유형을 선택합니다. 자세한 내용은 부하 분산 개요를 참고하세요.

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

    • MetalLB와 함께 번들로 제공: MetalLB 부하 분산기는 번들로 제공되며 수동 부하 분산보다 구성이 덜 필요합니다. MetalLB 구성요소는 클러스터 노드에서 실행되므로 부하 분산기에 대해 별도의 VM을 만들 필요가 없습니다.

    • 수동: 클러스터를 만들기 에 설정하기만 하면 원하는 부하 분산기를 사용할 수 있습니다. 수동으로 설정한 부하 분산기를 사용하여 가상 IP(VIP), 노드 주소, nodePort 값 간의 매핑을 구성해야 합니다.

  2. 컨트롤 플레인 VIP 필드에 Kubernetes API 서버로 전송되는 트래픽에 사용할 VIP를 입력합니다.

  3. 확인 및 만들기를 클릭합니다.

    콘솔은 설정을 확인하고 데이터 센터에 클러스터를 만들 때 상태 메시지를 표시합니다.

    구성에 문제가 있으면 콘솔에 구성 문제를 해결하고 클러스터를 다시 만들 수 있도록 명확한 오류 메시지가 표시됩니다.

클러스터 만들기 프로세스에 대한 세부정보가 관리자 워크스테이션에 출력됩니다. 프리플라이트 검사가 통과하면 다음과 비슷하게 표시됩니다.

[2023-03-22 23:12:47+0000] Waiting for cluster kubeconfig to become ready OK
[2023-03-22 23:15:47+0000] Writing kubeconfig file
[2023-03-22 23:15:47+0000] kubeconfig of cluster being created is present at gkectl-workspace/abm-cluster-1/abm-cluster-1-kubeconfig
[2023-03-22 23:15:47+0000] Please restrict access to this file as it contains authentication credentials of your cluster.
[2023-03-22 23:15:47+0000] Waiting for cluster to become ready OK
[2023-03-22 23:20:17+0000] Please run
[2023-03-22 23:20:17+0000] kubectl --kubeconfig gkectl-workspace/abm-cluster-1/abm-cluster-1-kubeconfig get nodes
[2023-03-22 23:20:17+0000] to get cluster nodes status.
[2023-03-22 23:20:17+0000] Waiting for node pools to become ready OK
[2023-03-22 23:20:37+0000] Waiting for metrics to become ready in GCP OK
[2023-03-22 23:25:38+0000] Waiting for cluster API provider to install in the created admin cluster OK
[2023-03-22 23:25:48+0000] Moving admin cluster resources to the created admin cluster
[2023-03-22 23:25:51+0000] Waiting for node update jobs to finish OK
[2023-03-22 23:27:41+0000] Flushing logs... OK
[2023-03-22 23:27:41+0000] Deleting membership... OK
[2023-03-22 23:27:42+0000] Deleting bootstrap cluster.

관리자 클러스터에 연결

gkectl register bootstrap 명령어는 관리자 워크스테이션에서 관리자 클러스터용 kubeconfig 파일을 만듭니다. kubeconfig가 있는 디렉터리와 파일 이름은 다음과 같이 관리자 클러스터 이름을 기반으로 합니다.

gkectl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig

클러스터의 사용자 인증 정보가 포함되어 있으므로 이 kubeconfig에 대한 액세스를 제한해야 합니다.

또한 커넥트 게이트웨이를 통해 읽기 전용 kubectl 명령어를 실행할 수 있습니다.

  1. gcloud CLI가 설치된 컴퓨터에서 다음 명령어를 실행하여 Connect 게이트웨이를 통해 클러스터에 액세스할 수 있는 kubeconfig 항목을 가져옵니다.

    gcloud container fleet memberships get-credentials ADMIN_CLUSTER_NAME \
        --project=PROJECT_ID
    

    출력은 다음과 비슷합니다.

    Starting to build Gateway kubeconfig...
    Current project_id: PROJECT_ID
    A new kubeconfig entry "connectgateway_PROJECT_ID_global_ADMIN_CLUSTER_NAME" has been generated and set as the current context.
    
  2. 이제 커넥트 게이트웨이를 통해 읽기 전용 kubectl 명령어를 실행할 수 있습니다.

    kubectl get pods -A
    

    관리자 클러스터에 대한 전체 관리 권한이 필요한 경우 연결 게이트웨이 설정을 참고하세요.

문제 해결

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

다음 단계

사용자 클러스터 만들기