Cgroups
Jump to navigation
Jump to search
cgroups
Overview
cgroups(Control Groups)는 Linux 커널의 리소스 제한/계산 기능. 컨테이너( Docker, Kubernetes)의 핵심 기술.
Summary
- * 무엇인가? Linux 커널 리소스 제어. CPU/메모리/디스크/I/O 제한
- * 왜 필요한가? 컨테이너 리소스 격리. Docker/K8s 기반
- * 언제 사용하는가? 컨테이너 런타임, 리소스 제한
---
Purpose
이 문서가 존재하는 이유
- Goal: cgroups의 개념, 사용법, 설정 가이드 제공
- Scope: 기본 개념, 설치/설정, 사용 예제, 모범 사례
- Non-goals: 고급 커스터마이징, 내부 소스 코드 분석
---
Key Concepts
---
Architecture
cgroups v2는 단일 계층 구조. 모든 리소스 컨트롤러를 하나의 hierarchy에서 관리. systemd가 cgroups v2 통합. Docker/Kubernetes가 cgroups v2 사용.
---
Workflow
1. 1. cgroup v2 활성화 (Ubuntu 22.04+ 기본)
2. 2. cgroup 디렉토리 생성
3. 3. 리소스 제한 설정 (cpu.max, memory.max)
4. 4. 프로세스 추가
5. 5. 모니터링
---
Configuration
# cgroup v2 상태 확인
cat /sys/fs/cgroup/cgroup.controllers
# cgroup 생성
sudo mkdir /sys/fs/cgroup/mycontainer
# 리소스 제한
echo 50000 > /sys/fs/cgroup/mycontainer/cpu.max # 50% CPU
echo 1G > /sys/fs/cgroup/mycontainer/memory.max
# 프로세스 추가
echo $$ > /sys/fs/cgroup/mycontainer/cgroup.procs
# 모니터링
cat /sys/fs/cgroup/mycontainer/cpu.stat
cat /sys/fs/cgroup/mycontainer/memory.stat
---
Best Practices
- cgroup v2 사용 (v1 비권장)
- systemd unit에서 cgroup 설정
- Docker/K8s가 cgroup 자동 관리
- 메모리 제한 시 OOM 설정 확인
---
Limitations
- cgroup v1은 subsystem 충돌 가능
- 디버깅 어려움
- 커널 버전 의존성
---
References
---