13.4. 마운트 네임스페이스 캡슐화를 통한 CPU 사용량 최적화
마운트 네임스페이스 캡슐화를 사용하여 kubelet 및 CRI-O 프로세스에 대한 개인 네임스페이스를 제공하면 OpenShift Container Platform 클러스터에서 CPU 사용량을 최적화할 수 있습니다. 이렇게 하면 기능상의 차이 없이 systemd에서 사용하는 클러스터 CPU 리소스가 줄어듭니다.
마운트 네임스페이스 캡슐화는 Technology Preview 기능에 불과합니다. 기술 미리 보기 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
13.4.1. 마운트 네임스페이스 캡슐화 링크 복사링크가 클립보드에 복사되었습니다!
호스트 운영 체제가 마운트 지점을 지속적으로 스캔하지 못하도록 캡슐화 프로세스를 검토합니다. 이 메커니즘은 Kubernetes 마운트 네임스페이스를 대체 위치로 이동하여 다른 네임스페이스의 프로세스가 격리된 상태로 남아 서로의 파일을 볼 수 없도록 합니다.
호스트 운영 체제는 systemd를 사용하여 모든 마운트 네임스페이스를 지속적으로 스캔합니다. 여기에는 표준 Linux 마운트와 Kubernetes가 운영하는 데 사용하는 수많은 마운트가 모두 포함됩니다. kubelet과 CRI-O의 현재 구현은 모두 모든 컨테이너 런타임과 kubelet 마운트 지점에 대해 최상위 네임스페이스를 사용합니다. 그러나 이러한 컨테이너별 마운트 지점을 개인 네임스페이스에 캡슐화하면 기능상의 차이 없이 systemd 오버헤드가 줄어듭니다. CRI-O와 kubelet 모두에 별도의 마운트 네임스페이스를 사용하면 systemd나 다른 호스트 운영 체제와의 상호 작용에서 컨테이너별 마운트를 캡슐화할 수 있습니다.
주요 CPU 최적화를 잠재적으로 달성할 수 있는 이 기능은 이제 모든 OpenShift Container Platform 관리자가 사용할 수 있습니다. 캡슐화는 권한이 없는 사용자가 검사할 수 없는 안전한 위치에 Kubernetes 관련 마운트 지점을 저장하여 보안을 강화할 수도 있습니다.
다음 다이어그램은 캡슐화 전과 후의 Kubernetes 설치를 보여줍니다. 두 시나리오 모두 마운트 전파 설정이 양방향, 호스트-컨테이너, 없음인 예시 컨테이너를 보여줍니다.
다이어그램에서는 단일 마운트 네임스페이스를 공유하는 systemd, 호스트 운영 체제 프로세스, kubelet 및 컨테이너 런타임을 보여줍니다.
- systemd, 호스트 운영 체제 프로세스, kubelet 및 컨테이너 런타임은 각각 모든 마운트 지점에 대한 액세스 권한과 가시성을 갖습니다.
-
양방향 마운트 전파로 구성된 컨테이너 1은 systemd 및 호스트 마운트, kubelet 및 CRI-O 마운트에 액세스할 수 있습니다.
/run/a와 같이 컨테이너 1에서 시작된 마운트는 systemd, 호스트 운영 체제 프로세스, kubelet, 컨테이너 런타임 및 호스트-컨테이너 또는 양방향 마운트 전파가 구성된 다른 컨테이너(컨테이너 2의 경우)에서 볼 수 있습니다. -
호스트-컨테이너 마운트 전파로 구성된 컨테이너 2는 systemd 및 호스트 마운트, kubelet 및 CRI-O 마운트에 액세스할 수 있습니다.
/run/b와 같이 컨테이너 2에서 시작된 마운트는 다른 컨텍스트에서는 볼 수 없습니다. -
마운트 전파가 구성되지 않은 컨테이너 3에는 외부 마운트 지점이 표시되지 않습니다.
/run/c와 같이 컨테이너 3에서 시작된 마운트는 다른 컨텍스트에서는 볼 수 없습니다.
다음 다이어그램은 캡슐화 후의 시스템 상태를 보여줍니다.
- 주요 systemd 프로세스는 더 이상 Kubernetes 관련 마운트 지점의 불필요한 스캔에 전념하지 않습니다. systemd 관련 및 호스트 마운트 지점만 모니터링합니다.
- 호스트 운영 체제 프로세스는 systemd 및 호스트 마운트 지점에만 액세스할 수 있습니다.
- CRI-O와 kubelet에 별도의 마운트 네임스페이스를 사용하면 모든 컨테이너별 마운트가 systemd나 다른 호스트 운영 체제와의 상호 작용에서 완전히 분리됩니다.
-
컨테이너 1의 동작은 변경되지 않았지만,
/run/a와 같이 컨테이너가 생성하는 마운트는 더 이상 systemd나 호스트 운영 체제 프로세스에 표시되지 않습니다. 호스트-컨테이너 또는 양방향 마운트 전파가 구성된 kubelet, CRI-O 및 기타 컨테이너(컨테이너 2와 같음)에서는 여전히 볼 수 있습니다. - 컨테이너 2와 컨테이너 3의 동작은 변경되지 않습니다.