본문 바로가기

docker

4W docker study

책 : 시작하세요! 도커/쿠버네티스 (개정판)을 이용한 Docker스터디 4W 주간 내용 정리


03장: 도커 스웜
책에서도 언급되어 있지만, 해당 역활에 대한 기술이 도커 스윔을 사용하지 않고,
쿠버네티스를 사용하는 방향으로 실제적인 defactor표준이 되었다.
하지만 그 원리 및 추구하는 방향성을 살펴보는것에 의미가 충분히 있다.

3.1 도커 스웜을 사용하는 이유

  • 왜 필요한지 이해하는것이 가장 중요한 부분
  • 자원의 부족 (cpu, memory, 등등) → 클러스터링 필요 
  • 클러스터링에 필요한 요소 (요 부분은 kafka, k8s등 대부분 동일한 어려움을 해결하기 위한 기술들이 존재함)
    • Service Discovery : 컨테이너가 추가되었을때 발견
    • 스케줄러 : 추가된 사항을 어디에 할당할 것인가
    • 로드밸런서 문제
    • 고가용성(High Availability) : 서버가 다운되었을때 조치 방안

3.2 스웜 모드

  • 도커 엔진 자체에 내장되어 있음
  • Swarm모드 : 기본값은 false
  • 클러스터링 할때는 반드시 NTP 설정이 필요하다!! (시간 요소는 중요한 부분)


- 3.2.1 도커 스웜 모드의 구조

  • 구성요소 : 매니저 노드 + 워커 노드
    • 매니저 노드 : 워크 노드를 관리하기 위한 노드
    • 워커 노드 : 실제로 컨테이너가 생성되고 관리되는 노드
  • 매니저 노드의 갯수는 홀수로 구성하는 것이 권장
    • kafka에서도 주키퍼 갯수를 홀수로 권장합니다.
    • 보통 대표 즉 매니저를 뽑는데, 투표를 통해서 1대를 선정하는데 홀수여야 쉽게 1등이 가려지는 윈리입니다.

- 3.2.2 도커 스웜 모드 클러스터 구축

  • 스윔 매니저에서 사용하는 포트
    • 2377 port : 매니저 노드 기본 포트
    • 7946/tcp, udp : 노드 사이의 통신
    • 4789/tcp, udp : 스윔에서 사용하는 ingress오버레이 네트워크에서 사용
  • docker swarm init으로 마스터 노드 설정
  • docker swarm join을 통해서 워커 노드 추가
  • docker node promote / demote를 통해서 마스터 <-> 워커 노드간 전환 가능


- 3.2.3 스웜 모드 서비스

  • 지금까지 사용해온 도커 명령어는 제어단위의 컨테이너이다. (run, rm...등등)
  • 스윔모드에서 제어단위는 "컨테이너가 아닌 서비스(Service)이다"
  • 서비스의 개념
    • 같은 이미지에서 생성된 컨테이너의 개념
    • 서비스를 제어하면, 해당 서비스 내의 컨테이너에 같은 명령이 수행
    • 서비스 내에 컨테이너는 1개 이상 존재 할수 있음
    • 컨테이너들은 각 워커 노드와 매니저 노드에 할당된다.
    • 이러한 컨테이너를 테스크 (Task)라고 한다.
  • 레플리카(replica)
    • 함께 스케줄러에 의해서 생성된 컨테이너를 의미
    • 중요한 개념
    • 옵션으로 갯수를 정할수 있음
  • 서비스 시작 
docker service create --name myweb \
--replicas 2 \
-p 80:80 \
nginx
  • docker service scale : replica의 갯수를 줄이거나 늘릴수 있다.
  • 스윔모드는 라운드 로빈(round-robin)방식으로 서비스에 접근할 컨테이너를 결정한다.
    • 자원 사용량 등을 고려해 분배하는 방식은 아니다.
  • 서비스 모드의 종류 (2가지가 있음) 
    • 복제 모드 (replicated) : replicas의 갯수만큼 컨테이너를 생성해서 서비스 하는 방식
    • global 모드 : 스윔 클러스터 내에서 사용할수 있는 모든 노드에  컨테이너를 반드시 하나씩 생성하는 방식
  • 서비스이 장애복구 : 자동복구를 지원
  • 서비스 롤링 업데이트 : 순차적으로 컨테이너를 업데이트 하는 방식
  • config, secret : 서비스 컨테이너에 설정 정보 전달 하는 명령어 방식
  • 도커 스윔 네트워크
    • ingress 네트워크
    • 오버레이 네트워크
    • 사용자 정의 오버레이 네트워크
  • 서비스 디스커버리
    • 새로 생성되거나 삭제된 컨테이너의 감지를 하는 역활
  • 스윔 모드 볼륨
    • volume 타입의 볼륨 생성
    • bind 타입 볼륨 생성
    • 이부분이 가장 큰 단점으로 언급되어 진다.

- 3.2.4 도커 스웜 모드 노드 다루기

  • 노드의 상태 (Active, Drain, Pause)를 확인해서 할당 가능 여부 확인
  • 노드에 --label-add를 활용해서 노드를 분리하는 작업 가능
  • 서비스의 제약 조건에 활용
    • node.lables
    • node.id
    • node.hostname, node.role
    • engine.labels

'docker' 카테고리의 다른 글

3W docker study  (0) 2023.01.24
2W docker study  (0) 2023.01.24
1W docker study  (0) 2023.01.24