반응형
INTRO
앞에 글에서 컨테이너가 사용자에게 독립된 공간을 제공한다고 하였는데 이러한 격리 기술은 레거시 기술 기반으로 된 것인가를 시작으로 의문을 가지게 될 것입니다.
아래에 소개될 LXC(리눅스 컨테이너)의 격리 기술에 기반된 기술이 오늘날에 사용된 Docker, Podman 등을 통해 올라오는 컨테이너의 레거시 기술입니다.
격리 기술 - Cgroups
Control group의 약어로 프로세스의 리소스 사용량을 격리하고 제어하는 리눅스 커널의 기능입니다.
대표적인 리소스는 아래와 같습니다.
- Memory
- CPU
- I/O
- Network
- Device (/dev)
조금 더 자세하게 확인해보겠습니다.
아래는 리눅스 내에서 LXC나 Docker 등으로 컨테이너를 생성할 때 리소스 사용량을 격리 및 제어하는 기능에 해당되는 cgroup의 서브시스템입니다.
서브시스템 | 설명 |
cpu | 시스템이 busy 상태일때 CPU 공유 최소화(사용량 제한), CPU에 cgroup 작업 엑세스를 제공하기 위한 CFS(완벽한 공정 스케줄러)를 제공함 |
cpuacct | 프로세스 그룹별 CPU 자원 사용에 대한 분석 통계를 생성하고 제공 |
cpuset | 개별 CPU 및 메모리 노드를 Control group에 바인딩하기 위해 사용 |
devices | Device에 대한 접근을 허용 or 제한함, Whitelist와 Blacklist로 나뉨 |
freezer | cgroup의 작업을 일시적으로 정지하거나 다시시작(restore)할 수 있음 |
blkio | 특정 block device에 대한 접근을 제한 하거나 제어하기 위한 서브시스템 block device에 대한 IO 접근 제한을 설정 가능 |
hugetlb | HugeTLB에 대한 제한 설정 가능(Page Size 관련) |
memory | cgroup 작업에 사용되는 메모리를 제한하고 리포팅을 제공 |
net_cls | cgroup 작업에서 발생하는 패킷 식별 태그를 지정 가능 (방화벽 규칙으로도 사용가능) |
net_prio | 네트워크 트래픽의 우선순위를 선정 가능 |
perf_event | 성능 모니터링 관련 |
pids | cgroup 작업에서 생성되는 프로세스의 수 제한 가능 |
systemd | cgroup 작업의 시스템 init 프로세스를 systemd로 바인딩하기 위한 기능 |
격리 기술 - Namespace
리눅스에서 VM과 같이 각 Guest OS별로 독립적인 공간을 제공하고 서로가 충돌하지 않게 해주는 역할을 합니다.
네임스페이스 | 설명 |
mount | 독립적으로 파일시스템을 Mount, Unmount 가능 |
PID | 독립적인 프로세스 공간을 할당 |
Network | Namespace 간 Network 충돌 방지 |
IPC(System V IPC, POSIX) |
프로세스간 통신(IPC) 오브젝트를 Namespace별로 독립적으로 소유 가능 |
UTS | Namespace별로 Hostname, 도메인 네임을 독립적으로 소유 가능 |
User | UID, GID Namespace별로 독립적으로 소유 가능 |
반응형
'Linux > Container' 카테고리의 다른 글
Container) 컨테이너와 배포 방식의 진화 (0) | 2021.11.11 |
---|