기본 클러스터 만들기

이 페이지는 베어메탈용 GDCV의 소규모 개념 증명 설치를 안내하는 가이드의 두 번째 부분입니다. 첫 번째 부분인 최소 인프라 설정에서는 하드웨어를 설정하고, IP 주소를 계획하고, 필요한 Google Cloud 인프라를 설정하는 방법을 보여줍니다. 이 문서에서는 이전 섹션의 설정 및 계획을 기반으로 해서 관리자 클러스터와 사용자 클러스터를 만드는 방법을 보여줍니다. 그런 후 서비스 및 인그레스 만들기로 이동할 수 있습니다.

이 가이드에서는 최소한의 베어메탈용 GKE 설치를 만드는 데 도움이 됩니다. 이러한 최소한의 설치는 실제 프로덕션 요구 및 사용 사례에 적합하지 않을 수 있습니다. 프로덕션 설치에 대한 자세한 내용은 설치 가이드를 참조하세요.

시작하기 전에

  1. 이 가이드의 이전 부분인 최소 인프라 설정에 설명된 대로 하드웨어를 설정하고 IP 주소를 계획했는지 확인합니다. 또는 Google Cloud 콘솔에서 베어메탈용 GKE 관리자 클러스터 만들기 흐름의 기본 요건 섹션에 있는 네트워크 요구사항 플래너를 사용합니다.

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

    1. 최신 Google Cloud CLI 구성요소가 설치되었는지 확인합니다.

      gcloud components update
      
  3. GKE On-Prem API를 활성화하고 사용하려면 다음 단계를 따르세요.

    1. 프로젝트에서 API를 사용 설정합니다.

      gcloud services enable \
          --project PROJECT_ID \
          gkeonprem.googleapis.com
      

      PROJECT_ID를 Fleet 호스트 프로젝트의 프로젝트 ID로 바꿉니다.

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

    2. 프로젝트에서 GKE On-Prem API를 처음 사용 설정한 경우 API를 초기화해야 할 수 있습니다. gcloud CLI 명령어를 호출하여 클러스터를 만드는 데 사용할 수 있는 버전을 표시하면 됩니다.

      gcloud container bare-metal clusters query-version-config \
          --project=PROJECT_ID \
          --location="us-central1"
      

절차 개요

기본 클러스터 만들기는 다음과 같은 기본 단계로 구성됩니다.

  1. 클러스터 구성을 지정하는 데 사용되는 정보를 수집합니다.

  2. 사용자 클러스터 관리를 위해 관리자 클러스터를 만듭니다.

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

1. 정보 수집

최소 인프라 설정에서 준비한 정보 또는 네트워크 플래너의 정보를 사용해서 다음 테이블에서 각 자리표시자를 채웁니다. 자리표시자는 관리자 클러스터 하나와 사용자 클러스터 하나로 구성된 최소 설치를 위한 클러스터 구성 파일의 필드 값에 해당합니다. 일부 자리표시자는 생성된 클러스터 구성 파일에서 미리 채워진 값으로 설정되지만 모든 자리표시자가 편집 가능합니다.

기본 클러스터 정보
만들려는 관리자 클러스터의 이름입니다. 관리자 워크스테이션에서 클러스터 아티팩트의 위치와 이름 지정은 클러스터 이름을 기반으로 합니다. 클러스터 네임스페이스는 클러스터 이름에서 파생됩니다. ADMIN_CLUSTER_NAME
만들려는 사용자 클러스터의 이름입니다. 관리자 워크스테이션에서 클러스터 아티팩트의 위치와 이름 지정은 클러스터 이름을 기반으로 합니다. 클러스터 네임스페이스는 클러스터 이름에서 파생됩니다. USER_CLUSTER_NAME
이 가이드의 첫 번째 부분에서 다운로드한 bmctl의 버전입니다. CLUSTER_VERSION
계정 정보
관리자 워크스테이션에서 SSH 비공개 키 파일의 경로입니다. 기본적으로 경로는
/home/USERNAME/.ssh/id_rsa입니다.
SSH_PRIVATE_KEY_PATH
클러스터를 Google Cloud에 연결하고 로그 및 측정항목을 보기 위해 사용하려는 Google Cloud 프로젝트의 ID입니다. 또한 이 프로젝트를 fleet 호스트 프로젝트라고 합니다. PROJECT_ID
Google Cloud 계정과 연결된 이메일 주소입니다. 예를 들면 alex@example.com입니다. GOOGLE_ACCOUNT_EMAIL
노드 머신 IP 주소
관리자 클러스터 제어 영역 노드에 대한 하나의 IP 주소입니다. ADMIN_CP_NODE_IP
사용자 클러스터 제어 영역 노드에 대한 하나의 IP 주소입니다. USER_CP_NODE_IP
사용자 클러스터 워커 노드에 대한 하나의 IP 주소입니다. USER_WORKER_NODE_IP
VIP 주소
관리자 클러스터의 Kubernetes API 서버의 VIP입니다. ADMIN_CP_VIP
사용자 클러스터의 Kubernetes API 서버의 VIP입니다. USER_CP_VIP
인그레스 프록시의 외부 주소로 사용할 하나의 VIP입니다. USER_INGRESS_VIP
LoadBalancer 유형의 서비스에 대해 외부 IP 주소로 사용할 10개 IP 주소 범위입니다. 이 범위에는 MetalLB에 필요한 인그레스 VIP가 포함됩니다. 다른 IP 주소는 이 범위와 중복될 수 있습니다. START_IP-END_IP
포드 및 서비스 CIDR
관리자 클러스터에서 포드에 사용할 CIDR 블록 표기법의 IP 주소 범위입니다. 생성된 클러스터 구성 파일에 미리 채워지는 권장되는 시작 값은 192.168.0.0/16입니다. 192.168.0.0/16
관리자 클러스터에서 서비스에 사용할 CIDR 블록 표기법의 IP 주소 범위입니다. 생성된 클러스터 구성 파일에 미리 채워지는 권장되는 시작 값은 10.96.0.0/20입니다. 10.96.0.0/20
사용자 클러스터에서 포드에 사용할 CIDR 블록 표기법의 IP 주소 범위입니다. 생성된 클러스터 구성 파일에 미리 채워지고 콘솔에서 기본값인 권장되는 시작 값은 192.168.0.0/16입니다. 192.168.0.0/16
사용자 클러스터에서 서비스에 사용할 CIDR 블록 표기법의 IP 주소 범위입니다. 생성된 클러스터 구성 파일에 미리 채워지고 콘솔에서 기본값인 권장되는 시작 값은 10.96.0.0/20입니다. 10.96.0.0/20

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

다음 단계에서는 최소한의 관리자 클러스터 및 사용자 클러스터 설치를 위해 관리자 클러스터를 만듭니다. 계속하기 전에 이전 정보 수집 섹션의 테이블에 있는 각 자리표시자에 대해 값이 제공되었는지 확인합니다.

프로젝트에 GKE On-Prem API(gkeonprem.googleapis.com)가 사용 설정되어 있으면 새로 생성된 클러스터가 API에 자동으로 등록됩니다. 클러스터 구성 파일에 spec.gkeOnPremAPI가 지정되지 않은 경우에도 등록이 발생합니다. 이 Google Cloud 호스팅 API에 등록하면 Google Cloud 콘솔 또는 gcloud CLI를 사용하여 클러스터의 수명 주기를 관리할 수 있습니다.

자동 등록을 사용 중지하려면 클러스터를 만들기 전에 클러스터 구성 파일에서 spec.gkeOnPremAPI 섹션의 주석 처리를 삭제하고 spec.gkeOnPremAPI.enabledfalse로 설정합니다. spec.gkeOnPremAPI.enabled 필드는 변경 가능하므로 클러스터를 만든 후에는 언제든지 클러스터를 등록 해제할 수 있습니다.

최소 설치를 위해 관리자 클러스터를 만들려면 다음 안내를 따르세요.

  1. 다음 명령어를 사용하여 베어메탈용 GKE에서 클러스터를 만드는 데 사용할 수 있는 기본 사용자 인증 정보를 설정합니다.

    gcloud auth application-default login
  2. 클러스터 구성 파일을 생성하려면 관리자 워크스테이션의 /baremetal 디렉터리에서 다음 명령어를 실행합니다.

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

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

    • 이 샘플에서는 가독성을 높이기 위해 주석이 삭제되었습니다.
    • NodePool 사양이 삭제되었습니다. 워커 노드는 관리자 클러스터에 허용되지 않습니다.
    gcrKeyPath: bmctl-workspace/.sa-keys/PROJECT_ID-anthos-baremetal-gcr.json
    sshPrivateKeyPath: SSH_PRIVATE_KEY_PATH
    gkeConnectAgentServiceAccountKeyPath: bmctl-workspace/.sa-keys/PROJECT_ID-anthos-baremetal-connect.json
    gkeConnectRegisterServiceAccountKeyPath: bmctl-workspace/.sa-keys/PROJECT_ID-anthos-baremetal-register.json
    cloudOperationsServiceAccountKeyPath: bmctl-workspace/.sa-keys/PROJECT_ID-anthos-baremetal-cloud-ops.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: CLUSTER_VERSION
      gkeConnect:
        projectID: PROJECT_ID
      controlPlane:
        nodePoolSpec:
          nodes:
          - address: ADMIN_CP_NODE_IP
      clusterNetwork:
        pods:
          cidrBlocks:
          - 192.168.0.0/16
        services:
          cidrBlocks:
          - 10.96.0.0/20
      loadBalancer:
        mode: bundled
        ports:
          controlPlaneLBPort: 443
        vips:
          controlPlaneVIP: ADMIN_CP_VIP
      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: 250
      # GKEOnPremAPI (Optional) Specify if you wish to explicitly enable/disable the cloud hosted gkeonprem
      # API to enable/disable cluster lifecycle management from gcloud UI and Terraform.
      # gkeOnPremAPI:
        # enabled: false
        # location is the Cloud location for the cluster resource metadata where the cluster will be enrolled.
        # location: us-central1
  4. 관리자 워크스테이션에서 생성된 구성 파일의 콘텐츠를 이전 샘플의 콘텐츠로 바꿉니다.

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

  5. 관리자 클러스터를 만들고 관리자 워크스테이션의 /baremetal 디렉터리에서 다음 명령어를 실행합니다.

    bmctl create cluster -c ADMIN_CLUSTER_NAME

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

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

  6. 클러스터가 생성되었고 실행 중인지 확인합니다.

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

    클러스터가 실행 중이면 응답이 다음과 같이 표시됩니다.

    NAME     STATUS  ROLES          AGE  VERSION
    node-01  Ready   control-plane  16h  v1.25.7-gke.1000
  7. 클러스터에서 사용자 계정에 Kubernetes clusterrole/cluster-admin 역할을 부여하려면 다음 gcloud 명령어를 실행합니다.

    gcloud container fleet memberships generate-gateway-rbac \
        --membership=ADMIN_CLUSTER_NAME \
        --role=clusterrole/cluster-admin \
        --users=GOOGLE_ACCOUNT_EMAIL \
        --project=PROJECT_ID \
        --kubeconfig=bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig \
        --context=ADMIN_CLUSTER_NAME-admin@ADMIN_CLUSTER_NAME \
        --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/<var class="edit"scope="ADMIN_CLUSTER_NAME">ADMIN_CLUSTER_NAME</var>/<var class="edit"scope="ADMIN_CLUSTER_NAME">ADMIN_CLUSTER_NAME</var>-kubeconfig, context: <var class="edit"scope="ADMIN_CLUSTER_NAME">ADMIN_CLUSTER_NAME</var>-admin@<var class="edit"scope="ADMIN_CLUSTER_NAME">ADMIN_CLUSTER_NAME</var>
    Writing RBAC policy for user: GOOGLE_ACCOUNT_EMAIL to cluster.
    Successfully applied the RBAC policy to cluster.
    

    다른 모든 것 중에서 RBAC 정책을 사용하면 Google Cloud 콘솔에서 클러스터에 로그인하여 더 많은 클라우드 세부정보를 확인할 수 있습니다.

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

다음 단계에서는 최소한의 관리자 클러스터 및 사용자 클러스터 설치를 위해 사용자 클러스터를 만듭니다. 계속하기 전에 앞의 정보 수집 섹션의 테이블에 있는 각 자리표시자에 대해 값이 제공되었는지 확인합니다.

최소 설치를 위해 사용자 클러스터를 만들려면 다음 안내를 따르세요.

bmctl

프로젝트에 GKE On-Prem API(gkeonprem.googleapis.com)가 사용 설정되어 있으면 새로 생성된 클러스터가 API에 자동으로 등록됩니다. 클러스터 구성 파일에 spec.gkeOnPremAPI가 지정되지 않은 경우에도 등록이 발생합니다. 클러스터가 Google Cloud에서 호스팅하는 이 API에 등록되면 Google Cloud 콘솔 또는 gcloud CLI를 사용하여 클러스터 수명 주기를 관리할 수 있습니다.

자동 등록을 사용 중지하려면 클러스터를 만들기 전에 클러스터 구성 파일에서 spec.gkeOnPremAPI 섹션의 주석 처리를 삭제하고 spec.gkeOnPremAPI.enabledfalse로 설정합니다. spec.gkeOnPremAPI.enabled 필드는 변경 가능하므로 클러스터를 만든 후에는 언제든지 클러스터를 등록 해제할 수 있습니다.

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

    bmctl create config -c USER_CLUSTER_NAME \
      --project-id=PROJECT_ID
  2. 사용자 클러스터 구성 파일을 확인합니다.

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

    • 이 샘플에서는 가독성을 높이기 위해 주석이 삭제되었습니다.
    • 클러스터 유형 spec.typeuser로 설정되었습니다.
    • 계정에 clusterrole/cluster-admin을 부여하도록 spec.clusterSecurity.authorization.clusterAdmin.gcpAccounts 필드가 추가되었습니다. 다른 모든 것 중에서 이 필드를 사용하면 Google Cloud 콘솔에서 클러스터에 로그인하여 더 많은 클라우드 세부정보를 확인할 수 있습니다.
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-USER_CLUSTER_NAME
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: USER_CLUSTER_NAME
      namespace: cluster-USER_CLUSTER_NAME
    spec:
      type: user
      profile: default
      anthosBareMetalVersion: CLUSTER_VERSION
      gkeConnect:
        projectID: PROJECT_ID
      controlPlane:
        nodePoolSpec:
          nodes:
          - address: USER_CP_NODE_IP
      clusterNetwork:
        pods:
          cidrBlocks:
          - 192.168.0.0/16
        services:
          cidrBlocks:
          - 10.96.0.0/20
      loadBalancer:
        mode: bundled
        ports:
          controlPlaneLBPort: 443
        vips:
          controlPlaneVIP: USER_CP_VIP
          ingressVIP: USER_INGRESS_VIP
        addressPools:
        - name: pool1
          addresses:
          - START_IP-END_IP
      clusterOperations:
        projectID: PROJECT_ID
        location: us-central1
      clusterSecurity:
        authorization:
          clusterAdmin:
            gcpAccounts:
            - GOOGLE_ACCOUNT_EMAIL
      storage:
        lvpNodeMounts:
          path: /mnt/localpv-disk
          storageClassName: local-disks
        lvpShare:
          path: /mnt/localpv-share
          storageClassName: local-shared
          numPVUnderSharedPath: 5
      nodeConfig:
        podDensity:
          maxPodsPerNode: 250
      # GKEOnPremAPI (Optional) Specify if you wish to explicitly enable/disable the cloud hosted gkeonprem
      # API to enable/disable cluster lifecycle management from gcloud UI and Terraform.
      # gkeOnPremAPI:
        # enabled: false
        # location is the Cloud location for the cluster resource metadata where the cluster will be enrolled.
        # location: us-central1
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: NodePool
    metadata:
      name: node-pool-1
      namespace: cluster-USER_CLUSTER_NAME
    spec:
      clusterName: USER_CLUSTER_NAME
      nodes:
      - address: USER_WORKER_NODE_IP
    
  3. 관리자 워크스테이션에서 생성된 구성 파일의 콘텐츠를 이전 샘플의 콘텐츠로 바꿉니다.

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

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

    bmctl create cluster -c USER_CLUSTER_NAME \
    --kubeconfig bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig

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

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

  5. 클러스터가 생성되었고 실행 중인지 확인합니다.

    kubectl --kubeconfig bmctl-workspace/USER_CLUSTER_NAME/USER_CLUSTER_NAME-kubeconfig \
      get nodes

    클러스터가 실행 중이면 응답이 다음과 같이 표시됩니다.

    NAME    STATUS   ROLES           AGE     VERSION
    nuc-3   Ready    control-plane   4m32s   v1.26.2-gke.1001
    nuc-4   Ready    worker          2m2s    v1.26.2-gke.1001

콘솔

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

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

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

  2. Google Cloud 프로젝트 목록에서 PROJECT_ID가 선택되어 있는지 확인합니다.

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

  4. 다음을 클릭합니다.

클러스터 기본사항

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

  2. 새로 만든 관리자 클러스터가 선택되었는지 확인합니다.

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

  4. 베어메탈용 GDCV 버전에서 CLUSTER_VERSION을 선택하거나 기본값을 사용합니다. 이 페이지의 나머지 설정에는 기본값을 사용해도 됩니다.

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

네트워킹

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

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

  3. 새 주소 풀 섹션으로 이동합니다. IP 주소 범위 1 필드에 IP 주소 범위를 입력합니다.

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

  5. 가상 IP 섹션에서 제어 영역 VIP에 IP 주소를 입력합니다.

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

    USER_INGRESS_VIP
    
  7. 서비스 및 포드 CIDR 섹션에서 플래너의 서비스 및 포드 CIDR을 변경하지 않은 경우 기본값을 사용할 수 있습니다.

    CIDR을 변경했다면 사용하려는 CIDR을 입력합니다.

    • 서비스 CIDR:
    10.96.0.0/20
    
    • 포드 CIDR:
    192.168.0.0/16
    
  8. 왼쪽 탐색 메뉴에서 기본 풀을 클릭합니다.

노드 풀 만들기

클러스터에 워커 노드에 대해 노드 풀이 하나 이상 있어야 합니다. 노드 풀은 이 클러스터에서 만든 워커 노드 그룹의 템플릿입니다.

노드 주소 1 필드에 사용자 클러스터 워커 노드의 IP 주소를 입력합니다.

USER_WORKER_NODE_IP

클러스터 만들기

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

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

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

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

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

    클러스터 준비 스크린샷

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

gcloud CLI

이 섹션에서는 gcloud CLI를 사용하여 사용자 클러스터와 노드 풀을 만드는 방법을 보여줍니다.

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

    gcloud container bare-metal clusters create USER_CLUSTER_NAME \
      --project=PROJECT_ID \
      --location=us-central1 \
      --admin-cluster-membership=ADMIN_CLUSTER_NAME \
      --admin-cluster-membership-project=PROJECT_ID \
      --admin-cluster-membership-location=global \
      --version=CLUSTER_VERSION \
      --admin-users=GOOGLE_ACCOUNT_EMAIL \
      --island-mode-service-address-cidr-blocks=10.96.0.0/20 \
      --island-mode-pod-address-cidr-blocks=192.168.0.0/16 \
      --metal-lb-address-pools='pool=lb-pool-1,manual-assign=True,addresses=START_IP-END_IP' \
      --control-plane-node-configs='node-ip=USER_CP_NODE_IP' \
      --control-plane-vip=USER_CP_VIP \
      --control-plane-load-balancer-port=443 \
      --ingress-vip=USER_INGRESS_VIP \
      --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/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=us-central1
    

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

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

    Created Anthos cluster on bare metal [https://gkeonprem.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/bareMetalClusters/USER_CLUSTER_NAME].
    
  2. 클러스터가 생성되면 다음 명령어를 실행하여 새로 생성된 클러스터에 노드 풀을 만듭니다.

    gcloud container bare-metal node-pools create node-pool-1 \
      --cluster=USER_CLUSTER_NAME \
      --project=PROJECT_ID \
      --location=us-central1 \
      --node-configs node-ip=USER_WORKER_NODE_IP

자세한 정보 및 기타 예시는 다음을 참조하세요.

Terraform

이 섹션에서는 Terraform을 사용하여 사용자 클러스터와 노드 풀을 만드는 방법을 보여줍니다.

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

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

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

    resource "google_gkeonprem_bare_metal_cluster"  "cluster-basic" {
      provider = google-beta
      name = "USER_CLUSTER_NAME"
      project = "PROJECT_ID"
      location = "us-central1"
      admin_cluster_membership = "projects/PROJECT_ID/locations/global/memberships/ADMIN_CLUSTER_NAME"
      bare_metal_version = "CLUSTER_VERSION"
      network_config {
        island_mode_cidr {
          service_address_cidr_blocks = ["10.96.0.0/20"]
          pod_address_cidr_blocks = ["192.168.0.0/16"]
        }
      }
      control_plane {
        control_plane_node_pool_config {
          node_pool_config {
            labels = {}
            operating_system = "LINUX"
            node_configs {
              labels = {}
              node_ip = "USER_CP_NODE_IP"
            }
          }
        }
      }
      load_balancer {
        port_config {
          control_plane_load_balancer_port = 443
        }
        vip_config {
          control_plane_vip = "USER_CP_VIP"
          ingress_vip = "USER_INGRESS_VIP"
        }
        metal_lb_config {
          address_pools {
            pool = "pool1"
            addresses = [
              "START_IP-END_IP"
            ]
            avoid_buggy_ips = true
            manual_assign = true
          }
        }
      }
      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"
        }
      }
      security_config {
        authorization {
          admin_users {
            username = "GOOGLE_ACCOUNT_EMAIL"
          }
        }
      }
    }
    
    resource "google_gkeonprem_bare_metal_node_pool" "node-pool-default" {
      provider = google-beta
      name =  "node-pool-1"
      bare_metal_cluster = google_gkeonprem_bare_metal_cluster.cluster-basic.name
      project = "PROJECT_ID"
      location = "us-central1"
      node_pool_config {
        operating_system = "LINUX"
        node_configs {
          node_ip = "USER_WORKER_NODE_IP"
        }
      }
    }
    
  3. Terraform 리소스를 main.tf에 복사하고 파일을 저장합니다.

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

    terraform init
    

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

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

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

    terraform apply
    

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

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

  7. 사용자 클러스터에 대해 kubeconfig 파일을 만들려면 관리자 워크스테이션에서 다음 명령어를 실행합니다.

    bmctl get credentials --cluster USER_CLUSTER_NAME \
    --admin-kubeconfig bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME-kubeconfig

    이 명령어의 출력은 사용자 클러스터에 대한 kubeconfig 파일 이름을 표시합니다. 예를 들면 다음과 같습니다.

    bmctl-workspace/USER_CLUSTER_NAME/USER_CLUSTER_NAME-TIMESTAMP-kubeconfig

    파일 이름의 TIMESTAMP는 파일이 생성된 날짜 및 시간을 나타냅니다.

    이 파일에는 클러스터에 대한 인증 사용자 인증 정보가 포함되기 때문에 액세스가 제한된 보안 위치에 이를 저장해야 합니다.

  8. 클러스터가 생성되었고 실행 중인지 확인합니다.

    kubectl --kubeconfig bmctl-workspace/USER_CLUSTER_NAME/USER_CLUSTER_NAME-TIMESTAMP-kubeconfig \
        get nodes

    클러스터가 실행 중이면 응답이 다음과 같이 표시됩니다.

    NAME    STATUS   ROLES           AGE     VERSION
    nuc-3   Ready    control-plane   4m32s   v1.26.2-gke.1001
    nuc-4   Ready    worker          2m2s    v1.26.2-gke.1001

자세한 정보 및 기타 예시는 다음을 참조하세요.

사용자 클러스터에 연결

사용자 클러스터를 만드는 데 사용한 도구에 관계없이 이메일 주소에는 전체 관리 권한으로 클러스터에 연결할 수 있는 역할 기반 액세스 제어(RBAC) 정책이 부여됩니다. 이메일 주소가 지정되는 위치는 도구에 따라 다릅니다.

  • bmctl: 이메일 주소가 사용자 구성 파일 예시의 clusterSecurity 섹션에 포함됩니다.

  • Terraform: 이메일 주소가 google_gkeonprem_bare_metal_cluster 리소스 예시의 security_config 섹션에 포함됩니다.

  • 콘솔: 클러스터 생성자의 이메일 주소가 승인 섹션의 클러스터 기본사항 페이지에 자동으로 포함됩니다.

이메일 주소만 지정되었지만 다른 사용자에게 클러스터에 대한 관리 액세스 권한을 부여하기 위해 다른 이메일 주소를 포함할 수 있습니다.

이메일 주소에 부여된 RBAC 정책은 다음을 수행합니다.

  • 클러스터에서 사용자에게 Kubernetes clusterrole/cluster-admin 역할을 부여합니다.

  • Google ID를 사용해서 Google Cloud 콘솔에서 클러스터에 로그인할 수 있습니다. 콘솔의 GKE 클러스터 페이지에서 클러스터를 볼 수 있습니다.

  • 커넥트 게이트웨이의 kubeconfig를 사용해서 로컬 컴퓨터에서 kubectl 명령어를 실행할 수 있습니다.

커넥트 게이트웨이의 kubeconfig를 가져오려면 로컬 컴퓨터에서 다음 명령어를 실행합니다.

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

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

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

    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
    nuc-3   Ready    control-plane   4m32s   v1.26.2-gke.1001
    nuc-4   Ready    worker          2m2s    v1.26.2-gke.1001

    많은 kubectl 명령어에 관리자 클러스터에 대해 kubeconfig가 필요합니다. 관리자 워크스테이션에서 이러한 명령어를 실행해야 합니다.

다음 단계