본문 바로가기
Linux/Container

Container) 컨테이너의 격리 기술

by LILO 2021. 11. 14.
반응형

INTRO

 

 

Container) 컨테이너와 배포 방식의 진화

INTRO 최근 몇년간 도커, 쿠버네티스라는 용어가 자주 귀에 들리는데요. 사실 용어의 말이 어려워서 그렇지 궁극적인 목표는 귀찮음을 덜어낸다에서 시작됩니다. 어떠한 용도로 서버를 사용하고

lilo.tistory.com

앞에 글에서 컨테이너가 사용자에게 독립된 공간을 제공한다고 하였는데 이러한 격리 기술은 레거시 기술 기반으로 된 것인가를 시작으로 의문을 가지게 될 것입니다.

 

아래에 소개될 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