카테고리 없음

docker - cgroup, namespace, chroot

흰색남자 2022. 9. 8. 10:12

도커 동작 원리 : 리눅스 커널에서 제공하는 고유의 리눅스 컨테이너 기술을 이용함 // namespace, cgroups, chroot

 

LXC : 단일 컨트로로 호스트 상에서 여러개의 고립된 리눅스 시스템(컨테이너)들을 실행하기 위한 운영 시스템 레벨 가상화 방법.

 

chroot > PID=1(sytstemd)

 

chroot ( Change Root Directiory ) : 현재 실행중인 프로세스와 자녀 프로세스의 루트 디렉토리를 변경하는 작업.

변경된 루트 디렉토리에서는 그 상위에 디렉토리 (ex. 본래 루트 디렉토리)에 파일 및 명령에 접근할 수 없음.

 

Linux FUSE ( Filesystem in Userspace ) : User Level에서 쉽게 Filesystem을 제작 할 수 있도록 도와주는 Linux 기법

 

cgroup (  control groups )  :

1. 프로세스들의 자원 사용을 제한하고 격리시키는 리눅스 커널 모듈

2.하나 또는 복수의 장치를 묶어서 하나의 그룹을 만들 수 있으며 개별 그룹은 시스템에서 설정한 값만큼 하드웨어를 사용할 수 있다.

3. 시스템의 프로세스들은 장치별로 특정한 cgroup에 속하여 프로세스가 사용하는 하드웨어 자원의 총량에 제한을 받는다.

4. resource limiting : 자원을 자용 제한

  • cpu : cgroups라는 시스템이 busy 상태일 때 CPU 공유를 최소화하도록 사용량을 제한할 수 있다. 즉, CPU에 cgroup 작업 access를 제공하기 위한 스케줄러 역할을 한다.
  • hugetlb : huge TLB 사용 제한을 설정할 수 있다.
  • pid : cgroup 작업에서 생성되는 프로세스의 수를 제한할 수 있다.
  • memory : cgroup 작업에 사용되는 메모리를 제한하고 리포팅을 제공한다

https://seungyooon.tistory.com/142

 

리눅스Linux) cgroups 개념, 특징, 기능, 계층 구조, 실습 예시

Notion에서 보기 cgroups란? control groups 프로세스들의 자원 사용을 제한하고 격리시키는 리눅스 커널 모듈 하나 또는 복수의 장치를 묶어서 하나의 그룹을 만들 수 있으며 개별 그룹은 시스템에서

seungyooon.tistory.com

5. CPU 시간, 시스템 메모리, 네트워크 대역폭과 같은 자원이나 이러한 자원의 조합을 시스템에서 실행 중인 사용자 정의 작업 그룹 (프로세스) 간에 할당

 

namespace

  • Cgroup 네임스페이스(cgorup)
    •  
  • IPC 네임스페이스(ipc)
    • IPC는 프로세스간 데이터를 주고받는 경로를 의미
    • 프로세스간 통신을 격리시킵니다. semaphore, file locking, mutex 와 같은 것에 대한 접근 제어를 제공
  • 네트워크 네임스페이스(network)
    • 네트워크 환경을 분리
  • 마운트 네임스페이스(mnt) : 
    •  자신만의 파일 시스템을 유지하면서 다른 프로세스의 접근을 차단할 수 있음
  • PID 네임스페이스(pid) :
    • PID는 init 프로세스 1을 시작하며 그 외에 모든 프로세스는 항상 1보다 큰 PID를 부여받습니다. PID 네임스페이스를 분리하면 PID가 다시 1부터 시작
  • UTS 네임스페이스(user)
    •  호스트 네임과 NIS 도메인 이름을 격리하는 네임스페이스
  • 사용자 네임스페이스(uts)
    • UID와 GID를 격리하여 원래의 호스트와는 다른 유저, 그룹을 가질 수 있게 합니다. 
  • 시간 네임스페이스(time)

프로세스를 실행할 때 시스템의 리소스를 분리해서 실행할 수 있도록 도와주는 기능입니다. 한 시스템의 프로세스들은 기본적으로 시스템의 리소스들을 공유해서 실행됩니다. 이를 단일 네임스페이스라고 생각해볼 수 있습니다. 실제로 리눅스에서는 1번 프로세스(init)에 할당되어있는 네임스페이스들을 자식 프로세스들이 모두 공유해서 사용하는 구조로 이루어져있습니다.