본문 바로가기
컨테이너/도커

07 도커 스웜 모드 노드 다루기

by ^..^v 2020. 9. 17.
728x90
반응형

마스터 노드는 최대한 부하를 받지 않도록 서비스를 할당받지 않게 하거나, 문제가 발생한 특정 노드를 유지보수할 때 해당 노드에 컨테이너를 할당하지 않게 만들고 싶을 때 등 docker node update --availability 명령으로 노드의 상태를 변경할 수 있음

 

구축한 스웜 클러스터의 노드 상태 확인

 

Active 상태

$ docker node update --availability active node_name

새로운 노드가 스웜 클러스터에 추가되면 기본적으로 설정되는 상태

노드가 서비스의 컨테이너를 할당받을 수 있음을 의미

 

Drain 상태

$ docker node update --availability drain node_name

스웜 매니저의 스케줄러는 컨테이너를 해당 노드에 할당하지 않음

일반적으로 매니저 노드 또는 노드에 문제가 생겨 일시적으로 사용하지 않는 상태로 설정할 때 사용

 

노드를 Drain 상태로 변경하면 해당 노드에서 실행 중이던 서비스의 컨테이너는 전부 중지되고 Active 상태의 노드로 다시 할당됨

Drain 상태의 노드를 Active 상태로 다시 변경한다고 해서 서비스의 컨테이너가 다시 분산되어 할당되지는 않으므로 docker service scale 명령어를 사용해 컨테이너의 균형을 재조정해야 함

 

Pause 상태

$ docker node update --availability pause node_name

서비스의 컨테이너를 더는 할당받지 않는다는 점에서 Drain과 같지만 실행 중인 컨테이너가 중지되지 않는다는 점에서 다름

 

노드 라벨 추가

특정 노드에 라벨을 추가하면 서비스를 할당할 때 컨테이너를 생성할 노드의 그룹을 선택하는 것이 가능

docker node update --label-add 옵션을 사용해 라벨을 설정

                

            

서비스 제약 설정

docker service create 명령어에 --constraint 옵션을 추가해 서비스의 컨테이너가 할당될 노드의 종류를 선택할 수 있음

 

#1 node.labels 제약조건

storage 키의 값이 ssd로 설정된 노드에 서비스의 컨테이너를 할당하도록 제한

 

 

⇒ storage 라벨이 ssd로 설정된 swarm-worker1 노드에만 컨테이너가 생성되었음

⇒ 제약 조건을 만족하는 노드를 찾지 못할 경우 서비스의 컨테이너는 생성되지 않음



#2 node.id 제약조건

노드 ID를 명시해 서비스의 컨테이너를 할당할 노드를 선택

다른 도커 명령어와 달리 docker node ls 명령어에 출력된 ID를 전부 입력해야 함

 



#3 node.hostname과 node.role 제약조건

스웜 클러스트에 등록된 호스트 이름 및 역할로 제한 조건을 설정

 



#4 engine.labels 제약조건

도컨 엔진, 즉 도커 데몬 자체에 라벨을 설정해 제한 조건을 설정 (도컨 데몬 실행 옵션을 변경해야 함)

 

 

728x90
반응형

댓글