Compute Engine VM에서 베어메탈용 GKE 관리자 및 사용자 클러스터 만들기

이 페이지에서는 Compute Engine 가상 머신(VM)에서 베어메탈용 GKE 사용자 클러스터와 관리자 클러스터를 만드는 방법을 보여줍니다. 제공된 스크립트는 관리자 및 사용자 클러스터에 사용되는 Compute Engine VM과 관리자 워크스테이션을 만듭니다.

관리자 워크스테이션은 설치 중 클러스터를 프로비저닝하는 명령줄 인터페이스(CLI) 도구와 구성 파일 및 설치 후 프로비저닝된 클러스터와 상호작용하는 CLI 도구를 호스팅합니다. 이 스크립트는 관리자 워크스테이션 VM에 CLI 도구를 설치합니다.

사용자 클러스터는 컨테이너화된 워크로드를 실행하는 Kubernetes 클러스터입니다. 제어 영역 노드워커 노드로 구성됩니다. 사용자 클러스터에는 사용자 워크로드를 실행하는 하나 이상의 워커 노드가 포함되어야 합니다. 관리자 클러스터는 하나 이상의 사용자 클러스터를 관리하는 Kubernetes 클러스터이며, 사용자 클러스터 만들기, 업데이트, 삭제에 도움을 줍니다. 관리자 클러스터는 제어 영역 노드만으로 구성됩니다. 자세한 내용은 관리자 및 사용자 클러스터 개발을 참조하세요.

이 스크립트는 VM 간에 가상 확장 가능 LAN(VXLAN)을 구성하고 클러스터 만들기를 위해 VM을 준비합니다. 선택적으로 스크립트로 관리자 클러스터를 만들거나 직접 관리자 클러스터 만들기를 선택해서 베어메탈용 GKE가 관리자 클러스터를 만들기 위해 제공하는 도구를 알아볼 수 있습니다.

제공된 스크립트를 사용하면 하드웨어를 준비할 필요 없이 베어메탈용 GKE를 빠르게 사용해 볼 수 있습니다. 이 페이지의 단계를 완료하면 Compute Engine에서 실행되는 작동되는 베어메탈용 GKE 테스트 환경이 제공됩니다.

GKE On-Prem API란?

GKE On-Prem API는 Terraform 및 표준 Google Cloud 애플리케이션을 사용하여 온프레미스 클러스터의 수명 주기를 관리할 수 있게 해주는 Google Cloud 호스팅 API입니다. GKE On-Prem API는 Google Cloud 인프라에서 실행됩니다. Terraform, 콘솔 및 gcloud CLI는 API의 클라이언트이며 API를 사용하여 데이터 센터에 클러스터를 만듭니다.

클러스터의 수명 주기를 관리하려면 GKE On-Prem API가 클러스터를 만들 때 지정한 Google Cloud 리전을 사용하여 클러스터 상태에 대한 메타데이터를 Google Cloud에 저장해야 합니다. 이 메타데이터를 사용하면 API에서 클러스터 수명 주기를 관리할 수 있으며 워크로드별 데이터는 포함되지 않습니다.

GKE On-Prem API 클라이언트를 사용하여 클러스터를 만든 경우 Google Cloud 프로젝트를 지정합니다. 클러스터가 생성되면 지정된 프로젝트의 Fleet에 자동으로 등록됩니다. 이 프로젝트를 Fleet 호스트 프로젝트라고 합니다. 클러스터를 만든 후에는 Fleet 호스트 프로젝트를 변경할 수 없습니다.

시작하기 전에

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  3. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  4. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  5. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

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

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

    2. kubectl이 설치되어 있는지 확인합니다. kubectl를 설치해야 하는 경우 다음 명령어를 실행합니다.
      gcloud components install kubectl

VM 인프라와 선택적인 관리자 클러스터 만들기

스크립트를 설정하고 실행하려면 다음 단계를 수행하세요. 다운로드하여 실행하는 스크립트는 anthos-samples 저장소에서 생성됩니다. 스크립트를 실행하기 전에 자세히 알아보려면 다음 섹션인 스크립트 정보를 참조하세요.

  1. 환경 변수를 설정합니다.

    export PROJECT_ID=PROJECT_ID
    export ADMIN_CLUSTER_NAME=ADMIN_CLUSTER_NAME
    export ON_PREM_API_REGION=ON_PREM_API_REGION
    export ZONE=ZONE
    
    • ON_PREM_API_REGION: GKE On-Prem API가 실행되고 메타데이터를 저장하는 Google Cloud 리전입니다. us-central1 또는 다른 지원되는 리전을 지정합니다.

    • ZONE: Compute Engine VM이 생성되는 Google Cloud 영역입니다. us-central1-a 또는 다른 모든 Compute Engine 영역을 사용할 수 있습니다.

  2. 기본 프로젝트 및 영역을 설정합니다.

    gcloud config set project $PROJECT_ID
    gcloud config set compute/zone $ZONE
    

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

  3. 설치할 수 있는 베어메탈용 GKE 버전 목록을 가져옵니다.

    gcloud container bare-metal admin-clusters query-version-config \
        --location=ON_PREM_API_REGION
    

    이 문서의 일부 안내는 사용 가능한 베어메탈용 GKE 버전의 하위 집합을 지원하는 GKE On-Prem API에 따라 달라집니다.

  4. 이전 명령어 출력에서 버전을 선택하고 이를 환경 변수로 설정합니다.

    export BMCTL_VERSION=BMCTL_VERSION
    

    최신 베어메탈용 GKE 기능과 수정사항을 가져오려면 호환성이 가장 높은 버전을 선택하는 것이 좋습니다.

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

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

    bash install_admin_cluster.sh
    
  7. 메시지가 표시되면 숫자를 입력하여 설치 모드를 선택합니다.

    • 스크립트로 VM 인프라를 설정하고 관리자 클러스터를 설치하려면 1을 입력합니다.
    • 스크립트로 VM 인프라만 설정하려면 2를 입력합니다.
  8. 메시지가 표시되면 선택을 확인합니다.

스크립트가 실행하는 각 명령어 및 상태를 출력합니다. 완료되면 관리자 클러스터 설치를 선택했는지 여부에 따라 스크립트가 다음을 출력합니다.

관리자 클러스터 생성됨

✅ Installation 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-cp1 | 10.200.0.3            | Has control plane of admin cluster running inside       |
| abm-user-cluster-cp1  | 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         |
|---------------------------------------------------------------------------------------------------------|

VM만 설정

|---------------------------------------------------------------------------------------------------------|
| VM Name               | L2 Network IP (VxLAN) | INFO                                                    |
|---------------------------------------------------------------------------------------------------------|
| abm-admin-cluster-cp1 | 10.200.0.3            | 🌟 Ready for use as control plane for the admin cluster |
| abm-user-cluster-cp1  | 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         |
|---------------------------------------------------------------------------------------------------------|

스크립트 정보

install_admin_cluster.sh에 대해 자세히 알아보려면 다음 줄에서 스크립트 정보를 클릭합니다.

스크립트 정보

스크립트는 다음 수동 단계를 자동화합니다.

  1. baremetal-gcr이라는 서비스 계정을 만들고 여러 API 및 서비스에 여러 서비스 계정이 필요하지 않도록 서비스 계정에 추가 권한을 부여합니다.
  2. 다음 Google Cloud API를 사용 설정합니다.
      anthos.googleapis.com
      anthosaudit.googleapis.com
      anthosgke.googleapis.com
      cloudresourcemanager.googleapis.com
      connectgateway.googleapis.com
      container.googleapis.com
      gkeconnect.googleapis.com
      gkehub.googleapis.com
      gkeonprem.googleapis.com
      iam.googleapis.com
      logging.googleapis.com
      monitoring.googleapis.com
      opsconfigmonitoring.googleapis.com
      serviceusage.googleapis.com
      stackdriver.googleapis.com
      storage.googleapis.com
  3. 다음 VM을 만듭니다.
    • 관리자 워크스테이션을 위한 VM 1개. 관리자 워크스테이션은 SSH를 사용하여 다른 모든 클러스터 노드에 액세스할 수 있습니다.
    • 관리자 클러스터의 제어 영역 노드에 대한 VM 1개.
    • 사용자 클러스터의 워커 노드에 대한 VM 2개.
    • 사용자 클러스터의 제어 영역 노드에 대한 VM 1개.
    스크립트는 또한 모든 VM에 SSH가 사용 설정되었는지 확인합니다.
  4. VM 간에 Layer 2 연결을 위한 가상 확장 가능 LAN(VXLAN) 오버레이 네트워크를 만듭니다. VXLAN은 영구적이지 않으므로 VM 인스턴스를 재부팅하면 네트워크가 삭제됩니다. 네트워크는 10.200.0.0/24 서브넷에 있도록 설정됩니다. Layer 2 연결은 번들 로드 밸런서의 요구사항입니다.
  5. 관리자 워크스테이션에 다음 도구를 설치합니다.
    • bmctl
    • kubectl
    • Docker

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

  6. 다음 작업을 수행하여 관리자 워크스테이션의 root@10.200.0.x가 작동하는지 확인합니다.
    1. 관리자 워크스테이션에서 새 SSH 키를 생성합니다.
    2. 배포에서 다른 모든 VM에 공개 키를 추가합니다.
  7. 선택적으로 스크립트는 다음 구성 파일을 사용하여 관리자 클러스터를 만듭니다.
      gcloud compute ssh root@"$VM_WS" --zone "${ZONE}" <<EOF
    set -x
    export PROJECT_ID=\$(gcloud config get-value project)
    ADMIN_CLUSTER_NAME=\$(curl http://metadata.google.internal/computeMetadata/v1/instance/attributes/cluster_id -H "Metadata-Flavor: Google")
    BMCTL_VERSION=\$(curl http://metadata.google.internal/computeMetadata/v1/instance/attributes/bmctl_version -H "Metadata-Flavor: Google")
    export ADMIN_CLUSTER_NAME
    export BMCTL_VERSION
    bmctl create config -c \$ADMIN_CLUSTER_NAME
    cat > bmctl-workspace/\$ADMIN_CLUSTER_NAME/\$ADMIN_CLUSTER_NAME.yaml << EOB
    ---
    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
      anthosBareMetalVersion: \$BMCTL_VERSION
      gkeConnect:
        projectID: \$PROJECT_ID
      controlPlane:
        nodePoolSpec:
          clusterName: \$ADMIN_CLUSTER_NAME
          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:
        # might need to be this location
        location: us-central1
        projectID: \$PROJECT_ID
      storage:
        lvpNodeMounts:
          path: /mnt/localpv-disk
          storageClassName: node-disk
        lvpShare:
          numPVUnderSharedPath: 5
          path: /mnt/localpv-share
          storageClassName: local-shared
      nodeConfig:
        podDensity:
          maxPodsPerNode: 250
    EOB
    
    bmctl create cluster -c \$ADMIN_CLUSTER_NAME
    EOF

    관리자 클러스터를 만들도록 스크립트를 설정하면 스크립트에서 SSH를 사용하여 관리자 워크스테이션에 루트 사용자로 로그인합니다. 그런 후 스크립트가 bmctl 명령줄 도구를 실행해서 관리자 클러스터를 만듭니다. 이것은 관리자 클러스터를 만드는 데 사용할 수 있는 도구 중 하나입니다.

    베어메탈용 GKE는 클러스터를 만들 때 관리자 워크스테이션에 Docker의 Kubernetes(종류) 클러스터를 배포합니다. 이 부트스트랩 클러스터는 클러스터를 만드는 데 필요한 Kubernetes 컨트롤러를 호스팅하며 관리자 클러스터를 만드는 데 사용됩니다. 생성 후에는 관련 컨트롤러가 부트스트랩 클러스터에서 관리자 클러스터로 이동됩니다. 마지막으로, 달리 지정하지 않으면 클러스터가 성공적으로 생성될 때 부트스트랩 클러스터가 제거됩니다. 컨테이너 이미지를 가져오려면 부트스트랩 클러스터에 Docker가 있어야 합니다.

선택적으로 관리자 클러스터 만들기

스크립트로 관리자 클러스터를 만든 후에는 다음 섹션인 관리자 클러스터 확인으로 건너뜁니다. 그렇지 않으면 이 섹션의 단계에 따라 부트스트랩 클러스터 및 관리자 클러스터를 만듭니다.

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

콘솔

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

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

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

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

  4. 관리자 클러스터 이름으로 ADMIN_CLUSTER_NAME을 입력합니다. 부트스트랩 클러스터 이름은 관리자 클러스터 이름 앞에 부트스트랩-을 추가하여 파생됩니다.

  5. VERSION을 관리자 클러스터의 버전으로 선택합니다. 스크립트가 이 버전의 bmctl 명령줄 도구를 관리자 워크스테이션에 다운로드했습니다. 설치하는 베어메탈용 GKE 버전은 bmctl 버전과 일치해야 합니다.

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

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

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

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

gcloud CLI

새 터미널 창을 엽니다. 두 번째 터미널 창을 사용해서 관리자 워크스테이션에 연결하여 부트스트랩 클러스터를 만듭니다. 첫 번째 터미널 창을 사용해서 gcloud CLI 명령어를 실행하여 관리자 클러스터를 만듭니다.

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

관리자 워크스테이션에서 다음 단계를 수행합니다.

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

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

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

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

    gcloud auth application-default login
    

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

  3. 부트스트랩 클러스터를 만듭니다.

    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을 종료하고 명령어를 다시 실행합니다.

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

  3. 제어 영역 섹션에서 제어 영역 노드 IP 1 필드에 다음을 입력합니다.

    10.200.0.3
    

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

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

  5. 가상 IP(VIP) 섹션에서 제어 영역 VIP 필드에 다음을 입력합니다.

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

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

gcloud CLI

  1. 이전에 정의한 환경 변수의 값이 올바른지 확인합니다. 예시 명령어에 자리표시자가 사용되지만 스크립트에서 사용한 환경 변수와 일치해야 합니다.

    echo $PROJECT_ID
    echo $ADMIN_CLUSTER_NAME
    echo $ON_PREM_API_REGION
    echo $BMCTL_VERSION
    
  2. 부트스트랩 클러스터가 Fleet 멤버로 등록되었는지 확인합니다.

    gcloud container fleet memberships list \
      --project=PROJECT_ID
    

    부트스트랩 클러스터가 나열되지 않았으면 bmctl register bootstrap에 지정한 부트스트랩 클러스터 이름과 프로젝트 ID를 확인합니다. 부트스트랩 클러스터 이름 또는 프로젝트 ID를 변경해야 하는 경우 Ctrl-C를 입력하여 bmctl register bootstrap을 종료하고 명령어를 다시 실행합니다.

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

    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
    

클러스터 만들기 프로세스에 대한 세부정보가 관리자 워크스테이션에 출력됩니다. bmctl은 클러스터를 만들기 전에 일련의 실행 전 검사를 실행하여 구성을 확인합니다. 프리플라이트 검사가 통과하면 다음과 비슷하게 표시됩니다.

[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 bmctl-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 bmctl-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.

관리자 클러스터 확인

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

  1. 스크립트에서 관리자 클러스터를 만들었으면 SSH를 사용하여 관리자 워크스테이션에 루트로 액세스합니다.

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

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

  2. 클러스터 구성 파일의 경로로 KUBECONFIG 환경 변수를 설정하여 클러스터에서 kubectl 명령어를 실행합니다.

    export clusterid=ADMIN_CLUSTER_NAME
    export KUBECONFIG=$HOME/bmctl-workspace/$clusterid/$clusterid-kubeconfig
    kubectl get nodes
    

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

    NAME                   STATUS   ROLES                  AGE   VERSION
    abm-admin-cluster-cp   Ready    control-plane,master   91m   v1.24.2-gke.1900
    
  3. 환경 변수에 현재 컨텍스트를 설정합니다.

    export CONTEXT="$(kubectl config current-context)"
    
  4. 다음 gcloud 명령어를 실행합니다. 이 명령어는 다음을 수행합니다.

    • 사용자 계정에 클러스터에 대한 Kubernetes clusterrole/cluster-admin 역할을 부여합니다.
    • 관리자 워크스테이션에 SSH로 연결할 필요 없이 로컬 컴퓨터에서 kubectl 명령어를 실행할 수 있도록 클러스터를 구성합니다.
    • Google ID를 사용해서 콘솔에서 클러스터에 로그인할 수 있습니다.

    YOUR_EMAIL_ADDRESS을 Google Cloud 계정과 연결된 이메일 주소로 바꿉니다. 예를 들면 --users=alex@example.com입니다.

    gcloud container fleet memberships generate-gateway-rbac  \
        --membership=ADMIN_CLUSTER_NAME \
        --role=clusterrole/cluster-admin \
        --users=YOUR_EMAIL_ADDRESS \
        --project=PROJECT_ID \
        --kubeconfig=$KUBECONFIG \
        --context=$CONTEXT\
        --apply
    

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

    Validating input arguments.
    Specified Cluster Role is: clusterrole/cluster-admin
    Generated RBAC policy is:
    --------------------------------------------
    ...
    
    Applying the generate RBAC policy to cluster with kubeconfig: /root/bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig, context: ADMIN_CLUSTER_NAME-admin@ADMIN_CLUSTER_NAME
    Writing RBAC policy for user: YOUR_EMAIL_ADDRESS to cluster.
    Successfully applied the RBAC policy to cluster.
    
  5. 탐색이 완료되었으면 exit를 입력하여 관리자 워크스테이션에서 로그아웃합니다.

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

    gcloud container fleet memberships get-credentials ADMIN_CLUSTER_NAME
    

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

    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.
    
  7. 이제 커넥트 게이트웨이를 통해 kubectl 명령어를 실행할 수 있습니다.

    kubectl get nodes
    

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

    NAME                   STATUS   ROLES                  AGE   VERSION
    abm-admin-cluster-cp   Ready    control-plane,master   94m   v1.24.2-gke.1900
    

베어메탈용 GKE 1.16 이상에서는 클러스터가 GKE On-Prem API에 자동으로 등록됩니다. 이렇게 하면 gcloud CLI 및 콘솔을 사용하여 관리자 클러스터를 업그레이드 및 업데이트할 수 있습니다.

사용자 클러스터 만들기

이 스크립트에서는 VM에 L2 VXLAN을 만들 때 10.200.0.0/24 네트워크에서 다음 IP 주소를 할당했습니다. 사용자 클러스터에 대해 네트워크 및 노드 풀 설정을 구성할 때 이러한 IP 주소를 사용합니다.

VM 이름 네트워크 IP 노드 설명
abm-admin-cluster-cp1 10.200.0.3 관리자 클러스터의 제어 영역 노드
abm-user-cluster-cp1 10.200.0.4 사용자 클러스터의 제어 영역 노드
abm-user-cluster-w1 10.200.0.5 사용자 클러스터의 워커 노드
abm-user-cluster-w2 10.200.0.6 사용자 클러스터의 다른 워커 노드

Google Cloud 콘솔, Google Cloud CLI 또는 Terraform을 사용하여 사용자 클러스터를 만들 수 있습니다.

콘솔

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

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

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

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

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

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

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

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

  7. 다음을 클릭합니다.

클러스터 기본사항

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

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

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

네트워킹

  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 필드에 다음 IP 주소를 입력합니다.

10.200.0.5

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

클러스터 만들기

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

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

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

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

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

    클러스터 준비 스크린샷

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

gcloud CLI

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

gcloud container bare-metal clusters create

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

gcloud container bare-metal node-pools create

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

  1. 이전에 정의한 환경 변수의 값이 올바른지 확인합니다. 예시 명령어에 자리표시자가 사용되지만 스크립트에서 사용한 환경 변수와 일치해야 합니다.

    echo $PROJECT_ID
    echo $ADMIN_CLUSTER_NAME
    echo $ON_PREM_API_REGION
    echo $BMCTL_VERSION
    
  2. 다음 명령어를 실행하여 사용자 클러스터를 만듭니다. 다음을 바꿉니다.

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

    • 클러스터를 관리할 수 있도록 --admin-users가 Google 계정과 연결된 이메일 주소로 설정되었는지 확인합니다.

    나머지 플래그 값은 자동으로 입력됩니다. 필요에 따라 스크롤해서 --admin-cluster-membership 플래그가 전체 지정된 멤버십 이름의 마지막 세그먼트인 관리자 클러스터 이름에 올바른 값인지 확인합니다.

    gcloud container bare-metal clusters create USER_CLUSTER_NAME \
      --project=PROJECT_ID \
      --admin-cluster-membership=projects/PROJECT_ID/locations/global/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
    

다음 목록은 플래그에 대한 설명입니다.

  • --project: 사용자 클러스터가 등록되는 프로젝트의 ID입니다. 이 프로젝트를 Fleet 호스트 프로젝트라고 합니다.

  • --admin-cluster-membership: Fleet에서 관리자 클러스터를 식별하는 완전하게 지정된 관리자 클러스터 이름입니다.

  • --location: GKE On-Prem API가 실행되고 메타데이터를 저장하는 Google Cloud 리전입니다.

  • --version: 베어메탈용 GKE 버전입니다.

  • --admin-users: 클러스터에 대한 전체 관리 액세스 권한을 제공하는 Kubernetes 역할 기반 액세스 제어(RBAC) 정책을 부여할 이메일 주소를 포함합니다.

  • --metal-lb-address-pools: 번들 MetalLB 부하 분산기의 주소 풀 구성입니다. IP 주소 범위가 스크립트에서 만든 10.200.0.0/24 네트워크에 속해야 합니다. IP 주소 범위에 VM 또는 제어 영역 VIP에 할당된 IP 주소가 포함되면 안 됩니다. 그러나 인그레스 VIP는 이 IP 주소 범위 내에 있어야 합니다.

  • --control-plane-node-configs: 사용자 클러스터의 제어 영역 노드 구성입니다. node-ip 값은 스크립트가 VM abm-user-cluster-cp1에 지정한 IP 주소인 10.200.0.4입니다.

  • --control-plane-vip: 제어 영역의 가상 IP입니다. 10.200.0.50 값은 스크립트에서 만든 10.200.0.0/24 네트워크에 속하지만 MetalLB 부하 분산기 주소 풀에 사용되는 IP 주소 범위와 겹치지 않습니다.

  • --control-plane-load-balancer-port: 부하 분산기가 제어 영역에 제공하는 포트입니다. 다른 값을 구성할 수 있지만 포트 443이 HTTPS 연결에 사용되는 표준 포트입니다.

  • --ingress-vip: 인그레스 서비스의 가상 IP입니다. 이 IP 주소는 MetalLB 부하 분산기 주소 풀에 사용되는 IP 주소 범위에 속해야 합니다.

  • --island-mode-service-address-cidr-blocks: 사용자 클러스터의 서비스에 사용할 CIDR 형식의 IP 주소 범위입니다. 이 예시 명령어에서는 콘솔에서 제공하는 기본값인 10.96.0.0/20을 사용했습니다. CIDR 범위는 /24에서 /12 사이여야 합니다. 여기서 /12는 대부분의 IP 주소를 제공합니다. RFC 1918에 정의된 대로 비공개 인터넷에 대한 IP 주소 공간의 범위를 사용하는 것이 좋습니다.

  • --island-mode-pod-address-cidr-blocks: 사용자 클러스터의 포드에 사용할 CIDR 형식의 IP 주소 범위입니다. 이 예시 명령어에서는 콘솔에서 제공하는 기본값인 192.168.0.0/16을 사용했습니다. CIDR 범위는 /18에서 /8 사이여야 합니다. 여기서 /8은 대부분의 IP 주소를 제공합니다. RFC 1918에 정의된 대로 비공개 인터넷에 대한 IP 주소 공간의 범위를 사용하는 것이 좋습니다.

  • --lvp-share-path: 하위 디렉터리를 만들 수 있는 호스트 머신 경로입니다. 각 하위 디렉터리에 대해 로컬 PersistentVolume(PV)이 생성됩니다.

  • --lvp-share-storage-class: 영구 볼륨을 만드는 데 사용할 StorageClass입니다. StorageClass는 클러스터 생성 중에 생성됩니다.

  • --lvp-node-mounts-config-path: 마운트된 디스크를 검색할 수 있는 호스트 머신 경로입니다. 각 마운트마다 로컬 PersistentVolume(PV)이 생성됩니다.

  • --lvp-node-mounts-config-storage: 클러스터 생성 중에 PV가 만든 스토리지 클래스입니다.

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

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입니다.

작업 상태를 확인하려면 출력에서 OPERATION_ID를 다음 명령어로 복사합니다. 다른 터미널 창을 열고 명령어를 실행합니다.

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

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

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

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

노드 풀 만들기

클러스터가 성공적으로 생성되면 다음 명령어를 실행하여 노드 풀을 만듭니다. NODE_POOL_NAME을 노드 풀의 이름으로 바꾸고 --cluster 플래그의 자리표시자가 여전히 사용자 클러스터 이름으로 설정되어 있는지 확인합니다.

gcloud container bare-metal node-pools create NODE_POOL_NAME \
  --cluster=USER_CLUSTER_NAME \
  --project=PROJECT_ID \
  --location=ON_PREM_API_REGION \
  --node-configs='node-ip=10.200.0.5'
  • -node-configs: node-ip에 할당된 값은 스크립트로 생성된 VXLAN에 있는 abm-user-cluster-w1 VM의 IP 주소입니다.

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

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/USER_CLUSTER_NAME/bareMetalNodePools/NODE_POOL_NAME].

기타 사용자 클러스터 명령어

클러스터를 만드는 것 외에도 실행할 수 있는 다른 gcloud CLI 명령어가 있습니다.

  • 사용자 클러스터를 나열하려면 다음 안내를 따르세요.
gcloud container bare-metal clusters list \
    --project=PROJECT_ID \
    --location=ON_PREM_API_REGION
  • 사용자 클러스터를 설명하려면 다음 안내를 따르세요.
gcloud container bare-metal clusters describe USER_CLUSTER_NAME \
    --project=PROJECT_ID \
    --location=ON_PREM_API_REGION

자세한 내용은 gcloud container bare-metal clusters를 참조하세요.

기타 노드 풀 명령어

노드 풀을 만드는 것 외에도 다음과 같이 실행할 수 있는 다른 gcloud CLI 명령어가 있습니다.

  • 노드 풀을 나열하려면 다음을 실행합니다.
gcloud container bare-metal node-pools list \
    --cluster=USER_CLUSTER_NAME \
    --project=PROJECT_ID \
    --location=ON_PREM_API_REGION
  • 노드 풀을 설명하려면 다음을 실행합니다.
gcloud container bare-metal node-pools describe NODE_POOL_NAME \
    --cluster=USER_CLUSTER_NAME \
    --project=PROJECT_ID \
    --location=ON_PREM_API_REGION

자세한 내용은 gcloud container bare-metal node-pools를 참조하세요.

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
    
    
    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"] }
    ]
    
  3. terraform.tfvars의 매개변수 값을 수정하고 파일을 저장합니다.

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

    • project_id: 사용자 클러스터가 등록되는 프로젝트의 ID입니다. 이 프로젝트를 Fleet 호스트 프로젝트라고 합니다.

    • region: 튜토리얼의 시작 부분에서 설정하는 Google Cloud 리전입니다. echo $ON_PREM_API_REGION을 실행하여 값을 가져옵니다.

    • admin_cluster_name: 이 튜토리얼의 시작 부분에서 설정하는 관리자 클러스터의 이름입니다. echo $ADMIN_CLUSTER_NAME을 실행하여 값을 가져옵니다.

    • bare_metal_version: 사용자 클러스터의 베어메탈용 GKE 버전입니다. 관리자 클러스터에 사용한 것과 동일한 버전을 사용하려면 echo $BMCTL_VERSION을 실행하여 값을 가져옵니다. 원하는 경우 관리자 클러스터 버전보다 부 버전이 두 단계 이상 낮은 버전을 지정할 수 있습니다. 사용자 클러스터 버전은 관리자 클러스터 버전보다 높을 수 없습니다.

    • cluster_name: 사용자 클러스터의 TVARS 파일에 있는 이름을 사용하거나 원하는 이름을 지정할 수 있습니다. 클러스터를 만든 후에는 이름을 변경할 수 없습니다.

    • admin_user_emails: 클러스터에 대한 관리자 권한을 부여할 사용자의 이메일 주소 목록입니다. 클러스터를 관리할 수 있도록 이메일 주소를 추가해야 합니다.

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

    나머지 변수에 대해 terraform.tvars에 정의된 기본값을 사용합니다. VM 및 관리자 클러스터를 만들 때 스크립트에 이러한 값이 사용되었습니다.

    • control_plane_ips: 제어 영역 노드에 대한 하나 이상의 IPv4 주소 목록입니다. 스크립트가 VM abm-user-cluster-cp1에 지정한 IP 주소인 기본값을 사용합니다.

    • worker_node_ips: 워커 노드 머신에서 하나 이상의 IPv4 주소 목록입니다. 스크립트가 VM abm-user-cluster-w1abm-user-cluster-w2에 지정한 IP 주소인 기본값을 사용합니다.

    • control_plane_vip: 제어 영역의 가상 IP(VIP)입니다. 스크립트로 만든 10.200.0.0/24 네트워크에 있는 기본값 10.200.0.50을 사용합니다. 이 IP 주소는 MetalLB 부하 분산기 주소 풀에 사용된 IP 주소 범위와 겹치지 않습니다.

    • ingress_vip: 인그레스 프록시에 대해 부하 분산기에 구성할 가상 IP 주소입니다. 스크립트로 만든 10.200.0.0/24 네트워크에 있는 기본값 10.200.0.51을 사용합니다. 이 IP 주소는 MetalLB 부하 분산기 주소 풀에 사용된 IP 주소 범위에 포함됩니다.

    • lb_address_pools: MetalLB 부하 분산기에 대해 주소 풀을 정의하는 맵 목록입니다. 기본값을 사용합니다.

  4. 변경사항을 terraform.tfvars에 저장합니다.

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

    terraform init
    

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

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

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

    terraform apply
    

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

사용자 클러스터에 연결

콘솔 또는 gcloud CLI를 사용하여 사용자 클러스터를 만들 때 gcloud container fleet memberships generate-gateway-rbac 실행 시 관리자 클러스터에 구성한 것과 동일한 Kubernetes 역할 기반 액세스 제어(RBAC) 정책으로 클러스터가 구성됩니다. 이러한 RBAC 정책을 사용하면 Google Cloud 계정과 연결된 이메일 주소인 Google Cloud ID를 사용하여 클러스터에 연결할 수 있습니다. RBAC 정책을 사용하면 추가 구성 없이 콘솔에 로그인할 수 있습니다.

콘솔에서 클러스터에 연결

gcloud CLI 또는 Terraform을 사용하여 사용자 클러스터를 만든 경우 콘솔에서 GKE 클러스터 페이지로 이동합니다.

GKE 클러스터로 이동

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

사용자 클러스터의 유형 열에 베어메탈: 사용자가 표시됩니다. 이는 클러스터가 GKE On-Prem API에서 관리됨을 나타냅니다.

스크립트를 사용하여 관리자 클러스터를 만든 경우 유형 열에 외부가 표시됩니다. 이는 클러스터가 GKE On-Prem API에서 관리되지 않음을 나타냅니다. 클러스터가 생성된 후 GKE On-Prem API에서 관리하도록 관리자 클러스터를 구성할 수 있습니다.

클러스터 목록 스크린샷

클러스터에 로그인하려면 다음 안내를 따르세요.

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

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

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

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

클러스터 목록 스크린샷

명령줄에서 클러스터에 연결

GKE On-Prem API는 자동으로 RBAC 정책을 사용자 클러스터 생성자로 구성합니다. 이러한 정책을 사용하면 Connect 게이트웨이 kubeconfig를 사용하여 로컬 데스크톱에서 kubectl 명령어를 실행할 수 있습니다.

로컬 컴퓨터에서 다음을 수행합니다.

  1. Connect 게이트웨이를 통해 클러스터에 액세스할 수 있는 kubeconfig 항목을 가져옵니다.

    gcloud container fleet memberships get-credentials USER_CLUSTER_NAME
    

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

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

    kubectl get nodes
    

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

    NAME                  STATUS   ROLES                  AGE     VERSION
    abm-user-cluster-cp   Ready    control-plane,master   14m     v1.24.2-gke.1900
    abm-user-cluster-w1   Ready    worker                 8m28s   v1.24.2-gke.1900
    

사용자 클러스터에 다른 노드 풀 추가

콘솔

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

    GKE 클러스터로 이동

  2. 클러스터 목록에서 클러스터 이름을 클릭한 다음 세부정보 더보기 패널에서 세부정보 보기를 클릭합니다.

  3. 노드 탭을 클릭합니다.

  4. 노드 풀 추가를 클릭합니다.

  5. 노드 풀에 이름을 입력합니다.

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

    10.200.0.6
    

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

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

  8. 필요한 경우 노드 탭을 다시 클릭합니다.

  9. 새 노드 풀에 조정 중 상태가 표시됩니다.

  10. 노드 풀 만들기 상태를 보려면 오른쪽 상단의 를 클릭합니다. 노드 풀 목록에서 업데이트된 상태를 보려면 페이지를 새로고침해야 할 수 있습니다.

gcloud CLI

다음 명령어를 실행하여 다른 노드 풀을 만듭니다. NODE_POOL_NAME_2를 노드 풀의 이름으로 바꾸고 --cluster 플래그의 자리표시자가 여전히 사용자 클러스터 이름으로 설정되어 있는지 확인합니다.

gcloud container bare-metal node-pools create NODE_POOL_NAME_2 \
  --cluster=USER_CLUSTER_NAME \
  --project=PROJECT_ID \
  --location=ON_PREM_API_REGION \
  --node-configs='node-ip=10.200.0.6'
  • -node-configs: node-ip에 할당된 값은 스크립트로 생성된 VXLAN에 있는 abm-user-cluster-w2 VM의 IP 주소입니다.

Terraform

Terraform을 사용하여 클러스터를 만든 경우 클러스터가 두 개 노드로 생성되므로, VXLAN에 다른 노드를 추가할 수 있는 추가 VM이 없습니다. 노드 풀 추가에 대한 자세한 내용은 google_gkeonprem_bare_metal_cluster 참조 문서를 참조하세요.

또한 kubectl을 사용하여 새 노드를 확인할 수도 있습니다. 먼저 클러스터 명령어를 가져오려면 앞에 설명한 gcloud container fleet memberships get-credentials 명령어를 실행해야 합니다.

kubectl get nodes

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

NAME                  STATUS   ROLES                  AGE     VERSION
abm-user-cluster-cp   Ready    control-plane,master   24m   v1.24.2-gke.1900
abm-user-cluster-w1   Ready    worker                 18m   v1.24.2-gke.1900
abm-user-cluster-w2   Ready    worker                 52s   v1.24.2-gke.1900

삭제

다음 섹션에는 이 가이드에서 만든 클러스터와 VM을 삭제하는 안내가 포함되어 있습니다.

사용자 클러스터 삭제

콘솔

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

    GKE 클러스터로 이동

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

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

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

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

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

gcloud CLI

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

gcloud container bare-metal clusters delete USER_CLUSTER_NAME \
  --project=PROJECT_ID \
  --location=ON_PREM_API_REGION \
  --force

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

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

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. 관리자 워크스테이션을 종료합니다.

  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 --quiet compute instances delete --zone ZONE
    
  7. 서비스 계정을 삭제합니다.

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

    확인 프롬프트에서 y를 입력합니다.

    다음 단계