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 버전 상태 전이
업데이트와 버전 관리 동작
Machine을 업데이트하면:
- 업데이트된 구성으로 새 Machine 버전이 생성돼요.
- 이전 버전은
replaced로 표시돼요. - 새 버전이 활성 버전이 되고:
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분 초과
문제 해결 방법:
- Machines API로 Machine 이벤트를 확인하세요.
- Machine을 중지했다가 시작해 보세요.
- 필요하다면 Machine ID와 함께 Fly.io 지원팀에 문의하세요.
중요한 Machine 상태 고려사항
replaced는 이전 버전에만 적용되며 해당 버전에서는 종료 상태예요. ID로 이전 버전을 조회하면, Machine이 현재 실행 중이더라도 API는 항상 해당 버전에 대해replaced를 반환해요.migrated는 Machine이 새 호스트로 이동되었고 더 이상 활성 상태가 아님을 나타내요.suspended상태의 Machine은 메모리와 디스크 상태를 보존하며stopped보다 더 빨리 재개돼요.launch_failed상태는 보통 복구 불가능하며destroyed로 전환돼요.failed상태의 Machine은 복구 가능할 수 있어요. 재시작, 중지, 파괴를 시도해 볼 수 있어요.