7장. 컨테이너 작업
7.1. 컨테이너 이해
OpenShift Container Platform 애플리케이션의 기본 단위는 컨테이너라고 합니다. Linux 컨테이너 기술은 실행 중인 프로세스를 격리하여 지정된 리소스와만 상호 작용하도록 제한하기 위한 간단한 메커니즘입니다.
많은 애플리케이션 인스턴스는 서로의 프로세스, 파일, 네트워크 등을 보지 않으며 단일 호스트의 컨테이너에서 실행될 수 있습니다. 컨테이너를 임의의 워크로드에 사용할 수는 있지만 일반적으로 각 컨테이너는 웹 서버나 데이터베이스 같은 단일 서비스(흔히 “마이크로 서비스”라고 함)를 제공합니다.
Linux 커널은 수년간 컨테이너 기술을 위한 기능을 통합해 왔습니다. OpenShift Container Platform 및 Kubernetes는 다중 호스트 설치에서 컨테이너를 오케스트레이션하는 기능을 추가합니다.
7.1.1. 컨테이너 및 RHEL 커널 메모리 정보
RHEL(Red Hat Enterprise Linux) 동작으로 인해 CPU 사용량이 많은 노드의 컨테이너에서 예상보다 많은 메모리를 사용하는 것처럼 보일 수 있습니다. 메모리 사용량 증가는 RHEL 커널의 kmem_cache
로 인한 것일 수 있습니다. RHEL 커널은 각 cgroup에 kmem_cache
를 생성합니다. 성능 향상을 위해 kmem_cache
에는 cpu_cache
와 모든 NUMA 노드에 대한 노드 캐시가 포함됩니다. 이러한 캐시는 모두 커널 메모리를 사용합니다.
이러한 캐시에 저장된 메모리 양은 시스템에서 사용하는 CPU 수에 비례합니다. 결과적으로 CPU 수가 많을수록 이러한 캐시에 더 많은 양의 커널 메모리가 저장됩니다. 이러한 캐시의 커널 메모리 양이 늘어나면 OpenShift Container Platform 컨테이너가 구성된 메모리 제한을 초과하여 컨테이너가 종료될 수 있습니다.
커널 메모리 문제로 인한 컨테이너 손실을 방지하려면 컨테이너에서 메모리를 충분히 요청해야 합니다. 다음 공식을 사용하여 kmem_cache
에서 사용하는 메모리 양을 추정할 수 있습니다. 여기서 nproc
는 nproc
명령에서 보고할 수 있는 처리 단위 수입니다. 컨테이너 요청의 하한은 이 값에 컨테이너 메모리 요구 사항을 더한 값이어야 합니다.
$(nproc) X 1/2 MiB
7.1.2. 컨테이너 엔진 및 컨테이너 런타임 정보
컨테이너 엔진은 명령줄 옵션 및 이미지 가져오기를 포함하여 사용자 요청을 처리하는 소프트웨어입니다. 컨테이너 엔진은 하위 수준 컨테이너 런타임 이라고도 하는 컨테이너 런타임 을 사용하여 컨테이너를 배포 및 운영하는 데 필요한 구성 요소를 실행하고 관리합니다. 컨테이너 엔진 또는 컨테이너 런타임과 상호 작용할 필요가 없습니다.
OpenShift Container Platform 문서에서는 컨테이너 런타임 이라는 용어를 사용하여 하위 수준 컨테이너 런타임을 나타냅니다. 기타 문서는 컨테이너 엔진을 컨테이너 런타임으로 참조할 수 있습니다.
OpenShift Container Platform은 CRI-O를 컨테이너 엔진으로 사용하고 C 또는 crun을 컨테이너 런타임으로 사용합니다. 기본 컨테이너 런타임은 runC입니다. 두 컨테이너 런타임 모두 OCI(Open Container Initiative) 런타임 사양을 준수합니다.
CRI-O는 Kubernetes 네이티브 컨테이너 엔진 구현으로 운영 체제와 긴밀하게 통합되어 효율적이고 최적화된 Kubernetes 환경을 제공합니다. CRI-O 컨테이너 엔진은 각 OpenShift Container Platform 클러스터 노드에서 systemd 서비스로 실행됩니다.
Docker에서 개발하여 Open Container Project에서 유지 관리하는 runc는 Go에서 작성된 경량의 이식 가능한 컨테이너 런타임입니다. Red Hat에서 개발한 crun은 C. OpenShift Container Platform 4.13에서 완전히 작성된 빠르고 낮은 메모리 컨테이너 런타임입니다.
Crun은 다음을 포함하여 runC보다 몇 가지 개선 사항이 있습니다.
- 작은 바이너리
- 더 빠른 처리
- 더 낮은 메모리 풋프린트
runc는 crun에 비해 다음과 같은 이점이 있습니다.
- 가장 널리 사용되는 OCI 컨테이너 런타임.
- 프로덕션에 더 오래 있습니다.
- CRI-O의 기본 컨테이너 런타임.
필요에 따라 두 컨테이너 런타임 간에 이동할 수 있습니다.
사용할 컨테이너 런타임 설정에 대한 자세한 내용은 CRI-O 매개변수를 편집하기 위해 ContainerRuntimeConfig
CR 생성 을 참조하십시오.