Compute Engine VM에서 데모 Google Distributed Cloud 관리자 및 사용자 클러스터 만들기

Compute Engine 가상 머신(VM)에서 데모 클러스터를 만들어 Google Distributed Cloud에 대해 알아봅니다. 이 가이드에 따라 관리자 클러스터와 사용자 클러스터를 만드는 데에는 40분~1시간 정도 걸릴 수 있습니다. 이 가이드에서 만드는 데모 클러스터는 Google Distributed Cloud 클러스터의 프로비저닝 및 운영 프로세스를 평가하는 데 도움이 되지만 프로덕션 용도가 아닙니다.

이 문서에서는 다음과 같은 스크립트 실행 프로세스를 안내합니다.

  • 데모 클러스터 설치를 위해 Compute Engine VM을 5개 프로비저닝합니다.
  • 클러스터 연결을 제공하도록 VPC 네트워크를 설정합니다.

스크립트로 필요한 리소스가 프로비저닝되었으면 다음 클라이언트 중 하나를 사용하여 관리자 클러스터 및 수반되는 사용자 클러스터를 만듭니다. 이러한 클러스터는 bmctl, Google Cloud 콘솔, Google Cloud CLI, Terraform과 같은 워크로드를 호스팅할 수 있습니다.

절차 개요

이 가이드에 포함된 기본 단계는 다음과 같습니다.

  1. 스크립트에 필요한 환경 변수가 포함되고 명령어 실행에 필요한 기본 정보가 수집될 수 있도록 로컬 환경을 준비합니다.

  2. 다운로드한 스크립트를 사용하여 VM 및 네트워크를 만듭니다.

  3. 지원되는 클라이언트 중 하나를 사용하여 관리자 클러스터를 만듭니다.

  4. 지원되는 클라이언트 중 하나를 사용하여 사용자 클러스터를 만듭니다.

  5. 삭제 섹션의 안내에 따라 이 가이드에서 만든 클러스터와 VM을 삭제합니다.

1. 로컬 환경 준비

이 가이드에서는 자동으로 네트워크를 설정하는 스크립트를 사용하기 때문에 많은 정보를 수집하거나 계획을 수행할 필요가 없습니다. 다음 단계에서는 로컬 환경을 설정하고 이어지는 가이드 섹션에 필요한 기본 정보를 수집합니다.

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. 이 페이지의 스크립트 및 명령어에 사용되는 환경 변수를 설정하기 위해 필요하므로 프로젝트 ID를 기록해 둡니다. 기존 프로젝트를 선택한 경우 프로젝트 소유자 또는 편집자인지 확인하세요.
  7. Cloud Shell 또는 Linux나 macOS를 실행하는 로컬 머신에서 스크립트를 실행할 수 있습니다. Cloud Shell을 사용하지 않는 경우:
    1. Google Cloud와의 상호작용을 위한 명령줄 도구인 최신 Google Cloud CLI가 설치되어 있는지 확인합니다. 필요한 경우 gcloud CLI 구성요소를 업데이트합니다.
      gcloud components update

      gcloud CLI가 설치된 방법에 따라 다음 메시지를 참조할 수 있습니다.

      You cannot perform this action because the Google Cloud CLI component manager is disabled for this installation. You can run the following command to achieve the same result for this installation:

      구성요소를 업데이트하려면 안내에 따라 명령어를 복사하여 붙여넣습니다.

    2. kubectl이 설치되어 있는지 확인합니다. kubectl를 설치해야 하는 경우 다음 명령어를 실행합니다.
      gcloud components install kubectl
  8. 환경 변수 설정
    export PROJECT_ID=PROJECT_ID
    export ADMIN_CLUSTER_NAME=ADMIN_CLUSTER_NAME
    export ON_PREM_API_REGION=ON_PREM_API_REGION
    export ZONE=ZONE
    • ADMIN_CLUSTER_NAME: 선택한 관리자 클러스터의 이름입니다.
    • ON_PREM_API_REGION: GKE On-Prem API가 메타데이터를 실행하고 저장하는 Google Cloud 리전입니다. us-central1 또는 다른 지원되는 리전을 지정합니다.
    • ZONE: Compute Engine VM이 생성되는 Google Cloud 영역입니다. us-central1-a 또는 다른 Compute Engine 영역을 사용할 수 있습니다.
  9. 다음 명령어를 실행하여 기본 프로젝트 및 영역을 설정합니다.
    gcloud config set project $PROJECT_ID
    gcloud config set compute/zone $ZONE

    PERMISSION_DENIED 오류가 발생하면 입력한 프로젝트 ID를 다시 확인합니다. 프로젝트 ID가 올바르면 gcloud auth login을 실행하여 프로젝트에 액세스 권한이 있는 계정으로 gcloud CLI에 로그인합니다.

  10. 설치할 수 있는 지원되는 버전 목록을 가져옵니다.
    gcloud container bare-metal admin-clusters query-version-config \
        --location=ON_PREM_API_REGION
  11. 이전 명령어 출력에서 버전을 선택하고 이를 환경 변수로 설정합니다.
    export BMCTL_VERSION=BMCTL_VERSION

    최신 Google Distributed Cloud 기능과 수정사항을 가져오려면 호환성이 가장 높은 버전을 선택하는 것이 좋습니다.

2. VM 및 네트워크 만들기

이 섹션에서는 install_admin_cluster.sh 스크립트를 다운로드하고 실행합니다.

  1. anthos-samples 저장소를 클론하고 스크립트가 있는 디렉터리로 변경합니다.

    git clone https://github.com/GoogleCloudPlatform/anthos-samples
    cd anthos-samples/anthos-bm-gcp-bash
    
  2. 스크립트를 실행합니다.

    bash install_admin_cluster.sh
    
  3. 프롬프트에서 2를 입력하여 Compute Engine 인프라만 설정하고 메시지가 표시되면 선택한 옵션을 확인합니다.

    스크립트가 Compute Engine VM을 만들고, VXLAN 네트워크를 만들고, 관리자 워크스테이션과 클러스터 노드를 설정합니다. 이 인프라는 설정하는 데 5분 정도 걸립니다.

    스크립트에 대해 자세히 알아보려면 다음 링크를 클릭하세요.

    스크립트 정보

    스크립트는 anthos-samples GitHub 저장소에 있는 anthos-bm-gcp-bash 폴더에서 볼 수 있습니다. 스크립트는 다음 수동 단계를 자동화합니다.

    1. 다음 Google Cloud API를 사용 설정합니다.
      anthos.googleapis.com
      anthosaudit.googleapis.com
      anthosgke.googleapis.com
      cloudresourcemanager.googleapis.com
      connectgateway.googleapis.com
      container.googleapis.com
      compute.googleapis.com
      gkeconnect.googleapis.com
      gkehub.googleapis.com
      gkeonprem.googleapis.com
      serviceusage.googleapis.com
      stackdriver.googleapis.com
      monitoring.googleapis.com
      logging.googleapis.com
      kubernetesmetadata.googleapis.com
      iam.googleapis.com
      opsconfigmonitoring.googleapis.com
    2. 스크립트는 여러 다른 API 및 서비스에 대해 여러 서비스 계정을 만드는 대신 baremetal-gcr이라는 단일 서비스 계정을 만들고 여기에 다음과 같은 IAM 역할을 부여합니다.
      • roles/gkehub.admin
      • roles/gkehub.connect
      • roles/logging.logWriter
      • roles/monitoring.dashboardEditor
      • roles/monitoring.metricWriter
      • roles/monitoring.viewer
      • roles/opsconfigmonitoring.resourceMetadata.writer
      • roles/serviceusage.serviceUsageViewer
      • roles/stackdriver.resourceMetadata.writer
    3. 다음 VM을 만듭니다.
      • 관리자 워크스테이션을 위한 VM 1개.
      • 관리자 클러스터의 컨트롤 플레인 노드에 대한 VM 1개.
      • 사용자 클러스터의 워커 노드에 대한 VM 2개.
      • 사용자 클러스터의 컨트롤 플레인 노드에 대한 VM 1개.
    4. 모든 VM에 SSH가 사용 설정되었고 관리자 워크스테이션에 클러스터 노드에 대해 생성된 다른 모든 VM에 대한 SSH 액세스 권한이 있는지 확인합니다.
    5. VM 간에 레이어 2 연결을 위한 가상 확장 가능 LAN(VXLAN) 오버레이 네트워크를 만듭니다. VXLAN은 영구적이지 않으므로 VM 인스턴스를 재부팅하면 네트워크가 삭제됩니다. 네트워크는 10.200.0.0/24 서브넷에 있도록 설정됩니다. 레이어 2 연결은 번들 부하 분산기의 요구사항입니다.
    6. 관리자 워크스테이션에 다음 도구를 설치\합니다.
      • bmctl
      • kubectl
      • Docker

      또한 스크립트는 baremetal-gcr 서비스 계정에 대한 서비스 계정 키를 관리자 워크스테이션에 다운로드합니다.

    7. 다음 작업을 수행하여 관리자 워크스테이션의 root@10.200.0.x가 작동하는지 확인합니다.
      1. 관리자 워크스테이션에서 새 SSH 키를 생성합니다.
      2. 배포에서 다른 모든 VM에 공개 키를 추가합니다.

    스크립트가 실행하는 각 명령어 및 상태를 출력합니다. 완료되면 스크립트가 다음을 출력합니다.

    ✅ Successfully set up SSH access from admin workstation to cluster node VMs.
    
    ✅ GCE Infrastructure setup complete. Please check the logs for any errors!!!
    
    ✅ If you do not see any errors in the output log, then you now have the following setup:
    
    |---------------------------------------------------------------------------------------------------------|
    | VM Name               | L2 Network IP (VxLAN) | INFO                                                    |
    |---------------------------------------------------------------------------------------------------------|
    | abm-admin-cluster-cp  | 10.200.0.3            | 🌟 Ready for use as control plane for the admin cluster |
    | abm-user-cluster-cp   | 10.200.0.4            | 🌟 Ready for use as control plane for the user cluster  |
    | abm-user-cluster-w1   | 10.200.0.5            | 🌟 Ready for use as worker for the user cluster         |
    | abm-user-cluster-w2   | 10.200.0.6            | 🌟 Ready for use as worker for the user cluster         |
    |---------------------------------------------------------------------------------------------------------|
    

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

bmctl

bmctl로 관리자 클러스터를 만들려면 터미널 창에서 관리자 워크스테이션 VM에 액세스하고 여기에서 명령어를 실행합니다.

  1. SSH를 사용하여 루트로 abm-ws 관리자 워크스테이션 VM에 액세스합니다.

    gcloud compute ssh root@abm-ws --zone ZONE
    
  2. 사용자 인증 정보를 애플리케이션 기본 사용자 인증 정보(ADC)로 설정합니다.

    gcloud auth application-default login
    

    메시지에 따라 ADC용 Google 계정을 선택합니다.

  3. 클러스터 구성 파일을 생성합니다.

    bmctl create config -c ADMIN_CLUSTER_NAME --project-id=PROJECT_ID
    
  4. 관리자 클러스터 구성 파일을 확인합니다.

    다음 클러스터 구성 파일은 사용자가 이전에 제공한 값으로 채워집니다. 입력한 값 외에도 생성된 구성 파일에서 다음 차이를 확인합니다.

    • 이 샘플에서는 가독성을 높이기 위해 주석이 삭제되었습니다.
    • 이 스크립트는 모든 필요한 권한이 포함된 단일 서비스 계정을 만들고 구성 파일에 참조된 bm-gcr.json 키를 다운로드합니다.
    gcrKeyPath: /root/bm-gcr.json
    sshPrivateKeyPath: /root/.ssh/id_rsa
    gkeConnectAgentServiceAccountKeyPath: /root/bm-gcr.json
    gkeConnectRegisterServiceAccountKeyPath: /root/bm-gcr.json
    cloudOperationsServiceAccountKeyPath: /root/bm-gcr.json
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-ADMIN_CLUSTER_NAME
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: ADMIN_CLUSTER_NAME
      namespace: cluster-ADMIN_CLUSTER_NAME
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: BMCTL_VERSION
      gkeConnect:
        projectID: PROJECT_ID
      controlPlane:
        nodePoolSpec:
          nodes:
          - address: 10.200.0.3
      clusterNetwork:
        pods:
          cidrBlocks:
          - 192.168.0.0/16
        services:
          cidrBlocks:
          - 10.96.0.0/20
      loadBalancer:
        mode: bundled
        ports:
          controlPlaneLBPort: 443
        vips:
          controlPlaneVIP: 10.200.0.48
      clusterOperations:
        projectID: PROJECT_ID
        location: us-central1
      storage:
        lvpNodeMounts:
          path: /mnt/localpv-disk
          storageClassName: local-disks
        lvpShare:
          path: /mnt/localpv-share
          storageClassName: local-shared
          numPVUnderSharedPath: 5
      nodeConfig:
        podDensity:
          maxPodsPerNode: 110
    
  5. 관리자 워크스테이션에서 생성된 구성 파일의 콘텐츠를 이전 샘플의 콘텐츠로 바꿉니다.

    생성된 파일 bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME.yaml을 열고 해당 콘텐츠를 이전 단계에서 확인한 샘플의 콘텐츠로 바꿉니다.

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

    bmctl create cluster -c ADMIN_CLUSTER_NAME

    bmctl 명령어는 프리플라이트 검사를 실행하고 클러스터를 만들 때 화면에 출력을 표시합니다. 자세한 정보는 관리자 워크스테이션의 baremetal/bmctl-workspace/abm-user-cluster-metallb/log 폴더에 있는 로그에 기록됩니다.

    클러스터를 만드는 데 몇 분 정도 걸릴 수 있습니다.

  7. 콘솔에서 GKE 클러스터 페이지로 이동합니다.

    GKE 클러스터로 이동

    사용자 클러스터를 만든 프로젝트가 선택되었는지 확인합니다. 나열된 관리자 클러스터가 표시됩니다.

  8. 관리자 클러스터에 로그인합니다.

    1. 클러스터 이름의 링크를 클릭하고 측면 패널에서 로그인을 클릭합니다.

    2. Google ID를 사용하여 로그인을 선택합니다.

    3. 로그인을 클릭합니다.

관리자 클러스터 확인

루트 계정의 bmctl-workspace 디렉터리에 있는 관리자 워크스테이션에서 관리자 클러스터의 kubeconfig 파일을 찾을 수 있습니다. 배포를 확인하려면 다음 단계를 완료하세요.

  1. SSH를 사용하여 루트로 관리자 워크스테이션에 액세스합니다.

    gcloud compute ssh root@abm-ws --zone ZONE
    
  2. 관리자 클러스터가 생성되었고 실행 중인지 확인합니다.

    kubectl --kubeconfig bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig get nodes
    

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

    NAME                   STATUS   ROLES                  AGE   VERSION
    abm-admin-cluster-cp   Ready    control-plane   94m   v1.27.4-gke.1600
    
  3. 탐색이 완료되었으면 exit를 입력하여 관리자 워크스테이션에서 연결을 해제합니다.

콘솔

콘솔에서 관리자 클러스터를 만들려면 관리자 워크스테이션 VM에서 bmctl register bootstrap을 실행하여 부트스트랩 클러스터를 만들어야 합니다. bmctl register bootstrap 명령어가 실행 중이면 콘솔에서 단계를 수행하여 관리자 클러스터를 만듭니다.

부트스트랩 환경 기본 사항 입력

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

    GKE 클러스터로 이동

  2. 만들기를 클릭합니다.

  3. 클러스터 만들기 대화상자에서 온프레미스를 선택하고 베어메탈의 구성을 클릭합니다.

  4. 프로젝트 목록에서 PROJECT_ID를 선택해야 합니다.

  5. 왼쪽 탐색 메뉴에서 부트스트랩 환경 설치를 클릭합니다.

  6. 관리자 클러스터 이름으로 ADMIN_CLUSTER_NAME을 입력합니다.

  7. BMCTL_VERSION을 관리자 클러스터의 버전으로 선택합니다. 스크립트가 이 버전의 bmctl 명령줄 도구를 관리자 워크스테이션에 다운로드했습니다. 설치하는 Google Distributed Cloud 버전은 bmctl 버전과 일치해야 합니다.

  8. Google Cloud API 위치 필드의 목록에서 ON_PREM_API_REGION을 선택합니다. 이 설정은 GKE On-Prem API가 실행되는 리전과 다음 항목이 저장되는 리전을 지정합니다.

    • GKE On-Prem API에서 클러스터 수명 주기를 관리하는 데 필요한 클러스터 메타데이터
    • 시스템 구성요소의 Cloud Logging 및 Cloud Monitoring 데이터
    • Cloud 감사 로그에서 만든 관리자 감사 로그

    클러스터 이름, 프로젝트, 위치에 따라 Google Cloud의 클러스터가 고유하게 식별됩니다.

콘솔에 표시되는 단계 대신 다음 섹션의 단계에 따라 부트스트랩 클러스터를 만듭니다. 여기에서 계속 관리자 클러스터를 만들기 때문에 콘솔 페이지를 표시된 상태로 둡니다.

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

콘솔과 같이 GKE On-Prem API 클라이언트를 사용하여 관리자 클러스터를 만들 때는 관리자 워크스테이션에서 부트스트랩 클러스터를 만들어야 합니다. 이 부트스트랩 클러스터는 관리자 클러스터를 만드는 데 필요한 Kubernetes 컨트롤러를 호스팅합니다.

  1. 명령줄에서 SSH를 사용하여 관리자 워크스테이션 VM에 루트로 액세스합니다.

    gcloud compute ssh root@abm-ws --zone ZONE
    

    VM 업데이트에 대한 메시지를 무시하고 이 튜토리얼을 완료하면 됩니다. VM을 테스트 환경으로 유지하려는 경우 Ubuntu 문서에 설명된 대로 OS를 업데이트하거나 다음 버전으로 업그레이드해야 할 수 있습니다.

  2. 사용자 인증 정보를 애플리케이션 기본 사용자 인증 정보(ADC)로 설정합니다.

    gcloud auth application-default login
    

    메시지에 따라 ADC용 Google 계정을 선택합니다.

  3. baremetal/ 디렉터리로 변경하고 다음 명령어를 실행하여 부트스트랩 클러스터를 만듭니다.

    부트스트랩 클러스터 이름은 관리자 클러스터 이름에 bootstrap-을 추가하여 파생됩니다.

    bmctl register bootstrap \
      --ssh-key=/root/.ssh/id_rsa \
      --name=bootstrap-ADMIN_CLUSTER_NAME \
      --project-id=PROJECT_ID
    

    bmctl이 부트스트랩 클러스터를 성공적으로 만들면 다음과 비슷한 출력이 표시됩니다.

    [2023-03-22 17:35:24+0000] Waiting for the temporary cluster to be registered... OK
    [2023-03-22 17:35:37+0000] Please go to https://console.cloud.google.com/home/dashboard?project=example-project-12345 to create the cluster
    [2023-03-22 17:35:37+0000] Waiting for preflight checks and cluster to run..
    

관리자 클러스터 만들기

  1. 관리자 워크스테이션의 부트스트랩 환경 섹션에 있는 부트스트랩 환경 설치 페이지에서 연결 확인을 클릭합니다.

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

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

    • --name 값이 부트스트랩 환경 기본사항 섹션에 표시된 파생된 부트스트랩 이름과 일치하는지 확인합니다.

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

    부트스트랩 클러스터 이름 또는 프로젝트 ID를 변경해야 하는 경우 Ctrl-C를 입력하여 bmctl register bootstrap을 종료하고 명령어를 다시 실행합니다.

네트워킹

  1. 왼쪽 탐색 메뉴에서 네트워킹을 클릭합니다.

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

    10.200.0.3
    

    이는 스크립트로 생성된 VXLAN의 abm-admin-cluster-cp VM의 IP 주소입니다.

  3. 부하 분산기 섹션에서 번들이 선택되어 있는지 확인합니다.

  4. 가상 IP(VIP) 섹션에서 컨트롤 플레인 VIP 필드에 다음을 입력합니다.

    10.200.0.48
    

    다음 단계는 부트스트랩 클러스터를 사용할 수 있는지 여부에 따라 달라집니다. 터미널 창에서 bmctl register bootstrap 명령어는 부트스트랩 클러스터가 등록된 멤버로 표시되기 전 몇 분 동안 실행되어야 합니다. 몇 분 후에도 사용할 수 없는 상태면 부트스트랩 클러스터 이름과 사용한 프로젝트 ID를 확인하세요. 부트스트랩 클러스터 이름 또는 프로젝트 ID를 변경해야 하는 경우 다른 터미널 창에서 Ctrl-C를 입력하여 bmctl register bootstrap을 종료하고 명령어를 다시 실행합니다.

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

    콘솔에 설정을 확인하고 클러스터를 만들 때 상태 메시지가 표시됩니다.

    관리자 클러스터가 생성되면 관리자 워크스테이션의 부트스트랩 클러스터가 삭제됩니다. 다른 터미널 창에서 bmctl register bootstrap 명령어의 출력은 다음과 비슷합니다.

    ...
    [2024-04-15 23:10:48+0000] Waiting for cluster to become ready OK
    [2024-04-15 23:16:38+0000] Please run
    [2024-04-15 23:16:38+0000] kubectl --kubeconfig bmctl-workspace/gce-admin-gcloud-001/gce-admin-gcloud-001-kubeconfig get nodes
    [2024-04-15 23:16:38+0000] to get cluster nodes status.
    [2024-04-15 23:16:38+0000] Waiting for node pools to become ready OK
    [2024-04-15 23:16:58+0000] Waiting for metrics to become ready in GCP OK
    [2024-04-15 23:21:58+0000] Waiting for cluster API provider to install in the created admin cluster OK
    [2024-04-15 23:22:08+0000] Moving admin cluster resources to the created admin cluster
    [2024-04-15 23:22:10+0000] Waiting for node update jobs to finish OK
    [2024-04-15 23:24:30+0000] Flushing logs... OK
    [2024-04-15 23:24:30+0000] Unregistering bootstrap cluster.
    [2024-04-15 23:24:30+0000] Deleting membership... OK
    [2024-04-15 23:24:32+0000] Deleting bootstrap cluster.
    

관리자 클러스터 확인

루트 계정의 bmctl-workspace 디렉터리에 있는 관리자 워크스테이션에서 관리자 클러스터의 kubeconfig 파일을 찾을 수 있습니다. 배포를 확인하려면 다음 단계를 완료하세요.

  1. SSH를 사용하여 루트로 관리자 워크스테이션에 액세스합니다.

    gcloud compute ssh root@abm-ws --zone ZONE
    
  2. 관리자 클러스터가 생성되었고 실행 중인지 확인합니다.

    kubectl --kubeconfig bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig get nodes
    

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

    NAME                   STATUS   ROLES                  AGE   VERSION
    abm-admin-cluster-cp   Ready    control-plane   94m   v1.27.4-gke.1600
    
  3. 탐색이 완료되었으면 exit를 입력하여 관리자 워크스테이션에서 연결을 해제합니다.

gcloud CLI

다음 안내를 따르려면 2개의 터미널 창이 필요합니다. 하나의 터미널 창에서는 bmctl register bootstrap을 실행하여 부트스트랩 클러스터를 만듭니다. bmctl register bootstrap 명령어가 실행되는 동안 다른 터미널 창에서 gcloud container bare-metal admin-clusters create를 실행하여 관리자 클러스터를 만듭니다.

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

gcloud CLI와 같이 GKE On-Prem API 클라이언트를 사용하여 관리자 클러스터를 만들 때는 관리자 워크스테이션에서 부트스트랩 클러스터를 만들어야 합니다. 이 부트스트랩 클러스터는 관리자 클러스터를 만드는 데 필요한 Kubernetes 컨트롤러를 호스팅합니다.

  1. 명령줄에서 SSH를 사용하여 관리자 워크스테이션 VM에 루트로 액세스합니다.

    gcloud compute ssh root@abm-ws --zone ZONE
    

    VM 업데이트에 대한 메시지를 무시하고 이 튜토리얼을 완료하면 됩니다. VM을 테스트 환경으로 유지하려는 경우 Ubuntu 문서에 설명된 대로 OS를 업데이트하거나 다음 버전으로 업그레이드해야 할 수 있습니다.

  2. 사용자 인증 정보를 애플리케이션 기본 사용자 인증 정보(ADC)로 설정합니다.

    gcloud auth application-default login
    

    메시지에 따라 ADC용 Google 계정을 선택합니다.

  3. baremetal/ 디렉터리로 변경하고 다음 명령어를 실행하여 부트스트랩 클러스터를 만듭니다.

    부트스트랩 클러스터 이름은 관리자 클러스터 이름에 bootstrap-을 추가하여 파생됩니다.

    bmctl register bootstrap \
      --ssh-key=/root/.ssh/id_rsa \
      --name=bootstrap-ADMIN_CLUSTER_NAME \
      --project-id=PROJECT_ID
    

    bmctl이 부트스트랩 클러스터를 성공적으로 만들면 다음과 비슷한 출력이 표시됩니다.

    [2023-03-22 17:35:24+0000] Waiting for the temporary cluster to be registered... OK
    [2023-03-22 17:35:37+0000] Please go to https://console.cloud.google.com/home/dashboard?project=example-project-12345 to create the cluster
    [2023-03-22 17:35:37+0000] Waiting for preflight checks and cluster to run..
    

관리자 클러스터 만들기

  1. 새 터미널 창에서 부트스트랩 클러스터가 Fleet 멤버로 등록되었는지 확인합니다.

    gcloud container fleet memberships list \
        --project=PROJECT_ID
    

    다음 단계의 gcloud container bare-metal admin-clusters create 명령어는 부트스트랩 클러스터를 사용할 수 있는지 여부에 따라 달라집니다. 다른 터미널 창에서 bmctl register bootstrap 명령어는 부트스트랩 클러스터가 등록된 멤버로 표시되기 전 몇 분 동안 실행되어야 합니다.' 몇 분 후에도 나열되지 않으면 부트스트랩 클러스터 이름과 사용한 프로젝트 ID를 확인하세요. 부트스트랩 클러스터 이름 또는 프로젝트 ID를 변경해야 하는 경우 다른 터미널 창에서 Ctrl-C를 입력하여 bmctl register bootstrap을 종료하고 명령어를 다시 실행합니다.

  2. 번들 부하 분산기가 있는 관리자 클러스터를 만듭니다.

    지정하는 값이 이전에 스크립트에 지정한 환경 변수와 일치하는지 확인합니다.

    gcloud container bare-metal admin-clusters create ADMIN_CLUSTER_NAME \
        --project=PROJECT_ID \
        --location=ON_PREM_API_REGION \
        --version=BMCTL_VERSION \
        --max-pods-per-node=110 \
        --control-plane-vip=10.200.0.48 \
        --control-plane-load-balancer-port=443 \
        --control-plane-node-configs node-ip=10.200.0.3 \
        --island-mode-service-address-cidr-blocks=10.96.0.0/20 \
        --island-mode-pod-address-cidr-blocks=192.168.0.0/16 \
        --lvp-share-path=/mnt/localpv-share \
        --lvp-share-storage-class=local-shared \
        --lvp-node-mounts-config-path=/mnt/localpv-disk \
        --lvp-node-mounts-config-storage-class=local-disks
    

    이 명령어에서

    • --control-plane-vip: 10.200.0.48로 설정됩니다. 클러스터의 Kubernetes API 서버용 부하 분산기의 가상 IP(VIP)입니다.

    • --control-plane-node-configs: node-ip10.200.0.3으로 설정됩니다. 이는 스크립트로 생성된 VXLAN에서 abm-admin-cluster-cp VM의 IP 주소입니다.

    플래그 및 해당 설명의 전체 목록은 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 bare-metal operations describe OPERATION_ID \
        --project=PROJECT_ID \
        --location=ON_PREM_API_REGION
    

    gcloud container bare-metal admin-clusters create가 성공적으로 완료되면 출력은 다음과 비슷합니다.

    Created Anthos on bare metal Admin Cluster
    [https://gkeonprem.googleapis.com/v1/projects/anonuser-anonproject/locations/us-central1/bareMetalAdminClusters/gce-admin-gcloud-001].
    NAME           LOCATION     VERSION           MEMBERSHIP     STATE
    abm-cluster-1  us-central1  1.28.300-gke.131  abm-cluster-1  RUNNING
    

    관리자 클러스터가 생성되면 관리자 워크스테이션의 부트스트랩 클러스터가 삭제됩니다. 다른 터미널 창에서 bmctl register bootstrap 명령어의 출력은 다음과 비슷합니다.

    ...
    [2024-04-15 23:10:48+0000] Waiting for cluster to become ready OK
    [2024-04-15 23:16:38+0000] Please run
    [2024-04-15 23:16:38+0000] kubectl --kubeconfig bmctl-workspace/gce-admin-gcloud-001/gce-admin-gcloud-001-kubeconfig get nodes
    [2024-04-15 23:16:38+0000] to get cluster nodes status.
    [2024-04-15 23:16:38+0000] Waiting for node pools to become ready OK
    [2024-04-15 23:16:58+0000] Waiting for metrics to become ready in GCP OK
    [2024-04-15 23:21:58+0000] Waiting for cluster API provider to install in the created admin cluster OK
    [2024-04-15 23:22:08+0000] Moving admin cluster resources to the created admin cluster
    [2024-04-15 23:22:10+0000] Waiting for node update jobs to finish OK
    [2024-04-15 23:24:30+0000] Flushing logs... OK
    [2024-04-15 23:24:30+0000] Unregistering bootstrap cluster.
    [2024-04-15 23:24:30+0000] Deleting membership... OK
    [2024-04-15 23:24:32+0000] Deleting bootstrap cluster.
    

관리자 클러스터 확인

루트 계정의 bmctl-workspace 디렉터리에 있는 관리자 워크스테이션에서 관리자 클러스터의 kubeconfig 파일을 찾을 수 있습니다. 배포를 확인하려면 다음 단계를 완료하세요.

  1. SSH를 사용하여 루트로 관리자 워크스테이션에 액세스합니다.

    gcloud compute ssh root@abm-ws --zone ZONE
    
  2. 관리자 클러스터가 생성되었고 실행 중인지 확인합니다.

    kubectl --kubeconfig bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig get nodes
    

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

    NAME                   STATUS   ROLES                  AGE   VERSION
    abm-admin-cluster-cp   Ready    control-plane   94m   v1.27.4-gke.1600
    
  3. 탐색이 완료되었으면 exit를 입력하여 관리자 워크스테이션에서 연결을 해제합니다.

Terraform

다음 안내를 따르려면 2개의 터미널 창이 필요합니다. 하나의 터미널 창에서는 bmctl register bootstrap을 실행하여 부트스트랩 클러스터를 만듭니다. bmctl register bootstrap 명령어가 실행되는 동안 또 다른 터미널 창에서 Terraform 명령어를 실행하여 관리자 클러스터를 만듭니다.

관리자 클러스터에 사용하도록 사용자 클러스터 샘플 파일 수정

anthos-samples 저장소에는 특히 Google Distributed Cloud 관리자 클러스터를 만들기 위한 용도의 샘플이 포함되지 않습니다. 다음 단계에서는 기존 사용자 클러스터 Terraform 샘플을 수정하여 관리자 클러스터를 만드는 방법을 보여줍니다.

  1. anthos-samples를 클론한 디렉터리에서 다음 명령어를 실행하여 MetalLB 사용자 클러스터 샘플에 대한 샘플 파일을 관리자 클러스터의 새 폴더에 복사합니다.

    cp -r anthos-samples/anthos-onprem-terraform/abm_user_cluster_metallb \
        anthos-samples/anthos-onprem-terraform/abm_admin_cluster_basic
    
  2. abm_admin_cluster_basic 디렉터리로 변경합니다.

    cd anthos-samples/anthos-onprem-terraform/abm_admin_cluster_basic
    
  3. Terraform 파일을 수정합니다.

    • variables.tf:

      • 컨트롤 플레인 노드 IP 주소에 대한 변수를 정의합니다(이 데모에서는 하나만 사용). 이 변수는 variable "control_plane_ips" { ... } 항목과 유사해야 합니다.

      • 컨트롤 플레인 VIP 주소의 변수를 정의합니다. 이 변수는 variable "control_plane_vip" { ... } 항목과 유사해야 합니다.

    • terraform.tfvars:

      • 다음 관리자 클러스터 설정에 대한 변수 값을 할당합니다.

        • 컨트롤 플레인 노드 IP 주소: 10.200.0.3

        • 컨트롤 플레인 VIP 주소: 10.200.0.48

    • main.tf:

      • google_gkeonprem_bare_metal_cluster 리소스를 google_gkeonprem_bare_metal_admin_cluster 리소스로 바꿉니다.

      • google_gkeonprem_bare_metal_node_pool 리소스 및 관련 lifecycle 섹션을 삭제합니다.

      • 새로 정의된 변수를 사용하도록 리소스를 업데이트합니다.

    다음은 관리자 클러스터를 만들도록 수정한 경우 main.tf 파일이 어떻게 보이는지 알려주는 예시입니다.

    /**
    * Copyright 2023 Google LLC
    *
    * Licensed under the Apache License, Version 2.0 (the "License");
    * you may not use this file except in compliance with the License.
    * You may obtain a copy of the License at
    *
    *      http://www.apache.org/licenses/LICENSE-2.0
    *
    * Unless required by applicable law or agreed to in writing, software
    * distributed under the License is distributed on an "AS IS" BASIS,
    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    * See the License for the specific language governing permissions and
    * limitations under the License.
    */
    
    #[START anthos_onprem_terraform_bare_metal_admin_cluster_basic_main]
    
    module "enable_google_apis_primary" {
      source     = "terraform-google-modules/project-factory/google//modules/project_services"
      version    = "~> 14.0"
      project_id = var.project_id
      activate_apis = [
        "anthos.googleapis.com",
        "anthosaudit.googleapis.com",
        "anthosgke.googleapis.com",
        "cloudresourcemanager.googleapis.com",
        "compute.googleapis.com",
        "connectgateway.googleapis.com",
        "container.googleapis.com",
        "file.googleapis.com",
        "gkehub.googleapis.com",
        "iam.googleapis.com",
        "kubernetesmetadata.googleapis.com",
        "logging.googleapis.com",
        "monitoring.googleapis.com",
        "opsconfigmonitoring.googleapis.com",
        "serviceusage.googleapis.com",
        "stackdriver.googleapis.com"
      ]
      disable_services_on_destroy = false
    }
    
    # Enable GKE OnPrem API
    resource "google_project_service" "default" {
      project            = var.project_id
      service            = "gkeonprem.googleapis.com"
      disable_on_destroy = false
    }
    
    # Create an anthos baremetal admin cluster and enroll it with the gkeonprem API
    resource "google_gkeonprem_bare_metal_admin_cluster" "admin-cluster-basic" {
      name                     = var.admin_cluster_name
      description              = "Anthos bare metal admin cluster"
      provider                 = google
      depends_on               = [google_project_service.default]
      location                 = var.region
      bare_metal_version       = var.bare_metal_version
      network_config {
        island_mode_cidr {
          service_address_cidr_blocks = ["0.96.0.0/20"]
          pod_address_cidr_blocks     = ["192.168.0.0/16"]
        }
      }
      node_config {
        max_pods_per_node = 250
      }
      control_plane {
        control_plane_node_pool_config {
          node_pool_config {
            operating_system = "LINUX"
            dynamic "node_configs" {
              for_each = var.admin_cp_ips
              content {
                node_ip = node_configs.value
              }
            }
          }
        }
      }
      load_balancer {
        port_config {
          control_plane_load_balancer_port = 443
        }
        vip_config {
          control_plane_vip = var.admin_cp_vip
        }
      }
      storage {
        lvp_share_config {
          lvp_config {
            path = "/mnt/localpv-share"
            storage_class = "local-shared"
          }
          shared_path_pv_count = 5
        }
        lvp_node_mounts_config {
          path = "/mnt/localpv-disk"
          storage_class = "local-disks"
        }
      }
    
      dynamic "security_config" {
        for_each = length(var.admin_user_emails) == 0 ? [] : [1]
        content {
          authorization {
            dynamic "admin_users" {
              for_each = var.admin_user_emails
              content {
                username = admin_users.value
              }
            }
          }
        }
      }
    
      lifecycle {
        ignore_changes = [
          annotations["onprem.cluster.gke.io/user-cluster-resource-link"],
          annotations["alpha.baremetal.cluster.gke.io/cluster-metrics-webhook"],
          annotations["baremetal.cluster.gke.io/operation"],
          annotations["baremetal.cluster.gke.io/operation-id"],
          annotations["baremetal.cluster.gke.io/start-time"],
          annotations["baremetal.cluster.gke.io/upgrade-from-version"]
        ]
      }
    }
    
    #[END anthos_onprem_terraform_bare_metal_admin_cluster_basic_main]
    

    관리자 클러스터의 Terraform 리소스에 대한 자세한 내용은 Terraform 레지스트리에서 google_gkeonprem_bare_metal_admin_cluster를 참조하세요.

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

Terraform과 같이 GKE On-Prem API 클라이언트를 사용하여 관리자 클러스터를 만들 때는 관리자 워크스테이션에서 부트스트랩 클러스터를 만들어야 합니다. 이 부트스트랩 클러스터는 관리자 클러스터를 만드는 데 필요한 Kubernetes 컨트롤러를 호스팅합니다.

  1. 명령줄에서 SSH를 사용하여 관리자 워크스테이션 VM에 루트로 액세스합니다.

    gcloud compute ssh root@abm-ws --zone ZONE
    

    VM 업데이트에 대한 메시지를 무시하고 이 튜토리얼을 완료하면 됩니다. VM을 테스트 환경으로 유지하려는 경우 Ubuntu 문서에 설명된 대로 OS를 업데이트하거나 다음 버전으로 업그레이드해야 할 수 있습니다.

  2. 사용자 인증 정보를 애플리케이션 기본 사용자 인증 정보(ADC)로 설정합니다.

    gcloud auth application-default login
    

    메시지에 따라 ADC용 Google 계정을 선택합니다.

  3. baremetal/ 디렉터리로 변경하고 다음 명령어를 실행하여 부트스트랩 클러스터를 만듭니다.

    부트스트랩 클러스터 이름은 관리자 클러스터 이름에 bootstrap-을 추가하여 파생됩니다.

    bmctl register bootstrap \
      --ssh-key=/root/.ssh/id_rsa \
      --name=bootstrap-ADMIN_CLUSTER_NAME \
      --project-id=PROJECT_ID
    

    bmctl이 부트스트랩 클러스터를 성공적으로 만들면 다음과 비슷한 출력이 표시됩니다.

    [2023-03-22 17:35:24+0000] Waiting for the temporary cluster to be registered... OK
    [2023-03-22 17:35:37+0000] Please go to https://console.cloud.google.com/home/dashboard?project=example-project-12345 to create the cluster
    [2023-03-22 17:35:37+0000] Waiting for preflight checks and cluster to run..
    

관리자 클러스터 만들기

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

    terraform init
    

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

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

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

    terraform apply
    

    관리자 클러스터를 만드는 데 15분 이상 걸립니다. 클러스터 만들기가 완료되면 다음과 같은 메시지가 표시됩니다.

    ...
    google_gkeonprem_bare_metal_admin_cluster.admin-cluster-basic: Still creating... [20m10s elapsed]
    google_gkeonprem_bare_metal_admin_cluster.admin-cluster-basic: Creation complete after 20m11s
    [id=projects/anonuser-anonproject/locations/us-central1/bareMetalAdminClusters/gce-admin-terra002]
    
    Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
    

    관리자 클러스터가 생성되면 관리자 워크스테이션의 부트스트랩 클러스터가 삭제됩니다. 다른 터미널 창에서 bmctl register bootstrap 명령어의 출력은 다음과 비슷합니다.

    ...
    [2024-04-15 23:10:48+0000] Waiting for cluster to become ready OK
    [2024-04-15 23:16:38+0000] Please run
    [2024-04-15 23:16:38+0000] kubectl --kubeconfig bmctl-workspace/gce-admin-gcloud-001/gce-admin-gcloud-001-kubeconfig get nodes
    [2024-04-15 23:16:38+0000] to get cluster nodes status.
    [2024-04-15 23:16:38+0000] Waiting for node pools to become ready OK
    [2024-04-15 23:16:58+0000] Waiting for metrics to become ready in GCP OK
    [2024-04-15 23:21:58+0000] Waiting for cluster API provider to install in the created admin cluster OK
    [2024-04-15 23:22:08+0000] Moving admin cluster resources to the created admin cluster
    [2024-04-15 23:22:10+0000] Waiting for node update jobs to finish OK
    [2024-04-15 23:24:30+0000] Flushing logs... OK
    [2024-04-15 23:24:30+0000] Unregistering bootstrap cluster.
    [2024-04-15 23:24:30+0000] Deleting membership... OK
    [2024-04-15 23:24:32+0000] Deleting bootstrap cluster.
    

  4. 콘솔에서 GKE 클러스터 페이지로 이동합니다.

    GKE 클러스터로 이동

    사용자 클러스터를 만든 프로젝트가 선택되었는지 확인합니다. 나열된 관리자 클러스터가 표시됩니다.

  5. 관리자 클러스터에 로그인합니다.

    1. 클러스터 이름의 링크를 클릭하고 측면 패널에서 로그인을 클릭합니다.

    2. Google ID를 사용하여 로그인을 선택합니다.

    3. 로그인을 클릭합니다.

관리자 클러스터 확인

루트 계정의 bmctl-workspace 디렉터리에 있는 관리자 워크스테이션에서 관리자 클러스터의 kubeconfig 파일을 찾을 수 있습니다. 배포를 확인하려면 다음 단계를 완료하세요.

  1. SSH를 사용하여 루트로 관리자 워크스테이션에 액세스합니다.

    gcloud compute ssh root@abm-ws --zone ZONE
    
  2. 관리자 클러스터가 생성되었고 실행 중인지 확인합니다.

    kubectl --kubeconfig bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig get nodes
    

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

    NAME                   STATUS   ROLES                  AGE   VERSION
    abm-admin-cluster-cp   Ready    control-plane   94m   v1.27.4-gke.1600
    
  3. 탐색이 완료되었으면 exit를 입력하여 관리자 워크스테이션에서 연결을 해제합니다.

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

Google Cloud 콘솔, Google Cloud CLI 또는 Terraform을 사용하여 사용자 클러스터를 만들 수 있습니다. 편의상 사용자 클러스터 이름은 Terraform 스크립트에 하드 코딩된 이름과 일치하도록 abm-user-cluster-metallb를 사용합니다.

bmctl

  1. SSH를 사용하여 루트로 abm-ws 관리자 워크스테이션 VM에 액세스합니다.

    gcloud compute ssh root@abm-ws --zone ZONE
    
  2. 클러스터 구성 파일을 생성합니다.

    bmctl create config -c abm-user-cluster-metallb \
        --project-id=PROJECT_ID
  3. 다음 사용자 클러스터 구성 파일에서 clusterSecurity 섹션에 이메일 주소를 설정하고 나머지 설정을 확인합니다.

    다음 클러스터 구성 파일은 이전에 계획 테이블에 입력한 값으로 채워집니다. 입력한 값 외에도 생성된 구성 파일에서 다음 차이를 확인합니다.

    • 이 샘플에서는 가독성을 높이기 위해 주석이 삭제되었습니다.
    • 사용자 인증 정보 섹션은 사용자 클러스터의 일반 설정에 따라 삭제되었습니다.
    • 클러스터 유형 spec.typeuser로 설정되었습니다.
    • 계정에 clusterrole/cluster-admin을 부여하도록 spec.clusterSecurity.authorization.clusterAdmin.gcpAccounts 필드가 추가되었습니다. 다른 모든 것 중에서 이 필드를 사용하면 Google Cloud 콘솔에서 클러스터에 로그인하여 더 많은 클라우드 세부정보를 확인할 수 있습니다.
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-abm-user-cluster-metallb
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: abm-user-cluster-metallb
      namespace: cluster-abm-user-cluster-metallb
    spec:
      type: user
      profile: default
      anthosBareMetalVersion: BMCTL_VERSION
      gkeConnect:
        projectID: PROJECT_ID
      controlPlane:
        nodePoolSpec:
          nodes:
          - address: 10.200.0.4
      clusterNetwork:
        pods:
          cidrBlocks:
          - 192.168.0.0/16
        services:
          cidrBlocks:
          - 10.96.0.0/20
      loadBalancer:
        mode: bundled
        ports:
          controlPlaneLBPort: 443
        vips:
          controlPlaneVIP: 10.200.0.50
          ingressVIP: 10.200.0.51
        addressPools:
        - name: pool1
          addresses:
          - 10.200.0.51-10.200.0.70
      clusterOperations:
        projectID: PROJECT_ID
        location: us-central1
      clusterSecurity:
        authorization:
          clusterAdmin:
            gcpAccounts:
            - YOUR_EMAIL_ADDRESS
      storage:
        lvpNodeMounts:
          path: /mnt/localpv-disk
          storageClassName: local-disks
        lvpShare:
          path: /mnt/localpv-share
          storageClassName: local-shared
          numPVUnderSharedPath: 5
      nodeConfig:
        podDensity:
          maxPodsPerNode: 250
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: NodePool
    metadata:
      name: node-pool-1
      namespace: cluster-abm-user-cluster-metallb
    spec:
      clusterName: abm-user-cluster-metallb
      nodes:
      - address: 10.200.0.5
    
  4. 관리자 워크스테이션에서 생성된 구성 파일의 콘텐츠를 이전 샘플의 콘텐츠로 바꿉니다.

    생성된 파일 bmctl-workspace/abm-user-cluster-metallb/abm-user-cluster-metallb.yaml을 열고 해당 콘텐츠를 이전 단계에서 확인한 샘플의 콘텐츠로 바꿉니다.

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

    bmctl create cluster -c abm-user-cluster-metallb \
      --kubeconfig bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig

    bmctl 명령어는 프리플라이트 검사를 실행하고 클러스터를 만들 때 화면에 출력을 표시합니다. 자세한 정보는 관리자 워크스테이션의 baremetal/bmctl-workspace/abm-user-cluster-metallb/log 폴더에 있는 로그에 기록됩니다.

    클러스터를 만드는 데 몇 분 정도 걸릴 수 있습니다.

  6. Google Cloud 콘솔에서 GKE 클러스터 페이지로 이동합니다.

    GKE 클러스터로 이동

    사용자 클러스터를 만든 프로젝트가 선택되었는지 확인합니다. 목록에 관리자 클러스터와 사용자 클러스터가 모두 표시됩니다.

  7. 사용자 클러스터에 로그인합니다.

    1. 클러스터 이름의 링크를 클릭하고 측면 패널에서 로그인을 클릭합니다.

    2. Google ID를 사용하여 로그인을 선택합니다.

    3. 로그인을 클릭합니다.

    동일한 단계를 반복하여 관리자 클러스터에 로그인합니다.

콘솔

콘솔에서 사용자 클러스터를 만들려면 다음 단계를 수행합니다.

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

    베어메탈 클러스터 만들기로 이동

  2. 관리자 클러스터를 만든 Google Cloud 프로젝트가 선택되어 있는지 확인하세요.

  3. 클러스터 만들기를 클릭합니다.

  4. 대화상자에서 온프레미스를 클릭합니다.

  5. 베어메탈 옆의 구성을 클릭합니다. 기본 요건 페이지가 표시됩니다.

  6. 클러스터 유형 선택에서 기존 관리자 클러스터의 사용자 클러스터 만들기를 선택합니다.

  7. 다음을 클릭합니다.

클러스터 기본사항

  1. 사용자 클러스터의 이름을 입력하거나 기본값을 사용합니다.

  2. 새로 만든 관리자 클러스터가 선택되었는지 확인합니다. 이 페이지의 나머지 설정에는 기본값을 사용해도 됩니다.

  3. 왼쪽 탐색 메뉴에서 네트워킹을 클릭합니다.

네트워킹

VM을 만들기 위해 실행한 스크립트와 관리자 클러스터는 10.200.0.0/24 서브넷의 IP 주소를 사용하는 레이어 2 VXLAN도 만들었습니다.

  1. 컨트롤 플레인 섹션에서 컨트롤 플레인 노드 IP 1 필드에 다음을 입력합니다.

    10.200.0.4
    

    이는 스크립트로 생성된 VXLAN에서 abm-user-cluster-cp1 VM의 IP 주소입니다.

  2. 부하 분산기 섹션에서 기본 부하 분산기인 MetaLB와 번들로 제공을 사용하세요.

  3. 새 주소 풀 섹션에서 IP 주소 범위 1 필드에 다음 IP 주소 범위를 입력합니다.

    10.200.0.51-10.200.0.70
    
  4. 완료를 클릭합니다.

  5. 가상 IP 섹션에서 컨트롤 플레인 VIP 필드에 다음 IP 주소를 입력합니다.

    10.200.0.50
    
  6. 인그레스 VIP에 다음 IP 주소를 입력합니다.

    10.200.0.51
    
  7. 서비스 및 포드 CIDR 섹션에서 기본 IP 주소를 사용합니다.

  8. 왼쪽 탐색 메뉴에서 기본 풀을 클릭합니다.

노드 풀 만들기

사용자 클러스터에 워커 노드에 대해 노드 풀이 하나 이상 있어야 합니다.

  1. 노드 주소 1 필드에 다음 IP 주소를 입력합니다.

    10.200.0.5
    

    이는 스크립트로 생성된 VXLAN에 있는 abm-user-cluster-w1 VM의 IP 주소입니다.

클러스터 만들기

  1. 확인 및 만들기를 클릭하여 사용자 클러스터를 만듭니다.

    사용자 클러스터를 만드는 데 15분 이상 걸립니다. 콘솔에 설정을 확인하고 클러스터를 만들 때 상태 메시지가 표시됩니다.

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

    생성 프로세스에 대한 추가 정보를 보려면 세부정보 표시를 클릭하여 측면 패널을 표시합니다. 세부정보 패널을 닫으려면 를 클릭합니다.

    클러스터가 생성되면 클러스터 상태: 실행 중이 표시됩니다.

  2. 클러스터가 생성되면 클러스터를 클릭하여 클러스터 페이지로 돌아갑니다.

  3. 사용자 클러스터에 로그인합니다.

    1. 클러스터 이름의 링크를 클릭하고 측면 패널에서 로그인을 클릭합니다.

    2. Google ID를 사용하여 로그인을 선택합니다.

    3. 로그인을 클릭합니다.

    동일한 단계를 반복하여 관리자 클러스터에 로그인합니다.

gcloud CLI

사용자 클러스터를 만들려면 다음 안내를 따르세요.

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

    gcloud container bare-metal clusters create abm-user-cluster-metallb \
        --project=PROJECT_ID \
        --admin-cluster-membership=projects/PROJECT_ID/locations/ON_PREM_API_REGION/memberships/ADMIN_CLUSTER_NAME \
        --location=ON_PREM_API_REGION \
        --version=BMCTL_VERSION \
        --admin-users=YOUR_EMAIL_ADDRESS \
        --metal-lb-address-pools='pool=lb-pool-1,manual-assign=True,addresses=10.200.0.51-10.200.0.70' \
        --control-plane-node-configs='node-ip=10.200.0.4' \
        --control-plane-vip=10.200.0.50 \
        --control-plane-load-balancer-port=443 \
        --ingress-vip=10.200.0.51 \
        --island-mode-service-address-cidr-blocks=10.96.0.0/20 \
        --island-mode-pod-address-cidr-blocks=192.168.0.0/16 \
        --lvp-share-path=/mnt/localpv-share \
        --lvp-share-storage-class=local-shared \
        --lvp-node-mounts-config-path=/mnt/localpv-disk \
        --lvp-node-mounts-config-storage-class=local-disks
    

    명령어를 실행한 후 다음과 같은 출력이 표시됩니다.

    Waiting for operation [projects/PROJECT_ID/locations/ON_PREM_API_REGION/operations/operation-1678304606537-5f668bde5c57e-341effde-b612ff8a] to complete...
    

    예시 출력에서 operation-1678304606537-5f668bde5c57e-341effde-b612ff8a 문자열은 장기 실행 작업의 OPERATION_ID입니다.

  2. 작업 상태를 확인하려면 또 다른 터미널 창을 열고 명령어를 실행합니다.

    gcloud container bare-metal operations describe OPERATION_ID \
        --project=PROJECT_ID \
        --location=ON_PREM_API_REGION
    

    OPERATION_ID를 이전 단계의 출력에 표시된 해당 문자열로 바꿉니다.

    클러스터를 만드는 데 15분 이상 걸립니다. 클러스터가 생성되는 동안 이전 명령어를 충분히 자주 실행해서 현재 상태를 가져올 수 있습니다.

    클러스터가 생성되면 다음과 같은 출력이 표시됩니다.

    Created Anthos cluster on bare metal [https://gkeonprem.googleapis.com/v1/projects/PROJECT_ID/locations/ON_PREM_API_REGION/bareMetalClusters/abm-user-cluster-metallb].

    각 플래그의 설명을 포함하여 gcloud container bare-metal clusters create 명령어에 대한 자세한 내용은 gcloud CLI 참조에 있는 클러스터 리소스에 대한 컨테이너 베어메탈 클러스터 만들기 페이지를 참조하세요.

노드 풀 만들기

클러스터가 성공적으로 생성되었으면 클러스터에 대해 노드 풀을 만들 수 있습니다.

노드 풀을 만들려면 다음 단계를 따르세요.

  1. 다음 명령어를 실행하여 노드 풀을 만듭니다.

    gcloud container bare-metal node-pools create NODE_POOL_NAME \
        --cluster=abm-user-cluster-metallb \
        --project=PROJECT_ID \
        --location=ON_PREM_API_REGION \
        --node-configs='node-ip=10.200.0.5'
    

    NODE_POOL_NAME을 노드 풀의 이름으로 바꿉니다.

    명령어를 실행한 후 다음과 같은 출력이 표시됩니다.

    Waiting for operation [projects/PROJECT_ID/locations/ON_PREM_API_REGION/operations/operation-1678308682052-5f669b0d132cb-6ebd1c2c-816287a7] to complete...
    

    노드 풀을 만드는 데 약 5분 정도 걸립니다. 노드 풀이 생성되면 다음과 같은 출력이 표시됩니다.

    Created node pool in Anthos cluster on bare metal [https://gkeonprem.googleapis.com/v1/projects/PROJECT_ID/locations/ON_PREM_API_REGION/bareMetalClusters/abm-user-cluster-metallb/bareMetalNodePools/NODE_POOL_NAME].
    
  2. 콘솔에서 베어메탈 클러스터 만들기 페이지로 이동합니다.

    베어메탈 클러스터 만들기 페이지로 이동

    사용자 클러스터를 만든 프로젝트가 선택되었는지 확인합니다. 목록에 관리자 클러스터와 사용자 클러스터가 모두 표시됩니다.

  3. 사용자 클러스터에 로그인합니다.

    1. 클러스터 이름의 링크를 클릭하고 측면 패널에서 로그인을 클릭합니다.

    2. Google ID를 사용하여 로그인을 선택합니다.

    3. 로그인을 클릭합니다.

    동일한 단계를 반복하여 관리자 클러스터에 로그인합니다.

Terraform

다음 기본 구성 샘플을 사용하여 번들 MetalLB 부하 분산기로 사용자 클러스터를 만들 수 있습니다. 자세한 내용은 google_gkeonprem_bare_metal_cluster 참고 문서를 확인하세요.

  1. anthos-samples를 클론한 디렉터리에서 Terraform 샘플이 있는 디렉터리로 변경합니다.

    cd anthos-samples/anthos-onprem-terraform/abm_user_cluster_metallb
    

    이 샘플은 main.tf에 전달할 변수 파일 예시를 제공합니다.

  2. terraform.tfvars.sample 파일의 사본을 만듭니다.

    cp terraform.tfvars.sample terraform.tfvars
    
  3. 다음 샘플의 값을 확인합니다.

    다음 Terraform 변수 파일 terraform.tfvars.sample은 이 가이드의 이전 섹션에서 입력한 값과 IP 주소로 미리 채워집니다.

    
    project_id          = "PROJECT_ID"
    region              = "ON_PREM_API_REGION"
    admin_cluster_name  = "ADMIN_CLUSTER_NAME"
    bare_metal_version  = "VERSION"
    admin_user_emails   = ["YOUR_EMAIL_ADDRESS", "ADMIN_2_EMAIL_ADDRESS"]
    cluster_name        = "abm-user-cluster-metallb"
    control_plane_ips   = ["10.200.0.4"]
    worker_node_ips     = ["10.200.0.5", "10.200.0.6"]
    control_plane_vip   = "10.200.0.50"
    ingress_vip         = "10.200.0.51"
    lb_address_pools    = [
        { name = "lbpool_1", addresses = ["10.200.0.51-10.200.0.70"] }
    ]
    

    ADMIN_2_EMAIL_ADDRESS를 Google Cloud 계정과 연결된 이메일 주소로 바꾸거나 변수 파일을 수정할 때 삭제합니다.

    이 샘플에서 설정 중인 변수의 인수에 대한 자세한 내용은 Google Distributed Cloud 사용자 클러스터를 위한 Terraform 문서에서 인수 참조를 확인하세요.

  4. 변수 파일의 사본 콘텐츠를 이전 샘플의 콘텐츠로 바꿉니다.

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

    terraform init
    

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

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

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

    terraform apply
    

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

  8. Google Cloud 콘솔에서 GKE 클러스터 페이지로 이동합니다.

    GKE 클러스터로 이동

    사용자 클러스터를 만든 프로젝트가 선택되었는지 확인합니다. 목록에 관리자 클러스터와 사용자 클러스터가 모두 표시됩니다.

  9. 사용자 클러스터에 로그인합니다.

    1. 클러스터 이름의 링크를 클릭하고 측면 패널에서 로그인을 클릭합니다.

    2. Google ID를 사용하여 로그인을 선택합니다.

    3. 로그인을 클릭합니다.

    동일한 단계를 반복하여 관리자 클러스터에 로그인합니다.

5. 삭제

다음 안내에 따라 이 가이드에서 만든 클러스터와 VM을 삭제합니다.

사용자 클러스터 삭제

bmctl

  • bmctl로 사용자 클러스터를 삭제하려면 관리자 워크스테이션 VM abm-ws에서 다음 명령어를 실행합니다.

    bmctl reset \
        --cluster abm-user-cluster-metallb \
        --admin-kubeconfig bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig
    

콘솔

  1. 콘솔에서 GKE 클러스터 페이지로 이동합니다.

    GKE 클러스터로 이동

  2. 클러스터 목록에서 사용자 클러스터를 클릭합니다.

  3. 세부정보 패널에서 추가 세부정보 보기를 클릭합니다.

  4. 창 상단에서 삭제를 클릭합니다.

  5. 확인 메시지가 표시되면 클러스터 이름을 입력하고 삭제를 클릭합니다.

  6. 오른쪽 상단에 있는 를 클릭하여 삭제 상태를 확인합니다. 클러스터 목록을 업데이트하려면 페이지를 새로고침해야 할 수 있습니다.

gcloud CLI

  • 클러스터를 삭제하려면 다음 명령어를 실행합니다.

    gcloud container bare-metal clusters delete abm-user-cluster-metallb \
        --project=PROJECT_ID \
        --location=ON_PREM_API_REGION \
        --force
    

    --force 플래그를 사용하면 노드 풀이 있는 클러스터를 삭제할 수 있습니다. --force 플래그가 없으면 먼저 노드 풀을 삭제한 후 클러스터를 삭제해야 합니다.

다른 플래그에 대한 자세한 내용은 gcloud container bare-metal clusters delete를 참조하세요.

Terraform

terraform destroy 명령어는 사용자 클러스터를 만들기 위해 terraform apply를 실행했을 때 생성된 리소스를 해지합니다.

  • main.tf와 같은 Terraform 사용자 클러스터 샘플 파일이 있는 디렉터리에서 다음 명령어를 실행합니다.

    terraform destroy
    

관리자 클러스터 및 VM을 삭제하기 전에 사용자 클러스터가 삭제될 때까지 기다립니다.

관리자 클러스터 및 VM 삭제

  1. GKE On-Prem API에서 관리자 클러스터를 등록 해제합니다.

    gcloud container bare-metal admin-clusters unenroll ADMIN_CLUSTER_NAME \
        --project=PROJECT_ID \
        --location=ON_PREM_API_REGION
    
  2. 관리자 워크스테이션에 연결합니다.

    gcloud compute ssh root@abm-ws --zone ZONE
    
  3. 관리자 클러스터를 삭제합니다.

    bmctl reset -c ADMIN_CLUSTER_NAME
    

    bmctl은 Fleet에서 클러스터를 등록 취소한 후 클러스터를 삭제합니다. 클러스터가 삭제될 때까지 기다린 후 VM을 삭제합니다.

  4. 관리자 워크스테이션을 종료합니다.

    exit
    
  5. 이름에 abm이 있는 모든 VM을 나열합니다.

    gcloud compute instances list | grep 'abm'
    
  6. 이름에 abm이 포함된 모든 VM을 삭제해도 괜찮은지 확인합니다.

    확인한 후에는 다음 명령어를 실행하여 abm VM을 삭제할 수 있습니다.

    gcloud compute instances list --format="value(name)" | \
        grep 'abm' | \
        xargs gcloud compute instances delete --quiet --zone ZONE
    
  7. 서비스 계정을 삭제하기 위해 다음 명령어를 실행합니다. 메시지가 표시되면 y를 입력합니다.

    gcloud iam service-accounts delete baremetal-gcr@PROJECT_ID.iam.gserviceaccount.com
    

    다음 단계