본문 바로가기
DevOps/Docker

[Docker] : service 제약 설정

by 오주현 2022. 3. 7.
반응형

docker service create 명령에 —constraint 옵션을 추가해 서비스의 컨테이너가 할당될 노드의 종류를 선택할 수 있다. 다른 방법으로는 노드의 ID나 호스트 이름, 도커 데몬의 라벨로 제약 조건을 설정할 수도 있다.

node.labels 제약조건

docker service create --name label_teat \\
--constraint 'node.labels.storage == ssd' \\
--replicas=5 \\
ubuntu:14.04 \\
ping docker.com

docker node update 명령어로 설정해 줄 수 있다. 여러 노드에 라벨이 설정되어 있으면 매니저 노드의 스케줄러는 해당 노드들을 대상으로 컨테이너를 할당하는 스케쥴링을 진행한다. 만약 제한 조건에 해당하는 노드를 찾제 못 하면 서비스의 컨테이너는 생성되지 않는다.

node.id 제약조건

node.id 조건에 노드의 ID를 명시해 서비스의 컨테이너를 할당할 노드를 선택한다.

docker node ls | grep swarm-worker2

다른 도커 명령어와 달리 앞 부분만 입력하면 도커가 인식하지 못 해서 출력된 ID를 전부 다 입력해 줘야 한다.

docker service create --name label_test2 \\
--constraint 'node.id == 노드ID전부다입력' \\
--replicas=5 \\
ubuntu:14.04 \\
ping docker.com

node.hostname과 node.role 제약조건

스웜 클러스터에 등록된 호스트 이름이나 역할로 제한 조건을 설정할 수 있다.

docker service create --name label_test3 \\
--constraint 'node.hostname == swarm-worker1' \\
ubuntu:14.04 \\
ping docker.com
docker service create --name label_test4 \\
--constraint 'node.role != manager' \\
--replicas 2 \\
ubuntu:14.04 \\
ping docker.com

swarm-worker1 노드를 선택해 서비스의 컨테이너를 생성하는 명령어와 매니저 노드가 아닌 워커 노드에 컨테이너를 생성하는 명령이다.

engine.labels 제약조건

도커 데몬 실행 옵션을 변경해 도커 데몬 자체에 라벨을 설정해 제한 조건을 설정할 수 있다.

DOCKER_OPTS="--label=mylabel=worker2 --label mylabel2=second_worker"

서비스를 생성할 때 engine.labels를 접두어로 제한조건을 설정하면 도커 데몬의 라벨을 사용할 수 있다.

docker service create --name engine_label \\
--constraint 'engine.labels.mylabel == worker2' \\
--replicas=3 \\
ubuntu:14.04 \\
ping docker.com

mylabel이라는 키가 worker2라는 값으로 설정된 노드의 서비스의 컨테이너를 할당한다.

docker service create --name emgine_label2 \\
--constraint 'engine.labels.mylabel == worker2' \\
--constraint 'engine.labels.mylabel2 == second_worker' \\
--replicas=3 \\
ubuntu:14.04 \\
ping docker.com

제한 조건은 동시에 여러개를 사용할 수도 있다.

 

 


📖 ← [ 시작하세요! 도커/쿠버네티스 ] 책을 참고하여 공부하였습니다.

반응형

댓글