이 가이드에서는 지원되는 운영체제가 있는 OpenStack 가상 머신(VM)에 Google Distributed Cloud를 샘플 배포하는 과정을 안내합니다. 이 배포에서는 스크립트를 사용하여 OpenStack VM에의 하이브리드 클러스터 설치를 간소화합니다. 또한 이 가이드는 Load Balancing as a Service(LBaaS)를 사용 설정하는 한 가지 방법을 보여줍니다. Google Distributed Cloud에서 OpenStack LBaaS 및 Kubernetes OpenStack 클라우드 제공업체를 사용하여 OpenStack 클러스터 외부의 Kubernetes 서비스를 노출할 수 있습니다.
Google Distributed Cloud는 OpenStack VM을 자동으로 프로비저닝하지 않으며, VM 프로비저닝은 이 가이드의 범위에서 다루지 않습니다. VM 요구사항을 확인하고 예시 배포를 검토하려면 OpenStack VM 생성을 위한 Terraform 예시를 참조하세요.
이 가이드는 다음 섹션들로 구성됩니다.
Google Distributed Cloud 배포
Octavia 부하 분산기와 통합할 수 있도록 Google Distributed Cloud에서 Kubernetes용 OpenStack 클라우드 제공업체 구성
Kubernetes 통합을 위해 OpenStack 클라우드 제공업체 검사
이 가이드에서는 OpenStack Ussuri가 사용되지만, Google Distributed Cloud에는 특정 버전의 OpenStack에 대한 요구사항이 없습니다. 이 가이드에서는 OpenStack VM을 사용하여 OpenStack에서 실행되는 2노드 Google Distributed Cloud 개념 증명 환경을 제공합니다. 고가용성 제어 영역을 포함하는 프로덕션 환경을 만드는 방법에 대한 자세한 내용은 프로덕션 환경 요구사항을 위한 Google Distributed Cloud 문서를 참조하세요.
배포 예시
이 가이드에서는 OpenStack LBaaS와 통합되는 OpenStack에 Google Distributed Cloud를 배포하는 예시를 제공합니다. OpenStack 환경에 맞는 명령어 및 구성을 이해하고 그에 따라 조정해야 합니다. 다음 다이어그램에서는 결과 배포를 보여줍니다.
기본 요건
- LBaaS v2가 배포되고 작동하는 OpenStack Ussuri
- bmctl 도구 다운로드를 위한 서비스 계정
- 배포 예시에 표시된 대로 OpenStack VM 및 네트워크를 구성합니다.
OpenStack 환경에서 비슷한 설정을 프로비저닝하려면 다음 옵션을 사용합니다.
- 이 Terraform 스크립트를 사용하여 리소스를 자동으로 프로비저닝합니다.
- 리소스를 수동으로 프로비저닝합니다.
- 다음 OpenStack VM이 준비되어 있고 SSH를 통해 제공되어야 합니다.
이름 | IP 주소 | 목적 |
---|---|---|
abm-ws |
10.200.0.10(비공개 IP) floating_ip(비공개 IP) |
관리자 워크스테이션으로 작동하며 다른 머신에 Google Distributed Cloud를 배포하는 데 사용됩니다. |
abm-cp1 | 10.200.0.11 | GKE 클러스터 제어 영역: 이 호스트는 Kubernetes 제어 영역 및 부하 분산기를 실행합니다. |
abm-w1 | 10.200.0.12 | GKE 클러스터 워커 노드: 이 호스트는 Kubernetes 워크로드를 실행합니다. |
Google Distributed Cloud 배포
이 섹션에서는 다음 작업을 완료하는 방법을 보여줍니다.
필요한 도구 설치
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
사용자로 로그인할 수 있는지 확인합니다. Terraform 스크립트로 구성된root
사용자는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
Google Distributed Cloud를 등록하려는 Google Cloud 프로젝트를 사용하도록 Google Cloud CLI가 구성되었는지 확인합니다.
gcloud config set project PROJECT_ID
관리자 워크스테이션에서 사용자 계정에 대해 애플리케이션 기본 사용자 인증 정보(ADC)를 설정합니다. 이 사용자 인증 정보는 클러스터 만들기를 위해
bmctl
도구를 사용할 때 사용됩니다.gcloud auth application-default login
bm-gcr
서비스 계정을 만듭니다. 이 서비스 계정을 사용하여 Google Distributed Cloud 클러스터에서 인증합니다.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.29.200-gke.243/linux-amd64/bmctl . chmod a+x bmctl sudo mv bmctl /usr/local/sbin/
클러스터의 Google Distributed Cloud 작업공간을 만듭니다.
bmctl create config -c CLUSTER_NAME
Google Distributed Cloud 클러스터의 구성 파일을 만듭니다.
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.29.200-gke.243 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
파일을 찾을 수 있습니다. 배포를 확인하려면 다음 단계를 완료하세요.
클러스터 구성 파일의 경로로
KUBECONFIG
환경 변수를 설정하여 클러스터에서kubectl
명령어를 실행합니다.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
다음 단계
- 새로 만든 Google Distributed Cloud 클러스터에 OpenStack 클라우드 제공업체를 설치하려면 Kubernetes용 OpenStack 클라우드 제공업체 구성 가이드를 따르세요.