목요일 환영
오늘의 주제인 도커 씨그룹에 대해 잔잔한 BGM과 함께 시작해보겠습니다!
이전에 Docker에서
주인공 소개
- 샤오 리 - 회사의 기술 이사, 젊고 재정적으로 자유로우며, 샤오미 SU7을 운전합니다.
cgroups
cgroups는 프로세스 그룹의 리소스 사용을 제한하고, 설명하고, 격리하는 Linux 커널 기능입니다.
Google 엔지니어들은 2006년에 "프로세스 컨테이너"라는 이름으로 이 기능을 개발하기 시작했으며, 2007년 말에는 Linux 커널의 맥락에서 "컨테이너"라는 용어의 여러 의미에 대한 혼란을 피하기 위해 용어를 "제어 그룹"으로 변경했습니다. 2007년 말에는 Linux 커널의 맥락에서 "컨테이너"라는 용어의 여러 의미에 대한 혼란을 피하기 위해 용어가 "제어 그룹"으로 변경되었고, 2008년 1월에 출시된 커널 버전 2.6에서 제어 그룹 기능이 기본 Linux 커널로 병합되었습니다.
이후 개발자들은 2014년 커프, 방화벽, 통합 계층 지원 등 많은 새로운 기능과 컨트롤러를 추가했으며, 인터페이스와 내부 기능을 대폭 변경하여 cgroup v2를 Linux 커널 4.5에 병합했습니다.
쉽게 설명하자면, cgroups는 집을 짓는 것처럼 감독과 같은 역할을 합니다. 침실 3개를 짓고자 할 때, 한 침실이 다른 침실의 면적을 차지하지 않도록 감독하는 감독관이 얼마나 많은 평방 피트를 지을지 감독합니다. 즉, C그룹은 컨테이너 내의 애플리케이션이 시스템 리소스를 고갈시키지 않고 컨테이너가 질서 있고 균형 잡힌 방식으로 시스템 리소스를 공유하도록 보장합니다.
cgroups
리소스 제약
- 그룹은 파일 시스템 캐시, I/O 대역폭 제한, CPU 할당량 제한, CPU 설정 제한 및 최대 열린 파일 수를 포함하여 구성된 메모리 제한을 초과하지 않도록 설정할 수 있습니다.
우선 순위
- 일부 그룹은 CPU 사용률 또는 디스크 I/O 처리량 점유율이 더 높을 수 있습니다.
회계사
- 그룹의 리소스 사용량 측정(예: 청구 목적)
격리
- 프로세스 그룹, 해당 체크포인트 및 재시작 고정하기
cgroups Core
하위 시스템은 리소스 제약 조건을 구현하는 cgroups의 기초이며, 하위 시스템은 리소스 스케줄링 컨트롤러의 클래스를 나타냅니다.
마운트 -t cgroup을 사용하여 현재 Linux에 어떤 하위 시스템이 있는지 확인할 수 있습니다.
cgroups
Cpu
먼저 CPU 하위 시스템 아래에 cgroup을 생성한 다음 이 cgroup 아래의 프로세스를 0.1 CPU 코어로 제한합니다.
cpu.cfs_quota_us에 코어 수를 쓰면 코어 1개가 완료됩니다.
그런 다음 새 프로세스인 데드 루프를 생성하여 cgroup에 추가하고 최대 0.1코어까지만 사용할 수 있는지 확인합니다.
다음으로 TOP을 확인하면 CPU가 데드 루프에서 최대 10%까지만 올라갈 수 있음을 알 수 있습니다.
Memtester 도구
CPU는 데드 루프에서 사용할 수 있으므로 메모리 제한을 구현하려면 멤테스터 도구가 필요합니다.
멤테스터는 컴퓨터 시스템에서 메모리의 안정성과 신뢰성을 테스트하는 도구입니다. 주요 목적은 메모리 부하를 시뮬레이션하고 메모리 사용량이 많을 때 컴퓨터에서 메모리 누수나 하드웨어 오류와 같은 문제가 발생하는지 확인하는 것입니다.
공식 문서: github.com/mem...
Memory
먼저 메모리 하위 시스템 아래에 cgroup을 생성한 다음 이 cgroup 아래의 프로세스를 50M 바이트 단위로 제한합니다.
그런 다음 새 프로세스를 생성하고 cgroup에 추가하여 50M까지 갈 수 있는지 확인하면 55M의 메모리 요청이 실패하는 것을 확인할 수 있습니다.
신청 금액이 4천만 원이라면 어떻게 되나요? 물론 성공했다고 볼 수 있습니다.
결론
Docker는 격리 및 제한을 달성하기 위해 네임스페이스와 c그룹에 의존하는데, 매우 간단하지 않나요? 그렇다면 Bash로 Docker를 구현할 수 있을까요? 한번 해보세요. 비용이 들지 않습니다.
행운을 빕니다.





