Kubernetes
란 Google에서 제작해 오픈소스로 배포한 시스템으로,
Container
화된 애플리케이션을 자동으로 배포, 스케일링 및 관리해주는 시스템입니다.
현재 CNCF
에서 관리하고 있으며, Kubernetes
외에도 클라우드 환경에서 사용할 수 있는 많은 도구들이 있으니 CNCF에서 확인해 보시면 좋을 것 같습니다.
Container
기술이란 애플리케이션 실행에 필요한 라이브러리나 운영체제 패키지 등을 담아서 만들어주는 가상의 실행 환경입니다.
가상화
기술은 오랜시간동안 꾸준히 발달해 왔습니다.
가장 왼쪽의 전통적인 배포 환경의 경우,
하드웨어 위에 OS가 위치하고, OS 위에 애플리케이션이 존재하는 형태였습니다.
그렇기 때문에 OS 위에 올라가있는 WEB들은 OS에 종속적이게 되고,
특정 환경에 설치되어 있던 애플리케이션을 다른 환경으로 마이그레이션 할 경우 애플리케이션이 정상적으로 동작하지 않는 문제점이 있었습니다.
그리고 애플리케이션들이 하드웨어와 OS를 공유하기 때문에 내부적으로 많은 충돌이 발생하기도 했습니다.
시간이 흘러 가상화 기술은 Hypervisor
를 통한 가상화로 진화하였습니다.
Hypervisor
란 호스트 컴퓨터에서 다수의 운영체제를 동시에 실행하기 위한 논리적 플랫폼입니다.
저희에게 가장 친숙한 것은 VMWare
나 VirtualBox
라고 볼 수 있을 것 같습니다.
VMWare
와 같은 Hypervisor
를 실행하고 그 위에 Linux
, Windows
와 같은 운영체제를 올려서 독립적으로 실행시키는 방식입니다.
Hypervisor
는 파일시스템을 포함안 OS및 커널을 통째로 가상화합니다.
Hypervisor
는 자세히 들어가면 Type 1과 2로 나뉘는데.
쉽게 말하자면 Type 1은 하드웨어위에 바로 하이퍼바이저가 올라가는 방식이고,
Type 2는 하드웨어 위에 OS가 올라가고 그 위에 Hypervisor
가 올라가는 형태입니다.
저희에게 익숙한 윈도우 서버에 VM Ware등을 설치하고 OS 이미지 파일을 통해 OS가 설치된 가상머신을 설치하는 형태입니다.
Hypervisor
구조의 경우, Hypervisor
위에 다른 OS를 올릴 수 있기 때문에
애플리케이션을 마이그레이션 할 경우 마이그레이션 이전 환경과 호환되는 OS를 Hypervisor
에 올려서 배포하면 되기때문에 전통적인 방식에 비해 상대적으로 호환성
문제에서 자유롭습니다.
하지만, 많은 단점이 있습니다.
OS 이미지
가 필요하기 때문에 불편하다OS
가 다르기 때문에 운영 관리의 어려움이 있습니다용량이 점점 증가
하므로 마이그레이션이 어려워진다오래걸린다
자원이 비효율적으로 활용
된다이제 다시 시간이 흘러 Hypervisor
를 통한 배포방식은 Container
를 통한 배포 방식으로 진화하였습니다.
Container
호스트 서버의 OS상에 논리적인 구역(Container
)를 만들고, 어플리케이션을 작동시키기 위해 필요한 라이브러리나 어플리케이션 등을 하나로 모아 마치 별도의 서버인 것 처럼 사용할 수 있게 만들어주는 기술입니다.
Container
는 동일한 운영 체제 커널을 공유하고 시스템의 나머지 부분으로부터 애플리케이션 프로세스를 격리합니다.
Hypervisor
는 다르게 OS와 커널을 가상화하지 않고 공유하며, 파일시스템만을 가상화합니다.
호스트 PC의 커널을 공유하기 때문에 init(1)등의 프로세스가 떠있을 필요가 없고,
그덕분에 하이퍼바이저 방식보다 적은 메모리 사용량과 적은 오버헤드를 보입니다.
Container
는 Namespace
와 Cgroup(Control-Groups)
을 이용해 Container
별로 격리된 리소스를 제공합니다.
Container
마다 별도의 OS가 가상화되어 있지 않기 때문에 훨씬 가볍고 빠르게 실행할 수 있으며,
호스트 서버의 환경에 구애받지 않고 다양한 애플리케이션을 Container
화해서 실행시킬 수 있습니다.
가장 대표적인 Container
기술로는 Docker
가 있습니다.