kubernetes
컨테이너란, 쿠버네티스(Kubernetes)의 가장 기본적인 컨셉이라고 할 수 있습니다. Application의 실행 환경의 변화를 살펴보면서 컨테이너에 대해 알아보겠습니다.
물리 서버를 하나 구입했다고 생각해 봅시다. 서버 하나에 하나의 Application만 올린다면 효율적일까요? 효율적으로 물리 서버를 관리하기 위해서
가상머신이란 운영체제 내부에서 네트워크를 격리시켜 가상 운영체제를 만드는 기술입니다. 접근 권한이나 네임스페이스를 통해 독립적인 환경과 Application을 실행 할 수 있습니다. 그러나 가상머신은 단순한 논리적 격리를 통해 구성되기 때문에, cpu Emulator를 나눠서 운영체제를 돌리므로 느릴 수 밖에 없습니다. 이러한 이유로 만약에 내 컴퓨터에서 가상환경을 만든다면, 내 컴퓨터 보다 좋은 가상환경은 생성이 불가능 합니다.
컨테이너라는 용어를 처음 접하면, 선박 운송용 컨테이너를 생각할 수 있습니다. Kubernetes에서의 컨테이너도, 운송용 컨테이너와 비슷한 느낌이라고 할 수 있습니다. 컨테이너는 격리된 시스템 자원 및 네트워크를 사용하여 독립된 공간을 생성/제어를 합니다. 또한, 컨테이너는 독립적으로 동작하기 때문에 어느 환경에서도 Application은 일관성 있게 동작한다고 할 수 있습니다.
이러한 장점에도, 초기 컨테이너는 통일화된 규격이 없었기 때문에 사용이 쉽지 않았습니다. 하지만 도커의 등장으로 컨테이서 생성/실행이 단순해지면서 컨테이너의 대중화가 시작되었다고 할 수 있습니다.
container의 상태로는 Waiting/Running/Terminated로 3가지가 있습니다.
이해를 돕기 위해 Pod라는 단어는 쓰지 않았습니다. 사실 쿠버네티스에서는 Pod 내부에서 Container를 띄우게 됩니다. 관련 내용은
리눅스 컨테이너를 기반으로 컨테이너 기술을 대중화 시킨 프로그램
하이퍼바이저를 이용하여 리소스 전체를 가상화 하는 방법
운영 체제(OS) 내에서 프로세스를 컨테이너 형태로 격리하는 방법
물리적 하드웨어에 설치된 소프트웨어 계층으로, 물리적 머신을 다수의 가상 머신(Virtaul Machine, VM)으로 분할할 수 있도록 해준다. 즉, 호스트 컴퓨터에서 다수의 운영 체제(operating system)를 동시에 실행하기 위한 논리적 플랫폼을 말한다. 가상머신(vm) 과 하드웨어 사이에서 IO 명령을 처리하는 인터페이스이다. 가상머신 위에 올라간 OS의 명령을 하드웨어에 맞게 해석하여 전달다고, OS에게 하드웨어의 리소스들을 분배한다.