본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

Machine 상태와 라이프사이클 (Machine states and lifecycle)

원문 보기 위키 갱신

Fly Machines이 생성, 업데이트, 종료, 삭제 과정에서 거치는 다양한 라이프사이클 상태를 정리한 가이드예요. 배포를 자동화하거나 Machine 풀을 조정하거나 Machines API용 도구를 작성할 때 이 상태들을 이해하면 더 나은 결정을 내리는 데 도움이 돼요.

출처: 문서

본문

Fly Machines은 생성, 업데이트, 종료, 삭제 과정에서 일련의 라이프사이클 상태를 거쳐요. 배포를 자동화하거나, Machine 풀을 조정하거나, Machines API에 맞춰 도구를 작성한다면 이 상태들을 이해하는 것이 더 나은 결정을 내리는 데 도움이 돼요.

Machine 상태 vs. Machine 버전 상태

각 Machine은 단일 Machine ID를 가지지만, 모든 변경(예: 이미지 또는 리소스 업데이트)은 새 Machine 버전을 만들어요. 다음을 구분하는 것이 중요해요:

  • 전체 Machine 상태 – Machine의 활성 버전을 나타내요.
  • Machine 버전 상태 – Machine의 특정 버전의 상태를 나타내요.

버전을 지정하지 않고 Machine을 조회하면 API가 현재 활성 버전의 상태를 반환해요. 이전 버전을 조회하면 API가 replaced 같은 종료 상태(terminal state)를 반환할 수 있어요.

Machine 상태 유형 (Machine state types)

영속 상태 (Persistent states)

이 상태들은 조치를 취하기(또는 뭔가 실패하기) 전까지 유지돼요.

State Description
created 초기 상태. Machine이 생성되었지만 아직 시작되지 않음
started 실행 중이며 네트워크로 접근 가능
stopped 스스로 또는 명시적으로 중지되어 종료됨
suspended 디스크에 일시 중지됨; 다음 시작 시 재개를 시도
failed Machine에 오류가 발생해 성공적으로 시작하지 못함

일시 상태 (Transient states)

이것들은 짧게 유지되는 상태예요. Machine은 자동으로 새 상태로 이동해요.

State Description
creating Machine이 초기화 중
starting stopped 또는 suspended에서 started로 전환 중
stopping started에서 stopped로 전환 중
restarting Machine이 재시작 중
suspending started에서 suspended로 전환 중
destroying 사용자가 Machine의 완전한 제거를 요청함
launch_failed Machine 실행 실패; destroyed로 전환 예정
updating Machine이 새 버전으로 업데이트 중
replacing 사용자 시작 구성 변경(이미지, VM 크기 등)이 진행 중

종료 상태 (Terminal states)

이것들은 Machine 또는 그 버전이 빠져나오지 않는 최종 상태예요.

State Description
destroyed 더 이상 존재하지 않음
replaced Machine 버전이 더 새로운 버전으로 교체됨 (버전별 조회에만 적용). ID로 이전 버전을 조회하면, Machine이 현재 실행 중이더라도 API는 항상 해당 버전에 대해 replaced를 반환해요.
migrated Machine이 새 호스트로 이동됨; 이전 버전은 더 이상 활성 상태가 아님

Machine 상태 라이프사이클 다이어그램

전체 Machine 상태 라이프사이클

Machine state lifecycle diagram

Machine 버전 상태 전이

Machine version state transitions diagram

업데이트와 버전 관리 동작

Machine을 업데이트하면:

  1. 업데이트된 구성으로 새 Machine 버전이 생성돼요.
  2. 이전 버전은 replaced로 표시돼요.
  3. 새 버전이 활성 버전이 되고:
    • skip_launch가 true로 설정된 경우 created에 남을 수 있어요.
    • 기본적으로 started로 전환될 수 있어요.
    • 업데이트가 트리거된 방식과 사용된 구성에 따라 stopped로 전환될 수 있어요.

skip_launch가 명시적으로 설정되지 않는 한, Machine은 생성 시 또는 업데이트 후 자동으로 실행돼요. 이 플래그를 사용하면 Machine을 즉시 시작하지 않고 생성하거나 업데이트할 수 있어요.

버전 ID로 이전 버전을 조회하면 replaced를 볼 수 있어요. 항상 현재 상태를 얻으려면 버전을 지정하지 않고 Machine을 조회하세요.

멈춘(stuck) Machine 진단

Machine이 오랜 시간 일시 상태에 머물면 멈춰 있을("wedged") 수 있어요. 다음 임계값이 판단에 도움이 돼요:

  • starting, stopping, restarting, 또는 destroying이 5분 초과 (구성된 kill_timeout에 따라 다를 수 있음)
  • updating이 10분 초과

문제 해결 방법:

  1. Machines API로 Machine 이벤트를 확인하세요.
  2. Machine을 중지했다가 시작해 보세요.
  3. 필요하다면 Machine ID와 함께 Fly.io 지원팀에 문의하세요.

중요한 Machine 상태 고려사항

  • replaced는 이전 버전에만 적용되며 해당 버전에서는 종료 상태예요. ID로 이전 버전을 조회하면, Machine이 현재 실행 중이더라도 API는 항상 해당 버전에 대해 replaced를 반환해요.
  • migrated는 Machine이 새 호스트로 이동되었고 더 이상 활성 상태가 아님을 나타내요.
  • suspended 상태의 Machine은 메모리와 디스크 상태를 보존하며 stopped보다 더 빨리 재개돼요.
  • launch_failed 상태는 보통 복구 불가능하며 destroyed로 전환돼요.
  • failed 상태의 Machine은 복구 가능할 수 있어요. 재시작, 중지, 파괴를 시도해 볼 수 있어요.

더 알아보기 (Learn more)