인프라

13. 도커 스웜-1

오늘의 나1 2021. 4. 19. 06:52

도커 스웜

  • 여러 대의 컴퓨터 위에서 하나의 애플리케이션을 구성하는 서비스를 복수개의 컨테이너로 띄우고
    이 컨테이너간에 통신하고 데이터를 주고 받게할 수 있도록 오케스트레이션하는 것
  • 하나의 거대한 애플리케이션에 굉장히 많은 컨테이너들이 존재하며, 
    이들이 유기적으로 동작하는 모습을 Swarm(떼, 군락)에서 차용

 

컨테이너 오케스트레이션

  • 컨테이너 기반의 애플리케이션의 배포, 관리(로드밸런싱, 모니터링 등) , 스케일링, 네트워크 설정 등을 자동화하는 것
  • Docker Swarm, Kubernetes 등의 오케스트레이션 툴이 있음

도커 스웜 개요

  • 컨테이너 오케스트레이션을 위한 툴: 하나의 서비스를 실행하는 여러 개의 도커 컨테이너를 관리
  • 도커를 실행하고 클러스터에 join되는 머신 그룹
  • 여러 개의 도커 호스트로 구성되어 있고 매니저-워커 노드로 동작
    • Manager: 멤버쉽과 딜리게이션을 관리
    • Workers(nodes): 스웜 서비스 실행

https://www.slideshare.net/Docker/docker-swarmmikegoelzermvmeetup45minworkshop-02242016-1-58805924

 

도커 스웜 서비스

  • 태스크:  스웜 서비스의 일부인 실행 중인 컨테이너, 스웜매니저에 의해 관리되는 것
  • 노드: 스웜에 의해 실행되는 도커 엔진 인스턴스
    • 매니저 노드: 워커 노드들에게 태스크를 할당
    • 워커 노드: 매니저 노드로 부터 할당된 태스크를 전달받아 실행함
  • 예: 스웜 매니저는 nginx 서비스를 관리하고, 워커 노드 3개를 띄워 nginx 컨테이너를 실행하게 한다. 

https://docs.docker.com/engine/swarm/how-swarm-mode-works/services/

 

스웜 실습

매니저/워커 노드 생성

매니저 노드 1개와 워커 노드 2개를 생성

$ docker-machine create --driver virtualbox manager 
$ docker-machine create --driver virtualbox worker1 
$ docker-machine create --driver virtualbox worker2 

 

도커 머신 목록 확인

$ docker-machine ls

도커 머신 ip 확인

$ docker-machine ip manager
$ docker-machine ip worker1
$ docker-machine ip worker2

도커 머신 ssh 접속

$ docker-machine ssh manager
$ docker-machine ssh worker1
$ docker-machine ssh worker2

 

매니저 노드 지정

  • 매니저 머신에서 도커 스웜을 초기화하고, 토큰을 발급받는다. 스웜에게 매니저 머신이 뭔지 알려주는 역할도 함
  • 명령어 실행 뒤 나타나는 토큰을 저장해서, 워커 노드를 스웜에 조인시 사용한다
$ docker-machine ssh {manager name} \
> docker swarm init —advertise-add {manager ip}

매니저 노드로 스웜 노드 관리하기

$ docker-machine ssh manager \
> docker node —help 
$ docker-machine ssh manager \
> docker node ls 

 

워커 노드 지정

  • 워커 머신에서는 스웜 조인을 설정한다: 토큰을 기준으로 스웜에 조인하게 됨
$ docker-machine ssh {worker name} \
> docker swarm join —token <token> <manager ip>:2377

 

도커 스택

  • 스웜은 컨테이너를 직접 생성하지 않고, 스웜 서비스를 등록하여 오케스트레이션 태스크를 수행
  • 모든 스웜 객체는 stack 파일 안에 기록해서 관리하여 스웜 관리와 생성/삭제를 쉽게 함

태스크 디플로이

 

docker-compose.yml 파일 생성

version: “3.8”
services:
  webserver:
    image: nginx:latest
    deploy:
      replicas: 4 # 워커 노드 4개
      placement:
        constraints: [node.role != manager] # 매니저 노드는 웹서버 띄우지마~
    ports:
      - 8080:80

docker-compose.yml 파일을 매니저로 복사

$ docker-machine scp docker-compose.yml manager:~ 

매니저에서 애플리케이션 스택을 디플로이

$ docker-machine ssh manager \ 
> docker stack deploy -c docker-compose.yml helloswarm

스택 디플로이 상태를 확인  

$ docker-machine ssh manager \ 
> docker stack ls 

태스크 모니터링 관련 명령어

  • docker service ls # helloswarm_webserver 서비스가 떠있다
  • docker service ps helloswarm # 없다
  • docker service ps helloswarm_webserver # 워커 노드 4개가 출력

스웜 삭제, 매니저/워커 노드 삭제

태스크 지우기

$ docker-machine ssh manager \
> docker stack rm helloswarm

워커 노드 지우기

$ docker-machine ssh {worker name} \
> docker swarm leave

매니저 노드 지우기

$ docker-machine ssh {manager name} \
> docker swarm leave —force

도커 머신 지우기

$ docker-machine stop
$ docker-machine rm

'인프라' 카테고리의 다른 글

카프카 스키마 레지스트리 구성하기  (0) 2023.09.22
카프카 클러스터 구성하기  (0) 2023.09.17
10. 도커 스토리지  (0) 2021.04.04
11. Docker Compose  (0) 2021.04.03
10. 도커 이미지 빌드 & 푸시 실습  (0) 2021.03.30