반응형

목차

  1. 컨테이너 도입 계기
  2. 컨테이너 격리 기술의 원리
  3. 컨테이너와 가상화 머신 각각의 특징
  4. 컨테이너를 다루는 시스템

컨테이너 도입 계기

애플리케이션이 적은 수의 커다란 구성 요소로만 이뤄졌을 때에는 각 구성 요소에 전용 가상 머신을 제공하고 고유한 운영체제 인스턴스를 제공해 환경을 격리할 수 있었습니다. 하지만 이런 구성 요소가 점점 작아지고 숫자가 만하지기 시작하면서 하드웨어 리소스를 낭비하지 않으면서 비용을 줄일 수 있는 방안을 찾아야 했고, 비용을 줄이기 위해 각 구성 요소마다 가상 머신 없이 제공하기 시작했습니다.

 

이것은 리소스 낭비를 줄이는 것 뿐만 아니라 각각의 가상 머신을 개별적으로 구성하고 관리하는 시스템 관리자의 작업량을 줄이고 이에 따라 인적 자원 낭비도 막을 수 있었습니다.


컨테이너 격리 기술의 원리
  1. 리눅스 네임스페이스(namespace)
    기본적으로 각 리눅스 시스템은 초기 구동 시 하나의 네임스페이스가 있습니다. 파일 시스템, 프로세스 ID, 사용자 ID, 네트워크 인터페이스 등과 같은 모든 시스템 리소스는 하나의 네임스페이스에 속합니다. 또 네임스페이스는 기본 네임스페이스에만 국한되지 않고 추가 네임스페이스를 생성하고 리소스를 구성할 수 있습니다.

    프로세스를 실행할 때 해당 네임스페이스 중 하나에서 프로세스를 실행합니다. 프로세스는 동일한 네임스페이스 내에 있는 리소스만 볼 수 있는데, 여러 종류의 네임스페이스가 있기 때문에 프로세스는 하나의 네임스페이스에만 속하는 것이 아닌 여러 네임스페이스에 속할 수 있습니다.

    네임스페이스의 종류는 다음과 같습니다. 하지만 이뿐 아니라 다른 네임 스페이스들도 있다는 것을 명심해야 합니다.
    1. 마운트(mnt)
    2. 프로세스 ID(pid)
    3. 네트워크(net)
    4. 프로세스 간 통신(ipc)
    5. 호스트와 도메인 이름(uts)
    6. 사용자 ID(user)
    우리가 앞으로 배울 쿠버네티스에서 네임스페이스를 사용하면, 같은 이름의 Service를 다른 네임스페이스에서 사용할 수 있으므로, 개발, 스테이징, 프로덕션 등 여러 개발 환경에서 동일한 구성을 사용할 수 있습니다.

  2. 프로세스 가용 리소스 제한
    컨테이너가 사용할 수 있는 시스템 리소스의 양을 제한하는 것은 리눅스 커널 기능인 cgroups로 이루어집니다. 이를 통해 프로세스는 설정된 양 이상의 CPU, 메모리, 네트워크 대역폭 등을 사용할 수 없습니다. 이런 방식으로 프로세스는 다른 프로세스용으로 예약된 리소스를 사용할 수 없으며, 이는 각 프로세스가 별도의 시스템에서 실행될 때와 비슷합니다.

컨테이너와 가상화 머신 각각의 특징
  • 가상 머신(VM)

    1. VM은 프로세서, 메모리, 스토리지 및 네트워크 리소스를 포함한 전체 하드웨어 스택을 가상화합니다.
    2. 각 VM은 호스트 OS와 다를 수 있는 자체 전체 운영 체제(OS)를 실행합니다.
    3. VM은 서로 격리되어 있어 강력한 보안 및 장애 격리를 제공합니다.
    4. VM은 전체 OS가 필요하기 때문에 컨테이너에 비해 오버헤드가 높아 크기가 커지고 시작 시간이 느려집니다.
    5. VM은 가상 하드웨어를 관리하고 VM에 리소스를 할당하는 소프트웨어 계층인 하이퍼바이저에 의해 관리됩니다.
    6. VM은 완전한 OS 격리가 필요한 애플리케이션이나 OS 요구 사항이 다른 애플리케이션을 실행하는 데 더 적합합니다.

  • 컨테이너

    1. 컨테이너는 OS를 가상화하여 호스트와 동일한 OS 커널을 공유하지만 네임스페이스라고 하는 격리된 환경에서 실행됩니다.
    2. 컨테이너에는 전체 OS가 필요하지 않으므로 VM에 비해 크기가 작고 시작 시간이 더 빠릅니다.
    3. 컨테이너는 프로세스 수준에서 서로 격리되어 일정 수준의 보안 및 결함 격리를 제공하지만 VM만큼 강력하지는 않습니다.
    4. 컨테이너는 호스트 OS 커널을 공유하고 필요한 애플리케이션 종속성만 포함하므로 VM에 비해 오버헤드가 낮습니다.
    5. 컨테이너는 컨테이너 인스턴스 생성, 실행 및 관리를 담당하는 Docker 또는 containerd와 같은 컨테이너 런타임에 의해 관리됩니다.
    6. 컨테이너는 배포에 더 적합합니다.

이 중 큰 차이점은 애플리케이션이 CPU를 사용할 때 VM은 하이퍼바이저를 거쳐, 가상 CPU를 거쳐, 커널을 거치고, 애플리케이션으로 이동하는 단계를 거치지만, 컨테이너는 커널에서 바로 애플리케이션으로 연결됨으로 엄청난 속도, 용량에서 차이가 납니다.


컨테이너를 다루는 시스템

컨테이너 기술은 오랫동안 사용돼 왔는데, 도커 컨테이너 플랫폼의 등장으로 더 널리 알려지게 되었습니다. 도커는 컨테이너를 여러 시스템에 쉽게 이식이 가능하게 만들어준 최초의 컨테이너 시스템입니다. 단순화에는 성공했지만, 한번에 하나씩만 생성 가능한 등 몇몇 단점으로 인해 자동화와 편리성을 증가시켜 개발된 것이 쿠버네티스입니다. 이 2가지는 다음 포스팅에서 더 자세하게 다루어 보도록 하겠습니다.

 

쉽게 이야기하자면 처음 컨테이너를 쉽게 이용할 수 있도록 만들어준 시스템이 "Docker", 이 Docker를 더 편하게 다룰 수 있도록 만들어준 것이 "Kubernetes"이다. 쿠버네티스는 맨 앞 K와 맨 끝 s 사이에 8개 알파벳이 들어가 "k8s"라고도 합니다.


 

반응형