Docker

[Docker] Docker Swarm이란? (2)

hanrabong 2022. 4. 14. 12:33

 

Docker Swarm에서 Service가 어떻게 동작할까?


 Docker swarm에서 service가 어떻게 동작하는지에 대해 알아보기 전에 Service, task, container가 무엇인지에 대해 먼저 알아보겠습니다.

 

 

Service,  Task, Container


 Service는 manager node나 worker node에서 실행할 작업의 정의입니다. Swarm system에서 사용자와 interact하는 단위(?)입니다. Docker engine에서 container를 실행하는 것 처럼 docker swarm 모드에서 service를 생성하기 위해 docker image와 container안에서 실행해야 할 명령어와 port, 복제본 수 등을 설정해줘야 합니다.

 

Task는 swarm의 atomic scheduling unit입니다. Task를 통해 Docker container와 container안에서 실행할 명령어를 전달합니다. Manager node는 서비스 규모에 설정된 복제본 수에 따라 worker node에 task를 할당합니다. task가 node에 할당되면 다른 node로 이동할 수 없습니다. 할당된 node에서만 실행되거나 실패할 수 있습니다.

 

 Container는 격리된 process입니다. Swarm 모드에서 각 task는 하나의 container만 생성합니다. Container의 활성 여부로 인해 scheduler가 task가 잘 동작하고 있는지 확인할 수 있습니다.

 

 

 밑의 사진 예시를 보면, nginx 웹 서버를 3개 만들라는 service 명령어가 들어왔습니다. 이 service는 3개의 task를 만들고 3개의 task를 worker node에게 전달합니다. 각 task안에는 nginx 이미지와 container안에서 실행되는 명령어가 있습니다. worker node에서 task를 받아 실행하면 container가 실행이 되고 container의 실행여부에 따라서 manager node는 task가 잘 실행이 되었는지 확인할 수 있습니다.

service 예시

 

어떻게 Task를 Scheduling을 할까?


 밑에 그림은 Docker swarm 모드의 기본적인 orchestartor와 scheduler입니다. Docker 사용자가 docker service를 생성 또는 update하는 명령어를 전송하면 swarm manager가 해당 명령어를 받습니다. Orchestrator가 들어온 명령을 유지하기 위해서 task를 만듭니다. task를 만들고 allocator에서 해당 task에 ip address를 할당합니다. 그 후 dispatcher가 task를 node에게 할당하고 scheduler가 할당받은 worker node에게 task를 실행하라고 합니다. task가 실패했을 경우 orchestrator는 task와 해당 컨테이너를 제거한 다음 service에서 지정한 원하는 상태에 따라 교체할 새 task를 만듭니다.

 

scheduling

Replicated and global services


 서비스 배포에는 replicated 와 global 두 가지가 있습니다. 

 

 replicated service의 경우 사용자가 직접 얼마나 복제할지 명시를 해줘야 합니다. 그럼 manager node가 해당 숫자 만큼 task를 만들어서 worker node에 배포를 합니다.

 global service의 경우 모든 node에서 한 개의 task를 실행시키도록 하는 service입니다. 숫자를 미리 지정하지 않고 node에 1개씩 생기는데 swarm에 node가 추가될 경우에 자동으로 global service로 지정해 놓은 service가 있으면 task가 실행이 됩니다. 주로 monitoring이나 anti-virus scanner로 많이 사용합니다. node가 Drain 상태인 경우 global service라고 하여도 task가 생성이 안됩니다. 다시 active모드로 변경 시에 자동으로 task가 할당이 됩니다.

 

replicated & global service

 

※ 틀린 점이나 궁금한 점 있으면 알려주세요

'Docker' 카테고리의 다른 글

[Docker] Docker Swarm이란? (1)  (0) 2022.04.06
[Docker] Nestjs와 Mysql 연결 (Container 간 연결)  (2) 2022.03.12