• toc {:toc}

Swarm

image[Fig1]

  • Docker Swarm : Orchestrator

  • 100~1000개 정도의 컨테이너라면 충분히 Swarm으로 동작 가능하다.

  • 중앙집중형 제어장치이다.

  • Container Orchestration : 배포, 관리, 자원 할당, 네트워킹, 이용가능성을 중앙 통제를 통해 자동화하는 과정이다.

  • 주 목적 : 관리, 모니터링을 하고, 자동화를 통해서 능률이 증가하도록 한다.

    • 과거에는 수동으로 전부 배포했어야 했기에 APP 배포가 매우 어려웠으나 이를 자동화를 통해 쉽게 만들었다.
  • Container orchestration 작업량을 간소화한다.

    • 사용자는 더 이상 기술적 문제를 다룰 필요가 없다.
    • 더 많은 컨테이너들의 그룹들과 동시에 상호작용할 수 있다.
    • 컨테이너 등록을 계획하고 구현할 수 있다.
    • 네트워크, 스토리지, 보안 등을 모두 제공 가능하다.

image[Fig2]

  • Container Orchestration History

  • 2009년 Mesos 연구 프로젝트로 시작, 버클리 대학에서 시작.

  • 2010 - Guest OS over Host OS 문제

  • 2015년에 쿠버네티스 버전 1.0 출시, Docker Swarm 1.0 출시 (2013에는 개발시작하지 않았을까?)

  • 오래되지 않은 분야이다.

  • Docker Swarm : Container Orchestration을 위한 도구이다.

    • 다수의 도커 컨테이너를 하나의 서비스로 다루고 조종한다.
    • Manager, Worker 지정, Worker Manager에게 등록, Manager가 Worker 장악
  • Docker를 실행하는 머신의 그룹을 말한다.

  • 다수의 도커 호스트로 구성되어 있다.

  • 노드의 역할과 연결

    • Manager
      • 멤버쉽 등의 논리적 연결을 만들어 Worker들을 관리한다.
      • Worker 노드와 같이 컨테이너를 실행할 수 있다.
    • Workers (Nodes) : Swarm 서비스를 실행한다.
      • join 명령어 : 매니저와 연결하여 매니저에 등록한다.
      • leave 명령어 : 등록된 Worker를 매니저와 분리된다.
  • Task : Swarm 매니저에 의해 관리되고 Swarm 서비스의 부분으로 실행 중인 컨테이너이다.

  • Node : Swarm에 참여한 도커 엔진의 인스턴스이다.

    • Manager Nodes : worker node에 task를 보내준다.
    • Worker Nodes : task를 매니저로부터 받고 실행한다.

image[Fig3]

docker-machine ssh {manager name} docker swarm init --advertise-addr {manager ip}
  • advertise 내가 Manager 라는 것을 알리고 Manager가 되기 위한 초기화를 한다.

  • Manager의 Worker로 들어가고 싶은 경우 join과 토큰을 통해 해당 Manager의 일꾼으로 등록한다.

  • Manager와 Worker 노드 사이의 포트 번호 2377, 2376 중 하나가 열려 있어야 한다. 이 포트를 통해서 docker swarm init, docker swarm join을 실행하여 연결하기 때문이다. (물리적으로 떨어져 있는 컴퓨터들을 클러스터링할 때 네트워크 제한을 받기 때문에 포트를 열어줘야 한다.)

  • Docker-Machine Task Deployment

  • scp 파일을 상대방에게 복사할 수 있다. 매니저에게 docker-compose.yml 파일 전송하기

  • stack deploy 실행

  • 기본적으로 Worker에게 나눌 때는 Round Robin, 공평하게 나누어 전달한다.

cf) Label

  • key value의 형태로 값을 준다.
  • 범주화하기 위한 일종의 태그를 붙이는 것과 같다.
  • Docker Object Labels : Docker object에 메타데이터를 적용하기 위한 매커니즘
  • Key는 특수하고 Value는 여러 개일 수 있다.
  • Url을 뒤집은 형태로 범주화하여 나눌 수 있다. (.과 - 사용)
  • 시작시 대부분 소문자로 시작하고 끝나는 경우도 소문자로 끝낸다.
    • e.g., com.example.some-label
  • 연속적인 .과 -은 허용되지 않는다.
  • namespace 필드는 . 에 의해 분리된다.
  • DNS notation의 역순
  • 그룹들로 나누어 명령어를 줄 수 있기 때문에 사용한다.

참고문헌

연결문서