k8s와 docker 관계

도커와 쿠버네티스 비교 예시


  • 컨테이너를 하나만 띄워서 사용해야지! ⇒ 도커
  • 0월 0시에 100개의 컨테이너를 자동으로 생성해야지! ⇒ 쿠버네티스
    • 즉, 도커는 ‘이미지를 컨테이너에 띄우고 실행하는 기술’이고
    • 쿠버네티스는 ‘도커를 관리하는 툴’이라고 생각하면 된다.
    • 따라서 도커는 ‘한 개의 컨테이너를 관리’하는데 최적화 되어있고
    • 쿠버네티스는 ’여러 개의 컨테이너를 서비스 단위로 관리’ 하는데 최적화 되어있다.

도커란?


  • 도커는 ’컨테이너 기반 오픈소스 가상화 플랫폼’이다.
  • 컨테이너란?
    • 컨테이너는 ‘애플리케이션’과 ‘애플리케이션을 구동하는 환경’을 ‘host os’로부터 격리한 공간을 의미한다.
  • 컨테이너는 보통 마이크로서비스로 사용된다.
    • 마이크로서비스란, 거대한 어플리케이션을 기능별로 나누어, 변경/조합이 가능한 서비스를 의미하며,
    • 컨테이너를 사용하면, 하나의 큰 어플을 서비스 단위로 잘라 빠르게 배포할 수 있기 때문에 마이크로서비스라고 설명된다.
    • 또한, 각각 분리해서 사용하므로 개별 변경사항이 분리된 다른 기능들에 영향을 미치지 않는다.

기존의 가상머신(VM)과 컨테이너의 차이점


Untitled

  • 기존의 가상머신(VM) 서버
    • [Server → Host OS → Hypervisor → 각각의 Guest OS가 설치된 VM 구동]
      • 장점
        • Host OS가 window여도 Guest OS로 linux를 사용할 수 있다.
        • 보안적으로 Guest OS가 뚫렸을 경우, 다른 Guest OS와 Host OS가 완벽하게 분리되어 있기 때문에 각각의 VM에 피해가 가지 않는다.
      • 단점
        • VM마다 무거운 Guest OS를 띄우기 때문에 Container에 비해 속도가 느리다.
  • 컨테이너 서버
    • [Server → Host OS → Docker Engine → Container 구동]
      • 장점
        • 하나의 Host OS를 구동하기 때문에 Container 별로 무서운 OS를 띄우지 않아 Container의 속도가 훨씬 빠르다.
      • 단점
        • Host OS가 window라면, Guest OS로 linux를 사용할 수 없다.
        • 보안적으로 Container가 뚫렸을 경우 다른 Container와 Host OS가 위험해질 수 있다.

컨테이너는 독립적이고, 동적이다.


  • 트래픽에 따라 java 컨테이너의 수를 늘리고 줄일 수 있다.
  • 즉, docker 덕분에 매번 새로운 서비스를 만들 때마다 새로운 서비스를 설정할 필요가 없는것이다.
  • 또한, 하나의 서버에서 각기 다른 환경의 컨테이너를 설정할 수 있고,
  • 이 컨테이너들은 각각 분리, 독립되어 있기 때문에 더구 효율적이다.

쿠버네티스란?


Untitled 1

  • 쿠버네티스는 ‘컨테이너 오케스트레이션’이다.
  • 오케스트레이션이란?
    • 컨테이너 역시 그 수가 많아지면 관리와 운영에 있어 어려움이 따른다.
    • 컨테이너 오케스트레이션은 이러한 다수의 컨테이너 실행을 관리 및 조율하는 시스템이다.
  • 쿠버네티스 특징
    • 자동화된 복구(self-healing)
      • 컨테이너들을 모니터링하며, 컨테이너 중 하나라도 죽으면 쿠버네티스는 이를 빠르게 재시작 시킨다.
    • 로드 밸런싱(Load balancing)
      • 유저가 갑자기 많아졌는데 웹에서는 준비가 되어있지 않은 경우 니즈를 수용하기 위해 자동으로 새로운 컨테이너를 생성한다.
      • 니즈가 줄어드는 경우에도 자동으로 도와준다.
    • 무중단(Fault tolerance-FT)서비스
      • 쿠버네티스는 점진적 업데이트를 제공하기 때문에 서비스를 중단하지 않고도 어플리케이션을 업데이트할 수 있다.
    • 호환성(Vendor Lock In 해결)
      • Vendor Lock In : 클라우드 환경을 이전할때 서로 다른 업체의 클라우드 제품 간의 호환 문제가 발생하여 이전하기 어려운 상황을 말한다.
      • 쿠버네티스는 도커 컨테이너를 기반으로 하는 오픈소스이기 때문에 사용자들이 특정 업체에 종속하지 않고 클라우드의 환경을 이전할 수 있다.
      • 또한, 쿠버네티스를 익히면 provider 회사에 상관없이 공통된 마이크로서비스 아키텍쳐 개발이 가능하다.

요약


  • 도커와 쿠버네티스는 상황마다 다르게 사용된다.
  • 한 개의 컨테이너만 사용한다면 쿠버네티스는 필요없다.
  • 쿠버네티스는 많은 컨테이너 관리에 유용하다.

Reference