Google Compute Engine

1. 소개

안녕하세요. 오늘 참석해 주셔서 감사합니다. Google Compute Engine을 학습할 준비가 되셨나요?

이 Codelab에서는 예시 방명록 애플리케이션을 통해 작동하는 Compute Engine을 살펴봅니다.

Compute Engine 인스턴스를 만들고, nginx를 배포하고, 마지막으로 네트워크 부하 분산기를 앞에 배치합니다. Compute Engine 인스턴스는 그래픽 콘솔 또는 명령줄에서 만들 수 있습니다. 이 실습에서는 명령줄을 사용하는 방법을 안내합니다.

ComputeEngine_128픽셀.png

Google Compute Engine은 전 세계 광섬유 네트워크에 연결된 Google 데이터 센터에서 실행되는 가상 머신을 제공합니다. 제공되는 도구와 워크플로를 통해 단일 인스턴스에서 글로벌 부하 분산 클라우드 컴퓨팅으로 확장할 수 있습니다.

이러한 VM은 빠르게 부팅되고 영구 디스크 스토리지와 함께 제공되며 일관된 성능을 제공합니다. 머신은 사전 정의된 크기를 포함하여 다양한 구성으로 제공되며 특정 요구사항에 맞게 최적화된 커스텀 머신 유형으로 만들 수도 있습니다.

마지막으로, Compute Engine 가상 머신은 Kubernetes Engine, Cloud Dataproc, Cloud Dataflow 등 다른 여러 Google Cloud 제품에서 사용되는 기술이기도 합니다.

2 설정 및 요구사항

자습형 환경 설정

  1. Google Cloud Console에 로그인하여 새 프로젝트를 만들거나 기존 프로젝트를 재사용합니다. 아직 Gmail 또는 Google Workspace 계정이 없다면 계정을 만들어야 합니다.

b35bf95b8bf3d5d8.png

A99b7ace416376c4.png

bd84a6d3004737c5.png

  • 프로젝트 이름은 이 프로젝트 참가자의 표시 이름입니다. 이는 Google API에서 사용하지 않는 문자열이며 언제든지 업데이트할 수 있습니다.
  • 프로젝트 ID는 모든 Google Cloud 프로젝트에서 고유해야 하며, 변경할 수 없습니다 (설정된 후에는 변경할 수 없음). Cloud Console은 고유한 문자열을 자동으로 생성합니다. 일반적으로 별 상관없음 대부분의 Codelab에서는 프로젝트 ID를 참조해야 하며, 일반적으로 프로젝트 ID가 PROJECT_ID로 식별되므로 마음에 들지 않는 경우 다른 임의 ID를 생성하거나 직접 시도하여 다음을 확인할 수 있습니다. 있습니다. 프로젝트가 생성된 후 '고정'됩니다.
  • 세 번째 값은 API Number(일부 API에서 사용)입니다. 이 세 가지 값에 대한 자세한 내용은 문서를 참조하세요.
  1. 다음으로 Cloud 리소스/API를 사용하려면 Cloud Console에서 결제를 사용 설정해야 합니다. 이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 튜토리얼 외에는 비용이 청구되지 않도록 리소스를 종료하려면 Codelab의 끝에 있는 'clean-up' 안내를 따르세요. Google Cloud 신규 사용자는 $300 USD 무료 체험 프로그램을 이용할 수 있습니다.

Google Cloud Shell

노트북에서 원격으로 Google Cloud와 Compute Engine을 작동할 수 있지만, 이 Codelab에서는 Cloud에서 실행되는 명령줄 환경인 Google Cloud Shell을 사용할 것입니다.

이 Debian 기반 가상 머신에는 필요한 모든 개발 도구가 로드되어 있습니다. 영구적인 5GB 홈 디렉터리를 제공하고 Google Cloud에서 실행되므로 네트워크 성능과 인증이 크게 개선됩니다. 즉, 이 Codelab에 필요한 것은 브라우저뿐입니다(Chromebook에서도 작동 가능).

  1. Cloud Console에서 Cloud Shell을 활성화하려면 단순히 Cloud Shell 활성화b125d9eb26a46cc5.png를 클릭합니다. 환경을 프로비저닝하고 연결하는 데 몇 정도만 소요됩니다.

1067942a9a93f70.png

Screen Shot 2017-06-14 at 10.13.43 PM.png

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 대시보드에서 확인하세요.

cc3895eeac80db2c.png

또한 Cloud Shell은 기본적으로 이후 명령어를 실행할 때 유용할 수 있는 몇 가지 환경 변수를 설정합니다.

echo $GOOGLE_CLOUD_PROJECT

명령어 결과

<PROJECT_ID>
  1. 마지막으로 기본 영역 및 프로젝트 구성을 설정합니다.
gcloud config set compute/zone us-central1-f

다양한 영역을 선택할 수 있습니다. 자세한 내용은 리전 및 영역을 참조하세요.

3. Compute Engine 인스턴스 만들기

앞서 설명한 것처럼 이 Codelab에서는 gcloud 명령줄을 사용합니다. 여기에 설명된 모든 작업은 Console을 사용하여 수행할 수 있습니다 (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 (스트레치) 이미지 자체 맞춤 이미지를 사용하는 경우 여기에 이미지 이름을 입력합니다. --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)이 허용되는 기본 IP 주소 블록 목록이 있는 allow-80라는 방화벽 규칙이 만들어지고 (모든 위치) 0.0.0.0/0로 설정됩니다.

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 > VM 인스턴스로 이동하여 Console ( console.cloud.google.com)에서 직접 인스턴스에 SSH로 연결할 수도 있습니다. 3)을 클릭하고 SSH를 클릭합니다.

BFBC03997a41946e.png

6. Nginx 설치

새로 생성된 인스턴스인 myinstance에 로그인하여 nginx를 설치합니다.

$ sudo su -
# apt update
# apt install -y nginx
# service nginx start
# exit

myinstancecurl를 사용하여 서버가 실행 중인지 테스트합니다.

$ 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를 찾습니다.

dcc4e56e82ba2603.png

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_IPmyinstance의 공개 IP이며 nginx 페이지를 볼 수 있습니다.

49b52b9354041f3b.png

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에는 다음과 같은 여러 유형의 부하 분산기가 있습니다.

인스턴스 그룹을 타겟팅하는 리전별 네트워크 부하 분산기를 만들어 보겠습니다.

$ 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

위의 각 명령어에서 리소스 삭제를 확인하라는 메시지가 표시됩니다.

1일 다음 단계

축하합니다. 이 Compute Engine Codelab을 완료했습니다.

Compute Engine 기능 더보기

Google Compute Engine에는 다양한 기능이 있습니다. 다음 항목 중 하나를 자세히 살펴보시기 바랍니다.

Google Kubernetes Engine

Google Kubernetes Engine (GKE)은 Google Cloud에서 호스팅하고 완전 관리형 Kubernetes 제품입니다. GKE를 시작하는 데 도움이 되는 몇 가지 Codelab이 있습니다. 다음부터 시작하는 것이 좋습니다.

Google에 의견 보내기

  • 잠시 시간을 내어 간단한 설문조사에 응해주시기 바랍니다.