Docker networking and service discovery 요약
  * <https://www.oreilly.com/learning/docker-networking-service-discovery>
  * 2016-04-11
  * 저자는 Mesosphere 엔지니어, 편향된 의견이 있을 수 있음

개요
  * 도커 네트워킹과 서비스 디스커버리는 신규 영역이라 Best Practice 가 적다
  * 도커 네트워킹과 서비스 디스커버리 표준이 정립되려면 몇년 더 있어야할 것 같다

도커 네트워킹
  * 도커 네트워킹은 컨테이너를 위한 SDN 솔루션
  * 도커 네트워킹이 해결해야 하는 문제
    - 서로 다른 host에서 실행되는 컨테이너들끼리 어떻게 연결/통신하게 하나?
    - 컨테이너와 외부세계(인터넷)가 어떻게 연결/통신하게 하나?
    - 클러스터 내부의 상태 (IP 할당 등)를 어떻게 유지하나?
    - 기존 네트워크 인프라에 어떻게 통합하나?
    - 보안정책을 어떻게 적용하나?
  * 도커 네트워킹 솔루션
    - Overlay
      . 도커사는 2015년 3월 SDN 스타트업 SocketPlane을 인수
      . SocketPlane의 솔루션을 Docker Overlay Driver라고 명명
      . 도커 bridge mode 네트워크를 클러스터 레벨로 확장
      . Docker Swarm에 적용 (도커 버전 1.9+)
    - Flannel
      . 모든 컨테이너(pod)는 고유한 IP 주소로 통신 가능
      . k8s에 적용
    - 그밖에 Weave, Project Calico, Open vSwitch, Pipework, OpenVPN 등 존재

서비스 디스커버리 & 로드 밸런싱
  * 서비스 디스커버리
    - 컨테이너 스케줄링과 서비스 디스커버리는 동전의 양면
      . 두 기능은 반드시 동행하며,
      . 서로가 서로를 필요로 함
    - 서비스 디스커버리란?
      . 특정 컨테이너가 어느 host에서 실행되는지 알아내는 솔루션
      . register 기능과 lookup 기능으로 구성
    - 서비스 디스커버리는 로드 밸런싱과 밀접한 관계가 있다
    - 100~1000+ node 규모의 클러스터라면 서비스 디스커버리 부하 테스트 필요
    - 서비스 디스커버리 솔루션
      . Zookeeper : 검증된 솔루션, 설치가 어렵다는 평
      . etcd : 경량 솔루션
      . Consul
      . 기타 Mesos-DNS, SkyDNS, WeaveDNS 등
  * 로드 밸런싱
    - 로드 밸런싱으로 달성할 수 있는 것
      . throughput 최대화, response time 최소화
      . 특정 컨테이너에만 부하가 집중되는 것(hotspotting)을 방지
    - 도커 로드 밸런싱 솔루션
      . NGINX : 서비스 디스커버리 솔루션과 정합성 좋음
      . HAProxy : 도커사가 솔루션을 인수, 향후 도커의 네이티브 솔루션이 될 전망
      . Bamboo
      . Kube-Proxy : k8s에 적용

컨테이너 오케스트레이션
  * 스케줄링은 중요, 하지만 오케스트레이션의 일부일 뿐
  * 스케줄러는 컨테이너를 클러스터 위에서 배포/실행(deploy)하는 역할
  * 스케줄러가 deploy target node를 선택하는 기준
    - 머신의 사용 현황
    - app 실행에 필요한 자원 요구사항
    - app 실행 조건(constraint)
      . ex) SSD 가 설치된 머신에서 실행
  * 오케스트레이션 솔루션별 스케줄러 특성
    - Docker Swarm
      . Swarm의 스케줄러는 pluggable (다른 스케줄러로 교체 가능)
      . HA 기능 제공 (아직은 불완전하다는 평, 개발중)
    - Kubernetes
      . 구글의 10년 노하우를 결집
      . 모든 컴포넌트가 교체 가능


  * 오케스트레이션 솔루션 비교
    - 노드 규모에 따른 적합도

  Tool       | ~10 nodes | 10~100 nodes | ~1,000 nodes | 1,000+ nodes
-------------+-----------+--------------+--------------+--------------
Docker Swarm |    ++     |    +         |    ?         |    ?
-------------+-----------+--------------+--------------+--------------
Kubernetes   |    ++     |    ++        |    +         |    ?
-------------+-----------+--------------+--------------+--------------
Apache Mesos |    +      |    ++        |    ++        |    ++

    - 워크로드 종류에 따른 적합도

             | non-      |           |       | Long-   |           |

  Tool       | Container | Container | Batch | running | Stateless | Stateful
-------------+-----------+-----------+-------+---------+-----------+---------
Docker Swarm |  -        |  ++       |  +    |  ++     |  ++       |  +
-------------+-----------+-----------+-------+---------+-----------+---------
Kubernetes   |  -        |  ++       |  +    |  ++     |  ++       |  +
-------------+-----------+-----------+-------+---------+-----------+---------
Apache Mesos |  ++       |  ++       |  ++   |  ++     |  ++       |  +


(이상)

Posted by ingeeC
,