베어메탈용 GKE에서는 OpenStack을 프라이빗 클라우드 플랫폼으로 사용할 수 있습니다. 이 지원을 통해 다음 OpenStack 서비스를 사용할 수 있습니다.
- Infrastructure as a Service(IaaS)
- Load balancing as a Service(LBaaS)
- 스토리지
지원되는 운영체제를 사용하여 OpenStack 가상 머신(VM)에서 실행되는 베어메탈용 GKE를 배포할 수 있습니다. 베어메탈용 GKE는 VM을 자동으로 프로비저닝하지 않으며 VM 프로비저닝은 이 가이드의 범위에서 다루지 않습니다. VM 요구사항을 확인하고 예시 배포를 검토하려면 OpenStack VM 생성을 위한 Terraform 예시를 참조하세요.
베어메탈용 GKE에서 OpenStack LBaaS 및 Kubernetes OpenStack 클라우드 제공업체를 사용하여 OpenStack 클러스터 외부의 Kubernetes 서비스를 노출할 수 있습니다.
이 가이드는 다음 섹션들로 구성됩니다.
- 베어메탈용 GKE 배포
- Octavia 부하 분산기와 통합할 수 있도록 베어메탈용 GKE에서 Kubernetes용 OpenStack Cloud Provider 구성
- Kubernetes 통합을 위해 OpenStack 클라우드 제공업체 검사
이 가이드에서는 OpenStack Ussuri가 사용되지만, 이전 버전의 OpenStack도 사용 가능합니다. 이전 OpenStack 버전은 테스트되지 않았습니다. 이 가이드에서는 OpenStack VM을 사용하여 OpenStack에서 실행되는 베어메탈용 2노드 GKE 개념 증명 환경을 제공합니다. 고가용성 제어 영역을 포함하는 프로덕션 환경을 만드는 방법에 관한 자세한 내용은 '프로덕션 환경 요구사항을 위한 베어메탈용 GKE 문서'를 참조하세요.
배포 예시
이 가이드에서는 OpenStack의 LBaaS와 통합되는 베어메탈용 GKE를 OpenStack에 배포하는 예시를 제공합니다. OpenStack 환경에 맞는 명령어 및 구성을 이해하고 그에 따라 조정해야 합니다. 다음 다이어그램에서는 결과 배포를 보여줍니다.
기본 요건
- LBaaS v2가 배포되고 작동하는 OpenStack Ussuri
- bmctl 도구 다운로드를 위한 서비스 계정
- 배포 예시에 표시된 대로 OpenStack VM 및 네트워크를 구성합니다.
OpenStack 환경에서 비슷한 설정을 프로비저닝하려면 다음 옵션을 사용합니다.
- Terraform 스크립트를 사용하여 리소스를 자동으로 프로비저닝합니다.
- 리소스를 수동으로 프로비저닝합니다.
- 다음 OpenStack VM이 준비되어 있고 SSH를 통해 제공되어야 합니다.
이름 | 용도 | IP 주소 |
---|---|---|
abm-ws |
10.200.0.10(비공개 IP) floating_ip(비공개 IP) |
관리자 워크스테이션으로 작동합니다. 다른 머신에 베어메탈용 Anthos를 배포하기 위해 사용됩니다. |
abm-cp1 | 10.200.0.11 | Anthos 클러스터 제어 영역: 이 호스트는 Kubernetes 제어 영역 및 부하 분산기를 실행합니다. |
abm-w1 | 10.200.0.12 | Anthos 클러스터 워커 노드: 이 호스트는 Kubernetes 워크로드를 실행합니다. |
베어메탈용 GKE 배포
이 가이드에서는 다음 작업을 완료하는 방법을 보여줍니다.
abm-ws
관리자 워크스테이션 VM에서 필요한 도구 설치- 배포를 안전하게 완료하는 데 필요한 프로젝트 ID 및 서비스 계정 구성
- 클러스터 구성 파일 만들기
- 베어메탈용 GKE 배포
필요한 도구 설치
abm-ws
VM의 비공개 유동 IP 주소를 가져옵니다.export OPENSTACK_IPS=$(openstack floating ip list --tags=abm_ws_floatingip -f json) export FLOATING_IP=$(jq -c '.[]."Floating IP Address"' <<< $OPENSTACK_IPS | tr -d '"')
SSH를 통해
abm-ws
VM에 안전하게 연결할 수 있고root
사용자로 로그인할 수 있는지 확인합니다.root
사용자(Terraform 스크립트로 구성)는abm
입니다.ssh ubuntu@$FLOATING_IP sudo -u abm -i
SSH로 다른 노드에 연결할 수 있는지 확인합니다.
ssh abm@10.200.0.11 'echo SSH to $HOSTNAME succeeded' ssh abm@10.200.0.12 'echo SSH to $HOSTNAME succeeded'
위 명령어의 예상 출력은 다음과 같습니다.
SSH to abm-cp1 succeeded SSH to abm-w1 succeeded
abm-ws
VM에kubectl
명령줄 유틸리티를 다운로드합니다.curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl" chmod +x kubectl sudo mv kubectl /usr/local/sbin/
abm-ws
VM에 Docker를 설치합니다.curl -fsSL https://get.docker.com -o get-docker.sh sh get-docker.sh sudo usermod -aG docker abm newgrp docker
Google Cloud 프로젝트 및 서비스 계정 구성
사용자 계정의 Google Cloud CLI 액세스 사용자 인증 정보를 가져옵니다. 이 사용자 인증 정보는 아래 표시된
gcloud
명령어를 사용할 때 사용됩니다.gcloud auth login
베어메탈용 GKE를 등록하려는 Google Cloud 프로젝트를 사용하도록 Google Cloud CLI가 구성되었는지 확인합니다.
gcloud config set project PROJECT_ID
관리자 워크스테이션에서 사용자 계정에 대해 애플리케이션 기본 사용자 인증 정보(ADC)를 설정합니다. 이 사용자 인증 정보는 클러스터 만들기를 위해
bmctl
도구를 사용할 때 사용됩니다.gcloud auth application-default login
bm-gcr
서비스 계정을 만듭니다. 이 서비스 계정을 사용하여 베어메탈용 GKE 클러스터에서 인증을 수행합니다.gcloud iam service-accounts create bm-gcr gcloud iam service-accounts keys create bm-gcr.json \ --iam-account=bm-gcr@PROJECT_ID.iam.gserviceaccount.com
필요한 API를 사용 설정합니다.
gcloud services enable \ 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
bm-gcr
서비스 계정에 추가 권한을 부여합니다. 권한을 추가하면 개별 서비스에 대해 여러 서비스 계정을 만들 필요가 없습니다.gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/gkehub.connect" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/gkehub.admin" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/logging.logWriter" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/monitoring.metricWriter" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/monitoring.dashboardEditor" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/stackdriver.resourceMetadata.writer" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:bm-gcr@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/opsconfigmonitoring.resourceMetadata.writer"
클러스터 구성 파일 만들기
bmctl
명령줄 유틸리티를 다운로드합니다.mkdir baremetal && cd baremetal gsutil cp gs://anthos-baremetal-release/bmctl/1.16.8/linux-amd64/bmctl . chmod a+x bmctl sudo mv bmctl /usr/local/sbin/
클러스터에 대해 베어메탈용 GKE 작업공간을 만듭니다.
bmctl create config -c CLUSTER_NAME
베어메탈용 GKE 클러스터에 대한 구성 파일을 만듭니다.
cat > bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME.yaml << EOB --- gcrKeyPath: /home/abm/bm-gcr.json sshPrivateKeyPath: /home/abm/.ssh/id_rsa gkeConnectAgentServiceAccountKeyPath: /home/abm/bm-gcr.json gkeConnectRegisterServiceAccountKeyPath: /home/abm/bm-gcr.json cloudOperationsServiceAccountKeyPath: /home/abm/bm-gcr.json --- apiVersion: v1 kind: Namespace metadata: name: openstack-cluster-ns --- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: CLUSTER_NAME namespace: openstack-cluster-ns annotations: baremetal.cluster.gke.io/external-cloud-provider: "true" spec: type: hybrid anthosBareMetalVersion: 1.16.8 gkeConnect: projectID: PROJECT_ID controlPlane: nodePoolSpec: clusterName: CLUSTER_NAME nodes: - address: 10.200.0.11 clusterNetwork: pods: cidrBlocks: - 192.168.0.0/16 services: cidrBlocks: - 10.96.0.0/20 loadBalancer: mode: manual ports: controlPlaneLBPort: 443 vips: controlPlaneVIP: 10.200.0.101 ingressVIP: 10.200.0.102 clusterOperations: location: us-central1 projectID: PROJECT_ID storage: lvpNodeMounts: path: /mnt/localpv-disk storageClassName: node-disk lvpShare: numPVUnderSharedPath: 5 path: /mnt/localpv-share storageClassName: standard nodeAccess: loginUser: abm --- apiVersion: baremetal.cluster.gke.io/v1 kind: NodePool metadata: name: node-pool-1 namespace: openstack-cluster-ns spec: clusterName: CLUSTER_NAME nodes: - address: 10.200.0.12 EOB
배포
클러스터를 배포합니다.
bmctl create cluster -c CLUSTER_NAME
bmctl
명령어를 실행하면 새 하이브리드 클러스터 설정이 시작됩니다. 여기에는 노트에 대한 실행 전 검사 수행, 관리자 및 사용자 클러스터 만들기, Connect를 사용하여 Google Cloud에 클러스터 등록이 포함됩니다.
전체 설정은 최대 15분까지 걸릴 수 있습니다. 클러스터를 만드는 동안 다음 출력이 표시됩니다.
Please check the logs at bmctl-workspace/CLUSTER_NAME/log/create-cluster-20210926-020741/create-cluster.log
[2021-09-26 02:07:59+0000] Creating bootstrap cluster... ⠦ kind get kubeconfig --name bmctl > ~/.kube/config && k get pods --all-namespaces
[2021-09-26 02:07:59+0000] Creating bootstrap cluster... OK
[2021-09-26 02:10:48+0000] Installing dependency components... OK
[2021-09-26 02:13:42+0000] Waiting for preflight check job to finish... OK
[2021-09-26 02:15:22+0000] - Validation Category: machines and network
[2021-09-26 02:15:22+0000] - [PASSED] gcp
[2021-09-26 02:15:22+0000] - [PASSED] node-network
[2021-09-26 02:15:22+0000] - [PASSED] 10.200.0.11
[2021-09-26 02:15:22+0000] - [PASSED] 10.200.0.11-gcp
[2021-09-26 02:15:22+0000] - [PASSED] 10.200.0.12
[2021-09-26 02:15:22+0000] - [PASSED] 10.200.0.12-gcp
[2021-09-26 02:15:22+0000] Flushing logs... OK
[2021-09-26 02:15:23+0000] Applying resources for new cluster
[2021-09-26 02:15:24+0000] Waiting for cluster to become ready OK
[2021-09-26 02:25:04+0000] Writing kubeconfig file
[2021-09-26 02:25:04+0000] kubeconfig of created cluster is at bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig, please run
[2021-09-26 02:25:04+0000] kubectl --kubeconfig bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig get nodes
[2021-09-26 02:25:04+0000] to get cluster node status.
[2021-09-26 02:25:04+0000] Please restrict access to this file as it contains authentication credentials of your cluster.
[2021-09-26 02:25:04+0000] Waiting for node pools to become ready OK
[2021-09-26 02:25:24+0000] Moving admin cluster resources to the created admin cluster
[2021-09-26 02:25:53+0000] Flushing logs... OK
[2021-09-26 02:25:53+0000] Deleting bootstrap cluster...
클러스터 확인 및 상호작용
bmctl-workspace
디렉터리 내부의 abm-ws
VM에서 클러스터의 kubeconfig
파일을 찾을 수 있습니다. 배포를 확인하려면 다음 단계를 완료하세요.
클러스터에서
kubectl
명령어를 실행하려면 클러스터 구성 파일의 경로로KUBECONFIG
환경 변수를 설정합니다.export KUBECONFIG=$HOME/bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig kubectl get nodes
다음 출력과 비슷하게 출력된 클러스터 노드가 표시됩니다.
NAME STATUS ROLES AGE VERSION abm-cp1 Ready control-plane,master 5m24s v1.20.5-gke.1301 abm-w1 Ready <none> 2m17s v1.20.5-gke.1301
Google Cloud 콘솔에서 클러스터에 로그인
Google Cloud 콘솔에서 워크로드를 관측하려면 클러스터에 로그인해야 합니다. 클러스터에 로그인하는 방법에 대한 안내 및 자세한 내용은 Google Cloud 콘솔에서 클러스터에 로그인을 참조하세요.
삭제
관리 워크스테이션(abm-ws
) VM에서 다음 명령어를 실행하여 클러스터를 삭제할 수 있습니다.
export KUBECONFIG=$HOME/bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
bmctl reset --cluster CLUSTER_NAME
다음 단계
이제 Kubernetes용 OpenStack 클라우드 제공업체 구성 가이드에 따라 새로 만든 베어메탈용 GKE 클러스터에 OpenStack 클라우드 제공업체를 설치할 수 있습니다. 이렇게 하면 LoadBalancer
유형 서비스를 사용하고 OpenStack LBaaS를 활용하여 애플리케이션을 배포할 수 있습니다.