이 페이지에서는 선점형 가상 머신(VM) 인스턴스를 만들고 사용하는 방법을 설명합니다. 선점형 VM은 표준 VM 가격에 비해 60~91% 할인된 가격으로 제공됩니다. 하지만 Compute Engine이 다른 작업 때문에 리소스를 회수해야 하는 경우 이러한 VM을 중지(선점)할 수 있습니다. 선점형 VM은 항상 24시간 후에 중지됩니다. 선점형 VM은 VM 선점을 감당할 수 있는 내결함성 애플리케이션에만 권장됩니다. 선점형 VM을 만들기로 결정하기 전에 애플리케이션에서 선점을 처리할 수 있는지 확인하세요. 선점형 VM의 위험과 가치를 이해하려면 선점형 VM 문서를 참조하세요.
시작하기 전에
- 선점형 VM 인스턴스 문서를 읽습니다.
-
아직 인증을 설정하지 않았다면 설정합니다.
인증은 Google Cloud 서비스 및 API에 액세스하기 위해 ID를 확인하는 프로세스입니다.
로컬 개발 환경에서 코드 또는 샘플을 실행하려면 다음과 같이 Compute Engine에 인증하면 됩니다.
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
- 종료 스크립트를 로컬 워크 스테이션으로 복사하거나 다운로드합니다.
- 수정할 파일을 열고 다음 변수를 변경합니다.
[PROGRAM_NAME]
은 종료할 프로세스나 프로그램의 이름입니다. 예를 들면apache2
또는nginx
입니다.[LOCAL_USER]
는 가상 머신에 로그인할 때 사용한 사용자 이름입니다.[BUCKET_NAME]
은 프로그램의 체크포인트 파일을 저장할 Cloud Storage 버킷의 이름입니다. 이 경우 버킷 이름은gs://
로 시작되지 않습니다.
- 변경사항을 저장합니다.
- 새 VM이나 기존 VM에 종료 스크립트를 추가합니다.
VM이 Cloud Storage에 대한 최소한의 읽기/쓰기 권한으로 생성되었습니다. 적합한 범위로 VM을 만드는 방법은 인증 문서를 참조하세요.
기존 Cloud Storage 버킷과 이에 대한 쓰기 권한이 있습니다.
Google Cloud 콘솔에서 로그 페이지로 이동합니다.
프로젝트를 선택하고 계속을 클릭합니다.
라벨별 필터링 또는 텍스트 검색 필드에
compute.instances.preempted
를 추가합니다.선택적으로 특정 VM의 선점 작업을 보려면 VM 이름을 입력해도 됩니다.
Enter 키를 눌러 지정한 필터를 적용합니다. VM이 선점된 작업만 표시하도록 Google Cloud 콘솔의 로그 목록이 업데이트됩니다.
선점된 VM에 대한 세부정보를 보려면 목록에서 작업을 선택합니다.
- 선점형 VM 인스턴스 문서 읽기
- 종료 스크립트 알아보기
- VM에 연결
Go
이 페이지의 Go 샘플을 로컬 개발 환경에서 사용하려면 gcloud CLI를 설치 및 초기화한 다음 사용자 인증 정보로 애플리케이션 기본 사용자 인증 정보를 설정하세요.
자세한 내용은 다음을 참조하세요: Set up authentication for a local development environment.
자바
이 페이지의 Java 샘플을 로컬 개발 환경에서 사용하려면 gcloud CLI를 설치 및 초기화한 다음 사용자 인증 정보로 애플리케이션 기본 사용자 인증 정보를 설정하세요.
자세한 내용은 다음을 참조하세요: Set up authentication for a local development environment.
Node.js
이 페이지의 Node.js 샘플을 로컬 개발 환경에서 사용하려면 gcloud CLI를 설치 및 초기화한 다음 사용자 인증 정보로 애플리케이션 기본 사용자 인증 정보를 설정하세요.
자세한 내용은 다음을 참조하세요: Set up authentication for a local development environment.
Python
이 페이지의 Python 샘플을 로컬 개발 환경에서 사용하려면 gcloud CLI를 설치 및 초기화한 다음 사용자 인증 정보로 애플리케이션 기본 사용자 인증 정보를 설정하세요.
자세한 내용은 다음을 참조하세요: Set up authentication for a local development environment.
REST
로컬 개발 환경에서 이 페이지의 REST API 샘플을 사용하려면 gcloud CLI에 제공하는 사용자 인증 정보를 사용합니다.
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
자세한 내용은 Google Cloud 인증 문서의 REST 사용 인증을 참조하세요.
선점형 VM 만들기
gcloud CLI 또는 Compute Engine API를 사용하여 선점형 VM을 만듭니다. Google Cloud 콘솔을 사용하려면 대신 Spot VM을 만듭니다.
gcloud
gcloud compute
를 사용하는 경우 일반 VM을 만들 때와 동일한instances create
명령어를 사용하되,--preemptible
플래그를 추가합니다.gcloud compute instances create [VM_NAME] --preemptible
여기서
[VM_NAME]
은 VM의 이름입니다.Go
자바
Node.js
Python
REST
API에서 일반적인 VM 만들기 요청을 작성하되,
scheduling
아래에preemptible
속성을 포함하고 이를true
로 설정합니다. 예를 들면 다음과 같습니다.POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances { 'machineType': 'zones/[ZONE]/machineTypes/[MACHINE_TYPE]', 'name': '[INSTANCE_NAME]', 'scheduling': { 'preemptible': true }, ... }
선점형 CPU 할당량
선점형 VM은 표준 VM과 같은 사용 가능한 CPU 할당량이 필요합니다. 표준 VM에 대해 선점형 VM이 CPU 할당량을 소비하지 않도록 방지하려면 특별한 '선점형 CPU' 할당량을 요청할 수 있습니다. Compute Engine이 이 리전에 선점형 CPU 할당량을 부여하면 모든 선점형 VM이 해당 할당량으로 계산되고 모든 표준 VM은 계속 표준 CPU 할당량으로 계산됩니다.
선점형 CPU 할당량이 없는 리전에서는 표준 CPU 할당량을 사용하여 선점형 VM을 시작할 수 있습니다. 여느 때처럼 충분한 IP와 디스크 할당량도 필요합니다. Compute Engine이 할당량을 부여하지 않으면 gcloud CLI나 Google Cloud 콘솔 할당량 페이지에 선점형 CPU 할당량이 표시되지 않습니다.
할당량에 대한 자세한 내용은 리소스 할당량 페이지를 참조하세요.
선점형 VM 시작
다른 VM과 마찬가지로 선점형 VM이 중지되거나 선점된 경우 VM을 다시 시작하고
RUNNING
상태로 되돌릴 수 있습니다. 선점형 VM을 시작하면 24시간 카운터가 재설정되지만 여전히 선점형 VM이므로 Compute Engine이 24시간 전에 선점될 수 있습니다. 선점형 VM은 실행 중인 표준 VM으로 변환할 수 없습니다.Compute Engine이 자동 확장 관리형 인스턴스 그룹(MIG) 또는 Google Kubernetes Engine(GKE) 클러스터에서 선점형 VM을 중지하면 리소스를 다시 사용할 수 있을 때 그룹이 VM을 다시 시작합니다.
종료 스크립트로 선점 처리
VM이 선점되면 종료 스크립트를 사용하여 VM이 중지되기 전에 정리 작업을 수행할 수 있습니다. 예를 들어 실행 중인 프로세스를 정상적으로 중지하고 체크포인트 파일을 Cloud Storage에 복사할 수 있습니다.
다음은 실행 중인 선점형 VM에 추가하거나 선점형 VM을 만들 때 추가할 수 있는 종료 스크립트입니다. 이 스크립트는 운영체제의 일반
kill
명령어가 나머지 프로세스를 모두 중지하기 전 VM이 종료되기 시작할 때 실행됩니다. 원하는 프로그램을 정상적으로 중지한 후 스크립트는 Cloud Storage 버킷에 체크포인트 파일을 동시에 업로드합니다.#!/bin/bash MY_PROGRAM="[PROGRAM_NAME]" # For example, "apache2" or "nginx" MY_USER="[LOCAL_USERNAME]" CHECKPOINT="/home/$MY_USER/checkpoint.out" GSUTIL_OPTS="-m -o GSUtil:parallel_composite_upload_threshold=32M" BUCKET_NAME="[BUCKET_NAME]" # For example, "my-checkpoint-files" (without gs://) echo "Shutting down! Seeing if ${MY_PROGRAM} is running." # Find the newest copy of $MY_PROGRAM PID="$(pgrep -n "$MY_PROGRAM")" if [[ "$?" -ne 0 ]]; then echo "${MY_PROGRAM} not running, shutting down immediately." exit 0 fi echo "Sending SIGINT to $PID" kill -2 "$PID" # Portable waitpid equivalent while kill -0 "$PID"; do sleep 1 done echo "$PID is done, copying ${CHECKPOINT} to gs://${BUCKET_NAME} as ${MY_USER}" su "${MY_USER}" -c "gsutil $GSUTIL_OPTS cp $CHECKPOINT gs://${BUCKET_NAME}/" echo "Done uploading, shutting down."
이 스크립트를 VM에 추가하려면 VM의 애플리케이션에서 작동하도록 스크립트를 구성한 후 VM 메타데이터에 추가합니다.
이 스크립트는 다음을 가정합니다.
선점형 VM 식별
VM이 선점형 VM인지 확인하려면 VM 프로비저닝 모델 및 종료 작업 식별 단계를 수행합니다.
VM이 선점되었는지 확인
Google Cloud 콘솔, gcloud CLI, API를 통해 VM이 선점되었는지 확인합니다.
콘솔
시스템 활동 로그를 점검하여 VM이 선점되었는지 확인할 수 있습니다.
gcloud
gcloud compute operations list
명령어를 filter 매개변수와 함께 사용하여 프로젝트의 선점 이벤트 목록을 가져올 수 있습니다.gcloud compute operations list \ --filter="operationType=compute.instances.preempted"
filter 매개변수를 사용하여 결과 범위를 세부적으로 지정할 수 있습니다. 예를 들어 관리형 인스턴스 그룹 내의 VM에 대한 선점 이벤트만 확인하려면 다음을 실행합니다.
gcloud compute operations list \ --filter="operationType=compute.instances.preempted AND targetLink:instances/[BASE_VM_NAME]"
gcloud
는 다음과 비슷한 응답을 반환합니다.NAME TYPE TARGET HTTP_STATUS STATUS TIMESTAMP systemevent-xxxxxxxx compute.instances.preempted us-central1-f/instances/example-vm-xxx 200 DONE 2015-04-02T12:12:10.881-07:00
작업 유형이
compute.instances.preempted
이면 VM이 선점된 것입니다.operations describe
명령어를 사용하여 특정 선점 작업에 대한 자세한 정보를 볼 수 있습니다.gcloud compute operations describe \ systemevent-xxxxxxxx
gcloud
는 다음과 비슷한 응답을 반환합니다.... operationType: compute.instances.preempted progress: 100 selfLink: https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-f/operations/systemevent-xxxxxxxx startTime: '2015-04-02T12:12:10.881-07:00' status: DONE statusMessage: Instance was preempted. ...
REST
최근 시스템 작업 목록을 가져오려면 영역 작업의 URI에GET
요청을 보냅니다.GET https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/operations
응답에는 최근 작업 목록이 포함됩니다.
{ "kind": "compute#operation", "id": "15041793718812375371", "name": "systemevent-xxxxxxxx", "zone": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-f", "operationType": "compute.instances.preempted", "targetLink": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-f/instances/example-vm", "targetId": "12820389800990687210", "status": "DONE", "statusMessage": "Instance was preempted.", ... }
선점 작업만 표시하도록 응답 범위를 지정하려면 다음과 같이 API 요청에 필터를 추가합니다.
operationType="compute.instances.preempted"
특정 VM의 선점 작업을 확인하려면 다음과 같이 필터에targetLink
매개변수를 추가합니다.operationType="compute.instances.preempted" AND targetLink="https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[VM_NAME]"
VM이 VM 내부에서 선점되었는지 여부도 확인할 수도 있습니다. 이 기능은 Compute Engine 선점으로 인해 종료 스크립트의 정상 종료와 다른 방식으로 종료를 처리하려는 경우에 유용합니다. 이렇게 하려면 메타데이터 서버에서 VM의 기본 인스턴스 메타데이터에 있는
preempted
값을 확인하면 됩니다.예를 들어 VM 내에서
curl
을 사용하여preempted
메타데이터 경로의 값을 구할 수 있습니다.curl "http://metadata.google.internal/computeMetadata/v1/instance/preempted" -H "Metadata-Flavor: Google" TRUE
이 값이
TRUE
이면 VM이 Compute Engine에 의해 선점된 것이고, 그렇지 않으면FALSE
입니다.종료 스크립트 밖에서 이 값을 사용하려면 URL에 ?wait_for_change=true를 추가하면 됩니다. 그러면 메타데이터가 변경되고 VM이 선점된 경우에만 반환되는 중지된 HTTP GET 요청이 수행됩니다.
curl "http://metadata.google.internal/computeMetadata/v1/instance/preempted?wait_for_change=true" -H "Metadata-Flavor: Google" TRUE
선점 설정 테스트
VM에서 시뮬레이션된 유지보수 이벤트를 실행해 선점을 강제로 적용해 볼 수 있습니다. 이 기능을 이용해 앱이 선점형 VM을 어떻게 처리하는지 테스트해 보세요. VM에서 유지보수 이벤트를 테스트하는 방법은 가용성 정책 테스트를 참조하세요.
또한 VM을 중지하여 VM 선점을 시뮬레이션할 수도 있습니다. 이 방법은 유지보수 이벤트를 시뮬레이션하는 대신 사용할 수 있으며 할당량 제한을 피할 수 있습니다.
권장사항
다음은 선점형 VM 인스턴스를 최대한 활용하는 데 도움이 되는 몇 가지 권장사항입니다.
일괄 인스턴스 API 사용
단일 VM을 만드는 대신 일괄 인스턴스 API를 사용할 수 있습니다.
작은 머신 유형 선택
선점형 VM용 리소스는 초과 및 백업 Google Cloud 용량에서 나옵니다. 용량은 머신 유형이 작을수록 즉, vCPU 및 메모리와 같은 리소스가 작을수록 더 쉽게 가져올 수 있습니다. 더 작은 커스텀 머신 유형을 선택하여 선점형 VM 용량을 더 많이 찾을 수 있지만 사전 정의된 머신 유형이 더 작을수록 용량이 더 클 수 있습니다. 예를 들어
n2-standard-32
사전 정의된 머신 유형의 용량과 비교할 때n2-custom-24-96
커스텀 머신 유형의 용량이 더 클 수 있지만n2-standard-16
사전 정의된 머신 유형은 용량이 이보다 더 클 수 있습니다.사용량이 적을 때 대규모 선점형 VM 클러스터 실행
Google Cloud 데이터 센터의 부하는 위치와 시간에 따라 다르지만 일반적으로 야간과 주말에 가장 낮습니다. 따라서 큰 선점형 VM 클러스터를 실행하기에 가장 좋은 시간은 야간과 주말입니다.
결함 및 선점을 허용하도록 애플리케이션 설계
선점 패턴이 다른 시점에서 변경될 것이라는 사실에 대비하는 것이 중요합니다. 예를 들어, 영역이 부분적으로 중단되는 경우 복구 과정에서 이동해야 하는 표준 VM을 위한 공간을 확보하기 위해 많은 수의 선점형 VM을 선점할 수 있습니다. 이 짧은 기간 동안의 선점률은 여느 날과 매우 달라 보입니다. 애플리케이션에서 선점이 항상 작은 그룹으로 이루어진다고 가정할 경우 이러한 이벤트에 대한 준비가 되어 있지 않을 수 있습니다. VM 인스턴스를 중지하여 선점 발생 시 애플리케이션의 동작을 테스트할 수 있습니다.
선점된 VM 만들기 재시도
VM 인스턴스가 선점되었으면 표준 VM으로 돌아가기 전에 새로운 선점형 VM을 한두 번 다시 시도하는 것이 좋습니다. 요구사항에 따라 작업이 적절한 속도로 진행되도록 클러스터에서 표준 VM과 선점형 VM을 결합하는 것이 좋습니다.
종료 스크립트 사용
처음부터 다시 시작하지 않고 중단한 부분부터 작업을 다시 진행할 수 있도록 작업 진행 상황을 저장할 수 있는 종료 스크립트로 종료 및 선점 알림을 관리합니다.
다음 단계
달리 명시되지 않는 한 이 페이지의 콘텐츠에는 Creative Commons Attribution 4.0 라이선스에 따라 라이선스가 부여되며, 코드 샘플에는 Apache 2.0 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 Google Developers 사이트 정책을 참조하세요. 자바는 Oracle 및/또는 Oracle 계열사의 등록 상표입니다.
최종 업데이트: 2024-09-05(UTC)
-