일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 파드
- karpor
- api-key
- 도봉산글램핑
- kub-ai
- 피카푸캠핑도봉산
- k8sgpt
- kubernetes
- 입문용칼
- kube-ai
- 쿠버네티스
- virt-manager
- GPU
- AI
- POD
- 입문나이프
- KVM
- 쿠버네티스보안
- 캠핑
- k8s
- macos 터널링
- 피카푸클램핑도봉산
- 티스토리챌린지
- 글램핑
- 쿠버네티스기초
- 오블완
- mac터널링
- IT
- kubernetes-ai
- 피카푸글램핑
- Today
- Total
마구잡
Kubernetes Nvidia Gpu Component의 상관관계 본문
Kubernetes와 Nvidia GPU Component의 상관관계
IT 업계 더 나아가 전반적인 모든 기업들이 AI로 뜨거운 지금, 당연하게도 kubernetes또한 GPU 자원 사용을 지원하고 kube-flow, air-flow, Ollama등 많은 오픈소스들을 사용 할 수 있게 되었다.
이 중 시장을 독점하고 있는 Nvidia의 GPU 자원을 사용하기 위한 Component들이 어느 순서로 어떤 동작을 어떻게 진행하는지 간한하게 알아본다.
( 공식 사이트에서 발췌한 내용을 기반으로 작성하였으나, 명확하지 않은 부분은 경험을 토대로 작성하였습니다.
이는 명확한 정보가 아닐 수 있음을 알려드립니다. )
공식 사이트
( 광고 클릭은 큰 힘이 됩니다! )
Architecture Overview — NVIDIA Container Toolkit 1.16.2 documentation
where version is used to represent the NVIDIA Container Toolkit version. Note In the past the nvidia-docker2 and nvidia-container-runtime packages were also discussed as part of the NVIDIA container stack. These packages should be considered deprecated as
docs.nvidia.com
영역과 컴포넌트
Kubernets 클러스터(이하 클러스터)에서 GPU를 사용하기 위해선 각 Compnent(이하 컴포넌트)들이 두 가지 영역 위에서 동작한다.
이번 글에서는 호스트 영역에서의 요소들에 대해 다루도록 한다.
추가적으로 클러스터 영역에서는 GFD 등 정보가 빈약한게 너무 많아 대부분을 직접 GPU를 운영하여 더듬거리며 파악했다.
호스트 영역에서의 컴포넌트
호스트 영역에서는 다양한 컴포넌트들이 있다.
당연히 실장된 GPU가 있을것이며 그 위로 OS와 장치를 연결시켜주는 Driver및 개발을 위한 CUDA가 있을것이다.
다만 클러스터에서 GPU 자원을 사용하기 위해선 기존에 사용하던 kubelet, containerd, runc만으로 한계가 있다.아래 기존 container 생성 방식과 GPU 컴포넌트를 거쳐 진행되는 두 이미지를 보자
위 이미지 처럼 기존 로직 사이에 GPU 컴포넌트가 추가 된것을 확인 할 수 있다.
위 이미지가 시사하는 바는 Containerd만으로는 RunC에게 GPU 자원을 전달할 수 없음을 뜻 하고 RunC 또한
마지막 nvidia-container-runtime-hook을 통해 GPU관련 라이브러리, 장치 정보등을 생성된 컨테이너로 넘긴다.
사실 기존 로직또한 위 이미지보다 훨씬 복잡하다.
ETCD와 API서버가 통신해서 일련의 과정을 거치고 난 뒤 Kubelet을 통해 POD(container)가 생성되는 방식이나 이 글에서 다루려는 내용과 약간 벗어나기에 간소화 시켰다.
컴포넌트의 역할
아래 이미지는 호출 순서에 따라 어떠한 동작이 실행되는지 정리한다.
그림이 잘 와닿지 않는거 같아 표로 정리하자면 아래와 같다.
공식 Docs 또한 설명이 그리 친절하진 않다.
아마 이를 알기 위해선 코드 단 혹은 LOG 분석이 필요해 보인다.
컴포넌트 | 수행 |
Contianerd | 컨테이너의 생명주기를 관리하는 고수준 런타임 GPU 자원을 필요로 하는 컨테이너의 경우 RunC를 바로 호출하지 않고 OCI 표준을 준수하는 nvidia-container-runtime을 호출한다. |
nvidia-container-runtime | RunC 스펙을 받아 nvidia-container-runtime-hook을 prestart hook으로 주입한 후, 수정된 RunC 스펙을 호스트에 구성되어있는 RunC에 전달한다. ( 말이 어려운데 GPU 관련 설정을 추가해 RunC 스펙을 전달하는 듯 보임 ) |
RunC | 기본적인 저수준 런타임으로 OCI 표준을 준수하는 런타임과 통신한다. 컨테이너 스펙을 전달받아 컨테이너를 생성, 시작한다. 이때 컨테이너가 시작하기 전 상위 런타임에서 전달 받은 prestart hook에 의해 nvidia-container-runtime-hook을 호출한다. |
nvidia-container-runtime-hook | RunC의 prestart hook 인터페이스를 구현하는 실행 파일이 포함되어 있다. 이 스크립트는 컨테이너가 생성된 후, 시작되기 전에 RunC에 의해 호출되며, 컨테이너와 연관된 config.json 파일에 접근할 수 있다. 스크립트는 config.json의 정보를 사용하여, 적절한 플래그와 함께 nvidia-container-cli를 호출한다 (라이브러리 호출). 가장 중요한 요소는(플래그) 어떤 특정 GPU 장치가 컨테이너에 주입될지를 결정하는 역할을 한다. |
nvidia-container-library and CLI | 이 구성 요소들은 NVIDIA GPU를 활용하여 GNU/Linux 컨테이너를 자동으로 설정하는 라이브러리와 간단한 CLI 유틸리티를 제공한다. 커널의 기본 기능을 사용하며, 컨테이너 런타임과는 독립적으로 설계되었다. libnvidia-container는 다양한 런타임에서 NVIDIA GPU 지원을 컨테이너에 주입할 수 있도록 하는 API와 랩퍼 CLI(nvidia-container-cli라고 불리는)를 제공한다. |
패키지 명 | 포함 요소 |
libnvidia-container1 nvidia-container-cli |
nvidia-container-cli |
nvidia-container-toolkit | nvidia-container-runtime-hook |
nvidia-container-toolkit-base | nvidia-container-runtime |
nvidia-container-toolkit | nvidia-container-runtime-hook nvidia-container-toolkit CLI |
중요 - 치명적 보안 취약점
NVIDIA Container Toolkit 보안 취약점 (2024년 9월)
https://nvidia.custhelp.com/app/answers/detail/a_id/5582
NVIDIA Support
Details This section provides a summary of potential vulnerabilities that this security update addresses and their impact. Descriptions use CWE™, and base scores and vectors use CVSS v3.1 standards. CVE ID Description Vector Base Score Severity CWE Impac
nvidia.custhelp.com
NVIDIA는 NVIDIA Container Toolkit 및 NVIDIA GPU Operator의 보안 업데이트를 발표했으며, 아래의 두 가지 주요 취약점을 수정했다.
CVE ID | 설명 | 점수 | 심각도 | CWE | 영향 |
CVE-2024-0132 | TOCTOU(Time-of-check Time-of-Use) 취약점으로, 기본 설정에서 특수하게 제작된 컨테이너 이미지가 호스트 파일 시스템에 접근할 수 있음. 성공적인 공격은 코드 실행, 서비스 거부, 권한 상승, 정보 유출, 데이터 변조를 초래할 수 있음. | 9 | Critical | CWE-367 | 코드 실행, 서비스 거부, 권한 상승, 정보 유출, 데이터 변조 |
CVE-2024-0133 | 기본 동작 모드에서 특정 컨테이너 이미지가 호스트 파일 시스템에 빈 파일을 생성할 수 있는 취약점. 성공적인 공격은 데이터 변조로 이어질 수 있음. | 4.1 | Medium | CWE-367 | 데이터 변조 |
취약점에 대한 영향
• CVE-2024-0132: 이 취약점은 시간 검사와 시간 사용의 불일치(TOCTOU) 문제로, 특정 조건에서 공격자가 호스트 파일 시스템에 접근할 수 있습니다. 성공적으로 악용될 경우 시스템에 심각한 보안 위협을 가할 수 있으며, 코드 실행, 정보 유출, 권한 상승, 데이터 변조 등의 심각한 영향을 미칠 수 있음.
• CVE-2024-0133: 이 취약점은 특수 제작된 컨테이너 이미지가 호스트 파일 시스템에 빈 파일을 생성할 수 있게 하는 문제입니다. 이로 인해 데이터 변조가 발생할 가능성이 있음.
영향 받는 제품 및 업데이트된 버전
CVE ID 영향 받는 제품 플랫폼/OS 영향 받는 버전 업데이트된 버전
CVE‑2024-0132CVE-2024-0133 NVIDIA Container Toolkit Linux v1.16.1 이하 v1.16.2
CVE‑2024-0132CVE-2024-0133 NVIDIA GPU Operator Linux 24.6.1 이하 24.6.2
NVIDIA의 권장 사항
• 시스템 보호를 위해 NVIDIA Container Toolkit 및 NVIDIA GPU Operator의 보안 업데이트를 설치해야 한다.
• 해당 보안 업데이트는 NVIDIA Container Toolkit 및 NVIDIA GPU Operator 문서의 설치 섹션에 설명된 대로 설치할 수 있다.
이 정보는 NVIDIA 보안 공지를 기반으로 하며, 시스템 관리자는 이 취약점이 자신들의 환경에 미치는 영향을 평가한 후, 즉시 패치를
적용하는 것이 권장됨.
잘못된 정보나, 문의등은 댓글로 메일과 함께 적어주시면 감사하겠습니다.
'Kubernetes' 카테고리의 다른 글
Kubernetes OpenEBS LVM 사용하기 (0) | 2024.11.08 |
---|---|
kubernetes kubelet 인증서 갱신 시점 (2) | 2024.10.29 |
하버 프라이빗 레포 이미지 가져오기 - Harbor Private Repository Image Pull (0) | 2024.10.22 |
Kubernetes Cilium Cluster Mesh + Hubble UI 실습 (1) | 2024.10.08 |
Nvidia gpu-operator를 통한 다중 GPU MIG 설정 (2) | 2024.06.03 |