docker swarm

Younghwan Cha·2022년 12월 16일
0

docker orchestration

목록 보기
1/2
post-thumbnail

docker swarm

docker swarm 이란 여러 대의 Docker 호스트들을 마치 하나인 것처럼 만들어주는 Orchestration 도구이다.


docker compose 랑 docker swarm, 뭐가 다른거야?

docker compose 는 container 를 정의하는 것이고
docker swarm 은 서비스를 정의하는 것이므로 둘은 서로 다르다


word

  • Node
    텍스트클러스터에 속한 도커 서버 단위. 보통 한 서버에 하나의 도커 데몬을 실행하기 때문에 노드는 곧 서버라고 이해할 수 있다.
    (1 Node = 1 server)

  • Manager Node
    매니저 노드는 아래의 업무를 통해 도커 클러스터를 관리한다.

클러스터의 상태를 유지 : 뗏목 알고리즘 사용 ( https://raft.github.io/ )
스케줄링 서비스 : 작업자 노드(worker)에게 컨테이너를 배포한다. 특정 노드에게만 배포하거나, 모든 노드에 하나씩 배포할 수도 있다.
스웜 모드 제공 : docker swarm init

  • 스택(Stack)
    하나 이상의 서비스(Service)로 구성된 다중 컨테이너 애플리케이션 묶음을 의미한다. 도커 컴포즈(Docker Compose)와 유사한 양식의 YAML 파일로 스택 배포를 진행한다.

cluster


뗏목 합의 알고리즘( Raft consensus algorithm )

도커 스웜에서 매니저 노드는 클러스터의 모든 정보를 포함하고 있다. 때문에 매니저 노드가 죽게되면 클러스터도 다운되게된다.
이러한 문제를 해결하기 위해 도커 스웜은 뗏목 합의 알고리즘을 이용한 멀티 매니저 노드 기능을 지원한다
멀티 매니저 노드 기능을 사용하면 여러 개의 매니저 노드를 생성하여 한 매니저 노드(리더 매니저 노드)가 갑자기 죽게 되더라도 다른 매니저 노드가 다시 서비스를 안정적인 상태로 복원할 수 있다
하지만 이를 위해서는 모든 매니저 노드가 동일한 상태를 유지하고 있어야 하는데, 이때 사용되는 알고리즘이 뗏목 합의 알고리즘이다.


docker swarm 배포하기

도커 스택은 YAML 파일로 작성된 docker-compose 파일로 환경설정을 받는다.

docker stack deploy -c <compose-file.yaml> <stack-name>

cat <compose-file.yml> | docker stack deploy -c - <stack-name>
  • -c: [--compose-file]
    compose-file 을 전달
    standard input 을 통해서 compose-file 을 넣으려면 - 를 사용하면 된다.

  • --with-registry-auth
    matster node 의 인증 정보를 swarm agent 에 전달

위 명령어를 통해 <stack-name>_<service-name> 이름으로 container 가 생성된다.

Creating network <stack-name>_<service-name>

status check

docker swarm 은 service 와 service 들을 포함하는 stack 으로 나뉘어져 있다.

=======================================================================
docker stack ls

NAME          SERVICES   ORCHESTRATOR
stackname1      1          Swarm
stackname2      74         Swarm

docker stack ls --format "{{.Name}}: {{.Services}}"
stackname1: 14
stackname2: 30

swarm 등록

# swarm manager initialize

docker swarm init
> Swarm initialized: current node (---) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token <token> <ip>

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

이후에 node ls 를 통해서 swarm node 들의 상태를 확인 할 수 있다.
manager node id 옆에는 * 가 표시되며, Manager statusleader 인 것을 확인 할 수 있다.

ID      HOSTNAME   STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
aaaa *     a       Ready       Active         Leader           23.0.1
bbbb       b       Ready       Active                          23.0.1

docker stack ls
docker stack services <stackName>
docker stack rm <stackName>
docker stack ps <stackName>

docker swarm service error log 확인

docker service ps --no-trunc <serviceName>_<service> --format "{{.Error}}"

docker swarm node add label

docker node update --label-add <labelName>=<label> <node ID>

[ref][docker swarm] https://cornswrold.tistory.com/512

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

https://roseline124.github.io/kuberdocker/2019/07/31/docker-study08.html
https://tech.osci.kr/2019/02/13/docker-swarm-%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-container-orchestration-%ED%99%98%EA%B2%BD-%EB%A7%8C%EB%93%A4%EA%B8%B0/

profile
개발 기록

0개의 댓글