이 페이지는 Google Distributed Cloud 소프트웨어(이전 명칭: Google Distributed Cloud Virtual)를 사용하여 베어메탈 하드웨어에서 GKE 클러스터의 소규모 개념 증명 설치를 만드는 방법을 안내하는 가이드의 두 번째 부분입니다. 첫 번째 부분인 최소 인프라 설정에서는 하드웨어를 설정하고, IP 주소를 계획하고, 필요한 Google Cloud 인프라를 설정하는 방법을 보여줍니다. 이 문서에서는 이전 섹션의 설정 및 계획을 기반으로 해서 관리자 클러스터와 사용자 클러스터를 만드는 방법을 보여줍니다. 그런 후 서비스 및 인그레스 만들기로 이동할 수 있습니다.
이 가이드에서는 최소한의 Google Distributed Cloud 설치를 만드는 데 도움이 됩니다. 이러한 최소한의 설치는 실제 프로덕션 요구 및 사용 사례에 적합하지 않을 수 있습니다. 프로덕션 설치에 대한 자세한 내용은 설치 가이드를 참조하세요.
시작하기 전에
이 가이드의 이전 부분인 최소 인프라 설정에 설명된 대로 하드웨어를 설정하고 IP 주소를 계획했는지 확인합니다. 또는 Google Cloud 콘솔에서 베어메탈용 GKE 관리자 클러스터 만들기 흐름의 기본 요건 섹션에 있는 네트워크 요구사항 플래너를 사용합니다.
Terraform을 사용하여 사용자 클러스터를 만들려면 관리자 워크스테이션 또는 다른 컴퓨터에 Terraform이 있어야 합니다.
최신 Google Cloud CLI 구성요소가 설치되었는지 확인합니다.
gcloud components update
GKE On-Prem API를 활성화하고 사용하려면 다음 단계를 따르세요.
프로젝트에서 API를 사용 설정합니다.
gcloud services enable \ --project PROJECT_ID \ gkeonprem.googleapis.com
PROJECT_ID
를 Fleet 호스트 프로젝트의 프로젝트 ID로 바꿉니다.PERMISSION_DENIED
오류가 발생하면 입력한 프로젝트 ID를 다시 확인합니다. 프로젝트 ID가 올바르면gcloud auth login
을 실행하여 프로젝트에 액세스 권한이 있는 계정으로 Google Cloud CLI에 로그인합니다.프로젝트에서 GKE On-Prem API를 처음 사용 설정한 경우 API를 초기화해야 할 수 있습니다. gcloud CLI 명령어를 호출하여 클러스터를 만드는 데 사용할 수 있는 버전을 표시하면 됩니다.
gcloud container bare-metal clusters query-version-config \ --project=PROJECT_ID \ --location="us-central1"
절차 개요
기본 클러스터 만들기는 다음과 같은 기본 단계로 구성됩니다.
클러스터 구성을 지정하는 데 사용되는 정보를 수집합니다.
사용자 클러스터 관리를 위해 관리자 클러스터를 만듭니다.
워크로드를 실행할 수 있는 사용자 클러스터를 만듭니다.
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.enabled
를 false
로 설정합니다. spec.gkeOnPremAPI.enabled
필드는 변경 가능하므로 클러스터를 만든 후에는 언제든지 클러스터를 등록 해제할 수 있습니다.
최소 설치를 위해 관리자 클러스터를 만들려면 다음 안내를 따르세요.
다음 명령어를 사용하여 Google Distributed Cloud에서 클러스터를 만드는 데 사용할 수 있는 기본 사용자 인증 정보를 설정합니다.
gcloud auth application-default login
클러스터 구성 파일을 생성하려면 관리자 워크스테이션의
/baremetal
디렉터리에서 다음 명령어를 실행합니다.bmctl create config -c ADMIN_CLUSTER_NAME \ --enable-apis --create-service-accounts --project-id=PROJECT_ID
관리자 클러스터 구성 파일을 확인합니다.
다음 클러스터 구성 파일은 이전 섹션에서 계획 테이블에 입력한 값으로 채워집니다. 입력한 값 외에도 생성된 구성 파일에서 다음 차이를 확인합니다.
- 이 샘플에서는 가독성을 높이기 위해 주석이 삭제되었습니다.
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
관리자 워크스테이션에서 생성된 구성 파일의 콘텐츠를 이전 샘플의 콘텐츠로 바꿉니다.
생성된 파일
bmctl-workspace/ADMIN_CLUSTER_NAME/ADMIN_CLUSTER_NAME.yaml
을 열고 해당 콘텐츠를 이전 단계에서 확인한 샘플의 콘텐츠로 바꿉니다.관리자 클러스터를 만들고 관리자 워크스테이션의
/baremetal
디렉터리에서 다음 명령어를 실행합니다.bmctl create cluster -c ADMIN_CLUSTER_NAME
bmctl
명령어는 프리플라이트 검사를 실행하고 클러스터를 만들 때 화면에 출력을 표시합니다. 자세한 정보는 관리자 워크스테이션의baremetal/bmctl-workspace/ADMIN_CLUSTER_NAME/log
폴더에 있는 로그에 기록됩니다.클러스터를 만드는 데 몇 분 정도 걸릴 수 있습니다.
클러스터가 생성되었고 실행 중인지 확인합니다.
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
클러스터에서 사용자 계정에 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.enabled
를 false
로 설정합니다. spec.gkeOnPremAPI.enabled
필드는 변경 가능하므로 클러스터를 만든 후에는 언제든지 클러스터를 등록 해제할 수 있습니다.
클러스터 구성 파일을 생성합니다.
bmctl create config -c USER_CLUSTER_NAME \ --project-id=PROJECT_ID
사용자 클러스터 구성 파일을 확인합니다.
다음 클러스터 구성 파일은 이전에 계획 테이블에 입력한 값으로 채워집니다. 입력한 값 외에도 생성된 구성 파일에서 다음 차이를 확인합니다.
- 이 샘플에서는 가독성을 높이기 위해 주석이 삭제되었습니다.
- 클러스터 유형
spec.type
이user
로 설정되었습니다. - 계정에
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
관리자 워크스테이션에서 생성된 구성 파일의 콘텐츠를 이전 샘플의 콘텐츠로 바꿉니다.
생성된 파일
bmctl-workspace/USER_CLUSTER_NAME/USER_CLUSTER_NAME.yaml
을 열고 해당 콘텐츠를 이전 단계에서 확인한 샘플의 콘텐츠로 바꿉니다.사용자 클러스터 만들기:
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
폴더에 있는 로그에 기록됩니다.클러스터를 만드는 데 몇 분 정도 걸릴 수 있습니다.
클러스터가 생성되었고 실행 중인지 확인합니다.
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
콘솔
콘솔에서 사용자 클러스터를 만들려면 다음 단계를 수행합니다.
콘솔에서 베어메탈용 GKE 클러스터 만들기 페이지로 이동합니다.
Google Cloud 프로젝트 목록에서
PROJECT_ID
가 선택되어 있는지 확인합니다.클러스터 만들기를 클릭합니다.
대화상자에서 온프레미스를 클릭합니다.
베어메탈 옆의 구성을 클릭합니다. 기본 요건 페이지가 표시됩니다.
클러스터 유형 선택에서 기존 관리자 클러스터의 사용자 클러스터 만들기를 선택합니다.
다음을 클릭합니다.
클러스터 기본사항
사용자 클러스터의 이름으로
USER_CLUSTER_NAME
을 입력하거나 기본값을 사용합니다.새로 만든 관리자 클러스터가 선택되었는지 확인합니다.
GCP API 위치에서 us-central1을 선택합니다.
Google Distributed Cloud 버전에서
CLUSTER_VERSION
을 선택하거나 기본값을 사용합니다. 이 페이지의 나머지 설정에는 기본값을 사용해도 됩니다.왼쪽 탐색 메뉴에서 네트워킹을 클릭합니다.
네트워킹
제어 영역 섹션에서 제어 영역 노드 IP 1 필드에 다음을 입력합니다.
USER_CP_NODE_IP
부하 분산기 섹션에서 기본 부하 분산기인 MetaLB와 번들로 제공을 사용하세요.
새 주소 풀 섹션으로 이동합니다. IP 주소 범위 1 필드에 IP 주소 범위를 입력합니다.
10.200.0.51-10.200.0.70
완료를 클릭합니다.
가상 IP 섹션에서 제어 영역 VIP에 IP 주소를 입력합니다.
USER_CP_VIP
인그레스 VIP에 IP 주소를 입력합니다.
USER_INGRESS_VIP
서비스 및 포드 CIDR 섹션에서 플래너의 서비스 및 포드 CIDR을 변경하지 않은 경우 기본값을 사용할 수 있습니다.
CIDR을 변경했다면 사용하려는 CIDR을 입력합니다.
- 서비스 CIDR:
10.96.0.0/20
- 포드 CIDR:
192.168.0.0/16
왼쪽 탐색 메뉴에서 기본 풀을 클릭합니다.
노드 풀 만들기
클러스터에 워커 노드에 대해 노드 풀이 하나 이상 있어야 합니다. 노드 풀은 이 클러스터에서 만든 워커 노드 그룹의 템플릿입니다.
노드 주소 1 필드에 사용자 클러스터 워커 노드의 IP 주소를 입력합니다.
USER_WORKER_NODE_IP
클러스터 만들기
확인 및 만들기를 클릭하여 사용자 클러스터를 만듭니다.
사용자 클러스터를 만드는 데 15분 이상 걸립니다. 콘솔에 설정을 확인하고 클러스터를 만들 때 상태 메시지가 표시됩니다.
구성에 문제가 있으면 콘솔에 구성 문제를 해결하고 클러스터를 다시 만들 수 있도록 명확한 오류 메시지가 표시됩니다.
생성 프로세스에 대한 추가 정보를 보려면 세부정보 표시를 클릭하여 측면 패널을 표시합니다. 세부정보 패널을 닫으려면
를 클릭합니다.클러스터가 생성되면 클러스터 상태: 실행 중이 표시됩니다.
클러스터가 생성되면
클러스터를 클릭하여 클러스터 페이지로 돌아갑니다.
gcloud CLI
이 섹션에서는 gcloud CLI를 사용하여 사용자 클러스터와 노드 풀을 만드는 방법을 보여줍니다.
다음 명령어를 실행하여 사용자 클러스터를 만듭니다.
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].
클러스터가 생성되면 다음 명령어를 실행하여 새로 생성된 클러스터에 노드 풀을 만듭니다.
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을 사용하여 사용자 클러스터와 노드 풀을 만드는 방법을 보여줍니다.
디렉터리를 만들고 해당 디렉터리 내에 새 파일을 만듭니다. 파일 이름에
.tf
확장자가 있어야 합니다. 이 가이드에서는 파일을main.tf
로 지정합니다.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
사용자 클러스터 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" } } }
Terraform 리소스를
main.tf
에 복사하고 파일을 저장합니다.Terraform 계획을 초기화하고 만듭니다.
terraform init
Terraform은 Google Cloud 제공업체와 같은 필요한 라이브러리를 설치합니다.
구성을 검토하고 필요한 경우 변경합니다.
terraform plan
Terraform 계획을 적용하여 사용자 클러스터를 만듭니다.
terraform apply
메시지가 표시되면
yes
를 입력합니다.기본 사용자 클러스터와 노드 풀을 만드는 데 약 15분 정도(또는 네트워크에 따라 그 이상) 소요됩니다.
사용자 클러스터에 대해 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
는 파일이 생성된 날짜 및 시간을 나타냅니다.이 파일에는 클러스터에 대한 인증 사용자 인증 정보가 포함되기 때문에 액세스가 제한된 보안 위치에 이를 저장해야 합니다.
클러스터가 생성되었고 실행 중인지 확인합니다.
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를 가져오려면 로컬 컴퓨터에서 다음 명령어를 실행합니다.
커넥트 게이트웨이를 통해 클러스터에 액세스할 수 있는 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.
이제 커넥트 게이트웨이를 통해
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가 필요합니다. 관리자 워크스테이션에서 이러한 명령어를 실행해야 합니다.
다음 단계
- 서비스 및 인그레스 만들기
다음에 대해 자세히 알아보기