컨테이너 격리를 가능하게 하는 메커니즘에는 두 가지가 있다. 첫번째 메커니즘은 각 프로세스가 파일, 프로세스, 네트워크 인터페이스, 호스트 이름 등 시스템에 독립 뷰를 제공하는 리눅스 네임스페이스다. 두번째 메커니즘은 프로세스가 소비할 수 있는 리소스의 양을 제한할 수 있는 리눅스 컨트롤 그룹이다.
리눅스 네임스페이스
기본적으로 리눅스 시스템은 초기 구동 시 하나의 단일 네임스페이스를 갖는다. 파일 시스템, 프로세스ID, 사용자ID, 네트워크 인터페이스 등과 같은 모든 시스템 자원은 단일 네임스페이스에 속한다. 그러나 네임스페이스를 추가로 만들고 리소스를 구성할 수 있다. 프로세스를 실행하면 프로세스는 네임스페이스 중 하나에서 실행된다. 프로세스는 동일한 네임스페이스 안에 있는 리소스만 볼 수 있다. 여러 종류의 네임스페이스가 존재하므로 프로세스는 하나의 네임스페이스에만 속하지 않고 각 종류의 네임스페이스에 속한다.
네임스페이스의 종류 : 마운트(mnt), 프로세스ID(pid), 네트워크(net), 프로세스 간 통신(ipc), UTS, 사용자ID(user)
각 네임스페이스는 특정 자원 그룹을 분리하는 데 사용된다. 예를 들어, UTS 네임스페이스는 네임스페이스 내에서 실행 중인 프로세스가 보게 될 어떤 호스트의 이름과 도메인 이름을 결정한다. 두 개의 UTS 네임스페이스를 한 쌍의 프로세스에 각각 할당해 프로세스가 서로 다른 로컬 호스트 이름을 보게 할 수도 있다. 즉, 두 프로세스를 마치 두 개의 시스템에서 실행 중인 것처럼 보이게 할 수 있다.
이와 마찬가지로 프로세스가 속한 네트워크 네임스페이스는 프로세스 내에서 실행되는 어플리케이션이 보게 될 네트워크 인터페이스를 결정한다. 각 네트워크 인터페이스는 정확히 하나의 네임스페이스에 속하지만, 하나의 네임스페이스에서 다른 네임스페이스로 이동할 수 있다. 각 컨테이너는 고유한 네트워크 네임스페이스를 사용하므로 각 컨테이너는 자신만을 위한 네트워크 인터페이스 세트를 볼 수 있다.
프로세스의 가용 리소스 제한
컨테이너 격리의 절반은 컨테이너가 소비할 수 있는 시스템 리소스의 양을 제한하는 것이다. 이것은 프로세스의 리소스 사용을 제한하는 리눅스 커널 기능인 cgroups로 수행된다. 프로세스는 설정 값 이상의 CPU, 메모리, 네트워크 대역폭 등을 사용할 수 없다. 이렇게 하면 프로세스가 다른 프로세스에 예약된 리소스를 사용할 수 없으므로 각 프로세스가 별도의 시스템에서 실행될 떄와 비슷하다.
'12. 쿠버네티스란' 카테고리의 다른 글
쿠버네티스 클러스터 아키텍처 (0) | 2020.05.01 |
---|---|
도커 컨테이너 플랫폼 (0) | 2020.05.01 |
컨테이너의 이해 (0) | 2020.04.30 |
지속적배포(CD)로 이동: DevOps와 NoOps (0) | 2020.04.30 |
어플리케이션에 일관된 환경 제공 (0) | 2020.04.30 |