네모네모새

Kubernetes와 가상화 기술 본문

Kubernetes

Kubernetes와 가상화 기술

네모새 2022. 3. 29. 21:29

Kubernetes와 가상화 기술

Kubernetes란?

Kubernets 공식 문서

쿠버네티스란 Google에서 제작해 오픈소스로 배포한 시스템으로,
컨테이너화된 애플리케이션을 자동으로 배포, 스케일링 및 관리해주는 시스템입니다.

현재 CNCF에서 관리하고 있으며, 쿠버네티스 외에도 클라우드 환경에서 사용할 수 있는 많은 도구들이 있으니 CNCF에서 확인해 보시면 좋을 것 같습니다.

컨테이너 기술

컨테이너 기술이란 애플리케이션 실행에 필요한 라이브러리나 운영체제 패키지 등을 담아서 만들어주는 가상의 실행 환경입니다.

Traditional Deployment

가상화 기술은 오랜시간동안 꾸준히 발달해 왔습니다.
가장 왼쪽의 전통적인 배포 환경의 경우,
하드웨어 위에 OS가 위치하고, OS 위에 애플리케이션이 존재하는 형태였습니다.

그렇기 때문에 OS 위에 올라가있는 WEB들은 OS에 종속적이게 되고,
특정 환경에 설치되어 있던 애플리케이션을 다른 환경으로 마이그레이션 할 경우 애플리케이션이 정상적으로 동작하지 않는 문제점이 있었습니다.

그리고 애플리케이션들이 하드웨어와 OS를 공유하기 때문에 내부적으로 많은 충돌이 발생하기도 했습니다.

Virtualized Deployment

시간이 흘러 가상화 기술은 Hypervisor를 통한 가상화로 진화하였습니다.
Hypervisor란 호스트 컴퓨터에서 다수의 운영체제를 동시에 실행하기 위한 논리적 플랫폼입니다.

저희에게 가장 친숙한 것은 VMWare나 VirtualBox라고 볼 수 있을 것 같습니다.

VMWare와 같은 하이퍼바이저를 실행하고 그 위에 Linux, Windows와 같은 운영체제를 올려서 독립적으로 실행시키는 방식입니다.

하이퍼바이저는 파일시스템을 포함안 OS및 커널을 통째로 가상화합니다.

하이퍼바이저는 자세히 들어가면 Type 1과 2로 나뉘는데.
쉽게 말하자면 Type 1은 하드웨어위에 바로 하이퍼바이저가 올라가는 방식이고,
Type 2는 하드웨어 위에 OS가 올라가고 그 위에 Hypervisor가 올라가는 형태입니다.
저희에게 익숙한 윈도우 서버에 VM Ware등을 설치하고 OS 이미지 파일을 통해 OS가 설치된 가상머신을 설치하는 형태입니다.

하이퍼바이저 구조의 경우, 하이퍼바이저 위에 다른 OS를 올릴 수 있기 때문에
애플리케이션을 마이그레이션 할 경우 마이그레이션 이전 환경과 호환되는 OS를 하이퍼바이저에 올려서 배포하면 되기때문에 전통적인 방식에 비해 상대적으로 호환성 문제에서 자유롭습니다.

하지만, 많은 단점이 있습니다.

Hypervisor의 단점

  1. 가상머신마다 OS 이미지가 필요하기 때문에 불편하다
  2. 가상머신별로 OS가 다르기 때문에 운영 관리의 어려움이 있습니다
  3. 가상머신을 오래 운영할 경우 이미지의 용량이 점점 증가하므로 마이그레이션이 어려워진다
    (재사용성이 떨어진다)
  4. 부팅시 하이퍼바이저 -> OS -> 미들웨어 -> 애플리케이션까지 실행되므로 오래걸린다
  5. 가상머신별로 독립된 메모리, 디스크 영역을 할당해야하므로 자원이 비효율적으로 활용된다

Container Deployment

이제 다시 시간이 흘러 Hypervisor를 통한 배포방식은 Container를 통한 배포 방식으로 진화하였습니다.

Container란 호스트 서버의 OS상에 논리적인 구역(컨테이너)를 만들고, 어플리케이션을 작동시키기 위해 필요한 라이브러리나 어플리케이션 등을 하나로 모아 마치 별도의 서버인 것 처럼 사용할 수 있게 만들어주는 기술입니다.

컨테이너는 동일한 운영 체제 커널을 공유하고 시스템의 나머지 부분으로부터 애플리케이션 프로세스를 격리합니다.
하이퍼바이저와는 다르게 OS와 커널을 가상화하지 않고 공유하며, 파일시스템만을 가상화합니다.
호스트 PC의 커널을 공유하기 때문에 init(1)등의 프로세스가 떠있을 필요가 없고,
그덕분에 하이퍼바이저 방식보다 적은 메모리 사용량과 적은 오버헤드를 보입니다.

컨테이너는 Namespace와 Cgroup(Control-Groups)을 이용해 컨테이너별로 격리된 리소스를 제공합니다.

컨테이너마다 별도의 OS가 가상화되어 있지 않기 때문에 훨씬 가볍고 빠르게 실행할 수 있으며,
호스트 서버의 환경에 구애받지 않고 다양한 애플리케이션을 컨테이너화해서 실행시킬 수 있습니다.

가장 대표적인 컨테이너 기술로는 Docker가 있습니다.

'Kubernetes' 카테고리의 다른 글

Replica Set과 Deployment  (0) 2022.03.29
Kubernetes 기본 오브젝트  (0) 2022.03.29
Kubernetes 구조  (0) 2022.03.29
Minikube 통한 Kubernetes 구축(1. Minikube 소개 및 아키텍쳐)  (0) 2022.03.20
Comments