도커/쿠버네티스 스터디 4일차

Heechan Kang·2025년 8월 6일
0
post-thumbnail

Day 4 (7/31) - 도커 스웜

📖 진도: 3장 / 168~210p

핵심 개념

  • 도커 스웜: 여러 서버를 클러스터로 구성하여 수평 확장성을 제공하는 기능
  • 서비스 디스커버리: 새로 추가된 서버나 컨테이너가 추가/삭제되었을 때 이를 서비스 목록에 반영하는 기능
  • NTP(Network Time Protocol): 클러스터 내부 시간 동기화를 위한 프로토콜
  • Raft Consensus 알고리즘: 리더 선출을 위한 알고리즘
  • 노드: 클러스터를 구성하는 서버
  • 서비스: 같은 이미지에서 생성된 컨테이너의 집합
  • 태스크: 서비스를 구성하는 개별 컨테이너
  • 레플리카: 서비스를 구성하는 컨테이너(태스크)의 수
  • 글로벌 서비스: 모든 노드에 컨테이너를 배포하는 서비스
  • secret, config 기능

실습 내용

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

  • 매니저 노드로 사용할 서버에서 스웜 클러스터 시작

    docker swarm init --advertise-addr 192.168.0.100
    # advertise-addr: 매니저 노드의 IP 주소. 외부에서 접근 가능한 주소이고, 자동으로 선택도 가능하지만 다수의 인터페이스가 있는 경우, 도커는 자체적으로 외부 IP를 선택 할 수 없음.
  • 워커 노드로 사용할 서버에서 스웜 클러스터 참여

    docker swarm join --token SWMTKN-1-5cj... 192.168.0.100:2377
    • 이때 사용하는 토큰은 매니저 노드에서 docker swarm join-token --rotate 명령어로 새로 생성할 수 있음.
  • 추가된 노드의 삭제는 docker swarm leave 명령어로 가능

    • 매니저 노드는 docker swarm leave --force 명령어로 삭제 가능
  • 워커에서 매니저로, 매니저에서 워커로의 이동은 아래의 명령어로 가능

    docker node promote <node_id>
    docker node demote <node_id>

서비스 생성

  • 서비스 생성은 docker service create
  • 서비스 목록은 docker service ls
  • 서비스의 자세한 정보는 docker service ps <service_name>
  • 서비스 삭제는 docker service rm <service_name>

배운 내용

도커 스웜 모드의 구조

  • 매니저 노드
    • 클러스터 관리 및 서비스 배포, 실제 작업도 수행 가능
    • 다중화가 권장되며, 네트워크 파티셔닝시에도 정상 동작을 위해 홀수개 구성 권장
    • 다만 매니저 노드 다중화와 클러스터의 성능은 무관함
    • 매니저 중에서도 일반 매니저와 리더 매니저가 있음
  • 워커 노드: 실제 작업을 수행하는 노드

secret, config 기능

  • 도커 스웜과 같은 클러스터 환경에서, 환경변수와 설정 파일을 호스트마다 마련하는 것은 비효율적임.

    • 매번 세팅하고, 업데이트 해야 함.
  • 또한 비밀번호 등 민감한 정보를 환경변수로 설정하는 것은 보안상으로도 좋지 않다.

  • 이러한 문제를 해결하기 위해, 도커 스웜에서는 secret, config 기능을 제공한다.

    • secret은 민감한 정보를 저장하는 기능
    • config는 설정 파일을 저장하는 기능
  • secret 생성

    docker secret create my-secret my-secret.txt
    
    docker secret ls
    
    docker secret inspect my-secret
    # inspect로 조회시에도 실제 secret을 확인할 수는 없음
    # 파일 시스템이 아닌 메모리에 저장되므로 휘발성을 띄고 더 안전함.
  • config 생성

    docker config create my-config my-config.yaml
    
    docker config ls
    
    docker config inspect my-config
    • secret과 다르게 Data라는 필드로 Base64 인코딩된 실제 내용을 확인 가능

도커 스웜 네트워크

  • 스웜 네트워크는 일반적인 도커 네트워크와는 다소 다른 방법으로 동작

    • 스웜 모드는 다수의 도커 엔진을 통제해야 하기에, 앞서 다룬 네트워크들의 풀이 필요함.
    • 또한 다수의 노드 내의 컨테이너에 접근 할 수 있어야 하므로, 라우팅 기능도 필요함.
    • 이로인해 스웜 모드는 자체적으로 네트워크 드라이버를 가지고 활용함.
  • 스웜 모드의 ingress 네트워크

    • 스웜 모드 init시 자동으로 생성되는 예약된 오버레이 네트워크
    • 외부 클라이언트가 어떤 노드의 IP:PORT로 접속해도 동일한 iptable/IPVS가 서비스의 VIP(10.0.0.x)로 전달(DNAT)하여 접속 할 수 있게 함
      • 로컬 태스크가 있다면 바로 전달
      • 없으면 RR로 원격 노드로 전달
  • 오버레이 네트워크

    • 스웜 모드에서 사용하는 네트워크 드라이버
    • 여러 개의 도커 데몬을 하나의 네트워크로 묶어주는 역할
    • 각 스웜 노드의 컨테이너들이 오버레이 네트워크의 서브넷에 해당하는 IP를 할당받고, 이를 통해 상호 통신이 가능함
    • 앞서 다룬 ingress 네트워크 또한 오버레이 네트워크의 위에서 동작하며, 예약된 특수한 네트워크로 볼 수 있음
  • docker_gwbridge 네트워크

    • 외부로 나가는 통신을 위한 네트워크
    • 오버레이 네트워크 트래픽의 종단점(VTEP; Virtual Tunnel End Point) 역할을 담당
profile
안녕하세요!

0개의 댓글