반응형
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 |
---|