Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 비구조화 할당
- Kubernetes
- vgw
- 단축 평가
- CloudFormation
- 구조분해 할당
- Site-to-Site VPN
- grafana
- 자바스크립트
- elasticsearch
- Service
- api gateway
- On-Premise
- docker
- docker swarm
- prometheus
- null 병합 연산자
- optional chaining
- AWS
- transit gateway
- Custom Resource
- cognito
- JavaScript
- Endpoints
- VPC
- 옵셔널 체이닝
- DynamoDB
- Await
- Proxy Resource
- 온프레미스
Archives
- Today
- Total
만자의 개발일지
[Docker] Docker Swarm Worker Node에만 서비스 배포하기 본문
Docker Swarm에서 매니저 노드는 워커 노드의 역할까지 포함하고 있는데 때문에 글로벌 서비스를 배포하거나 클러스터 내의 노드 수 이상으로 replica를 지정하여 배포하는 경우 매니저 노드까지 컨테이너를 할당하게 됩니다.
Worker Node에만 서비스 배포
만약 매니저 노드는 클러스터를 관리하는 용도로만 사용하고 워커 노드로만 서비스를 운영하고 싶다면 어떻게 할까요?
방법은 간단합니다.
서비스를 배포할 때 제약 조건에 노드(node)의 역할(role)이 worker인 노드에만 배포하겠다고 명시해주면 됩니다.
예시로 다음과 같이 매니저 노드 1개와 워커 노드 2개를 운영중이라고 가정해봅시다.
$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
t0dwrxxm0pdihl7dqpduuy2ox * ip-10-0-1-99.ap-northeast-2.compute.internal Ready Active Leader 20.10.13
84b0dkgwoyrw6175njiy6xwcn ip-10-0-10-22.ap-northeast-2.compute.internal Ready Active 20.10.13
oysn9lwnw5vr37dwif4tisb1g ip-10-0-10-254.ap-northeast-2.compute.internal Ready Active 20.10.13
그리고 다음과 같이 docker service create 명령어에 --constraint 옵션으로 노드의 역할이 워커인 노드에만 배포하도록 지정해 주었습니다.
$ docker service create --name nginx --constraint node.role==worker -p 80:80 --mode global nginx:latest
overall progress: 2 out of 2 tasks
84b0dkgwoyrw: running [==================================================>]
oysn9lwnw5vr: running [==================================================>]
글로벌 서비스로 배포하였는데 컨테이너가 3개가 아닌 2개만 생성된 것을 보실 수 있습니다.
클러스터내의 워커 노드가 2개이므로 컨테이너가 2개만 배포된 것입니다.
실제로 워커 노드에만 컨테이너가 할당된 것을 보실 수 있습니다.
$ docker service ps nginx
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
6abcr2h18gop nginx.84b0dkgwoyrw6175njiy6xwcn nginx:latest ip-10-0-10-22.ap-northeast-2.compute.internal Running Running 2 minutes ago
e30oupvqmmx2 nginx.oysn9lwnw5vr37dwif4tisb1g nginx:latest ip-10-0-10-254.ap-northeast-2.compute.internal Running Running 2 minutes ago
다음과 같이 조건을 반대로 주어서 배포할 수도 있습니다.
$ docker service create --name nginx --constraint node.role!=manager -p 80:80 --mode global nginx:latest
이처럼 워커 노드에만 서비스를 배포하여 매니저 노드와 워커 노드의 역할을 확실하게 분리시킬 수 있습니다.
'Docker' 카테고리의 다른 글
[Docker] WARNING: bridge-nf-call-iptables is disabled 해결 방법 (0) | 2022.08.01 |
---|---|
[Docker] WARNING: IPv4 forwarding is disabled 해결 방법 (0) | 2022.08.01 |
[Docker] Docker Swarm host mode로 서비스 생성하기 (0) | 2022.07.27 |
[Docker] ECR Public Gallery에서 이미지 불러오기 (1) | 2022.06.27 |
[Docker] Docker Swarm Network의 종류 (0) | 2022.06.20 |
Comments