Windows 컨테이너에 대한 리소스 컨트롤 구현
적용 대상: Windows Server 2022, Windows Server 2019
컨테이너당 및 리소스별로 구현할 수 있는 여러 리소스 컨트롤이 있습니다. 기본적으로 컨테이너 실행은 일반적인 Windows 리소스 관리의 적용을 받으며, 일반적으로 공평한 공유 기반이지만 이러한 컨트롤의 구성은 개발자 또는 관리자가 리소스 사용을 제한하거나 영향을 줄 수 있습니다. 제어할 수 있는 리소스에는 CPU/프로세서, 메모리/RAM, 디스크/스토리지 및 네트워킹/처리량이 포함됩니다.
Windows 컨테이너는 작업 개체를 활용하여 각 컨테이너와 연결된 프로세스를 그룹화하고 추적합니다. 리소스 컨트롤은 컨테이너와 연결된 부모 작업 개체에 구현됩니다.
Hyper-V 격리 리소스 컨트롤이 가상 머신과 가상 머신 내에서 실행되는 컨테이너의 작업 개체에 모두 자동으로 적용되는 경우 컨테이너에서 실행되는 프로세스가 작업 개체 컨트롤을 우회하거나 이스케이프하더라도 가상 머신이 정의된 리소스 컨트롤을 초과할 수 없도록 합니다.
리소스
각 리소스에 대해 이 섹션에서는 리소스 제어를 사용하는 방법(오케스트레이터 또는 다른 도구로 구성될 수 있음)과 해당 Windows HCS(호스트 컴퓨팅 서비스) API에 대한 예제로 Docker 명령줄 인터페이스 간의 매핑을 제공합니다. 일반적으로 Windows에서 리소스 제어를 구현하는 방법은 다음과 같습니다(이 설명은 높은 수준이며 기본 구현은 변경될 수 있음).
메모리
리소스 | 위치 |
---|---|
Docker 인터페이스 | --memory |
HCS 인터페이스 | MemoryMaximumInMB |
공유 커널 | JOB_OBJECT_LIMIT_JOB_MEMORY |
Hyper-V 격리 | 가상 머신 메모리 |
참고 항목
Windows Server 2016의 Hyper-V 격리의 경우 메모리 캡을 사용할 때 컨테이너가 처음에 메모리 캡 용량을 할당한 다음, 컨테이너 호스트로 반환하기 시작합니다. 이후 버전의 Windows Server(1709 이상)는 이 프로세스를 최적화했습니다.
CPU(수)
리소스 | 위치 |
---|---|
Docker 인터페이스 | --cpus |
HCS 인터페이스 | ProcessorCount |
공유 커널 | JOB_OBJECT_CPU_RATE_CONTROL_HARD_CAP 사용하여 시뮬레이션* |
Hyper-V 격리 | 노출된 가상 프로세서 수 |
CPU(백분율)
리소스 | 위치 |
---|---|
Docker 인터페이스 | --cpu-percent |
HCS 인터페이스 | ProcessorMaximum |
공유 커널 | JOB_OBJECT_CPU_RATE_CONTROL_HARD_CAP |
Hyper-V 격리 | 가상 프로세서에 대한 하이퍼바이저 제한 |
CPU(공유)
리소스 | 위치 |
---|---|
Docker 인터페이스 | --cpu-shares |
HCS 인터페이스 | ProcessorWeight |
공유 커널 | JOB_OBJECT_CPU_RATE_CONTROL_WEIGHT_BASED |
Hyper-V 격리 | 하이퍼바이저 가상 프로세서 가중치 |
스토리지(이미지)
리소스 | 위치 |
---|---|
Docker 인터페이스 | --io-maxbandwidth/--io-maxiops |
HCS 인터페이스 | StorageIOPSMaximum 및 StorageBandwidthMaximum |
공유 커널 | JOBOBJECT_IO_RATE_CONTROL_INFORMATION |
Hyper-V 격리 | JOBOBJECT_IO_RATE_CONTROL_INFORMATION |
스토리지(볼륨)
리소스 | 위치 |
---|---|
Docker 인터페이스 | --storage-opt size= |
HCS 인터페이스 | StorageSandboxSize |
공유 커널 | JOBOBJECT_IO_RATE_CONTROL_INFORMATION |
Hyper-V 격리 | JOBOBJECT_IO_RATE_CONTROL_INFORMATION |
추가 참고 사항 또는 세부 정보
메모리 요구 사항
Windows 컨테이너는 일반적으로 사용자 관리, 네트워킹 등과 같은 컨테이너별 기능을 제공하는 일부 시스템 프로세스를 각 컨테이너에서 실행합니다. 이러한 프로세스에 필요한 메모리의 대부분은 컨테이너 간에 공유되지만 메모리 한도는 이를 허용할 만큼 충분히 높아야 합니다. 테이블은 Hyper-V 격리와 함께 또는 사용하지 않고 각 기본 이미지 유형에 대한 시스템 요구 사항 문서에 제공됩니다.
CPU 공유(Hyper-V 격리 없음)
CPU를 사용하는 경우 기본 구현(Hyper-V 격리를 사용하지 않는 경우)은 JOBOBJECT_CPU_RATE_CONTROL_INFORMATION 구성하며, 특히 컨트롤 플래그를 JOB_OBJECT_CPU_RATE_CONTROL_WEIGHT_BASED 설정하고 적절한 가중치를 제공합니다. 작업 개체의 유효한 가중치 범위는 1 – 9이며, 기본값은 5이며, 이는 호스트 컴퓨팅 서비스 값 1 – 10000보다 낮은 충실도입니다. 예를 들어 공유 가중치가 7500이면 가중치가 7이거나 공유 가중치가 2500이면 값이 2가 됩니다.