이미 Terraform을 사용하여 VMware용 Google Distributed Cloud 소프트웨어 및 온프레미스
VMware 리소스를 관리하는 경우 Terraform을 사용하여 관리자 클러스터를 만듭니다. Google Cloud gkectl
또는 Google Cloud 콘솔을 사용하여 관리자 클러스터를 만들 수도 있습니다.
시작하기 전에
서비스 계정의 JSON 키 파일이 관리 워크스테이션에 있는지 확인합니다.
IP 주소 계획 문서를 검토합니다. 3개의 컨트롤 플레인 노드 및 컨트롤 플레인 VIP에 사용할 수 있는 IP 주소가 충분한지 확인합니다. kubeception 사용자 클러스터를 만들려면 해당 사용자 클러스터의 제어 영역 노드에 사용할 수 있는 충분한 IP 주소가 있어야 합니다.
부하 분산 개요를 검토하고 사용하려는 부하 분산기 종류에 대한 결정을 다시 확인합니다. 수동 부하 분산기의 경우 관리자 클러스터를 만들기 전에 부하 분산기를 설정해야 합니다.
gkectl을 사용하여 관리자 클러스터를 만드는 경우 Google Distributed Cloud 구성요소에 대해 공개 또는 비공개 레지스트리를 사용할지 결정합니다. 비공개 Docker 레지스트리 사용에 대한 자세한 내용은privateRegistry를 참조하세요. Terraform 또는 Google Cloud 콘솔은 시스템 구성요소에 비공개 Docker 레지스트리 사용을 지원하지 않습니다.관리자 클러스터 노드에서 실행하려는 운영체제 유형을 결정합니다.
조직에서 아웃바운드 트래픽이 프록시 서버를 통과해야 하는 경우 필요한 API와 Artifact Registry 주소를 허용 목록에 추가해야 합니다.
버전 1.29 이상에서는 서버 측 프리플라이트 검사가 기본적으로 사용 설정됩니다. 서버 측 프리플라이트 검사에는 추가 방화벽 규칙이 필요합니다. 관리자 클러스터의 방화벽 규칙에서 '프리플라이트 검사'를 검색하고 필요한 모든 방화벽 규칙이 구성되었는지 확인합니다. 서버 측 프리플라이트 검사는 관리자 워크스테이션에서 로컬로 실행되는 대신 부트스트랩 클러스터에서 실행됩니다.
절차 개요
관리자 클러스터를 만들려면 먼저 관리자 워크스테이션에서 gkectl register bootstrap 명령어를 실행해야 합니다. 이 명령어는
관리자 워크스테이션에 Docker의 Kubernetes
(kind) 클러스터를 배포합니다. 이 부트스트랩 클러스터는 관리자 클러스터를 만드는 데 필요한 Kubernetes 컨트롤러를 호스팅합니다. 관리자 클러스터를 만들면 부트스트랩 클러스터의 컨트롤러가 노드를 프로비저닝하고, 프리플라이트 검사를 실행하고 Fleet에 관리자 클러스터를 등록합니다. 관리자 클러스터가 성공적으로 생성된 후 부트스트랩 클러스터가 자동으로 삭제됩니다.
다음은 Terraform을 사용하여 관리자 클러스터를 만드는 대략적인 단계입니다.
구성 파일을 작성합니다. google_gkeonprem_vmware_admin_cluster 리소스 및 다음 예시를 사용하여
main.tf구성 파일을 만듭니다.bootstrap클러스터를 만듭니다.gkectl register bootstrap을 실행하여 부트스트랩 클러스터를 만듭니다. 명령어가 부트스트랩 클러스터 만들기를 완료하면 출력을 통해 관리자 클러스터 구성을 완료하라고 알려줍니다. 이 프로세스는 관리자 클러스터가 생성될 때까지 계속 실행됩니다.관리자 클러스터를 만듭니다. 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 프로젝트 IDREGION: GKE On-Prem API (gkeonprem.googleapis.com), Fleet 서비스(gkehub.googleapis.com), Connect 서비스(gkeconnect.googleapis.com)가 실행되는 리전입니다. Google Cloudus-west1또는 다른 지원되는 리전을 지정합니다.location필드는--location플래그에 해당합니다.gkectl register bootstrapDESCRIPTION: 관리자 클러스터에 대한 설명입니다.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 Datastore의 이름입니다. 지정하는 값은 경로가 아닌 이름이어야 합니다. 경로를 입력해야 하는 경우 다음 필드를 추가합니다.folder = "FOLDER"관리자 워크스테이션 구성 파일:
vCenter.datastore필드의 값을 사용합니다.vcenter.datastore필드는--vcenter-datastore플래그에 해당합니다.gkectl register bootstrap
클러스터 노드에 VM 스토리지 정책을 사용하려면
vcenter.datastore필드를 삭제하고 대신vcenter.storage_policy_name을 추가합니다. 또한--vcenter-storage-policy플래그를gkectl register bootstrap명령어에 추가합니다.vcenter.datastore또는vcenter.storage_policy_name중 하나의 값을 지정해야 하며 둘 다 지정할 수는 없습니다.FOLDER: 클러스터 VM이 있는 vCenter 폴더의 이름입니다. 폴더를 사용하지 않는 경우 이 필드를 삭제합니다.관리자 워크스테이션 구성 파일:
vCenter.folder필드의 값을 사용합니다.vcenter.folder필드는gkectl register bootstrap명령어의--vcenter-folder플래그에 해당합니다.
CA_CERT_DATA: PEM 형식의 vCenter CA 인증서이지만 모든 줄바꿈이 문자열\n으로 대체됩니다.다음 명령어를 실행하여 줄바꿈을
\n으로 바꿉니다.awk 'ORS="\\n" {print}' CA_CERT_PATH_LOCALCA_CERT_PATH_LOCAL을 vCenter Server의 루트 CA 인증서 경로로 바꿉니다.gkeadm을 사용하여 관리자 워크스테이션을 만든 경우 관리자 워크스테이션 구성 파일의caCertPath필드 값(로컬 컴퓨터의 경로)을 사용할 수 있습니다.gkeadm은 CA 인증서 파일을 관리 워크스테이션에 복사했습니다.gkectl register bootstrap명령어의--vcenter-ca-cert-path플래그에서 관리자 워크스테이션 경로를 지정해야 합니다.이전 명령어의 출력을 복사하여
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섹션에서 IP 주소를 입력하고 원하는 경우 컨트롤 플레인 노드 3개의 호스트 이름을 입력합니다. 호스트 이름을 입력하지 않으면 구성에서hostname필드를 삭제합니다.NUM_CPUS: 관리자 클러스터의 각 컨트롤 플레인 노드에 대한 vCPU 수입니다. 최소 4개여야 합니다.MEMORY: 관리자 클러스터의 각 컨트롤 플레인 노드에 대한 메모리 메비바이트 수입니다. 최소 8192여야 하지만 16384를 사용하는 것이 좋습니다.CONTROL_PLANE_VIP: 관리자 클러스터의 Kubernetes API 서버에 대해 부하 분산기에서 구성하도록 선택한 IP 주소입니다.
선택사항: 비공개 레지스트리 구성
기본적으로 클러스터를 만들거나 업그레이드하는 중에 Google Distributed Cloud는 시스템
이미지를 gcr.io/gke-on-prem-release에서 사용하여
구성요소 액세스 서비스 계정을 가져옵니다.
원하는 경우 자체 Container Registry 서버를 제공하여 대신 비공개 레지스트리 서버에서 시스템 이미지를 가져오도록 할 수 있습니다.
비공개 레지스트리를 구성하려면 다음 단계를 따르세요.
관리자 클러스터 구성 파일에 다음을 추가합니다.
private_registry_config { address = "ADDRESS" ca_cert = "CA_CERT" }다음을 바꿉니다.
ADDRESS: 비공개 레지스트리를 실행하는 머신의 IP 주소 또는 FQDN (정규화된 도메인 이름)입니다.CA_CERT: 공개 키의 CA 인증서 데이터이지만 모든 줄바꿈이 문자열\n으로 대체됩니다.
다음 명령어를 실행하여 줄바꿈을
\n으로 바꿉니다.awk 'ORS="\\n" {print}' PUBLIC_KEY_PATHPUBLIC_KEY_PATH를 공개 키 경로로 바꿉니다.이전 명령어의 출력을 복사하여
CA_CERT자리표시자 변수에 붙여넣습니다.
네트워크가 프록시 서버 뒤에 있는 경우 다음을 추가합니다.
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가 있는 디렉터리에서 다음 명령어를 실행합니다.
Terraform을 초기화합니다.
terraform initTerraform은 제공업체와 같은 필요한 라이브러리를 설치합니다. Google Cloud 필요한 경우
maint.tf의 오류를 수정합니다.Terraform 계획을 만듭니다.
terraform plan -out tfplan구성을 검토하고 필요한 경우 변경합니다.
계획을 적용하기 전에 먼저 다음 섹션에 설명된 대로 부트스트랩 클러스터를 만들어야 합니다.
부트스트랩 클러스터 만들기
gkectl register bootstrap 명령어를 실행하면 vCenter 계정 사용자 이름과 비밀번호를 묻는 메시지가 표시됩니다. 사용자 인증 정보를 사용할 수 있는지 확인합니다. gkeadm을 사용하여 관리자 워크스테이션을 만든 경우 사용자 이름과 비밀번호는 credential.yaml 파일에 있습니다.
SSH를 사용하여 관리자 워크스테이션에 로그인합니다.
Google Cloud CLI로 인증합니다.
gcloud auth login
다음 명령어를 실행하여 부트스트랩 클러스터를 만듭니다. 대부분의 플래그 값은
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 \ --admin-kubeconfig-out=KUBECONFIG_NAME다음을 관리자 워크스테이션 경로로 바꿉니다.
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: 감사 로깅 서비스 계정의 경로입니다. 감사 로깅 서비스 계정을 만들지 않은 경우 로깅-모니터링 서비스 계정의 키 파일 경로를 지정합니다.KUBECONFIG_NAME:gkectl register bootstrap명령어가 만드는 kubeconfig 파일의 이름입니다. 이 플래그를 지정하지 않으면 이 명령어는 현재 작업 디렉터리에kubeconfig라는 이름으로 파일을 만듭니다.kubeconfig라는 기존 파일이 있는 경우 이 명령어는 파일을 덮어씁니다.
필요에 따라 다음 플래그에 맞게 명령어를 수정합니다.
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 주소의 값으로, 쉼표로 구분됩니다.
플래그를 추가하는 경우 명령줄 연속 백슬래시 문자 (\)를 다시 추가해야 합니다.
메시지가 표시되면 vCenter 사용자 이름을 입력하거나 복사하여 붙여넣습니다. 사용자 이름은 화면에 다시 표시되지 않습니다.
메시지가 표시되면 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분 이상 걸립니다. 콘솔의 GKE 클러스터 페이지에서 클러스터를 볼 수 있습니다. Google Cloud
관리자 클러스터에 연결
gkectl register bootstrap 명령어는 관리자 워크스테이션에서 관리자 클러스터용 kubeconfig 파일을 만듭니다. gkectl register bootstrap을 실행할 때
--admin-kubeconfig-out 플래그를 지정하지 않으면 이
명령어는 명령어를 실행한 디렉터리에 kubeconfig라는 kubeconfig 파일을 만듭니다.
클러스터의 사용자 인증 정보가 포함되어 있으므로 이 kubeconfig에 대한 액세스를 제한해야 합니다.
또한 Connect 게이트웨이를 통해 읽기 전용 kubectl 명령어를 실행할 수 있습니다.
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.이제 다음과 같은 Connect 게이트웨이를 통해 읽기 전용
kubectl명령어를 실행할 수 있습니다.kubectl get pods -A관리자 클러스터에 대한 전체 관리 권한이 필요한 경우 Connect 게이트웨이 설정을 참조하세요.