1. 소개
여러분, 안녕하세요. 오늘 참석해 주셔서 감사합니다. Google Compute Engine을 알아볼 준비가 되셨나요?
이 Codelab에서는 예시 방명록 애플리케이션을 통해 Compute Engine을 살펴보겠습니다.
Compute Engine 인스턴스를 만들고, nginx를 배포하고, 마지막으로 네트워크 부하 분산기를 전면에 배치합니다. 그래픽 콘솔 또는 명령줄에서 Compute Engine 인스턴스를 만들 수 있습니다. 이 실습에서는 명령줄을 사용하는 방법을 안내합니다.
Google Compute Engine은 전 세계의 광섬유 네트워크에 연결된 Google 데이터 센터에서 실행되는 가상 머신을 제공합니다. 제공되는 도구와 워크플로를 통해 단일 인스턴스에서 글로벌 부하 분산 클라우드 컴퓨팅으로 확장할 수 있습니다.
이러한 VM은 빠르게 부팅되고 영구 디스크 스토리지와 함께 제공되며 일관된 성능을 제공합니다. 머신은 사전 정의된 크기를 비롯한 다양한 구성으로 제공되며 특정 니즈에 최적화된 커스텀 머신 유형으로 만들 수도 있습니다.
마지막으로 Compute Engine 가상 머신은 다른 여러 Google Cloud 제품 (Kubernetes Engine, Cloud Dataproc, Cloud Dataflow 등)에서 사용하는 기술이기도 합니다.
2. 설정 및 요구사항
자습형 환경 설정
- Google Cloud Console에 로그인하여 새 프로젝트를 만들거나 기존 프로젝트를 재사용합니다. 아직 Gmail이나 Google Workspace 계정이 없는 경우 계정을 만들어야 합니다.
- 프로젝트 이름은 이 프로젝트 참가자의 표시 이름입니다. 이는 Google API에서 사용하지 않는 문자열이며 언제든지 업데이트할 수 있습니다.
- 프로젝트 ID는 모든 Google Cloud 프로젝트에서 고유해야 하며, 변경할 수 없습니다(설정된 후에는 변경할 수 없음). Cloud Console은 고유한 문자열을 자동으로 생성합니다. 일반적으로 신경 쓰지 않아도 됩니다. 대부분의 Codelab에서는 프로젝트 ID를 참조해야 하며(일반적으로
PROJECT_ID
로 식별됨), 마음에 들지 않는 경우 임의로 다시 생성하거나 직접 지정해서 사용할 수 있는지 확인하세요. 프로젝트가 생성되면 프로젝트 ID가 '고정'됩니다. - 세 번째 값은 일부 API에서 사용하는 프로젝트 번호입니다. 이 세 가지 값에 대한 자세한 내용은 문서를 참조하세요.
- 다음으로 Cloud 리소스/API를 사용하려면 Cloud Console에서 결제를 사용 설정해야 합니다. 이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 튜토리얼을 마친 후 비용이 결제되지 않도록 리소스를 종료하려면 Codelab의 끝에 있는 '삭제' 안내를 따르세요. Google Cloud 새 사용자에게는 미화 $300 상당의 무료 체험판 프로그램에 참여할 수 있는 자격이 부여됩니다.
Google Cloud Shell
Google Cloud와 Compute Engine을 노트북에서 원격으로 실행할 수도 있지만 이 Codelab에서는 클라우드에서 실행되는 명령줄 환경인 Google Cloud Shell을 사용합니다.
이 Debian 기반 가상 머신에는 필요한 모든 개발 도구가 로드되어 있습니다. 영구적인 5GB 홈 디렉터리를 제공하고 Google Cloud에서 실행되므로 네트워크 성능과 인증이 크게 개선됩니다. 즉, 이 Codelab에 필요한 것은 브라우저뿐입니다(Chromebook에서도 작동 가능).
- Cloud Console에서 Cloud Shell을 활성화하려면 단순히 Cloud Shell 활성화를 클릭합니다. 환경을 프로비저닝하고 연결하는 데 몇 정도만 소요됩니다.
Cloud Shell에 연결되면 사용자 인증이 이미 완료되었고 프로젝트가 내 PROJECT_ID
에 설정되어 있음을 확인할 수 있습니다.
gcloud auth list
명령어 결과
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
명령어 결과
[core] project = <PROJECT_ID>
어떤 이유로든 프로젝트가 설정되지 않았으면 다음 명령어를 실행하면 됩니다.
gcloud config set project <PROJECT_ID>
PROJECT_ID
를 찾고 계신가요? 설정 단계에서 사용한 ID를 확인하거나 Cloud Console 대시보드에서 확인하세요.
또한 Cloud Shell은 기본적으로 이후 명령어를 실행할 때 유용할 수 있는 몇 가지 환경 변수를 설정합니다.
echo $GOOGLE_CLOUD_PROJECT
명령어 결과
<PROJECT_ID>
- 마지막으로 기본 영역 및 프로젝트 구성을 설정합니다.
gcloud config set compute/zone us-central1-f
다양한 영역을 선택할 수 있습니다. 자세한 내용은 리전 및 영역을 참조하세요.
3. Compute Engine 인스턴스 만들기
앞서 설명한 것처럼 이 Codelab에서는 gcloud
명령줄을 사용합니다. 여기에서 수행하는 모든 작업은 콘솔을 사용하여 수행할 수 있습니다 (console.cloud.google.com에서 제공).
먼저 기본 설정으로 인스턴스를 만들어 보겠습니다.
$ gcloud compute instances create myinstance Created [...]. NAME: myinstance ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING
EXTERNAL_IP
를 기록해 둡니다. 이 내용은 나중에 중요합니다.
인스턴스는 다음과 같은 여러 기본값을 사용하여 생성됩니다.
- 선택한 영역입니다. 모든 인스턴스는 영역에 상주합니다.
--zone
플래그를 사용하여 인스턴스 생성 시 영역을 선택하거나 초기 설정에서 한 것처럼 기본 영역을 설정하고--zone
플래그를 생략할 수 있습니다. - 최신 Debian GNU/Linux 9 (strap) 이미지 자체 커스텀 이미지를 사용하는 경우 여기에 이미지 이름을 대신 입력합니다.
--image my-own-image
를 예로 들 수 있습니다. n1-standard-1
머신 유형.n1-highmem-4
또는n1-highcpu-6
과 같은 다른 머신 유형을 선택할 수 있습니다. 사전 정의된 머신 유형이 니즈와 일치하지 않으면 커스텀 머신 유형을 사용합니다.- 인스턴스와 같은 이름을 가진 루트 영구 디스크: 자동으로 인스턴스에 연결되는 디스크입니다.
gcloud compute instances create --help
를 실행하여 사용 가능한 모든 옵션을 확인합니다.
4. 포트 80에 방화벽 사용 설정
기본적으로 Google Cloud Platform은 거의 포트 액세스만 허용합니다. Nginx를 곧 설치할 예정이므로 먼저 방화벽 구성에서 포트 80을 사용 설정하겠습니다.
$ gcloud compute firewall-rules create allow-80 --allow tcp:80 Created [...]. NAME: allow-80 NETWORK: default DIRECTION: INGRESS PRIORITY: 1000 ALLOW: tcp:80 DENY: DISABLED: False
이렇게 하면 인바운드 연결(--source-ranges
)이 0.0.0.0/0
(모든 위치)로 설정된 기본 IP 주소 차단 목록이 포함된 allow-80
(이)라는 방화벽 규칙이 생성됩니다.
gcloud compute firewall-rules create --help
를 실행하여 태그 기반 방화벽 규칙 적용 기능을 포함하여 모든 기본값과 사용 가능한 모든 옵션을 확인합니다.
5. SSH를 통해 인스턴스에 연결
명령줄 (Cloud Shell에서 계속)을 통해 SSH를 통해 인스턴스에 연결하려면 다음 안내를 따르세요.
$ gcloud compute ssh myinstance Waiting for SSH key to propagate. Warning: Permanently added 'compute.12345' (ECDSA) to the list of known hosts. ... yourusername@myinstance:~#
이것으로 모든 작업이 완료되었습니다. 아주 간단합니다. (프로덕션에서는 암호를 입력해야 합니다. :)
또는 Compute Engine으로 이동하여 콘솔 ( console.cloud.google.com)에서 바로 인스턴스에 SSH를 통해 연결할 수도 있습니다. VM 인스턴스를 클릭하고 SSH를 클릭합니다.
6. Nginx 설치
새로 만든 인스턴스인 myinstance에 로그인하고 nginx를 설치합니다.
$ sudo su - # apt update # apt install -y nginx # service nginx start # exit
myinstance의 curl
를 사용하여 서버가 실행 중인지 테스트합니다.
$ curl -s localhost | grep nginx <title>Welcome to nginx!</title> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and <a href="http://nginx.org/">nginx.org</a>.<br/> <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p>
웹 UI를 통해 인스턴스를 나열하여 인스턴스의 외부 IP를 찾습니다.
SSH를 종료하고 Cloud Shell에서 다음 명령어를 실행합니다.
$ gcloud compute instances list NAME: myinstance ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING
그런 다음 http://EXTERNAL_IP/
로 이동합니다. 여기서 EXTERNAL_IP
는 myinstance의 공개 IP이며 nginx 페이지를 볼 수 있습니다.
7. 시작 스크립트
매번 인스턴스를 설정하는 대신 시작 스크립트를 사용하여 시작 시 인스턴스를 초기화할 수 있습니다.
다음 내용으로 startup.sh
라는 파일을 만듭니다. vim
, nano
, emacs
등 원하는 텍스트 편집기를 사용할 수 있습니다.
#! /bin/bash apt-get update apt-get install -y nginx service nginx start sed -i -- 's/nginx/Google Cloud Platform - '"$HOSTNAME"'/' /var/www/html/index.nginx-debian.html
이 시작 스크립트로 새 VM 인스턴스를 만들려면 다음을 입력하기만 하면 됩니다.
$ gcloud compute instances create nginx \ --metadata-from-file startup-script=startup.sh Created [...]. NAME: nginx ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING
http://EXTERNAL_IP/
로 이동하면 업데이트된 홈페이지가 표시됩니다. 몇 초 후에 페이지에 즉시 재시도가 표시되지 않으면 호스트가 아직 nginx를 시작하고 있는 것일 수 있습니다.
8. 서버 클러스터 만들기
서버 클러스터를 만들려면 먼저 인스턴스 템플릿을 만들어야 합니다. 인스턴스 템플릿을 만들었으면 인스턴스 그룹을 만들어 만들 인스턴스 수를 관리할 수 있습니다.
먼저 시작 스크립트를 사용하여 인스턴스 템플릿을 만듭니다.
$ gcloud compute instance-templates create nginx-template \ --metadata-from-file startup-script=startup.sh Created [...]. NAME: nginx-template MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: CREATION_TIMESTAMP: 2022-03-18T15:10:37.621-07:00
다음으로 대상 풀을 만들어 보겠습니다. 대상 풀을 사용하면 그룹의 모든 인스턴스에 대한 단일 액세스 포인트를 가질 수 있으며 이후 단계에서 부하 분산에 필요합니다.
$ gcloud compute target-pools create nginx-pool Created [...]. NAME: nginx-pool REGION: us-central1 SESSION_AFFINITY: NONE BACKUP: HEALTH_CHECKS:
마지막으로 템플릿을 사용하여 인스턴스 그룹을 만듭니다.
$ gcloud compute instance-groups managed create nginx-group \ --base-instance-name nginx \ --size 2 \ --template nginx-template \ --target-pool nginx-pool Created [...]. NAME: nginx-group LOCATION: us-central1-f SCOPE: zone BASE_INSTANCE_NAME: nginx SIZE: 0 TARGET_SIZE: 2 INSTANCE_TEMPLATE: nginx-template AUTOSCALED: no
이렇게 하면 이름이 nginx-
로 시작하는 VM 인스턴스 두 개가 추가로 생성됩니다.
이제 생성된 모든 인스턴스를 확인할 수 있습니다.
$ gcloud compute instances list NAME: myinstance ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING NAME: nginx ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING NAME: nginx-frpl ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING NAME: nginx-ztg4 ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING
9. 네트워크 부하 분산기 만들기
Google Cloud Platform에는 다음을 포함한 여러 유형의 부하 분산기가 있습니다.
- L3 네트워크 부하 분산기
- L7 HTTP(S) 부하 분산기
인스턴스 그룹을 대상으로 하는 리전 네트워크 부하 분산기를 만들어 보겠습니다.
$ gcloud compute forwarding-rules create nginx-lb \ --ports 80 \ --target-pool nginx-pool Created [...]. $ gcloud compute forwarding-rules list NAME: nginx-lb REGION: us-central1 IP_ADDRESS: X.X.X.X IP_PROTOCOL: TCP TARGET: us-central1/targetPools/nginx-pool
그런 다음 http://IP_ADDRESS/
브라우저에서 부하 분산기로 이동할 수 있습니다. 여기서 IP_ADDRESS
은 이전 명령어를 실행하면 표시되는 주소입니다.
시간 관계로 HTTP 부하 분산기를 오늘 만들지 않을 예정입니다.
10. 클러스터 정리
클러스터를 종료하는 것을 잊지 마세요. 종료하지 않으면 계속 실행되고 비용이 발생합니다. 다음 명령어는 Google Compute Engine 인스턴스, 인스턴스 그룹, 타겟팅 그룹 및 부하 분산기를 삭제합니다.
$ gcloud compute forwarding-rules delete nginx-lb $ gcloud compute instance-groups managed delete nginx-group $ gcloud compute target-pools delete nginx-pool $ gcloud compute instance-templates delete nginx-template $ gcloud compute instances delete nginx $ gcloud compute instances delete myinstance $ gcloud compute firewall-rules delete allow-80
위의 각 명령어에서는 리소스 삭제를 확인하라는 메시지가 표시됩니다.
11. 다음 단계
축하합니다. 이 Compute Engine Codelab을 완료했습니다.
기타 Compute Engine 기능
Google Compute Engine에는 다양한 기능이 있습니다. 다음 중 몇 가지를 자세히 살펴보세요.
- 선점형 VM - https://cloud.google.com/compute/docs/instances/create-start-preemptible-instance
- 단독 테넌트 노드: https://cloud.google.com/compute/docs/nodes/create-nodes
- GPU 및 TPU: https://cloud.google.com/compute/docs/gpus/add-gpus
- Windows 인스턴스 - https://cloud.google.com/compute/docs/instances/windows/creating-managing-windows-instances
- 리소스 라벨 지정: https://cloud.google.com/compute/docs/labeling-resources
- VM을 Compute Engine으로 마이그레이션 - https://cloud.google.com/compute/docs/vm-migration/
Google Kubernetes Engine
Google Kubernetes Engine (GKE)은 Google Cloud에서 호스팅하는 완전 관리형 Kubernetes 제품입니다. GKE를 시작하는 데 도움이 되는 몇 가지 Codelab이 있습니다. 먼저 다음과 같이 시작하는 것이 좋습니다.
- Google Kubernetes Engine Codelab - https://codelabs.developers.google.com/codelabs/cloud-gke-workshop-v2
Google에 의견 보내기
- 잠시 시간을 내어 간단한 설문조사에 응해주시기 바랍니다.