Cloud System Engineer

도커 스웜 노드 다루기 본문

리눅스/docker

도커 스웜 노드 다루기

클라우드 엔지니어 2021. 2. 11. 02:19

1. 노드 availability 변경하기

특정 노드에서 유지보수작업을 수행 할때 해당 노드에 컨테이너를 할당하지않게 하고 싶을
수 있다. 이를 위해 특정 노트의  availability 를 설정함으로 써 컨테이너의 할당 기능 여부를
변경 할 수 있다.

1) active 
노드가 컨테이너를 할당받을 수 있음을 의마한다. active 상태가 아닌 노드를 active 상태로
변경하려면 다음과 같다.

 

docker node update --availability active [도커 이름]

 

 

2) Drain 
노드를 Drain 상태로 설정하면 스웜 매니저의 스케줄러는 컨테이너를 해당 노드에 할당하지
않는다.

docker node update --availability drain [도커 이름]

 

 

노드를 Drain 상태로 변경하면 해당 노드에서 실행 중이던 서비스의 컨테이너는 
전부 중지 되고 active 상태의 노드로 재할당 된다. Drain 상태의 노드를
active 상태로 다시 변경한다고 해서 서비스의 컨테이너가 다시 분산되어
할당 되지는 않으므로 docker service scale 명령어를 사용해서 컨테이너의 균형을
재조정 해야한다.

 

 

3)Pause(중지)
서비스의 컨테이너는 더는 할당받지 않는다는 점에서 Drain 과 같지만 실행중인 컨테이너가
중지되지는 않는다는 점에서 다르다.

 

 

노드 라벨 추가
노드에 라벨을 추가하는것은 노드를 분류하는 것과 같다. 라벨은 키-값 형태를 가지며,
특정 노드에 라벨을 추가하면 서비스를 할당할 때 컨테이너를 생성할 노드의 그룹을 선택하는
것이 가능하다.

 

 

1) 노드 라벨 추가하기
docker node update --label-add storage==ssd [노드이름]
docker node inspect --pretty [노드이름

 

 

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

 

[root@manager ~]# docker node ls | grep manager

 

 

docker service create --name label_test --constraint 'node.id==pltukx4fmgbsvnsaoqjreoprx' --replicas=5 ubuntu:14.04 ping docker.com

 

node.hostname과 node.role 제약조건 

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

 

docker service create --name label_test6 --constraint 'node.role!=manager' --replicas=2 ubuntu:14.04 ping docker.com

 

docker service ps label_test6

 

도커 컴포즈
도커  컴포즈를 사용하는 이유?

 매번 run 명령어를 이용한 CLI 로 컨테이너를 생성하기보다는 여러개의 컨테이너를 하나의 서비스로 정의해 컨테이너 묶음으로 관리할 수 있다면
좀더 편리할 것이다. 이를 위해 도커 컴포즈(docker compose) 는 컨테이너를 이용한 서비스의 개발을 위해 여러개의 컨테이너를
하나의 프로젝트로서 다룰 수 있는 작업 환경을 제공한다.

 

curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

 

  -s, --kernel-name        print the kernel name
  -n, --nodename           print the network node hostname 

 

chmod +x /usr/local/bin/docker-compose

 

docker-compose -v

 

 

vi ./docker-compose.yml

 

 

version: '3.0'
services:
  web:
    image: alicek106/composetest:web
    ports:
      - "80:80"
    links:
      - mysql:db
    command: apachectl -DFOREGROUND
  mysql:
    image: alicek106/composetest:mysql
    command: mysqld

 

 

docker-compose config // yml 의 검증확인 에러 뜨면 다시 vi 가서 문법을 확인해본다.

 

 

오류 수정완료

 

80:80 포트 충돌일어날수 있으므로 아파치를 끈다.

 

mysql, web 이 done 이면 정상적으로 작동한다는 뜻이다.

 

docker-compose ps 해서 제대로 작동하는지 확인

 

 

 

 

컨테이너 내부 아파치를 통해  firefox 접속해서 호스트 ip로 아파치가 접속하는걸 확인할 수 있다.

'리눅스 > docker' 카테고리의 다른 글

도커 이미지를 도커 허브에 배포하고 다운받기  (0) 2021.09.12
도커 컴포즈의 활용  (0) 2021.02.15
도커 swarm  (0) 2021.02.05
도커 이미지 배포  (0) 2021.02.03
도커 cpu 자원 할당  (0) 2021.02.01