kubernetes

Container

컨테이너란, 쿠버네티스(Kubernetes)의 가장 기본적인 컨셉이라고 할 수 있습니다. Application의 실행 환경의 변화를 살펴보면서 컨테이너에 대해 알아보겠습니다.

물리 서버를 하나 구입했다고 생각해 봅시다. 서버 하나에 하나의 Application만 올린다면 효율적일까요? 효율적으로 물리 서버를 관리하기 위해서 가상화 기술이 발전하게 되었습니다. 가상화 기술은 물리적인 하드웨어를 논리적으로 구분하여, 여러개의 Application을 효율적으로 사용할 수 있게 합니다. 가상화는 크게 가상머신(vm)과 컨테이너(container)로 나누어 집니다.

가상머신이란 운영체제 내부에서 네트워크를 격리시켜 가상 운영체제를 만드는 기술입니다. 접근 권한이나 네임스페이스를 통해 독립적인 환경과 Application을 실행 할 수 있습니다. 그러나 가상머신은 단순한 논리적 격리를 통해 구성되기 때문에, cpu Emulator를 나눠서 운영체제를 돌리므로 느릴 수 밖에 없습니다. 이러한 이유로 만약에 내 컴퓨터에서 가상환경을 만든다면, 내 컴퓨터 보다 좋은 가상환경은 생성이 불가능 합니다.

컨테이너라는 용어를 처음 접하면, 선박 운송용 컨테이너를 생각할 수 있습니다. Kubernetes에서의 컨테이너도, 운송용 컨테이너와 비슷한 느낌이라고 할 수 있습니다. 컨테이너는 격리된 시스템 자원 및 네트워크를 사용하여 독립된 공간을 생성/제어를 합니다. 또한, 컨테이너는 독립적으로 동작하기 때문에 어느 환경에서도 Application은 일관성 있게 동작한다고 할 수 있습니다.

이러한 장점에도, 초기 컨테이너는 통일화된 규격이 없었기 때문에 사용이 쉽지 않았습니다. 하지만 도커의 등장으로 컨테이서 생성/실행이 단순해지면서 컨테이너의 대중화가 시작되었다고 할 수 있습니다.

Container Status

container의 상태로는 Waiting/Running/Terminated로 3가지가 있습니다.

  • Waiting : 컨테이너가 실행을 준비하고 있는 상태입니다.
  • Running : 컨테이너가 실행중인 상태입니다.
  • Terminated : 컨테이너가 정삭 혹은 비정상 종료된 상태입니다.

이해를 돕기 위해 Pod라는 단어는 쓰지 않았습니다. 사실 쿠버네티스에서는 Pod 내부에서 Container를 띄우게 됩니다. 관련 내용은 POD(Link)에서 조금 더 알아보도록 합시다.


Word

도커

리눅스 컨테이너를 기반으로 컨테이너 기술을 대중화 시킨 프로그램

가상머신(vm)

하이퍼바이저를 이용하여 리소스 전체를 가상화 하는 방법

컨테이너(container)

운영 체제(OS) 내에서 프로세스를 컨테이너 형태로 격리하는 방법

가상화 장점

  1. 비용 절감 : 필요한 물리적 서버의 감소로 비용절감이 된다.
  2. 유연성 : 하나의 하드웨어에서 여러 운영 체제를 실행가능하다.
  3. 민첩성 : 물리적 서버간의 OS 이동이 가능하다.
  4. 내결합성 : 물리적 서버 장애 시 다른 서버로 신속하게 인스턴스 마이그레이션이 가능하다.

하이퍼바이저(Hypervisor)

물리적 하드웨어에 설치된 소프트웨어 계층으로, 물리적 머신을 다수의 가상 머신(Virtaul Machine, VM)으로 분할할 수 있도록 해준다. 즉, 호스트 컴퓨터에서 다수의 운영 체제(operating system)를 동시에 실행하기 위한 논리적 플랫폼을 말한다. 가상머신(vm) 과 하드웨어 사이에서 IO 명령을 처리하는 인터페이스이다. 가상머신 위에 올라간 OS의 명령을 하드웨어에 맞게 해석하여 전달다고, OS에게 하드웨어의 리소스들을 분배한다.