0부터 시작하는 Docker Swarm 공부 - Docker Stack - Stack 과 Load Balancer & Stack 과 Service

Jaehong Lee·2022년 8월 25일
0
post-thumbnail

1. Load Balancer 중첩 환경

  • 2 개의 LB 를 둔다. 앞의 LB 는 L7 LB 로, 주소를 보고 트래픽을 전달해준다. 뒤의 LB 는 L4 LB 로, 앞에서 주소를 보고 분산해줬으므로, 컨테이너들에게 라운드 로빈 방식으로 트래픽을 전달해준다

  • 이를 통해 분리 및 동시 개발이 가능해지며, 개발 언어를 통일 시키지 않아도 된다. 또한, 각 파트끼리는 API 나 HTTP 를 이용해 통신한다

  • 주소를 기준으로 파트를 나눴으므로, 주소에 대한 트래픽 부하에 따라, 각 파트의 Scale 을 조정할 수 있다

    • Scale up : 컨테이너의 자원을 늘린다
    • Scale out : 컨테이너의 수를 늘린다

2. Docker Swarm 과 Load Balancer

  • Ingress Network 는 외부에서 들어오는 접근을 컨테이너에 연결해준다

  • 위와 같은 방식을 통해 L7 LB 와 L4 LB 환경을 구현할 수 있다

3. label 삭제 & 추가

label 삭제

  • Node label 을 확인하자
docker node update --label-rm zone worker1

  • rm 을 통해 삭제한다. 삭제시 삭제할 Key 값만 지정해주면 된다

구현할 환경 요구 사항

worker1 - region=seoul , customer=lg
worker2 - region=seoul , customer=kia
worker3 - region=jeju , customer=lg

label 추가

  • 요구 사항에 맞게 label 을 추가해주자

4. Stack 배포하기

Docker Stack 작성

version: '3.7'

services: 
  nginx: 
    image: nginx 
    deploy:  
      replicas: 3
      placement: 
        constraints: 
          - node.labels.region==seoul
          - node.labels.customer==lg
      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
      - "8001:80"
    networks:   # backend network -> nginx containers
      - web        
    deploy:
      mode: global
      placement: 
        constraints: [node.role==manager]      

networks: 
  web: 
    external: true
  • Docker Stack 파일을 작성하자
    • 다수의 placement 를 줄 때에는 list 형태를 사용할 수 있다. 이때, 이 조건 list 를 모두 만족하는 Node 에게만 컨테이너를 배치한다. 이는 AND 연산으로 동작한다
    • 즉, label 에 seoul 과 lg 가 다 붙어있는 Node 에게 배포하는 것이다

Docker Stack 배포하기

  • yml 파일을 이용해 배포하자
  • 잘 배포되었다

5. Stack 과 Service 살펴보기

  • Stack list 를 확인하자
  • Service list 와 Service 에 포함된 Container list 를 확인하자
  • Stack 에 포함된 모든 Container 도 확인할 수 있다
  • STACK 은 위와 같은 구조이다. STACK 안에 SERVICE 들이 있고, SERVICE 안에 CONTAINER 들이 있다
  • Service 의 정보를 확인하자. namespace 를 보면 testweb 이라고 되있다. Stack 을 기준으로 작업 공간이 나뉘어진 것이다
    • compose 에서는 디렉터리를 기준으로 작업 공간이 나뉘어진다

  • Container 의 이름을 살펴보면, Stack 이름 + Service 이름 + 개별 컨테이너 이름 으로 구성되어 있다
profile
멋진 엔지니어가 될 때까지

0개의 댓글