IT기술/쿠버네티스 (k8s)

RKE2 NAS 스토리지와 GPU 가속 연동 완벽 가이드: 온프레미스 AI/ML 인프라 구축

후스파 2025. 7. 12. 12:50
반응형

온프레미스 쿠버네티스 환경에서 NAS 스토리지와 GPU 가속을 RKE2에 연동하는 방법을 단계별로 알려드립니다. AI 학습부터 대용량 데이터 처리까지 모든 워크로드를 이용해 보세요.


NAS 스토리지 연동: NFS 프로비저너 설치

RKE2는 NFS를 통해 NAS 스토리지를 동적 프로비저닝할 수 있습니다.

NFS 서버 설정

# NFS 서버(Ubuntu)에서 실행
sudo apt update
sudo apt install -y nfs-kernel-server

# NFS 공유 디렉토리 생성
sudo mkdir -p /nfs_share
sudo chown nobody:nogroup /nfs_share
sudo chmod 755 /nfs_share

# NFS 내보내기 설정
sudo tee -a /etc/exports  /data/gpu-test.txt
        cat /data/gpu-test.txt
        while true; do sleep 3600; done
    resources:
      limits:
        nvidia.com/gpu: 1
        memory: "4Gi"
        cpu: "2"
      requests:
        nvidia.com/gpu: 1
        memory: "2Gi"
        cpu: "1"
    volumeMounts:
    - mountPath: /data
      name: nas-volume
    env:
    - name: NVIDIA_VISIBLE_DEVICES
      value: "all"
    - name: NVIDIA_DRIVER_CAPABILITIES
      value: "compute,utility"
  volumes:
  - name: nas-volume
    persistentVolumeClaim:
      claimName: gpu-nas-pvc
  restartPolicy: Never

AI/ML 워크로드 예시

apiVersion: apps/v1
kind: Deployment
metadata:
  name: pytorch-training
spec:
  replicas: 1
  selector:
    matchLabels:
      app: pytorch-training
  template:
    metadata:
      labels:
        app: pytorch-training
    spec:
      runtimeClassName: nvidia
      containers:
      - name: pytorch
        image: pytorch/pytorch:2.1.0-cuda12.1-cudnn8-runtime
        command: ["/bin/bash", "-c"]
        args:
          - |
            python -c "
            import torch
            print(f'CUDA available: {torch.cuda.is_available()}')
            print(f'GPU count: {torch.cuda.device_count()}')
            if torch.cuda.is_available():
                print(f'GPU name: {torch.cuda.get_device_name(0)}')
            "
            sleep 3600
        resources:
          limits:
            nvidia.com/gpu: 1
        volumeMounts:
        - name: training-data
          mountPath: /workspace/data
        - name: model-output
          mountPath: /workspace/models
      volumes:
      - name: training-data
        persistentVolumeClaim:
          claimName: gpu-nas-pvc
      - name: model-output
        persistentVolumeClaim:
          claimName: gpu-nas-pvc

문제 해결 핵심 포인트

증상 원인 해결책
PVC "Pending" 상태 NFS 경로 접근 실패 showmount -e로 연결 확인
GPU 인식 실패 드라이버 버전 불일치 nvidia-smi로 드라이버 상태 점검
컨테이너 실행 오류 runtimeClass 미설정 파드에 runtimeClassName: nvidia 추가
NFS 마운트 실패 권한 문제 /etc/exportsno_root_squash 추가
GPU 메모리 부족 리소스 제한 미설정 GPU 메모리 제한 설정

상세 트러블슈팅

# NFS 연결 문제 진단
showmount -e 192.168.1.100
sudo mount -t nfs -v 192.168.1.100:/nfs_share /mnt/test

# GPU 상태 확인
nvidia-smi
kubectl describe node | grep nvidia.com/gpu
kubectl get pods -n gpu-operator-resources

# 컨테이너 런타임 확인
sudo /var/lib/rancher/rke2/bin/crictl info | grep nvidia
sudo /var/lib/rancher/rke2/bin/ctr --namespace k8s.io container ls | grep nvidia

# 로그 확인
kubectl logs -n nfs-provisioner deployment/nfs-client-nfs-subdir-external-provisioner
kubectl logs -n gpu-operator-resources daemonset/nvidia-device-plugin-daemonset

성능 최적화

# NFS 마운트 옵션 최적화
mount -t nfs -o nfsvers=4.1,hard,intr,rsize=1048576,wsize=1048576 \
  192.168.1.100:/nfs_share /mnt/test

# GPU 메모리 사용량 모니터링
kubectl top node --sort-by=memory
watch -n 1 nvidia-smi

실제 사용 사례

데이터 과학 워크벤치

apiVersion: v1
kind: Pod
metadata:
  name: jupyter-gpu
spec:
  runtimeClassName: nvidia
  containers:
  - name: jupyter
    image: tensorflow/tensorflow:latest-gpu-jupyter
    ports:
    - containerPort: 8888
    resources:
      limits:
        nvidia.com/gpu: 1
    volumeMounts:
    - name: notebooks
      mountPath: /tf/notebooks
    - name: datasets
      mountPath: /tf/datasets
  volumes:
  - name: notebooks
    persistentVolumeClaim:
      claimName: jupyter-notebooks-pvc
  - name: datasets
    persistentVolumeClaim:
      claimName: shared-datasets-pvc

분산 학습 환경

apiVersion: kubeflow.org/v1
kind: PyTorchJob
metadata:
  name: distributed-training
spec:
  pytorchReplicaSpecs:
    Master:
      replicas: 1
      template:
        spec:
          runtimeClassName: nvidia
          containers:
          - name: pytorch
            image: pytorch/pytorch:latest
            resources:
              limits:
                nvidia.com/gpu: 1
            volumeMounts:
            - name: training-data
              mountPath: /workspace/data
          volumes:
          - name: training-data
            persistentVolumeClaim:
              claimName: training-data-pvc
    Worker:
      replicas: 3
      template:
        spec:
          runtimeClassName: nvidia
          containers:
          - name: pytorch
            image: pytorch/pytorch:latest
            resources:
              limits:
                nvidia.com/gpu: 1

마무리

RKE2와 NAS·GPU의 조합은 AI 학습부터 빅데이터 분석까지 모든 워크로드를 아우릅니다. 첫 단계는 NFS 프로비저너 설치부터 시작해보세요. GPU 가속 파드로 변환하는 데는 단 3줄의 YAML 수정만 필요합니다. 지금 바로 온프레미스 인프라의 잠재력을 최대한 끌어올려보세요.
핵심 포인트:

  • NFS 동적 프로비저닝으로 대용량 데이터 공유
  • NVIDIA Container Toolkit 통합으로 GPU 가속 지원
  • runtimeClassName: nvidia 설정으로 GPU 접근
  • PVC ReadWriteMany 모드로 다중 Pod 데이터 공유
  • Helm 차트 활용으로 간편한 설치 및 관리

온프레미스 환경에서도 클라우드 수준의 AI/ML 인프라를 구축할 수 있으며, 데이터 주권과 비용 효율성을 동시에 확보할 수 있습니다.

반응형