[Virtualization] Kubernetes vs Docker

SlothisSlow·2021년 11월 14일
3

Virtualization

목록 보기
3/3

직무 면접을 보면서 아직 많이 부족하다는 것을 느꼈다. 질문을 받았을 때 대답이 막혔었던 Kubernetes 와 Docker의 차이점에 대해 정리해보려고 한다.

먼저 Kubernetese 와 Docker가 무엇인지 알아보자.

Kubernetes

컨테이너는 애플리케이션을 포장하고 실행하는 좋은 방법이다. 프로덕션 환경에서는 애플리케이션을 실행하는 컨테이너를 관리하고 가동 중지 시간이 없는지 확인해야 한다. 예를 들어 컨테이너가 다운되면 다른 컨테이너를 다시 시작해야 한다. 이 문제를 시스템에 의해 처리한다면 더 쉽지 않을까?

그것이 쿠버네티스가 필요한 이유이다. 쿠버네티스는 분산 시스템을 탄력적으로 실행하기 위한 프레임 워크를 제공한다. 애플리케이션의 확장과 장애 조치를 처리하고, 배포 패턴 등을 제공한다.

Kubernetes의 기능

  • 서비스 디스커버리와 로드 밸런싱 : 쿠버네티스는 DNS 이름을 사용하거나 자체 IP 주소를 사용하여 컨테이너를 노출할 수 있다. 컨테이너에 대한 트래픽이 많으면, 쿠버네티스는 네트워크 트래픽을 로드밸런싱하고 배포하여 배포가 안정적으로 이루어질 수 있다.
  • 스토리지 오케스트레이션 쿠버네티스를 사용하면 로컬 저장소, 공용 클라우드 공급자 등과 같이 원하는 저장소 시스템을 자동으로 탑재 할 수 있다.
  • 자동화된 롤아웃과 롤백 쿠버네티스를 사용하여 배포된 컨테이너의 원하는 상태를 서술할 수 있으며 현재 상태를 원하는 상태로 설정한 속도에 따라 변경할 수 있다. 예를 들어 쿠버네티스를 자동화해서 배포용 새 컨테이너를 만들고, 기존 컨테이너를 제거하고, 모든 리소스를 새 컨테이너에 적용할 수 있다.
  • 자동화된 빈 패킹(bin packing) 컨테이너화된 작업을 실행하는데 사용할 수 있는 쿠버네티스 클러스터 노드를 제공한다. 각 컨테이너가 필요로 하는 CPU와 메모리(RAM)를 쿠버네티스에게 지시한다. 쿠버네티스는 컨테이너를 노드에 맞추어서 리소스를 가장 잘 사용할 수 있도록 해준다.
  • 자동화된 복구(self-healing) 쿠버네티스는 실패한 컨테이너를 다시 시작하고, 컨테이너를 교체하며, '사용자 정의 상태 검사'에 응답하지 않는 컨테이너를 죽이고, 서비스 준비가 끝날 때까지 그러한 과정을 클라이언트에 보여주지 않는다.
  • 시크릿과 구성 관리 쿠버네티스를 사용하면 암호, OAuth 토큰 및 SSH 키와 같은 중요한 정보를 저장하고 관리 할 수 있다. 컨테이너 이미지를 재구성하지 않고 스택 구성에 시크릿을 노출하지 않고도 시크릿 및 애플리케이션 구성을 배포 및 업데이트 할 수 있다.

Docker

Docker는 컨테이너 기반의 오픈소스 가상화 플랫폼이다. Docker는 소프트웨어를 container라는 표준화된 유닛으로 패키징하며, 이 container에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는데 필요한 모든 것이 포함되어 있다. 즉 실행환경을 container로 추상화하고 동일한 인터페이스를 제공하여 환경에 구애받지 않고 애플리케이션을 신속하게 배포,확장 및 관리할 수 있게 해준다.

이렇게 생성된 container는 백엔드 프로그램, 데이터베이스 서버, 메시지 큐등 어떤 프로그램도 컨테이너로 추상화할 수 있고 조립PC, AWS, Azure, Google cloud등 어디에서든 실행할 수 있다.

Kubernetes 와 Docker의 비교

그렇다면 이 두 기술의 차이점은 무엇일까?

Kubernetes와 Docker를 간단히 비교하자면

  • 컨테이너를 하나 띄워서 사용하자. -> Docker
  • n개의 컨테이너를 자동으로 생성시켜야지 -> Kubernetes

요약하자면,
Docker'기술적인 개념이자 도구'이고 Kubernetes'도커를 관리하는 툴'이다.
이미지를 컨테이너에 띄우고 실행하는 기술이 Docker이고,
이런 Docker 기반으로 컨테이너를 관리하는 서비스가 Kubernetes라고 생각하면 된다.

즉, Docker'한 개의 컨테이너'를 관리하는데 최적이며, Kubernetes는 '여러 개의 컨테이너'를 서비스 단위로 관리하는데 최적화 되어있다.

따라서 Docker와 Kubernetes는 상황마다 다르게 사용되며,
많은 컨테이너를 관리할 때는 Kubernetes를, 한 개의 컨테이너를 관리할 때는 Docker를 사용할 때 좋다.

항상 기술이 탄생하게된 배경과 정확히 이 기술이 어디서 쓰이는지에 포인트를 두고 확인하는 습관을 기르자.

profile
Infra Engineer

0개의 댓글