상세 컨텐츠

본문 제목

컨테이너를 구성하는 3가지 리눅스 기술

운영 체제(OS)/리눅스(Linux)

by Pyidros 2024. 3. 7. 13:52

본문

1. 컨트롤 그룹 (Control Groups, cgroups)

컨트롤 그룹 (Control Groups, cgroups): 컨트롤 그룹은 리눅스 커널의 기능으로, 프로세스 그룹의 자원 사용량(메모리, CPU, 네트워크, 디바이스, 디스크 I/O,  Block I/O 등)을 제한하고 격리하며 관리합니다. cgroups는 시스템 자원을 세밀하게 관리하고, 한 컨테이너가 호스트의 모든 자원을 독점하는 것을 방지하여 시스템의 안정성을 유지하도록 돕습니다.

특징:

  • 이는 리소스 사용량을 제한하고, 프로세스를 격리하며, 여러 프로세스를 관리하는 Linux 커널 기능입니다.
  • 서브시스템에는 blkio, cpu, cpuacct, cpuset, devices, freezer, memory, net_cls, ns 등이 있습니다.
  • cpu:
    • 특정 cgroup에 할당된 프로세스가 사용할 수 있는 CPU 자원의 양을 제한(스케줄러를 이용해)할 수 있습니다. 예를 들어, CPU 사용을 10%로 제한하는 등의 설정이 가능합니다.
    • 이 기능을 통해 시스템의 CPU 자원을 공정하게 분배하고, 시스템 오버로드를 방지할 수 있습니다.
  • memory:
    • cgroup에 할당된 메모리 사용량을 제한합니다. 메모리 사용량을 128MB로 설정하면, 해당 그룹은 그 이상의 메모리를 사용할 수 없습니다. 만약 메모리 사용량이 한계치에 도달하면, OOM(out-of-memory) 관리자가 작동할 수 있으며, 필요하다면 프로세스를 종료시키는 등의 조치를 취할 수 있습니다.
  • freezer:
    • cgroup의 프로세스를 일시 정지하거나 다시 시작할 수 있습니다. 이를 통해 도커와 같은 컨테이너 관리 도구에서 컨테이너를 일시 중지(docker pause)하거나 상태를 관리하는 데 사용됩니다.
  • blkio:
    • cgroup에 할당된 프로세스가 디스크 I/O에 접근하는 방법을 제어하고, I/O 대역폭을 제한할 수 있습니다. 이는 I/O 자원의 공정한 사용을 보장하고, 시스템 성능에 미치는 영향을 최소화하는 데 도움이 됩니다.
  • net_cls:
    • 이 서브시스템은 Linux 트래픽 컨트롤러(TC)와 함께 작동하여 트래픽을 cgroup에 따라 분류합니다. 네트워크 트래픽의 classid를 설정하여 네트워크 패킷에 대한 처리 우선순위를 조정할 수 있습니다.
  • cpuset:
    • 프로세스가 실행될 수 있는 특정 CPU 코어나 메모리 노드를 지정합니다. 이를 통해 시스템의 특정 리소스를 고정시켜 사용할 수 있으며, 멀티 프로세싱 환경에서 성능 최적화에 도움이 됩니다.
  • devices:
    • cgroup의 프로세스가 특정 디바이스에 접근할 수 있는 권한을 제어합니다. 필요한 디바이스만 사용할 수 있도록 제한함으로써 보안을 강화하고 시스템의 안정성을 높일 수 있습니다.
  • ns (namespace):
    • 프로세스에 대한 격리를 제공하는 네임스페이스 기능으로, 시스템의 다른 부분으로부터 프로세스를 독립적으로 분리할 수 있습니다. 이는 프로세스 간의 리소스 충돌을 방지하고, 시스템의 여러 환경을 동시에 실행하는 데 사용됩니다.

이러한 cgroups와 네임스페이스 기능은 컨테이너 기술의 기반이 되며, 리눅스 시스템에서 강력한 리소스 관리와 격리를 가능하게 합니다. 컨테이너가 각기 독립적인 환경에서 실행되면서도 리소스를 효율적으로 사용할 수 있도록 지원합니다.

 

cgroups버전:

  • cgroupsv1은 개별 리소스 유형에 따라 별도의 계층적 관리를 제공합니다. 이는 각 리소스 유형에 대한 세밀한 제어를 가능하게 하지만, 관리의 복잡성을 증가시킵니다.
  • cgroupsv2는 단일 계층 구조를 가지고 있어 사용자가 시스템 리소스를 더 쉽게 관리할 수 있게 해줍니다. 또한, v2는 v1보다 향상된 기능과 효율성을 제공합니다.
 

장점:

  • 시스템 리소스를 공정하게 분배하고 오버커밋(overcommit)을 방지합니다.
  • 특정 애플리케이션의 리소스 사용을 제한하여 시스템의 안정성과 예측성을 향상시킵니다.

단점:

  • cgroups의 세부 설정은 복잡할 수 있고, 잘못 구성하면 성능에 부정적 영향을 줄 수 있습니다.

활용 사례:

 1. runc

  • runc는 Open Container Initiative (OCI) 표준에 따른 컨테이너 런타임으로, Docker 및 다른 컨테이너화 플랫폼에서 널리 사용됩니다.
  • runc는 cgroups를 사용하여 각 컨테이너 프로세스에 필요한 리소스(예: CPU, 메모리)를 할당하고 제한합니다.
  • 이를 통해 개별 컨테이너가 시스템의 리소스를 과도하게 사용하는 것을 방지하여 시스템의 안정성을 유지합니다.

2. YARN (Hadoop)

  • YARN은 Hadoop 데이터 처리를 위한 클러스터 리소스 관리 시스템입니다.
  • cgroups를 활용하여 각 작업(job)에 대한 리소스 사용량을 제한하고 관리합니다. 특히, 대규모 데이터 처리에 필요한 CPU와 메모리 자원을 효율적으로 분배합니다.
  • 작업의 성능을 보장하면서도 다른 작업과 자원을 공정하게 공유할 수 있도록 합니다.

3. Android

  • Android는 애플리케이션의 Foreground 및 Background 작업 관리를 위해 cgroups를 사용합니다.
  • 사용자 인터페이스와 상호 작용하는 애플리케이션에 대해 자원 사용에 제한을 거의 두지 않으며, 이를 통해 사용자 경험을 최적화합니다.
  • Background 에서 실행되는 애플리케이션의 경우, 네트워크 사용, 스토리지 액세스 및 CPU 사용량에 제한을 두어 배터리 수명을 연장하고 시스템 성능을 유지합니다.

차이점:

  • 네임스페이스가 격리를 제공한다면, cgroups는 이 격리된 환경에서의 리소스 사용을 관리합니다.

2. 네임스페이스 (Namespaces)

네임스페이스 (Namespaces): 네임스페이스는 리눅스 시스템 내에서 프로세스 그룹을 격리하여 각 그룹이 서로의 시스템 자원을 볼 수 없게 만드는 기술입니다. 네임스페이스는 파일 시스템, 네트워크, 사용자 ID 등 여러 시스템 자원을 격리하여 프로세스가 독립적인 환경에서 실행되는 것처럼 느낄 수 있게 합니다. 이를 통해 하나의 시스템에서 여러 개의 독립적인 컨테이너를 실행할 수 있습니다.

특징:

  • 시스템 리소스를 프로세스 그룹 단위로 격리합니다.
  • PID, 네트워크, IPC, 마운트, 호스트 이름 등 다양한 유형의 네임스페이스가 있습니다.

장점:

  • 각 컨테이너에 대해 독립적인 시스템 환경을 제공합니다.
  • 한 컨테이너의 변경이 다른 컨테이너에 영향을 주지 않습니다.

단점:

  • 근본적인 호스트 OS의 취약점에는 영향을 받을 수 있습니다.
  • 네임스페이스를 너무 많이 만들 경우 관리가 복잡해질 수 있습니다.

활용 사례:

  • Docker, Podman과 같은 컨테이너화 플랫폼에서 각 컨테이너에게 별도의 호스트 이름, 네트워크 스택을 제공합니다.

차이점:

  • cgroups가 리소스 할당과 제한에 중점을 두는 반면, 네임스페이스는 프로세스 레벨의 격리에 중점을 둡니다.

3. 유니언 파일 시스템 (Union File Systems)

유니언 파일 시스템 (Union File Systems): 유니언 파일 시스템은 여러 파일 시스템 계층을 오버레이(overlay) 방식으로 합쳐서 하나의 파일 시스템으로 표현하는 기술입니다. 이를 통해 읽기 전용의 기반 이미지를 유지하면서도, 변경 사항을 쓰기 가능한 최상위 계층에 저장할 수 있습니다. 이 방식은 컨테이너의 스토리지 효율성을 높이고, 이미지 계층을 공유하여 다양한 컨테이너 이미지 사이의 중복을 줄일 수 있습니다.

특징:

  • 여러 파일 시스템을 하나로 병합하여 단일 파일 시스템처럼 관리할 수 있게 합니다.
  • 읽기 전용과 쓰기 가능 계층을 분리하여 효율적인 파일 시스템 관리를 가능하게 합니다.

장점:

  • 컨테이너의 기본 이미지를 변경하지 않고도 수정 사항을 저장할 수 있습니다.
  • 이미지 계층을 통해 중복을 줄이고 스토리지 효율성을 향상시킵니다.

단점:

  • 유니언 파일 시스템의 성능은 사용하는 특정 구현에 따라 다를 수 있으며, 때로는 기본 파일 시스템보다 느릴 수 있습니다.

활용 사례:

  • Docker에서 컨테이너의 파일 시스템 계층을 관리하고, 공유 이미지를 통해 여러 컨테이너 간의 재사용성을 높입니다.

차이점:

  • 네임스페이스나 cgroups와는 달리, 유니언 파일 시스템은 파일 레벨에서 격리와 리소스 관리를 수행합니다.

이 세 가지 기술은 함께 사용될 때 리눅스 기반 컨테이너의 강력한 격리, 리소스 관리 및 파일 시스템 효율성을 제공합니다.

'운영 체제(OS) > 리눅스(Linux)' 카테고리의 다른 글

PID 네임스페이스  (0) 2024.03.11
Mount 네임스페이스  (0) 2024.03.11
SSH (Secure Shell)란?  (0) 2024.03.04
VirtualBox으로 리눅스 네트워크 구성  (0) 2024.02.29
OCI와CRI의 개념 그리고 차이  (4) 2024.02.27

관련글 더보기