기본 클러스터 만들기

이 페이지는 VMware용 GKE의 소규모 개념 증명 설치를 안내하는 가이드의 2부입니다. 1부는 최소 인프라 설정에 관한 내용으로, IP 주소를 계획하고 배포에 필요한 vSphere 및 Google Cloud 인프라를 설정하는 방법을 설명합니다. 이 문서에서는 이전 섹션에서 수행한 설정 및 계획을 기반으로 하여 이 문서에서 입력할 수 있는 간단한 템플릿을 사용하여 vSphere 환경에서 관리자 워크스테이션, 관리자 클러스터, 사용자 클러스터를 만드는 방법을 다룹니다. 그런 다음 사용자는 애플리케이션을 배포할 수 있습니다.

이 간편 설치의 인프라 설정과 마찬가지로 이 문서를 사용하여 설정한 클러스터가 실제 프로덕션 요구사항과 사용 사례에 적합하지 않을 수도 있습니다. 프로덕션 설치에 대한 상세 설명, 권장사항, 관련 지침은 설치 가이드를 참조하세요.

시작하기 전에

  1. 최소 인프라 설정에 설명된 대로 vSphere 및 Google Cloud 환경을 설정했는지 확인하세요.

  2. Terraform을 사용하여 사용자 클러스터를 만들려면 관리자 워크스테이션 또는 다른 컴퓨터에 Terraform이 있어야 합니다.

절차 개요

이 설정과 관련된 기본 단계는 다음과 같습니다.

  1. 서비스 계정을 만드는 데 필요한 권한이 있는 계정으로 Google Cloud CLI에 로그인하세요.

  2. vCenter 사용자 이름 및 비밀번호, 이전 섹션에서 준비한 IP 주소를 포함하여 VMware용 GKE를 구성하는 데 필요한 정보를 수집합니다.

  3. 설정을 완료하는 데 필요한 추가 서비스 계정을 포함하여 관리자 및 사용자 클러스터를 만드는 데 필요한 리소스와 도구가 포함된 관리자 워크스테이션을 만듭니다.

  4. 사용자 클러스터를 관리하고 업데이트하도록 관리자 클러스터를 만듭니다.

  5. 워크로드를 실행할 사용자 클러스터를 만듭니다.

1. Google Cloud CLI에 로그인

VMware용 GKE를 설정하려면 권한이 다른 여러 서비스 계정이 필요합니다. 수동으로 구성요소 액세스 서비스 계정을 만들어야 하지만 gkeadm 명령줄 도구를 사용하면 관리자 워크스테이션을 만드는 동안 나머지 계정을 만들고 구성할 수 있습니다. 하지만 이렇게 하려면 gkeadm이 현재 설정을 하는 시점에 gcloud CLI account 속성을 사용하므로 사용자는 서비스 계정을 만들고 구성하는 데 필요한 권한이 있는 계정으로 Google Cloud CLI에 로그인해야 합니다.

  1. gcloud CLI에 로그인. 모든 Google 계정을 사용할 수 있지만 필요한 권한이 있어야 합니다. 이 가이드의 이전 부분을 수행했다면 이미 구성요소 액세스 서비스 계정을 만드는 데 적절한 계정으로 로그인했을 것입니다.

    gcloud auth login
    
  2. gcloud CLI account 속성이 올바르게 설정되었는지 확인합니다.

    gcloud config list
    

    SDK account 속성 값이 출력에 표시됩니다. 예를 들면 다음과 같습니다.

    [core]
    account = my-name@google.com
    disable_usage_reporting = False
    Your active configuration is: [default]
    
  3. 최신 gcloud CLI 구성요소가 설치되어 있는지 확인합니다.

    gcloud components update
    

    gcloud CLI를 설치한 방법에 따라 다음 메시지가 표시될 수 있습니다. 'Google Cloud CLI 구성요소 관리자가 이 설치에 대해 사용 중지되었기 때문에 이 작업을 수행할 수 없습니다. 다음 명령어를 실행하여 이 설치에 대해 동일한 결과를 얻을 수 있습니다.' 구성요소를 업데이트하려면 안내에 따라 명령어를 복사하여 붙여넣습니다.

2. 정보 수집

최소 인프라 설정에서 준비한 정보를 사용하여 다음 테이블의 자리표시자를 수정합니다.

vSphere 세부정보
vCenter 계정 사용자 이름 USERNAME
vCenter 계정 비밀번호 PASSWORD
vCenter Server 주소 ADDRESS
관리자 워크스테이션을 만드는 데 사용할 머신의 vCenter Server에 대한 루트 CA 인증서 경로 CA_CERT_PATH
vSphere 데이터 센터의 이름 DATA_CENTER
vSphere 클러스터의 이름 VSPHERE_CLUSTER
vSphere 리소스 풀의 이름 또는 경로입니다. 자세한 내용은 vcenter.resourcePool을 참조하세요. RESOURCE_POOL
vSphere Datastore의 이름 DATASTORE
vSphere 네트워크의 이름 NETWORK
IP 주소
관리자 워크스테이션용 IP 주소 1개 ADMIN_WS_IP
관리자 클러스터 노드의 IP 주소 4개. 여기에는 업그레이드 및 업데이트 중에 사용할 수 있는 추가 노드의 주소가 포함됩니다. ADMIN_CONTROL_PLANE_NODE_IP_1
ADMIN_CONTROL_PLANE_NODE_IP_2
ADMIN_CONTROL_PLANE_NODE_IP_3
사용자 클러스터의 제어 영역 노드에 대한 IP 주소입니다. USER_CONTROL_PLANE_NODE_IP
사용자 클러스터 노드의 IP 주소 4개. 여기에는 업그레이드 및 업데이트 중에 사용할 수 있는 추가 노드의 주소가 포함됩니다. USER_NODE_IP_1
USER_NODE_IP_2
USER_NODE_IP_3
USER_NODE_IP_4
관리자 클러스터 Kubernetes API 서버의 가상 IP 주소(VIP) ADMIN_CONTROL_PLANE_VIP
사용자 클러스터 Kubernetes API 서버의 VIP USER_CONTROL_PLANE_VIP
사용자 클러스터의 인그레스 VIP USER_INGRESS_VIP
사용자 클러스터의 LoadBalancer 유형의 서비스에 대한 VIP 2개 SERVICE_VIP_1
SERVICE_VIP_2
관리자 워크스테이션 및 클러스터 노드에서 연결할 수 있는 DNS 서버의 IP 주소 DNS_SERVER_IP
관리자 워크스테이션 및 클러스터 노드에서 연결할 수 있는 NTP 서버의 IP 주소 NTP_SERVER_IP
관리자 워크스테이션 및 클러스터 노드가 있는 서브넷에 대한 기본 게이트웨이의 IP 주소 DEFAULT_GATEWAY_IP
관리자 워크스테이션 및 클러스터 노드가 있는 서브넷의 넷마스크
예시: 255.255.255.0
NETMASK
네트워크가 프록시 서버 뒤에 있는 경우 프록시 서버의 URL입니다. 자세한 내용은 프록시를 참조하세요. 필요한 경우 관리자 워크스테이션 구성 파일에서 수동으로 입력합니다. PROXY_URL
서비스 및 포드의 CIDR 범위
관리자 클러스터와 사용자 클러스터 각각에는 서비스의 CIDR 범위와 포드의 CIDR 범위가 필요합니다. 네트워크의 다른 요소와 겹치지 않도록 변경해야 하는 경우를 제외하고 미리 채워진 다음 값을 사용합니다.
관리자 클러스터에 있는 서비스의 CIDR 범위 10.96.232.0/24
관리자 클러스터에 있는 포드의 CIDR 범위 192.168.0.0/16
사용자 클러스터에 있는 서비스의 CIDR 범위 10.96.0.0/20
사용자 클러스터에 있는 포드의 CIDR 범위 192.168.0.0/16
Google Cloud 세부정보
선택한 클라우드 프로젝트의 ID입니다. PROJECT_ID
이전 섹션에서 설정한 구성요소 액세스 서비스 계정의 JSON 키 파일 경로이며 관리자 워크스테이션을 만드는 데 사용하는 머신에 있습니다. COMPONENT_ACCESS_SA_KEY_PATH
Google Cloud 계정과 연결된 이메일 주소입니다. 예를 들면 alex@example.com입니다. GOOGLE_ACCOUNT_EMAIL

3. 관리자 워크스테이션 만들기

클러스터를 만들려면 먼저 관리자 워크스테이션을 만든 다음 SSH를 사용하여 연결해야 합니다. 관리자 워크스테이션은 vSphere 환경에서 Anthos 클러스터를 만드는 데 필요한 도구와 리소스가 포함된 독립형 VM입니다. gkeadm 명령줄 도구를 사용하여 관리자 워크스테이션을 만듭니다.

gkeadm 다운로드

현재 디렉터리에 gkeadm을 다운로드합니다.

gsutil cp gs://gke-on-prem-release/gkeadm/1.28.200-gke.111/linux/gkeadm ./
chmod +x gkeadm

관리자 클러스터와 사용자 클러스터 구성 파일을 만들려면 gkeadm 버전(VMware용 GKE 버전이기도 함)이 필요합니다. gkeadm 버전을 확인하려면 다음을 실행합니다.

./gkeadm version

다음 출력 예시에서는 버전을 보여줍니다.

gkeadm 1.28.300 (1.28.200-gke.111)

다른 버전의 gkeadm을 다운로드할 수 있지만 이 가이드에서는 1.28.200-gke.111을 설치한다고 가정하며 모든 구성 파일과 명령어에서 이 버전을 사용합니다.

사용자 인증 정보 파일 만들기

다음 콘텐츠로 현재 디렉터리에 credential.yaml이라는 파일을 만들고 저장합니다.

apiVersion: v1
kind: CredentialFile
items:
- name: vCenter
  username: "USERNAME"
  password: "PASSWORD"

관리자 워크스테이션 구성 파일 만들기

다음 콘텐츠로 현재 디렉터리에 admin-ws-config.yaml이라는 파일을 만들고 저장합니다.

gcp:
  componentAccessServiceAccountKeyPath: "COMPONENT_ACCESS_SA_KEY_PATH"
vCenter:
  credentials:
    address: "ADDRESS"
    fileRef:
      path: "credential.yaml"
      entry: "vCenter"
  datacenter: "DATA_CENTER"
  datastore: "DATASTORE"
  cluster: "VSPHERE_CLUSTER"
  network: "NETWORK"
  resourcePool: "RESOURCE_POOL"
  caCertPath: "CA_CERT_PATH"
proxyUrl: ""
adminWorkstation:
  name: "minimal-installation-admin-workstation"
  cpus: 4
  memoryMB: 8192
  diskGB: 50
  dataDiskName: gke-on-prem-admin-workstation-data-disk/minimal-installation-data-disk.vmdk
  dataDiskMB: 512
  network:
    ipAllocationMode: "static"
    hostConfig:
      ip: "ADMIN_WS_IP"
      gateway: "DEFAULT_GATEWAY_IP"
      netmask: "NETMASK"
      dns:
      - "DNS_SERVER_IP"
  proxyUrl: ""
  ntpServer: ntp.ubuntu.com

관리자 워크스테이션 만들기

다음 명령어를 사용하여 관리자 워크스테이션을 만듭니다.

./gkeadm create admin-workstation --auto-create-service-accounts

다음 명령어를 실행하여 다음을 수행합니다.

  • 관리자 워크스테이션 만들기
  • 설치에 필요한 추가 서비스 계정을 자동으로 만들기
  • 관리자 및 사용자 클러스터에 대한 템플릿 구성 파일 만들기

출력은 관리자 워크스테이션 생성에 대한 자세한 정보를 제공하며 관리자 워크스테이션으로 SSH 연결을 가져오는 데 사용할 수 있는 명령어를 제공합니다.

...
Admin workstation is ready to use.
Admin workstation information saved to /usr/local/google/home/me/my-admin-workstation
This file is required for future upgrades
SSH into the admin workstation with the following command:
ssh -i /usr/local/google/home/me/.ssh/gke-admin-workstation ubuntu@172.16.20.49
********************************************************************

관리자 워크스테이션 만들기에 대한 자세한 내용은 관리자 워크스테이션 만들기를 참조하세요.

관리자 워크스테이션에 연결

이전 출력에 표시된 명령어를 사용해서 관리자 워크스테이션에 SSH로 연결합니다. 예를 들면 다음과 같습니다.

ssh -i /usr/local/google/home/me/.ssh/gke-admin-workstation ubuntu@172.16.20.49

이 명령어를 다시 찾아야 하는 경우 gkeadmgkeadm create admin-workstation을 실행한 로컬 머신의 디렉터리에 gke-admin-ws-...라는 파일을 생성합니다. 여기에는 SSH 명령어를 포함한 관리자 워크스테이션에 대한 세부정보가 포함되어 있습니다.

관리자 워크스테이션에서 exit를 입력하여 SSH 연결을 종료하고 로컬 머신으로 돌아갑니다.

감사 로깅 키를 관리자 워크스테이션에 복사

이전 섹션에서는 감사 로깅 서비스 계정의 JSON 키 파일을 만들었습니다.

JSON 키 파일을 관리자 워크스테이션의 홈 디렉터리에 복사합니다. 예를 들어 로컬 머신에서 다음과 같이 지정합니다.

scp -i /usr/local/google/home/me/.ssh/gke-admin-workstation audit-logging-key.json ubuntu@172.16.20.49:~

관리자 워크스테이션에서 파일 보기

다시 한 번 관리자 워크스테이션으로 SSH 연결을 가져옵니다.

관리자 워크스테이션의 홈 디렉터리에 있는 파일을 나열합니다.

ls -1

출력에는 다음이 포함되어야 합니다.

  • admin-cluster.yaml: 관리자 클러스터를 만들기 위한 템플릿 구성 파일
  • user-cluster.yaml: 사용자 클러스터를 만들기 위한 템플릿 구성 파일
  • 관리자 워크스테이션 구성에 지정한 vCenter 인증서 파일
  • 관리자 워크스테이션 구성에서 지정한 credential.yaml 파일
  • 감사 로깅 서비스 계정의 JSON 키 파일입니다.
  • gkeadm에서 생성된 두 서비스 계정(연결-등록 서비스 계정 및 로깅-모니터링 서비스 계정)에 대한 JSON 키 파일 및 이전에 만든 구성요소 액세스 서비스 계정의 키 파일

예를 들면 다음과 같습니다.

admin-cluster.yaml
admin-ws-config.yaml
audit-logging-key.json
sa-key.json
connect-register-sa-2203040617.json
credential.yaml
log-mon-sa-2203040617.json
logs
vc01-cert.pem
user-cluster.yaml

클러스터를 만들려면 구성 파일에서 이러한 파일 이름 중 일부를 지정해야 합니다. 파일 이름을 다음 테이블의 자리표시자 값으로 사용합니다.

연결-등록 서비스 계정 키 파일 이름
예: connect-register-sa-2203040617.json
CONNECT_REGISTER_SA_KEY
로깅-모니터링 서비스 계정 키 파일 이름
예: log-mon-sa-2203040617.json
LOG_MON_SA_KEY
감사 로깅 서비스 계정 키 파일 이름
예시: audit-logging-key.json
AUDIT_LOG_SA_KEY
구성요소 액세스 서비스 계정 키 파일 이름
예: sa-key.json
COMPONENT_ACCESS_SA_KEY
vCenter 인증서 파일 이름
예: vc01-cert.pem
CA_CERT_FILE

4. 관리자 클러스터 만들기

이제 vCenter 및 기타 세부정보로 구성된 관리자 워크스테이션이 있으므로 이를 사용하여 vSphere 환경에 관리자 클러스터를 만들 수 있습니다. 이 단계를 시작하기 전에 앞에서 설명한 대로 관리자 워크스테이션에 SSH로 연결되어 있는지 확인하세요. 다음 명령어는 모두 관리자 워크스테이션에서 실행됩니다.

관리자 클러스터 구성 파일 만들기

admin-cluster.yaml을 열고 콘텐츠를 다음으로 바꿉니다.

apiVersion: v1
kind: AdminCluster
name: "minimal-installation-admin-cluster"
bundlePath: "/var/lib/gke/bundles/gke-onprem-vsphere-1.28.200-gke.111-full.tgz"
vCenter:
  address: "ADDRESS"
  datacenter: "DATA_CENTER"
  cluster: "VSPHERE_CLUSTER"
  resourcePool: "RESOURCE_POOL"
  datastore: "DATASTORE"
  caCertPath: "CA_CERT_FILE"
  credentials:
    fileRef:
      path: "credential.yaml"
      entry: "vCenter"
network:
  hostConfig:
    dnsServers:
    - "DNS_SERVER_IP"
    ntpServers:
    - "NTP_SERVER_IP"
  serviceCIDR: "10.96.232.0/24"
  podCIDR: "192.168.0.0/16"
  vCenter:
    networkName: "NETWORK"
  controlPlaneIPBlock:
    netmask: "NETMASK"
    gateway: "DEFAULT_GATEWAY_IP"
    ips:
    - ip: "ADMIN_CONTROL_PLANE_NODE_IP_1"
      hostname: "admin-cp-vm-1"
    - ip: "ADMIN_CONTROL_PLANE_NODE_IP_2"
      hostname: "admin-cp-vm-2"
    - ip: "ADMIN_CONTROL_PLANE_NODE_IP_3"
      hostname: "admin-cp-vm-3"
loadBalancer:
  vips:
    controlPlaneVIP: "ADMIN_CONTROL_PLANE_VIP"
  kind: "MetalLB"
adminMaster:
  cpus: 4
  memoryMB: 16384
  replicas: 3
antiAffinityGroups:
  enabled: false
componentAccessServiceAccountKeyPath: "COMPONENT_ACCESS_SA_KEY"
gkeConnect:
  projectID: "PROJECT_ID"
  registerServiceAccountKeyPath: "CONNECT_REGISTER_SA_KEY"
stackdriver:
  projectID: "PROJECT_ID"
  clusterLocation: "us-central1"
  enableVPC: false
  serviceAccountKeyPath: "LOG_MON_SA_KEY"
  disableVsphereResourceMetrics: false
cloudAuditLogging:
  projectID: "PROJECT_ID"
  clusterLocation: us-central1
  serviceAccountKeyPath: "AUDIT_LOG_SA_KEY"

관리자 클러스터 구성 파일 유효성 검사

관리자 클러스터 구성 파일이 유효하고 클러스터 생성에 사용될 수 있는지 확인합니다.

gkectl check-config --config admin-cluster.yaml

OS 이미지를 vSphere로 가져옵니다.

노드 OS 이미지를 vSphere로 가져오기 위해 완료된 구성 파일로 gkectl prepare를 실행합니다.

gkectl prepare --config admin-cluster.yaml --skip-validation-all

이 명령어를 실행하면 이미지를 vSphere로 가져오고 관리자 클러스터의 이미지를 포함한 VM 템플릿으로 표시합니다.

이 명령어는 결과를 반환하는 데 몇 분 정도 걸릴 수 있습니다.

관리자 클러스터 만들기

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

gkectl create admin --config admin-cluster.yaml

실패 후 관리자 클러스터 만들기 다시 시작

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

gkectl create admin --config admin-cluster.yaml

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

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

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

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

kubectl get nodes --kubeconfig kubeconfig

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

gke-admin-master-hdn4z            Ready    control-plane,master ...
gke-admin-node-7f46cc8c47-g7w2c   Ready ...
gke-admin-node-7f46cc8c47-kwlrs   Ready ...

RBAC 승인 사용 설정

클러스터에서 사용자 계정에 Kubernetes clusterrole/cluster-admin 역할을 부여하려면 다음 명령어를 실행합니다.

gcloud container fleet memberships generate-gateway-rbac \
    --membership=minimal-installation-admin-cluster \
    --role=clusterrole/cluster-admin \
    --users=GOOGLE_ACCOUNT_EMAIL \
    --project=PROJECT_ID \
    --kubeconfig=kubeconfig \
    --context=minimal-installation-admin-cluster \
    --apply

이 명령어의 출력은 가독성을 위해 잘려서 표시된 다음과 비슷합니다.

Validating input arguments.
Specified Cluster Role is: clusterrole/cluster-admin
Generated RBAC policy is:
--------------------------------------------
...
Applying the generate RBAC policy to cluster with kubeconfig: kubeconfig, context: minimal-installation-admin-cluster
Writing RBAC policy for user: GOOGLE_ACCOUNT_EMAIL to cluster.
Successfully applied the RBAC policy to cluster.

무엇보다도 RBAC 정책을 사용하면 Google ID를 사용하여 Google Cloud 콘솔에서 클러스터에 로그인하여 더 많은 클러스터 세부정보를 볼 수 있습니다.

GKE On-Prem API에 자동 등록

GKE On-Prem API가 프로젝트에 사용 설정되었으므로 클러스터가 GKE On-Prem API에 자동으로 등록됩니다. GKE On-Prem API에 관리자 클러스터를 등록하면 Google Cloud 콘솔, Google Cloud CLI 또는 Terraform과 같은 표준 도구를 사용하여 관리자 클러스터에서 관리하는 사용자 클러스터를 생성, 업그레이드, 업데이트, 삭제할 수 있습니다. 클러스터를 등록하면 gcloud 명령어를 실행하여 클러스터에 대한 정보를 가져올 수 있습니다.

5. 사용자 클러스터 만들기

이 섹션에서는 콘솔, gkectl, Terraform 또는 gcloud CLI를 사용하여 사용자 클러스터를 만드는 단계를 설명합니다.

gkectl

이 절차를 시작하기 전에 앞에서 설명한 대로 관리자 워크스테이션에 SSH로 연결되어 있는지 확인하세요. 다음 명령어는 모두 관리자 워크스테이션에서 실행됩니다.

사용자 클러스터 IP 블록 파일 만들기

  1. user-ipblock.yaml 파일을 만듭니다.

  2. 다음 콘텐츠를 복사하여 user-ipblock.yaml에 붙여넣고 파일을 저장합니다.

    blocks:
      - netmask: "NETMASK"
        gateway: "DEFAULT_GATEWAY_IP"
        ips:
        - ip: "USER_NODE_IP_1"
          hostname: "user-vm-1"
        - ip: "USER_NODE_IP_2"
          hostname: "user-vm-2"
        - ip: "USER_NODE_IP_3"
          hostname: "user-vm-3"
        - ip: "USER_NODE_IP_4"
          hostname: "user-vm-4"
    

사용자 클러스터 구성 파일 만들기

  1. user-ipblock.yaml과 같은 디렉터리에 user-cluster.yaml 파일을 만듭니다.

  2. 다음 콘텐츠를 복사하여 user-cluster.yaml에 붙여넣고 파일을 저장합니다.

apiVersion: v1
kind: UserCluster
name: "minimal-installation-user-cluster"
gkeOnPremVersion: "1.28.200-gke.111"
enableControlplaneV2: true
network:
  hostConfig:
    dnsServers:
    - "DNS_SERVER_IP"
    ntpServers:
    - "NTP_SERVER_IP"
  ipMode:
    type: "static"
    ipBlockFilePath: "user-ipblock.yaml"
  serviceCIDR: "10.96.0.0/20"
  podCIDR: "192.168.0.0/16"
  controlPlaneIPBlock:
    netmask: "NETMASK"
    gateway: "DEFAULT_GATEWAY_IP"
    ips:
    - ip: "USER_CONTROL_PLANE_NODE_IP"
      hostname: "cp-vm-1"
loadBalancer:
  vips:
    controlPlaneVIP: "USER_CONTROL_PLANE_VIP"
    ingressVIP: "USER_INGRESS_VIP"
  kind: "MetalLB"
  metalLB:
    addressPools:
    - name: "uc-address-pool"
      addresses:
      - "USER_INGRESS_VIP/32"
      - "SERVICE_VIP_1/32"
      - "SERVICE_VIP_2/32"
enableDataplaneV2: true
nodePools:
- name: "uc-node-pool"
  cpus: 4
  memoryMB: 8192
  replicas: 3
  enableLoadBalancer: true
antiAffinityGroups:
  enabled: false
gkeConnect:
  projectID: "PROJECT_ID"
  registerServiceAccountKeyPath: "CONNECT_REGISTER_SA_KEY"
stackdriver:
  projectID: "PROJECT_ID"
  clusterLocation: "us-central1"
  enableVPC: false
  serviceAccountKeyPath: "LOG_MON_SA_KEY"
  disableVsphereResourceMetrics: false
autoRepair:
  enabled: true

구성 확인 및 클러스터 만들기

  1. 사용자 클러스터 구성 파일이 유효하고 클러스터 생성에 사용될 수 있는지 확인합니다.

    gkectl check-config --kubeconfig kubeconfig --config user-cluster.yaml
    
  2. 사용자 클러스터 만들기:

    gkectl create cluster --kubeconfig kubeconfig --config user-cluster.yaml
    

    클러스터를 만드는 데 약 30분 정도 걸립니다.

사용자 클러스터 kubeconfig 파일 찾기

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

사용자 클러스터 실행 여부 확인

사용자 클러스터 실행 여부 확인:

kubectl get nodes --kubeconfig USER_CLUSTER_KUBECONFIG

USER_CLUSTER_KUBECONFIG를 사용자 클러스터 kubeconfig 파일 경로로 바꿉니다.

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

cp-vm-1     Ready    control-plane,master
user-vm-1   Ready
user-vm-2   Ready
user-vm-3   Ready

RBAC 승인 사용 설정

클러스터에서 사용자 계정에 Kubernetes clusterrole/cluster-admin 역할을 부여하려면 다음 명령어를 실행합니다.

gcloud container fleet memberships generate-gateway-rbac \
  --membership=minimal-installation-user-cluster \
  --role=clusterrole/cluster-admin \
  --users=GOOGLE_ACCOUNT_EMAIL \
  --project=PROJECT_ID \
  --kubeconfig=USER_CLUSTER_KUBECONFIG \
  --context=minimal-installation-user-cluster \
  --apply

이 명령어의 출력은 가독성을 위해 잘려서 표시된 다음과 비슷합니다.

Validating input arguments.
Specified Cluster Role is: clusterrole/cluster-admin
Generated RBAC policy is:
--------------------------------------------
...
Applying the generate RBAC policy to cluster with kubeconfig: kubeconfig, context: minimal-installation-admin-cluster
Writing RBAC policy for user: GOOGLE_ACCOUNT_EMAIL to cluster.
Successfully applied the RBAC policy to cluster.

무엇보다도 RBAC 정책을 사용하면 Google ID를 사용하여 Google Cloud 콘솔에서 클러스터에 로그인하여 더 많은 클러스터 세부정보를 볼 수 있습니다.

GKE On-Prem API에 자동 등록

GKE On-Prem API가 프로젝트에 사용 설정되었으므로 클러스터가 GKE On-Prem API에 자동으로 등록됩니다. 이렇게 하면 콘솔이나 gcloud CLI를 사용하여 클러스터 세부정보를 보고 클러스터 수명 주기를 관리할 수 있습니다. 예를 들어 gcloud 명령어를 실행하여 사용자 클러스터에 대한 정보를 가져올 수 있습니다.

Console

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

    VMware용 GKE 클러스터 만들기로 이동

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

다음 섹션에서는 사용자 클러스터를 구성하는 방법을 안내합니다.

기본 요건

  1. 기본 요건 페이지의 정보를 숙지합니다.

  2. 페이지 하단에서 다음을 클릭합니다.

클러스터 기본사항

  1. 이름에 사용자 클러스터 이름을 입력합니다(예: minimal-installation-user-cluster).

  2. 관리자 클러스터minimal-installation-admin-cluster를 선택합니다.

  3. GCP API 위치 필드에서 us-central1을 선택합니다.

  4. 버전에 1.28.200-gke.111을 선택합니다.

  5. 승인 섹션이나 vCenter 구성 섹션을 열 필요는 없습니다.

  6. 다음을 클릭합니다.

제어 영역

  1. 제어 영역 노드 IP에서 게이트웨이DEFAULT_GATEWAY_IP를 입력합니다.

  2. 서브넷 마스크NETMASK를 입력합니다.

  3. IP 주소에서 IP 주소 1USER_CONTROL_PLANE_NODE_IP를 입력합니다. 호스트 이름 1을 비워 둡니다.

  4. 다음을 클릭합니다.

네트워킹

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

  1. 워커 노드 IP에서 IP 모드고정이 선택되어 있는지 확인합니다.

  2. 게이트웨이DEFAULT_GATEWAY_IP를 입력합니다.

  3. 서브넷 마스크NETMASK를 입력합니다.

  4. IP 주소에서 다음 주소를 입력합니다.

  • USER_NODE_IP_1
  • USER_NODE_IP_2
  • USER_NODE_IP_3
  • USER_NODE_IP_4

호스트 이름 필드를 비워둡니다.

  1. 서비스 CIDR10.96.0.0/20을 입력합니다. 포드 CIDR192.168.0.0/16을 입력합니다.

  2. DNS 서버 1DNS_SERVER_IP를 입력합니다.

  3. NTP 서버 1NTP_SERVER_IP를 입력합니다.

  4. DNS 검색 도메인을 비워둡니다.

  5. 다음을 클릭합니다.

부하 분산기

  1. 부하 분산기 유형MetalLB와 함께 번들로 제공을 선택합니다.

  2. 주소 풀에서 기본 이름을 사용합니다.

  3. IP 주소에서 IP 주소 범위 1USER_INGRESS_VIP/32를 입력합니다.

    IP 주소 범위 추가를 클릭합니다. IP 주소 범위 1SERVICE_VIP_1/32를 입력합니다.

    IP 주소 범위 추가를 클릭합니다. IP 주소 범위 2SERVICE_VIP_2/32를 입력합니다.

  4. IP 주소 할당자동을 선택합니다.

  5. 버그가 있는 IP 주소 방지를 선택 해제한 채로 둡니다.

  6. 가상 IP에서 제어 영역 VIPUSER_CONTROL_PLANE_VIP를 입력합니다. 인그레스 VIP는 이미 입력되어 있습니다.

  7. 계속을 클릭합니다.

기능

  1. 모든 기본값을 그대로 둡니다.

  2. 다음을 클릭합니다.

노드 풀

  1. 모든 기본값을 그대로 둡니다.

  2. 확인 및 완료를 클릭하여 사용자 클러스터를 만듭니다. 사용자 클러스터를 만드는 데 15분 이상 걸립니다. 콘솔은 설정을 확인하고 데이터 센터에 클러스터를 만들 때 상태 메시지를 표시합니다.

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

    발생 가능한 오류와 해결 방법에 대한 자세한 내용은 GKE On-Prem API에 등록된 클러스터 문제 해결을 참조하세요.

Terraform

이 섹션에서는 Terraform을 사용하여 사용자 클러스터와 노드 풀을 만드는 방법을 보여줍니다. 자세한 내용 및 기타 예시는 다음을 참조하세요.

  1. 디렉터리를 만들고 해당 디렉터리 내에 새 파일을 만듭니다. 파일 이름에 .tf 확장자가 있어야 합니다. 이 가이드에서는 파일을 main.tf로 지정합니다.

    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
    
  2. 사용자 클러스터 Terraform 리소스를 확인합니다.

    다음 Terraform 리소스 예시는 이전 섹션에서 계획 테이블에 입력한 값으로 채워집니다.

    resource "google_gkeonprem_vmware_cluster" "cluster-basic" {
      name = "minimal-installation-user-cluster"
      project = "PROJECT_ID"
      location = "us-central1"
      admin_cluster_membership = "projects/PROJECT_ID/locations/global/memberships/minimal-installation-admin-cluster"
      description = "User cluster config with MetalLB, static IPs, and Controlplane V2"
      enable_control_plane_v2 = "true"
      on_prem_version = "1.28.200-gke.111"
      control_plane_node {
        cpus = 4
        memory = 8192
        replicas = 1
      }
      network_config {
        service_address_cidr_blocks = ["10.96.0.0/20"]
        pod_address_cidr_blocks = ["192.168.0.0/16"]
        host_config {
          dns_servers = ["DNS_SERVER_IP"]
          ntp_servers = ["NTP_SERVER_IP"]
        }
        static_ip_config {
          ip_blocks {
            netmask = "NETMASK"
            gateway = "DEFAULT_GATEWAY_IP"
            ips {
              ip = "USER_NODE_IP_1"
              hostname = "user-vm-1"
            }
            ips {
              ip = "USER_NODE_IP_2"
              hostname = "user-vm-2"
            }
            ips {
              ip = "USER_NODE_IP_3"
              hostname = "user-vm-3"
            }
            ips {
              ip = "USER_NODE_IP_4"
              hostname = "user-vm-4"
            }
          }
        }
        control_plane_v2_config {
          control_plane_ip_block {
            netmask = "NETMASK"
            gateway = "DEFAULT_GATEWAY_IP"
            ips {
              ip = "USER_CONTROL_PLANE_NODE_IP"
              hostname = "cp-vm-1"
            }
          }
        }
      }
      load_balancer {
        vip_config {
          control_plane_vip = "USER_CONTROL_PLANE_VIP"
          ingress_vip = "USER_INGRESS_VIP"
        }
        metal_lb_config {
          address_pools {
            pool = "uc-address-pool"
            manual_assign = "true"
            addresses = ["USER_INGRESS_VIP/32", "SERVICE_VIP_1/32", "SERVICE_VIP_2/32"]
          }
        }
      }
      authorization {
        admin_users {
        username = "GOOGLE_ACCOUNT_EMAIL"
      }
    }
      provider = google-beta
    }
    
    resource "google_gkeonprem_vmware_node_pool" "my-node-pool-1" {
      name = "uc-node-pool"
      project = "PROJECT_ID"
      vmware_cluster = "minimal-installation-user-cluster"
      location = "us-central1"
      config {
        replicas = 3
        image_type = "ubuntu_containerd"
        enable_load_balancer = "true"
      }
      depends_on = [
        google_gkeonprem_vmware_cluster.cluster-basic
      ]
      provider = google-beta
    }
    
  3. Terraform 리소스를 main.tf에 복사하고 파일을 저장합니다.

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

    terraform init
    

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

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

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

    terraform apply
    

    메시지가 표시되면 yes를 입력합니다.

    기본 사용자 클러스터와 노드 풀을 만드는 데 약 15분 정도(또는 네트워크에 따라 그 이상) 소요됩니다.

gcloud

클러스터를 만듭니다.

gcloud container vmware clusters create minimal-installation-user-cluster \
  --project=PROJECT_ID \
  --admin-cluster-membership=projects/PROJECT_ID/locations/global/memberships/minimal-installation-admin-cluster \
  --location=us-central1 \
  --version=1.28.200-gke.111 \
  --admin-users=GOOGLE_ACCOUNT_EMAIL \
  --service-address-cidr-blocks=10.96.0.0/20 \
  --pod-address-cidr-blocks=192.168.0.0/16 \
  --metal-lb-config-address-pools='pool=uc-address-pool,avoid-buggy-ips=False,manual-assign=False,addresses=USER_INGRESS_VIP/32;SERVICE_VIP_1/32;SERVICE_VIP_2/32' \
  --control-plane-vip=USER_CONTROL_PLANE_VIP \
  --ingress-vip=USER_INGRESS_VIP \
  --static-ip-config-ip-blocks='gateway=DEFAULT_GATEWAY_IP,netmask=NETMASK,ips=USER_NODE_IP_1;USER_NODE_IP_2;USER_NODE_IP_3;USER_NODE_IP_4' \
  --dns-servers=DNS_SERVER_IP \
  --ntp-servers=NTP_SERVER_IP \
  --enable-control-plane-v2 \
  --enable-dataplane-v2 \
  --control-plane-ip-block='gateway=DEFAULT_GATEWAY_IP,netmask=NETMASK,ips=USER_CONTROL_PLANE_NODE_IP'

명령어 출력은 다음과 비슷합니다.

Waiting for operation [projects/example-project-12345/locations/us-central1/operations/operation-1679543737105-5f7893fd5bae9-942b3f97-75e59179] to complete.

예시 출력에서 operation-1679543737105-5f7893fd5bae9-942b3f97-75e59179 문자열은 장기 실행 작업의 OPERATION_ID입니다. 다음 명령어를 실행하여 작업 상태를 확인할 수 있습니다.

gcloud container vmware operations describe OPERATION_ID \
  --project=PROJECT_ID \
  --location=us-central1

자세한 내용은 gcloud container vmware operations를 참조하세요.

사용자 클러스터를 만드는 데 15분 이상 걸립니다. Google Kubernetes Engine 클러스터 개요 페이지의 콘솔에서 클러스터를 볼 수 있습니다.

노드 풀 만들기:

gcloud container vmware node-pools create  uc-node-pool \
  --cluster=minimal-installation-user-cluster \
  --project=PROJECT_ID \
  --location=us-central1 \
  --image-type=ubuntu_containerd  \
  --boot-disk-size=40 \
  --cpus=4 \
  --memory=8192 \
  --replicas=3 \
  --enable-load-balancer

다음 단계

이제 VMware용 GKE의 최소 설치가 완료되었습니다. 원하는 경우 후속 작업으로 애플리케이션을 배포하여 설치의 실제 작동 방식을 확인할 수 있습니다.