Computer Science

쿠버네티스(Kubernetes) ・ 도커(Docker)

viamemine 2024. 6. 17. 17:49
728x90
반응형

 

쿠버네티스란 ? 

쿠버네티스를 간단히 말하면, 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식성이 있고 확장 가능한 오픈소스 플랫폼입니다. 일단 쿠버네티스가 무엇이고 등장 배경과 애플리케이션 배포 환경의 변화를 살펴보도록 하겠습니다.

 

애플리케이션 배포 환경의 변화 

프로그램을 개발한 후, 사람들에게 서비스를 제공하려면 특정 서버에 본인이 만든 소프트웨어를 배포해야 합니다. 이 '배포' 방식의 변화 과정을 이해하는 것이 컨테이너, 도커, 쿠버네티스의 개념을 이해하는데 있어서 굉장히 중요합니다. 

 

 

Container Deployment(컨테이너 배포) 시대로 오기까지의 여정 

 

1. 전통적인 방식(Traditional Deployment)

  • 가장 오래되고 단순한 방식
  • 물리적인 컴퓨터 한 대에 하나의 OS를 설치하고, 여러가지 프로그램을 올리는 방식
  • 문제점 
    • 다른 OS를 설치하려면 ? 컴퓨터가 한 대 더 필요 ! 
    • 같은 컴퓨터 리소스를 공유하므로, 배포한 애플리케이션끼리 서로 영향을 주고 받음 → 성능 문제 발생
    • 하드웨어 성능은 빠른 속도로 향상되는 반면, 소프트웨어의 발전은 느림
  • 한 대의 컴퓨터를 여러 대의 컴퓨터처럼 사용할 수는 없을까 ? 

전통적인 배포 방식의 문제점

 

무어의 법칙
무어의 법칙은 반도체 칩의 성능, 즉 메모리의 용량이나 CPU의 속도가 약 24개월마다 2배로 증가하고, 가격은 2배씩 낮아진다는 법칙입니다. 인텔의 공동 창업자인 골든 무어가 1965년에 발표한 내용이기 때문에 무어의 법칙이라고 불립니다.

 

 

가상화 배포(Virtualized Deployment)

위와 같이 전통적인 방식의 문제점 때문에, 사람들은 '가상화'라는 개념을 도입합니다.

가상화란, 물리적인 하드웨어 장치를 논리적인 객체로 추상화하는 것을 의미합니다. 

 

하드웨어는 1개인데 여러 대처럼 동작시키거나 반대로 여러 대의 장치를 묶어 하나의 장치인 것처럼 설정하여, 사용자는 내부적으로 시스템이 어떻게 동작하는지 알 필요 없이 사용자가 원하는 방식으로 자원을 사용할 수 있다는 것입니다. 

 

즉, 한 대의 서버 위에 동시에 여러 개의 OS를 설치하고, 여러 애플리케이션을 실행시키는 방식으로 자원 비효율 문제를 해결할 수 있게 되었습니다.

 

가상화 배포는 가상머신을 기반으로 배포하는 방법입니다. 가상머신은 가상화 기술이 적용된 컴퓨터이고, 개별적으로 자체 컴퓨팅 자원(CPU, memory, Disk)와 OS를 갖춘 가상 컴퓨팅 환경입니다. 아래와 같은 특징이 있습니다.

  • 가상머신은 각각의 논리적으로 구분된 가상 환경에서 실행되기 때문에, 각기 다른 OS, 분리된 리소스를 가지고 있음 
  • 하이퍼바이저(hypervisor): 하나의 시스템 상에서 가장 컴퓨터를 여러 개 구동할 수 있도록 도와주는 중간 계층, 가상머신에 각각 자원 할당 (VMware Workstation, Oracle VM VirtualBox 등)
  • 문제점
    • VM이 많을수록 전통적인 방식 대비 성능의 안정성이 떨어지고 실행속도가 느려짐
    • 가상머신은 '완전한 컴퓨터'이기 때문에, 각각의 가상머신에 guestOS를 일일히 설치해주어야 함
      • 독립적인 플랫폼을 하나씩 증가시킬 때마다 불필요한 OS를 만들어야 하기 때문에 확장성이 떨어지고, OS 크기를 생각하면 부담스러움

 

이러한 문제를 해결하기 위해 등장한 개념이 컨테이너(Container)입니다.

 

 

컨테이너 중심의 배포(Container Deployment)

컨테이너 중의 배포는 컨테이너를 기반으로 애플리케이션을 배포하는 방법입니다.

 

컨테이너란 ? 
* Host OS 상에 논리적인 구획을 만들어서, 애플리케이션을 작동시키는데 필요한 라이브러리나 종속 항목들을 모아, 마치 별도의 서버인 것처럼 사용할 수 있도록 만든 것
* 애플리케이션과 필요한 모든 파일을 하나의 런타임 환경으로 묶는데 사용하는 기술

 

 

컨테이너와 VM의 차이점

가장 큰 차이점은, 컨테이너는 애플리케이션 간의 OS를 공유한다는 것입니다.

Host OS의 리소스를 논리적으로 분리시키고, 여러개의 컨테이너가 공유하여 사용합니다.

그렇기 때문에 컨테이너는 VM과 달리 프로그램의 구동을 위해 OS를 매번 설치할 필요가 없습니다.

즉, 하나의 Host OS 위에서 마치 각각의 독립적인 프로그램처럼 관리되고 실행됩니다.

 

그에 대한 장점으로는, OS 설치 작업이 없기 때문에 setup이 빠르고 확장성이 좋습니다.

VM보다 가볍기 때문에 migration, backup, transition이 빠릅니다.

컨테이너는 오버헤드가 적기 때문에, 가볍고 고속으로 작동합니다. (메모리를 적게 차지하고, 시작 시간이나 종료 시간이 적게 걸림)

다른 컴퓨팅 환경으로 이동하더라도 안정적으로 실행 가능합니다.

 

한가지 주의해야 할 사항은 컨테이너는 OS를 공유하는 방식이기 때문에,

어떤 프로그램의 문제가 다른 프로그램을 간섭할 수는 없습니다.

그러나 어떤 프로그램의 문제가 OS에 문제를 일으킬 경우에는 OS에서 구동 중인 전체 컨테이너의 문제가 될 가능성이 있습니다.

 


 

도커(Docker)

본격적으로 쿠버네티스에 들어가기 전에 도커를 먼저 짚고 넘어가봅시다. 컨테이너 하면 도커를 빼놓을 수 없는데요. 도커는 컨테이너를 만들고 사용할 수 있도록 하는 컨테이너화 기술입니다. 애플리케이션의 실행에 필요한 환경을 하나의 이미지로 모아두고, 그 이미지를 사용하여 다양한 환경에서 애플리케이션 실행 환경을 구축 및 운영하기 위한 오픈소스 가상화 플랫폼입니다. 

이미지란 ?
* 컨테이너 실행에 필요한 파일과 설정 값 등을 포함하는 것으로, 상태값을 가지지 않고 변하지 않음
* 컨테이너는 이미지를 실행한 상태(runtime)라고 볼 수 있고 추가되거나 변하는 값은 컨테이너에 저장됨
* 같은 이미지에서 여러 개의 컨테이너를 생성할 수 있고, 컨테이너의 상태가 바뀌거나 삭제되더라도 이미지는 변하지 않음

 

 

 

쿠버네티스(Kubernetes)

쿠버네티스의 등장배경

도커의 등장으로 컨테이너 기반 배포 방식이 보편화되고, 많은 서비스들이 도커라이징되어 이미지로 관리되기 시작했습니다. 점점 이미지가 많아지면서 관리해야 할 컨테이너와 서버들 또한 많아지게 되었습니다. 즉, 엔지니어가 할 일이 많아졌습니다.

'컨테이너 어느 서버에 배포하지 ? 리소스 남는 서버 있나 확인해야겠다 .. '
'앗 ! 이 컨테이너 죽었네 .. 다시 살려야겠다 ..'

 

할 일이 많아지면 이런 잡다한 일들을 자동화 시켜야 합니다. 컨테이너들의 관리를 자동화할 도구(컨테이너 오케스트레이션 툴)의 필요성이 대두되고, 비로소 컨테이너 오케스트레이션의 시대가 열립니다.  (Kubernetes, Docker Swarm, AWS의 ECS, Mesos의 Marathone 등)

오케스트레이션이란 ?
컨테이너 역시 그 수가 많아지게 되면, 관리와 운영에 있어서 어려움이 있습니다.
컨테이너 오케스트레이션 엔진을 통해 컨테이너의 생성과 소멸, 시작 및 중단 시점 제어 등을 관리할 수 있습니다.

 

 

많은 컨테이너 오케스트레이션 도구가 있음에도 불구하고 현재는 쿠버네티스가 컨테이너 오케스트레이션 툴의 사실상 표준으로 자리매김하게 되었습니다. 그 이유는 다음과 같습니다. 

  • 대규모 컨테이너를 관리했던 구글의 노하우와 강력한 확장성
  • 마이크로소프트, RedHat, IBM 등 수많은 기업의 참여
  • AWS, GCP, Zure, Digital Ocean, IBM Cloud, Oracle Cloud 등에서 관리형 서비스를 내놓음으로써 클라우드 컨테이너 시장을 평정

 

 


 

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

 

 

컨테이너를 하나만 띄워서 사용해야지 → 도커 

100개의 컨테이너를 자동으로 생성해야지 → 쿠버네티스

 

도커이미지를 컨테이너에 띄우고 실행하는 기술이고,

쿠버네티스도커를 관리하는 툴입니다.

 

따라서 도커 한 개의 컨테이너를 관리하는데 최적화 되어있고,

쿠버네티스여러 개의 컨테이너를 서비스 단위로 관리하는데 최적화 되어있습니다. 

728x90