일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- windows server
- Exchange Online
- Azure
- 메일보안
- Linux
- Entra ID
- 클라우드엔지니어
- windows
- 시스템 엔지니어
- cloud engineer
- 그룹정책
- 시스템엔지니어
- Microsoft
- 가상화
- 네트워크
- network
- Microsoft 365
- 컴퓨터
- Server
- cloud
- Microsoft Azure
- 시트릭스
- It
- 리눅스마스터1급
- Azure AD
- Docker
- aws
- 리눅스
- 클라우드
- SE
- Today
- Total
Cloud System Engineer
도커 swarm 본문
도커엔진을 구동하다가 시스템 자원이 모자랄때 방법이 된다.
여러대의 서버를 클러스터로 만들어 자원을 병렬로 확장하는 것이다.
하지만 여러 대의 서버를 하나의 자원 풀로 만들게되면 새로운 컨테이너가 추가되었을때 로드벨런스 문제,
클러스터 내의 서버가 다운됐을때 고가용성을 어떻게 보장할지 문제로 남는다.
이 문제를 해결해줄 방법: 오픈소스 솔루션 중 대표적인 것이 도커스웜(docker swarm),스웜모드(swarm mode)이다.
스웜 클래식이 여러대의 도커 서버를 하나의 지점에서 사용하도록 단일
접근점을 제공한다면 스웜 모드는 클러스터링 기능에 초점을 마추고 있다.
스윔 모드는 매니저 노드와 워커 노트로 구성되어 있다.
워커노드는 실제로 컨테이너가 생성되고 관리되는 도커서버이고 매니저 노드는
워크노드를 관리하기 위한 도커 서버이다. 기본적으로 매니저 노드는 워커노드의 역할
을 포함하고 있다. 매니저 노드는 1개이상이어야한다.
스웜매니저는 기본적으로 2377번포트를 사용하며 노드 사이의 통신에
7946/tcp, 7946/udp 포트를 스웜이 사용하는 네트워크인 igress 오버레이에
4789/tcp 4789/udp 포트를 사용한다. 스웜클러스터를 구성하기 전에
해당 포트를 열어두러야 한다.
docker swarm init --advertise-addr 192.168.0.128
firewall-config
docker-registry
docker-swarm 체크
docker swarm join-token manager // 토큰확인
#docker swarm join-token --rotate manager // 토큰 바꾸기
결과
Successfully rotated manager join token.
To add a manager to this swarm, run the following command:
docker swarm join --token SWMTKN-1-4jn365c7so7i90ndne7tefm7d9ywkii9a45lfxhjyxv69zefsq-7pt6dc17rwr03yn3hpeeo31y0 192.168.0.128:2377
## 도커 스웜 가입
# docker swarm join --token [도커 토큰]
매니저 1개와 워커 2개가 있다.
## 도커 스웜 탈퇴
docker swarm leave
Node left the swarm. 라고 뜬다
## 웹서버 구축
# docker service create --name myweb --replicas 2 -p 80:80 nginx
결과
nghb2vu4kgdlyu2pu15e58652
overall progress: 2 out of 2 tasks
1/2: running [==================================================>]
2/2: running [==================================================>]
verify: Service converged
[root@swarm-manager ~]# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
hvkn6oksrjeo crazy_easley replicated 1/1 ubuntu:14.04
nghb2vu4kgdl myweb replicated 2/2 nginx:latest *:80->80/tcp
jmxbytas65tp optimistic_hamilton replicated 0/1 name:latest
파이어 폭스에서 192.168.0.128(매니저 의 ip)
위 내용은 컨테이너들이 호스트의 80번 포트에 연결된 것이 아니며, 실제로는 각 노드의 80번 포트로 들어온 요청을 4개의
컨테이너 중 1개로 리다이렉트한다. 따라서 각 호스트의 어느 노드로 접근하든 4개의 컨테이너 중 1개에 접근한다.
스웜 모드는 라운드 로빈(round-robin) 방식으로 서비스 내에 접글할 컨테이너를 결정한다.
#docker service scale myweb=4 //레플리카를 4개로 늘림
결과
## global 서비스 생성하기
서비스 모드는 두가지 가 있다. 하나는 위와 같은 복제 모드로서 일반적으로 쓰이는 방식이다.
다른 하나는 글로벌 모드이다. 글로벌 서비스는 스웜 클러스터 내에서 사용할 수 있는 모드는 모드에 컨테이너를
반드시 하나씩 생성한다. 따라서 레플리카 셋의 수를 별도로 지정하지 않는다.
docker service create --name global_web --mode global nginx
#docker service ps global_web
각각 하나씩 생긴다
이중 컨테이너 하나를 삭제해보고 그 결과를 지켜보자
myweb.2 새로운 컨테이너가 생성됐음을 확인할 수 있다.
특정 노드가 다운됐을 떄의 반응을 살펴보자
worker1: service docker stop
manager:docker node ls
worker1 이 다운되었다.
manager: docker service ps myweb
swarm-worke1 에서 myweb.1 이 삭제되면서 동시에 \_myweb.1 새로운 컨테이너가 복구되었다.
다운됐던 노드가 다시 정상 동작을 해도 장애를 복구하기 위해 다른노드로 옮겨진 컨테이너가 해당 노드에 자동 할당되지 않는다.
scale 명령을 이용해 컨테이너의 수를 조정해야함
레플리카 수보다 컨테이너 수가 많아진다. 떄문에 scale 명령어를 이용해 컨테이너의 수를 조정해야함
docker service scale myweb=4
'리눅스 > docker' 카테고리의 다른 글
도커 컴포즈의 활용 (0) | 2021.02.15 |
---|---|
도커 스웜 노드 다루기 (0) | 2021.02.11 |
도커 이미지 배포 (0) | 2021.02.03 |
도커 cpu 자원 할당 (0) | 2021.02.01 |
컨테이너 자원 할당 제한 (0) | 2021.01.31 |