스웜 태스크 상태
스웜 태스크 상태
스웜 모드에서 서비스가 어떻게 동작하는지, 특히 태스크의 상태가 어떻게 바뀌는지 함께 살펴봐요. Docker에서 서비스를 만들면 그 서비스가 태스크를 시작할 수 있는데, 서비스는 '이런 상태가 되고 싶다'는 목표를 적어 둔 것이고, 실제로 그 목표를 달성하기 위해 일을 하는 게 태스크예요. 이 태스크들이 스웜 노드에서 어떤 순서로 처리되는지 볼게요.
출처: 공식문서
본문
태스크가 실행되는 순서
스웜 노드에서 작업이 이런 순서로 스케줄링돼요.
docker service create명령으로 서비스를 만들어요.- 그 요청이 Docker 매니저 노드로 전달돼요.
- 매니저 노드가 특정 노드들에서 서비스가 실행되도록 스케줄을 잡아요.
- 각 서비스는 여러 개의 태스크를 시작할 수 있어요.
- 각 태스크는
NEW,PENDING,COMPLETE같은 상태를 거치는 생애주기를 가지고 있어요.
태스크는 한 번 실행되고 끝나는 실행 단위예요. 태스크가 멈추면 다시 실행되지 않고, 대신 새로운 태스크가 그 자리를 차지할 수 있어요.
태스크 상태 변화
태스크는 완료되거나 실패할 때까지 여러 상태를 거쳐서 진행돼요. 처음에는 NEW 상태에서 시작하고, 상태는 앞으로만 진행돼요. 절대 뒤로 돌아가지 않아요. 예를 들어 COMPLETE 상태에서 다시 RUNNING으로 가는 일은 없어요.
| Task state | Description |
|---|---|
NEW |
태스크가 초기화되었어요. |
PENDING |
태스크에 필요한 리소스가 할당되었어요. |
ASSIGNED |
Docker가 태스크를 노드에 배정했어요. |
ACCEPTED |
워커 노드가 태스크를 수락했어요. 워커 노드가 태스크를 거절하면 상태가 REJECTED로 바뀌어요. |
READY |
워커 노드가 태스크를 시작할 준비가 되었어요. |
PREPARING |
Docker가 태스크를 준비하고 있어요. |
STARTING |
Docker가 태스크를 시작하고 있어요. |
RUNNING |
태스크가 실행 중이에요. |
COMPLETE |
태스크가 에러 코드 없이 종료되었어요. |
FAILED |
태스크가 에러 코드와 함께 종료되었어요. |
SHUTDOWN |
Docker가 태스크 종료를 요청했어요. |
REJECTED |
워커 노드가 태스크를 거절했어요. |
ORPHANED |
노드가 너무 오랫동안 다운되었어요. |
REMOVE |
태스크가 종료 상태는 아니지만, 연결된 서비스가 제거되거나 스케일 다운되었어요. |
태스크 상태 확인하기
이제 실제로 태스크 상태를 확인하는 방법을 볼게요. docker service ps <service-name> 명령을 실행하면 태스크의 상태를 알 수 있어요. CURRENT STATE 필드에 태스크의 현재 상태와 그 상태로 머문 시간이 표시돼요.
$ docker service ps webserver
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
owsz0yp6z375 webserver.1 nginx UbuntuVM Running Running 44 seconds ago
j91iahr8s74p \_ webserver.1 nginx UbuntuVM Shutdown Failed 50 seconds ago "No such container: webserver.…"
7dyaszg13mw2 \_ webserver.1 nginx UbuntuVM Shutdown Failed 5 hours ago "No such container: webserver.…"