스팟 인스턴스

스팟 인스턴스는 표준 인스턴스의 대폭 할인된 버전입니다. 무중단 또는 상태 비저장 워크로드에 사용 가능한 컴퓨팅 리소스를 사용하도록 설계되었습니다. 스팟 인스턴스는 언제든지 선점(또는 퇴출)할 수 있습니다.

스팟 인스턴스를 사용하면 워크로드 특성, 성능 요구 사항 및 가격대에 맞는 최적의 호환 프로필을 선택할 수 있습니다. 스팟 인스턴스는 IBM Cloud VPC 리소스 수요에 따라 이러한 인스턴스를 선점하기 때문에 내결함성, 중단 없는 워크로드에 이상적입니다.

스팟 인스턴스는 다음과 같은 워크로드에 이상적이지만 이에 국한되지 않습니다.

  • 개발 테스트 서버
  • 데이터 분석
  • 이미지 렌더링
  • 컨테이너화
  • 일괄처리

스팟 인스턴스 혜택

스팟 인스턴스에는 다음과 같은 이점이 있습니다.

  • 비용 효율적
  • 확장 가능 - VPC용 자동 확장을 통해 스팟 인스턴스를 추가하거나 제거할 수 있습니다
  • 스팟 인스턴스는 표준 인스턴스 할당량을 사용하지 않습니다. 스팟 인스턴스에는 자체 할당량이 있습니다(기본값은 100개).
  • 최소 런타임 없음
  • 크기 조정 가능 (크기를 조정하려면 인스턴스를 중지해야 함)

스팟 인스턴스 제한 사항

스팟 인스턴스는 다음 기능과 호환되지 않습니다.

  • 버스터블 인스턴스
  • 전용 호스트
  • 예약

스팟 인스턴스 세부 정보

  • 스팟 인스턴스는 GPU 프로필과 Flex 프로필만 지원합니다.
  • 자동 확장 및 인스턴스 그룹은 스팟 인스턴스를 지원합니다.
  • 배치 그룹은 지원되지만 배치 그룹을 사용하면 용량 오류가 발생할 수 있다는 점에 유의하세요.

스팟 인스턴스는 사용 가능한 용량이 보장되지 않습니다. 용량을 사용할 수 없는 경우 다른 영역이나 지역을 시도하거나 나중에 다시 시도할 수 있습니다.

인스턴스 프로필에는 "표준", "스팟" 또는 둘 다인 가용성_클래스라는 속성이 있습니다. 값 배열에 '스팟'이 있는 경우 프로필을 사용하여 스팟 인스턴스를 만들 수 있습니다.

인스턴스를 만들 때 몇 가지 새 필드를 설정해야 합니다:

  • availability.class "스팟"이어야 합니다
  • availability_policy.preemption 는 "중지" 또는 "삭제"일 수 있습니다(기본값은 "중지"입니다)

API 요청에 포함된 속성의 다음 예시를 참조하세요.

{
   "availability": {
       "class": "spot"
   },
   "availability_policy": {
       "preemption": "delete"
   },
   ...
}

선점

스팟 인스턴스 선점은 플랫폼이 스팟 인스턴스를 퇴거시킬 필요가 있다고 판단하는 경우입니다. 선점 시작 시 선점 정책이 적용되고 30초의 최선의 노력 선점 유예 기간이 시작됩니다. 이 유예 기간이 끝나면 스팟 인스턴스가 강제로 종료됩니다.

선점 정책에 따라 인스턴스가 선점된 경우 스팟 인스턴스의 동작이 결정됩니다. 지원되는 인스턴스에 추가되는 availability_policy.preemption 속성의 값은 "stop" 또는 "delete"입니다. 이 속성은 availability.class = spot.

  • "중지" - 선점이 완료되면 인스턴스가 중지 상태가 됩니다. 인스턴스를 다시 시작하거나 삭제할 수 있습니다.
  • "삭제" - 선점 후 인스턴스가 삭제됩니다.

선점 중 선점 정책에 대한 변경 사항은 다음 선점 때까지 적용되지 않습니다.

선점 통지는 두 가지 방식으로 이루어집니다.

  • Spot 인스턴스의 운영 체제 내에서 정상 종료 명령이 실행됩니다. 이 종료 명령은 게스트 내에서 프로그래밍 방식으로 응답할 수 있습니다.
  • 스팟 인스턴스가 선점을 위해 선택되면 선점 프로세스가 시작될 때 사용자 대상 로그가 전송됩니다. 예시: " instance.00002 ": "스팟 인스턴스 {{.instanceID}} 가 선점을 위해 선택되었습니다". 30초 후에도 스팟 인스턴스가 아직 중지되지 않은 경우 게스트 내에서 강제 종료가 실행됩니다. 로깅에 대한 자세한 내용은 VPC용 로깅을 참조하세요.

인스턴스 그룹으로 스케일 다운하여 삭제된 스팟 인스턴스는 선점된 것으로 간주되지 않으므로 선점 정책이 무시됩니다.

스팟 인스턴스가 선점되면 스팟 인스턴스 운영 체제로 정상 종료 명령이 전송됩니다. 종료 스크립트를 만들어 systemd 서비스 파일에 추가하면 이 종료 요청을 가로채고 종료 스크립트를 실행할 수 있습니다. 스크립트 예제는 usr/local/bin/ibm-cloud-shutdown-script.sh 에서 확인할 수 있습니다.

#!/bin/bash
OUTPUT_FILE="/tmp/counter.out"
counter=0
while true; do
    echo "$counter" > "$OUTPUT_FILE"
    ((counter++))
    sleep 1
done

이 스크립트는 종료를 실행하기 위한 자리 표시자입니다. systemd 서비스 파일에서 스크립트를 실행하려면 다음 예제와 같이 서비스 파일의 ExecStop 필드에 다음 예시와 같이 스크립트 경로를 추가합니다.

예: /etc/systemd/system/ibm-cloud-shutdown-script.service 에 있는 systemd 서비스 파일:

[Unit]
Description=IBM Cloud Shutdown Script
Wants=network-online.target rsyslog.service
After=network-online.target rsyslog.service
[Service]
Type=oneshot
ExecStart=/bin/true
RemainAfterExit=true
ExecStop=/usr/local/bin/ibm-cloud-shutdown-script.sh
TimeoutStopSec=0
KillMode=process
[Install]
WantedBy=multi-user.target

정상 종료 명령과 후속 강제 종료 명령 사이의 시간은 30초입니다. 따라서 종료 스크립트가 30초가 지난 후에도 여전히 실행 중이면 강제 중지에 의해 중단됩니다. 이 30초의 유예 기간은 최선을 다해 시도한 것으로 상황에 따라 달라질 수 있습니다.

인스턴스 그룹을 사용하여 스팟 인스턴스 다시 생성하기

스팟 인스턴스가 선점된 경우, 인스턴스 그룹의 구성원인 경우 인스턴스 그룹은 선점된 스팟 인스턴스를 대체할 스팟 인스턴스를 생성하려고 시도합니다. 새 스팟 인스턴스가 생성되어 인스턴스 그룹 서브넷 배열에 지정된 서브넷 중 하나에 연결됩니다.

선점 후 스팟 인스턴스를 자동으로 다시 생성하려면 인스턴스 그룹을 사용하여 이러한 스팟 인스턴스를 다시 생성할 수 있습니다.

  1. 인스턴스 availability.class 에서 spot 으로, availability_policy.preemption 에서 delete 으로 필요에 맞는 인스턴스 템플릿을 만듭니다.

  2. 생성한 인스턴스 템플릿으로 인스턴스 그룹을 만듭니다.

    스팟 인스턴스에 대한 용량을 찾을 가능성을 높이려면(한 영역에 용량이 제한된 경우) 고가용성을 위해 해당 지역의 여러 영역에 분산된 여러 서브넷을 지정하세요. { :tip}

선점된 인스턴스를 중지된 상태로 유지하려면 availability_policy.preemption_ 구성에 stop 을 지정해야 합니다. 인스턴스 그룹에서 스팟 인스턴스를 생성한 후 PATCH /instance_groups/{instance_group_id}/memberships/{id} 을 제출하고 삭제_인스턴스_온_멤버십_삭제 속성에 false 을 지정해야 합니다.