본문 바로가기
[DevOps]/Kubernetes

쿠버네티스(Kubernetes)란 무엇인가?

by 팡펑퐁 2023. 7. 9.
728x90
💡 이 글은 도커를 모르면 이해하기 힘들 것이다.

 

쿠버네티스(Kubernetes)

  • 컨테이너화된 애플리케이션의 배포, 확장, 관리를 자동화하기 위한 오픈 소스 시스템이다.
    • 단일 소프트웨어가 아닌 시스템이다.
  • 컨테이너 배포를 도와주는 프레임워크이며,  도구 및 작업 방법의 모음이라고 말할 수 있다.
  • 그런데 이렇게만 설명하면 잘 와닿지 않는다.
  • 그래서 도커에서 쿠버네티스 없이 컨테이너 배포를 어떻게 하는지를 생각해 보자.

 

 

도커 컨테이너의 수동 배포

  • 로컬에서 작업을 끝내고 수동으로 AWS에 배포하는 상황을 생각해 보자.
  • 먼저 AWS에서 생성 가능한 가상머신인 EC2 서비스에서 인스턴스를 생성한다.
  • 인스턴스 내부에 들어가 도커를 설치하고 컨테이너를 실행한다.
  • 이는 아주 기본적인 배포 방법이다.
  • 그러나, 이 방법은 실제에서 사용하기 큰 무리가 있다.
    • 컨테이너는 여러 이유로 충돌하거나 다운될 수 있는 가능성이 높기 때문이다.
    • 예를 들어 컨테이너에 문제가 발생하여 사용하기 힘들어질 경우 새 컨테이너로 교체해야 한다.
    • 즉, 수동으로 배포할 때는 개발자가 일일이 모니터링하면서 문제가 생겼을 때마다 매번 컨테이너를 교체해줘야 한다.
    • 또 다른 문제도 있다.
    • 애플리케이션에 트래픽이 급증하는 경우 하나의 컨테이너 인스턴스로는 트래픽을 감당할 수 없을 것이다.
    • 트래픽이 증가하여 많은 작업에 대한 부하가 들어오면 컨테이너는 멈추게 될 것이다.
    • 이를 해결하기 위해서는 컨테이너 수를 증가시켜 여러 컨테이너에 부하를 분산시켜야 한다.
    • 물론, 트래픽이 줄어들면 컨테이너를 다시 제거하기도 한다.
    • 이걸 모두 수동으로 해야 한다면 여간 귀찮은 일이 아닐 수 없다.(거의 불가능하다.)

 

 

클라우드 프로바이더(ex. AWS ECS)

  • 위의 문제를 해결하는 방법 중 하나는 AWS의 ECS와 같은 컨테이너 배포에 도움을 주는 서비스를 이용하는 것이다.
  • ECS 서비스를 이용하면 컨테이너의 상태를 자동으로 확인한다.(모니터링)
  • 컨테이너가 계속 실행되고 있는지 확인하고, 충돌이 날 경우 재시작한다.(배포 관리)
  • 이외에도 오토 스케일링(Auto Scaling) 기능을 사용할 수 있다.
    • 트래픽을 모니터링하고 있다가 갑작스럽게 변화하면 가동 및 실행 중인 컨테이너 인스턴스의 수를 동적으로 늘리거나 줄인다.
  • 로드 밸런서 기능을 사용할 수도 있다.
    • 예를 들어 ECS에서의 로드 밸런서는 두 개 이상의 컨테이너 인스턴스가 있는 경우 수신 트래픽이 발생할 때 실행 중인 인스턴스에 트래픽이 균등하게 분할되어 할당되는지 확인한다.

 

 

클라우드 프로바이더의 문제점

  • AWS의 ECS와 같은 클라우드 프로바이더를 사용하면 위에 설명한 바와 같이 컨테이너 배포 및 유지 보수를 쉽게 할 수 있다.
  • 그러나, 클라우드 프로바이더를 사용하는 경우 해당 클라우드가 정의한 방식대로 구성해야 한다.
  • AWS에서 구성하는 클러스터, 테스크, 서비스, 옵션 설정은 모두 AWS만을 위해 존재한다. 
  • AWS에 특화되어 있는 서비스이기 때문에 AWS에 의존적이며 만약 다른 클라우드 프로바이더로 마이그레이션을 하는 경우 해당 클라우드에 맞게 전부 재설정을 해야 한다.
  • 반대로 얘기하면 AWS만 사용한다고 하면 AWS ECS가 제공하는 기능에 만족하여 사용한다면 딱히 문제는 없다고 할 수 있다.

 

 

쿠버네티스의 등장

  • 쿠버네티스는 컨테이너의 배포 방식 정의, 모니터링, 스케일링을 모두 구성할 수 있는 오픈 소스 시스템이다.
  • 원하는 배포를 정의하는 구성 파일, 배포할 컨테이너, 인스턴스 수, 스케일의 확장 및 축소, 교체 등을 설정할 수 있다.
  • 사실상 컨테이너의 오케스트레이션을 위한 표준이라고 봐도 무방하다.
  • 특정 도구를 사용하여 그 구성 정보를 클라우드 프로바이더, 로컬 머신에 전달한다.
  • 쿠버네티스를 지원하는 클라우드 프로바이더라면 쿠버네티스의 구성 파일을 쉽게 활용할 수 있다.
    • 특정 클라우드 프로바이더에 특화된 옵션이 있는 경우 이를 구성 파일에 병합할 수 있다.
    • 그 파일을 다른 클라우드 프로바이더와 함께 사용한다면 새로운 클라우드 프로바이더로 교체하면 된다.(재작성할 필요가 없다.)
  • 로컬 머신의 경우에도 쿠버네티스 소프트웨어를 설치하여 활용할 수 있다.

 

 

정리

  • 쿠버네티스는 AWS ECS 등과 같은 클라우드 서비스 프로바이더가 아니다.(또는 대신 사용할 수 있는 시스템도 아니다.)
  • 모든 클라우드 프로바이더와 함께 사용할 수 있는 개념과 소프트웨어의 모음이다.
  • 다중 머신 설정에서 도커화되고 컨테이너화된 애플리케이션을 관리하고 실행하기 위한 특정 기능을 가지고 있는 시스템이다.
    • 여러 머신(클라우드, 로컬 등)에 배포할 수 있는 배포판 Docker-Compose라고 말할 수 있다.

 

 

 

참고

Udemy - Docker & Kubernetes : 실전 가이드

728x90