[Docker] Swarm Mode 클러스터 구성4- Stack

Hoon·2022년 8월 26일
0

Docker

목록 보기
12/13
post-thumbnail

swarm mode: 명령어를 사용하여 클러스터 환경에 컨테이너, 볼륨, 네트워크를 배포할 수 있다. 단, 위의 방법을 사용할 경우 서비스 환경을 조정해야하는 경우에는 명령을 다시 처음부터 작성해야 하는 등의 불편함이 있다.
docker-compose: 명령어 사용의 불편함을 해결하기 위하여 yml 형태로 환경을 구성하고 이를 도커가 명령으로 변환하여 서비스를 제공하는 기능
swarm mode + docker-compose => docker stack
docker swarm stack: 클러스터 환경에 여러 서비스를 묶어서 하나의 스택 공간을 생성하는 것. 도커 스택은 분산애플리케이션의 최상위 계층이다.
일반적으로 상호 연관성 및 의존성이 있는 서비스를 하나의 스택으로 그룹화하여 함께 오케스트레이션 할 수 있도록 구성한다.

Manger: HAPROXY, Worker: Nginx 구성

rapa@manager:~$ mkdir 0825 ; cd 0825
rapa@manager:~/0825$ touch web.yml
rapa@manager:~/0825$ docker network create --driver=overlay --attachable web
vi web.yml 
version: '3.7'
services:
  nginx:
    image: nginx
    deploy:
      replicas: 3
      placement:
        constraints: [node.role == worker]
      restart_policy:
        condition: on-failure
        max_attempts: 2
    environment:
      SERVICE_PORTS: 80
    networks:
      - web
  proxy:
    image: dockercloud/haproxy
    depends_on:
      - nginx
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    ports: # -p option, attached to ingress network
      - "80:80"
    networks: # backend network -> nginx containers
      - web
    deploy:
      mode: global
      placement:
        constraints: [node.role==manager]
networks:
  web:
    external: true

docker stack deploy -c web.yml web: 스택 배포. 주의, haproxy이미지가 다운로드 안되므로 따로 pull 하고 실행한다.
docker stack ls
docker stack ps web

Quiz)

HAPROXY: manager에 배치

  • 라벨 부착
    worker1: zone=seoul
    worker2: zone=seoul
    worker3: zone=busan
  • 새로운 overlay network: myovlnet
    • subnet: 10.10.123.0/24
    • haproxy는 자신의 80번 포트를 호스트의 8001과 연결하고 해당 연결은 myovlnet 을 통해 zone=seoul 에 배포된, wordpress로 연결된다. 최종적으로 worker3에는 portainer가 연결. worker3은 서비스가 아닌 container run으로 배포. 즉, portainer가 ingress와 연결되는게 아닌 overlay로 클러스터에 연결되어야 한다.

Answer)

  1. 라벨부착
    docker node update -–label-add 라벨key=라벨value 호스트명
    docker node update --label-add zone=seoul worker1
    docker node update --label-add zone=seoul worker2
    docker node update --label-add zone=busan worker3
  2. overlay network 생성 하며 attachable
    docker network create --driver=overlay --subnet 10.10.123.0/24 --attachable myovlnet
  3. 새 폴더 생성 및 yml 파일 생성. 도커파일에 haproxy와 wordpress 서비스.
version: '3.7'
services:
  wordpress:
    image: wordpress
    deploy:
      replicas: 3
      placement:
        constraints: [node.labels.zone == seoul]
      restart_policy:
        condition: on-failure
        max_attempts: 2
    environment:
      SERVICE_PORTS: 80
    networks:
      - myovlnet
  proxy:
    image: dockercloud/haproxy
    depends_on:
      - wordpress
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    ports: # -p option, attached to ingress network
      - "8001:80"
    networks: # backend network -> wordpress containers
      - myovlnet
    deploy:
      mode: global
      placement:
        constraints: [node.role==manager]
networks:
  myovlnet:
    external: true

docker stack deploy -c web.yml myovlnet
4. worker3에 portainer가 생성 및 myovlnet에 연결.
docker container run -d --restart always -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock --network myovlnet --name portainer portainer/portainer

0개의 댓글