cgroup과 네임 스페이스의 차이점


85

나는 최근에 docker를 배우기 시작했고 대부분의 무거운 작업은 네임 스페이스와 cgroup을 사용하는 리눅스 커널에 의해 수행되는 것 같습니다.

내가 헷갈리는 몇 가지 사항은 다음과 같습니다.

  1. 네임 스페이스와 cgroup의 차이점은 무엇입니까? 그들이 다루는 다른 사용 사례는 무엇입니까?

  2. 인기를 얻기 위해 이것 위에도 커가 구현 된 것은 무엇입니까?

  3. 이러한 기능의 내부 및 구현 방법을 알고 싶습니다.


답변:


108

이 두 개념에 대한 적절한 링크는 PR 14307 에서 수정되었습니다 .

내부적으로 Docker는 다음 구성 요소를 기반으로합니다.

Linux 커널 의 cgroupnamespaces기능

와:

  • cgroup : 제어 그룹은 작업 세트와 미래의 모든 자식을 특수 동작을 가진 계층 그룹으로 집계 / 분할하는 메커니즘을 제공합니다.
  • namespace : 전역 리소스의 자체 격리 된 인스턴스가있는 네임 스페이스 내의 프로세스에 표시되도록하는 추상화에서 전역 시스템 리소스를 래핑합니다.

요컨대 :

  • Cgroups = 사용할 수있는 양을 제한합니다.
  • 네임 스페이스 = 볼 수있는 항목 제한 (따라서 사용)

Jérôme Petazzoni의 " Anatomy of a Container : Namespaces, cgroups & Some Filesystem Magic " 에서 자세한 내용을 참조하십시오 .

Cgroup에는 리소스 측정 및 제한이 포함됩니다.

  • 기억
  • CPU
  • 블록 I / O
  • 회로망

네임 스페이스는 프로세스에 자체 시스템보기를 제공합니다.

여러 네임 스페이스 :


감사. 되어 chroot일부 공간을 기반으로? chroot일부 네임 스페이스로 대체 할 수 있습니까 ?
Tim

1
아니요, chroot는 네임 스페이스를 기반으로하지 않습니다 : itnext.io/… 참조 . 하지만 3 년 이상이 지난 후에도 새로운 Docker (19.03, 아직 베타 버전)는 루트없이 실행할 수 있습니다. github.com/moby/moby/blob/… . 그리고 호스트 네임 스페이스에 자원을 노출 할 수 있습니다 : github.com/moby/moby/pull/38913
VonC

chroot일부 네임 스페이스로 대체 할 수 있습니까 ?
Tim

1
@Tim 기본적으로는 아닙니다. 어쩌면 pivot_root? ( unix.stackexchange.com/a/456777/7490 )도 참조 github.com/vincentbernat/jchroot
VonC

1
twitter.com/b0rk/status/1225445956734390273 컨테이너 일러스트 레이 션
VonC


2

Cgroups (control groups)는 자원 관리를합니다.
컨테이너에 제공 할 호스트 머신 리소스의 양을 결정합니다.

예 :-다음과 같은 서비스를 만들기 위해 docker-compose yaml 파일에 리소스를 정의합니다.

자원:
  제한:
    cpus : "0.1"(100 밀리 커)
    메모리 : 50M

여기에서이 예에서는 cgroup에게 이러한 리소스를 특정 컨테이너에 할당하도록 명시 적으로 요청합니다.


네임 스페이스 : 프로세스 격리, 컨테이너의 완전한 격리, 별도의 파일 시스템을 제공합니다.


네임 스페이스에는 6 가지 유형이 있습니다.
1. mount ns-파일 시스템 용.
2. UTS (Unique time sharing) ns- 실행중인 컨테이너의 서로 다른 호스트 이름을 확인합니다.
3. IPC ns-프로세스 간 통신
4. 네트워크 ns- 다른 컨테이너에 대한 서로 다른 IP 할당을
처리합니다. 5. PID ns-프로세스 ID 격리
6. 사용자 ns- 다른 사용자 이름 (uid)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.