전용 영구 디스크를 임시 볼륨으로 사용


이 페이지에서는 Compute Engine 영구 디스크와 같은 외부 스토리지 하드웨어를 Google Kubernetes Engine(GKE) 워크로드의 임시 볼륨으로 사용하는 방법을 보여줍니다. Kubernetes 볼륨StorageClass를 이미 잘 알고 있어야 합니다.

Kubernetes에서 임시 스토리지를 사용해야 하는 경우

임시 스토리지는 데이터 처리 파이프라인, 머신러닝 작업, 일괄 처리, 로컬 캐싱, 분석 등 애플리케이션 수명 주기 동안 워크로드에 데이터만 필요한 경우에 유용합니다. 기본적으로 GKE 노드 부팅 디스크의 일부를 포드에서 임시 스토리지로 사용할 수 있습니다. 이 방식에는 종종 신중한 공간 계획이 필요합니다.

Kubernetes 일반 임시 볼륨을 사용하면 PersistentVolumeClaims를 사용하여 포드에 임시 스토리지를 명시적으로 요청할 수 있습니다. GKE는 Compute Engine 영구 디스크를 동적으로 프로비저닝하고 디스크를 노드에 연결합니다. 이러한 유형의 임시 스토리지는 다음과 같은 상황에 유용합니다.

  • 워크로드는 고성능 요구사항이 있으므로 스토리지 하드웨어를 제어해야 합니다.
  • 단기 컨테이너별 임시 스토리지가 필요합니다.
  • emptyDir을 사용하여 임시 스토리지를 프로비저닝하는 것을 피하고자 합니다. emptyDir 볼륨은 여러 컨테이너가 임시 스토리지의 데이터를 공유하려는 경우에 여전히 유용합니다.
  • GKE에서 기본 제공되는 기본값보다 더 많은 임시 스토리지 용량이 필요합니다.
  • Standard 모드 GKE 클러스터에 대해 노드 부팅 디스크 크기와 유형을 미리 계획하는 것을 피하고자 합니다.

GKE의 임시 스토리지 유형

일반적으로 부팅 디스크 스토리지 용량 또는 전용 영구 디스크를 포드 및 컨테이너의 임시 스토리지로 사용할 수 있습니다. 다음 표에서 차이점을 확인하세요.

스토리지 유형 사용 방법 설명
부팅 디스크 - 영구 디스크

포드 사양에서 emptyDir을 사용하여 볼륨을 마운트하고 필요한 용량을 요청합니다.

자세한 내용은 볼륨 만들기를 참조하세요.

요청된 임시 스토리지는 노드 부팅 디스크의 예약된 부분에서 가져옵니다. 이는 Autopilot 및 Standard 클러스터 모두에서 기본값입니다.

포드에 소규모 임시 스토리지 요청이 있거나 포드의 여러 컨테이너 간에 임시 데이터를 공유하려고 할 때 사용합니다.

Autopilot

  • 요청은 10MiB~10GiB 사이여야 합니다.
  • 스토리지 하드웨어 유형은 사전 구성됩니다.

스탠더드

크기 제한은 없지만 노드 부팅 디스크 크기와 스토리지 하드웨어 유형을 신중하게 계획해야 합니다.

GKE가 노드 부팅 디스크에서 임시 스토리지 예약을 계산하는 방법에 대한 자세한 내용은 로컬 임시 스토리지 예약을 참조하세요.

로컬 SSD 디스크
  1. 연결된 로컬 SSD 디스크와 호환되는 머신 시리즈로 노드 풀을 만듭니다.
  2. 필요한 용량으로 emptyDir을 사용하여 볼륨을 마운트합니다.
  3. nodeSelector를 사용하여 연결된 로컬 SSD 디스크가 있는 노드에 포드를 배치합니다.

자세한 내용은 로컬 SSD로 임시 스토리지 프로비저닝을 참조하세요.

로컬 SSD 디스크는 Standard 모드 GKE 클러스터와 A100(80GB) GPU를 실행하는 Autopilot 노드에서 지원되는 고정된 375GB 증분을 사용합니다.

처리량이 높은 임시 스토리지가 필요한 경우 사용합니다.

자세한 내용은 GKE용 로컬 SSD 정보를 참조하세요.

전용 영구 디스크
  1. 필요한 경우 하드웨어용 Kubernetes StorageClass를 만듭니다.
  2. 포드 사양에서 ephemeral 볼륨 유형을 사용하여 볼륨을 마운트합니다.

이 문서에서는 이 임시 스토리지 유형을 요청하는 방법을 설명합니다.

Google Cloud는 요청된 외부 하드웨어를 동적으로 프로비저닝하고 노드에 연결하며 요청된 볼륨을 포드에 마운트합니다.

포드에 큰 임시 스토리지 요청이 있거나 기본 영구 디스크 유형을 제어하려는 경우에 사용합니다. 이러한 볼륨의 속성은 다음과 같습니다.

  • Autopilot 모드 및 Standard 모드에서 최대 64TiB
  • 지원되는 SSD 지원 볼륨과 같은 특수 하드웨어
  • 네트워크 연결 스토리지
  • emptyDir을 사용하여 노드 부팅 디스크를 공유하는 대신 Kubernetes 볼륨을 사용하여 스토리지를 가져옵니다.

이 임시 볼륨 유형에 대한 자세한 내용은 일반 임시 볼륨을 참조하세요.

가격 책정

이 가이드의 설명대로 일반 임시 볼륨을 통해 프로비저닝하는 스토리지는 Compute Engine 디스크 가격 책정에 따라 요금이 청구됩니다.

시작하기 전에

시작하기 전에 다음 태스크를 수행했는지 확인합니다.

  • Google Kubernetes Engine API를 사용 설정합니다.
  • Google Kubernetes Engine API 사용 설정
  • 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화합니다. 이전에 gcloud CLI를 설치한 경우 gcloud components update를 실행하여 최신 버전을 가져옵니다.
  • 버전 1.23 이상을 실행하는 GKE Autopilot 또는 Standard 클러스터가 있는지 유의하세요.
  • Google Cloud 프로젝트에 스토리지 하드웨어에 대한 할당량이 충분한지 확인합니다. 할당량을 관리하려면 프로젝트 할당량 보기를 참조하세요.

StorageClass 만들기

커스텀 Kubernetes StorageClass를 만들면 가격 및 성능 요구사항에 따라 프로비저닝할 스토리지 유형을 지정할 수 있습니다. 이 단계는 선택사항이지만 권장됩니다. pd-balanced 영구 디스크 유형이 있는 GKE 기본 StorageClass를 사용하려면 이 단계를 건너뜁니다.

  1. 다음 매니페스트를 ephemeral-pd-class.yaml로 저장합니다.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: ephemeral-ssd
    provisioner: pd.csi.storage.gke.io
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    parameters:
      type: STORAGE_TYPE
    

    STORAGE_TYPE을 원하는 영구 디스크 유형 이름(예: pd-ssd)으로 바꿉니다. 지원되는 유형 목록은 Compute Engine 문서에서 영구 디스크 유형을 참조하세요.

  2. StorageClass를 만듭니다.

    kubectl create -f ephemeral-pd-class.yaml
    

포드에서 임시 스토리지 용량 요청

외부 하드웨어를 프로비저닝, 연결, 임시 스토리지로 사용하려면 포드 매니페스트에 해당 볼륨을 추가하고 컨테이너 사양에 볼륨 마운트를 추가합니다.

  1. 다음 매니페스트를 ephemeral-ssd-deployment.yaml로 저장합니다.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ephemeral-deployment
    spec:
      replicas: 1
      selector:
        matchLabels:
          storage: ephemeral
      template:
        metadata:
          labels:
            storage: ephemeral
        spec:
          containers:
          - name: ephemeral-container
            image: nginx
            resources:
              requests:
                cpu: 500m
                memory: 2Gi
                ephemeral-storage: 2Gi
            volumeMounts:
            - mountPath: "/short-term"
              name: ephemeral-volume
          volumes:
          - name: ephemeral-volume
            ephemeral:
              volumeClaimTemplate:
                metadata:
                  labels:
                    type: ephemeral
                spec:
                  accessModes: ["ReadWriteOnce"]
                  storageClassName: "ephemeral-ssd"
                  resources:
                    requests:
                      storage: 1Ti
    

    이 매니페스트는 다음 속성을 사용해서 ephemeral-volume이라는 새 PersistentVolume을 요청하는 새 Kubernetes PersistentVolumeClaim을 만듭니다.

    • spec.volumes.ephemeral: ephemeral 볼륨 유형입니다.
    • .spec.accessModes: 볼륨 액세스 모드로, 포드의 읽기/쓰기 액세스 권한과 노드 간의 볼륨 공유를 결정합니다. 이 예시에서는 노드에서 하나 이상의 포드가 액세스할 수 있도록 PersistentVolume을 단일 노드에 마운트하는 ReadWriteOnce를 사용합니다. 자세한 내용은 액세스 모드를 참조하세요.
    • .spec.storageClassName: 원하는 경우 생성된 StorageClass의 이름입니다. 이 필드를 생략하면 GKE가 기본 StorageClass를 사용하고 pd-balanced 영구 디스크를 프로비저닝합니다.
    • .spec.resources.requests.storage: 원하는 스토리지 용량입니다.
  2. 배포를 만듭니다.

    kubectl create -f ephemeral-ssd-deployment.yaml
    

GKE는 PersistentVolumeClaim의 요구사항을 충족하는 Compute Engine 디스크를 프로비저닝하고 디스크를 노드에 연결합니다. GKE는 볼륨을 포드에 마운트하고 요청된 용량을 컨테이너에 제공합니다.

GKE가 임시 볼륨을 마운트했는지 확인

  1. 포드에서 셸 세션을 만듭니다.

    kubectl exec -it deploy/ephemeral-deployment -- bash
    
  2. 마운트된 볼륨을 확인합니다.

    df -h
    

    출력은 다음과 비슷합니다.

    Filesystem                Size      Used Available Use% Mounted on
    ...
    /dev/sdb               1006.9G     28.0K   1006.8G   0% /short-term
    /dev/sda1                94.3G      3.6G     90.6G   4% /etc/hosts
    /dev/sda1                94.3G      3.6G     90.6G   4% /dev/termination-log
    /dev/sda1                94.3G      3.6G     90.6G   4% /etc/hostname
    /dev/sda1                94.3G      3.6G     90.6G   4% /etc/resolv.conf
    ...
    
  3. 셸 세션을 종료합니다.

    exit
    

다음 단계