Compute Engine 영구 디스크 CSI 드라이버 사용

Google Kubernetes Engine(GKE)은 클러스터에 Compute Engine 영구 디스크 CSI(Container Storage Interface) 드라이버를 자동으로 배포하고 관리하는 간단한 방법을 제공합니다. Compute Engine 영구 디스크 CSI 드라이버는 Autopilot 클러스터에서 항상 사용 설정되며 사용 중지하거나 수정할 수 없습니다. Standard 클러스터에서는 Compute Engine 영구 디스크 CSI 드라이버를 사용 설정해야 합니다.

Compute Engine 영구 디스크 CSI 드라이버 버전은 GKE 버전 번호와 연결되어 있습니다. 일반적으로 Compute Engine 영구 디스크 CSI 드라이버 버전은 GKE 버전이 출시될 때 사용 가능한 최신 드라이버입니다. 클러스터가 최신 GKE 패치로 업그레이드되면 드라이버가 자동으로 업데이트됩니다.

이점

Compute Engine 영구 디스크 CSI 드라이버를 사용하면 다음과 같은 이점이 있습니다.

  • 영구 디스크 드라이버를 수동으로 설정할 필요 없이 자동으로 배포하고 관리할 수 있습니다.
  • 고객 관리 암호화 키(CMEK)를 사용할 수 있습니다. 이러한 키는 데이터 암호화용으로 사용되는 데이터 암호화 키를 암호화하는 데 사용됩니다. GKE의 CMEK에 대한 자세한 내용은 CMEK 사용을 참조하세요.
  • 볼륨 스냅샷을 Compute Engine 영구 디스크 CSI 드라이버와 함께 사용할 수 있습니다. 볼륨 스냅샷을 사용하면 특정 시점의 볼륨 사본을 만들 수 있습니다. 이 사본을 사용하여 볼륨을 이전 상태로 되돌리거나 새 볼륨을 프로비저닝할 수 있습니다.
  • GKE 버전 1.22 이상을 실행하는 클러스터에서 Compute Engine 영구 디스크 CSI 드라이버와 함께 볼륨 클론을 사용할 수 있습니다. 볼륨 클론을 사용하면 특정 시점에 소스 볼륨의 모든 데이터로 프로비저닝한 볼륨의 복제품을 만들 수 있습니다.
  • 버그 수정 및 기능 업데이트는 마이너 Kubernetes 출시와 독립적으로 롤아웃됩니다. 이 출시 일정은 일반적으로 출시 주기가 빨라집니다.

시작하기 전에

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

  • Google Kubernetes Engine API를 사용 설정합니다.
  • Google Kubernetes Engine API 사용 설정
  • 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화합니다. 이전에 gcloud CLI를 설치한 경우 gcloud components update 명령어를 실행하여 최신 버전을 가져옵니다. 이전 gcloud CLI 버전에서는 이 문서의 명령어를 실행하지 못할 수 있습니다.

Compute Engine 영구 디스크 CSI 드라이버 사용 설정

기존 표준 클러스터에서 Compute Engine 영구 디스크 CSI 드라이버를 사용 설정하려면 Google Cloud CLI 또는 Google Cloud 콘솔을 사용합니다.

기존 클러스터에서 드라이버를 사용 설정하려면 다음 단계를 완료합니다.

gcloud

gcloud container clusters update CLUSTER-NAME \
   --update-addons=GcePersistentDiskCsiDriver=ENABLED

CLUSTER-NAME을 기존 클러스터의 이름으로 바꿉니다.

콘솔

  1. Google Cloud 콘솔에서 Google Kubernetes Engine 페이지로 이동합니다.

    Google Kubernetes Engine으로 이동

  2. 클러스터 목록에서 수정하려는 클러스터 이름을 클릭합니다.

  3. 기능 아래의 Compute Engine 영구 디스크 CSI 드라이버 필드 옆에서 Compute Engine CSI 드라이버 수정을 클릭합니다.

  4. Compute Engine 영구 디스크 CSI 드라이버 사용 설정 체크박스를 선택합니다.

  5. 변경사항 저장을 클릭합니다.

Compute Engine 영구 디스크 CSI 드라이버를 사용 설정한 후에는 드라이버 및 프로비저닝 도구 이름 pd.csi.storage.gke.io를 사용하여 Kubernetes 볼륨에서 드라이버를 사용할 수 있습니다.

Compute Engine Persistent Disk CSI 드라이버 사용 중지

Google Cloud CLI 또는 Google Cloud 콘솔을 사용하여 표준 클러스터의 Compute Engine 영구 디스크 CSI 드라이버를 중지할 수 있습니다.

드라이버를 중지하면 드라이버에서 소유한 PersistentVolume을 현재 사용 중인 포드가 종료되지 않습니다. 이러한 PersistentVolumes를 사용하려고 하는 새 포드도 시작을 실패합니다.

기존 Standard 클러스터에서 드라이버를 중지하려면 다음 단계를 완료합니다.

gcloud

gcloud container clusters update CLUSTER-NAME \
    --update-addons=GcePersistentDiskCsiDriver=DISABLED

CLUSTER-NAME을 기존 클러스터의 이름으로 바꿉니다.

콘솔

  1. Google Cloud 콘솔에서 Google Kubernetes Engine 페이지로 이동합니다.

    Google Kubernetes Engine으로 이동

  2. 클러스터 목록에서 수정하려는 클러스터 이름을 클릭합니다.

  3. 기능 아래의 Compute Engine 영구 디스크 CSI 드라이버 필드 옆에서 Compute Engine CSI 드라이버 수정을 클릭합니다.

  4. Compute Engine 영구 디스크 CSI 드라이버 사용 설정 체크박스를 선택 해제합니다.

  5. 변경사항 저장을 클릭합니다.

Linux 클러스터용 Compute Engine 영구 디스크 CSI 드라이버 사용

다음 섹션에서는 GKE에서 CSI 드라이버가 지원하는 Kubernetes 볼륨을 사용하는 일반적인 프로세스를 설명합니다. 이 섹션은 Linux를 사용하는 클러스터에 적용됩니다.

StorageClass 만들기

Compute Engine 영구 디스크 CSI 드라이버를 사용 설정하면 GKE는 다음 StorageClass를 자동으로 설치합니다.

  • standard-rwo, 균형 있는 영구 디스크 사용
  • premium-rwo, SSD 영구 디스크 사용

Autopilot 클러스터의 경우 기본 StorageClass는 Compute Engine 영구 디스크 CSI 드라이버를 사용하는 standard-rwo입니다. Standard 클러스터의 경우 기본 StorageClass는 Kubernetes 트리 내 gcePersistentDisk 볼륨 플러그인을 사용합니다.

다음 명령어를 실행하여 설치된 StorageClass 이름을 찾을 수 있습니다.

kubectl get sc

또한 프로비저닝 도구 필드에 pd.csi.storage.gke.io를 추가하여 Compute Engine 영구 디스크 CSI 드라이버를 사용하는 다른 StorageClass를 설치할 수 있습니다.

예를 들어 pd-example-class.yaml이라는 다음 파일을 사용하여 StorageClass를 만들 수 있습니다.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: pd-example
provisioner: pd.csi.storage.gke.io
# Recommended setting. Delays the binding and provisioning of a PersistentVolume until a Pod that uses the
# PersistentVolumeClaim is created and scheduled on a node.
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
parameters:
  type: pd-balanced

type 매개변수에서 다음 영구 디스크 유형을 지정할 수 있습니다.

  • pd-balanced
  • pd-ssd
  • pd-standard
  • pd-extreme(GKE 버전 1.26 이상에서 지원됨)

pd-standard 또는 pd-extreme를 사용하는 경우 지원되지 않는 머신 유형에서 추가 사용 제한을 확인하세요.

pd-extreme 옵션을 사용하는 경우 매니페스트에 provisioned-iops-on-create 필드도 추가해야 합니다. 이 필드는 영구 디스크를 만들 때 지정한 프로비저닝된 IOPS 값과 동일한 값으로 설정해야 합니다.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: pd-extreme-example
provisioner: pd.csi.storage.gke.io
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
parameters:
  type: pd-extreme
  provisioned-iops-on-create:'10000'

pd-example-class.yaml 파일을 만든 후 다음 명령어를 실행하세요.

kubectl create -f pd-example-class.yaml

PersistentVolumeClaim 만들기

Compute Engine 영구 디스크 CSI 드라이버의 StorageClass를 참조하는 PersistentVolumeClaim을 만들 수 있습니다.

pvc-example.yaml라는 다음 파일은 사전 설치된 스토리지 클래스 standard-rwo를 사용합니다.

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: podpvc
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: standard-rwo
  resources:
    requests:
      storage: 6Gi

PersistentVolumeClaim 매니페스트를 만든 후 다음 명령어를 실행하세요.

kubectl create -f pvc-example.yaml

사전 설치된 StorageClass에서 (standard-rwo), volumeBindingModeWaitForFirstConsumer로 설정됩니다. volumeBindingModeWaitForFirstConsumer로 설정되면 PersistentVolumeClaim을 참조하는 포드가 예약될 때까지 PersistentVolume이 프로비저닝되지 않습니다. StorageClass의 volumeBindingModeImmediate로 설정되거나 생략되는 경우, PersistentVolumeClaim이 만들어진 후에 영구 디스크 지원 PersistentVolume이 프로비저닝됩니다.

볼륨을 사용하는 포드 만들기

PersistentVolume과 함께 포드를 사용하는 경우 Deployment 또는 StatefulSet 같은 워크로드 컨트롤러를 사용하는 것이 좋습니다. 일반적으로 독립형 포드는 사용하지 않지만 다음 예시에서는 편의상 사용합니다.

다음 예시에서는 이전 섹션에서 만든 볼륨이 사용됩니다.

apiVersion: v1
kind: Pod
metadata:
  name: web-server
spec:
  containers:
   - name: web-server
     image: nginx
     volumeMounts:
       # The path in the container where the volume will be mounted.
       - mountPath: /var/lib/www/html
         # The name of the volume that is being defined in the "volumes" section.
         name: mypvc
  volumes:
   - name: mypvc
     persistentVolumeClaim:
       # References the PersistentVolumeClaim created earlier.
       claimName: podpvc
       readOnly: false

Windows 클러스터용 Compute Engine 영구 디스크 CSI 드라이버 사용

다음 섹션에서는 GKE에서 CSI 드라이버가 지원하는 Kubernetes 볼륨을 사용하는 일반적인 프로세스를 설명합니다. 이 섹션은 Windows를 사용하는 클러스터에 적용됩니다.

다음 사항을 확인하세요.

  • 클러스터 버전은 1.19.7-gke.2000, 1.20.2-gke.2000 이상입니다.
  • 노드 버전은 1.18.12-gke.1203, 1.19.6-gke.800 이상입니다.

StorageClass 만들기

Windows용 StorageClass 만들기는 Linux와 매우 비슷합니다. 기본적으로 설치되는 StorageClass는 파일 시스템 유형이 다르기 때문에 Windows에 대해 작동하지 않습니다. Windows용 Compute Engine 영구 디스크 CSI 드라이버는 파일 시스템 유형으로 NTFS가 필요합니다.

예를 들어 pd- windows-class.yaml이라는 다음 파일을 사용하여 StorageClass를 만들 수 있습니다. 매개변수 목록에 csi.storage.k8s.io/fstype: NTFS를 추가해야 합니다.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: pd-sc-windows
provisioner: pd.csi.storage.gke.io
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
parameters:
  type: pd-balanced
  csi.storage.k8s.io/fstype: NTFS

PersistentVolumeClaim 만들기

Windows용 StorageClass를 만든 후 이제 StorageClass를 참조하는 PersistentVolumeClaim을 만들 수 있습니다.

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: podpvc-windows
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: pd-sc-windows
  resources:
    requests:
      storage: 6Gi

볼륨을 사용하는 포드 만들기

다음 예시에서는 이전 태스크에서 만든 볼륨이 사용됩니다.

apiVersion: v1
kind: Pod
metadata:
  name: web-server
spec:
  # Node selector to ensure the Pod runs on a Windows node.
  nodeSelector:
    kubernetes.io/os: windows
  containers:
    - name: iis-server
      # The container image to use.
      image: mcr.microsoft.com/windows/servercore/iis
      ports:
      - containerPort: 80
      volumeMounts:
      # The path in the container where the volume will be mounted.
      - mountPath: /var/lib/www/html
        name: mypvc
  volumes:
    - name: mypvc
      persistentVolumeClaim:
        # References the PersistentVolumeClaim created earlier.
        claimName: podpvc-windows
        readOnly: false

기본이 아닌 파일 시스템 유형에서 Compute Engine 영구 디스크 CSI 드라이버 사용

GKE의 Compute Engine 영구 디스크에 대한 기본 파일 시스템 유형은 ext4입니다. 또한 노드 이미지에서 지원하는 한 xfs 스토리지 유형을 사용할 수도 있습니다. 노드 이미지별로 지원되는 드라이버 목록은 스토리지 드라이버 지원을 참조하세요.

다음 예시에서는 Compute Engine 영구 디스크 CSI 드라이버에서 ext4 대신 xfs를 기본 파일 시스템 유형으로 사용하는 방법을 보여줍니다.

StorageClass 만들기

  1. 다음 매니페스트를 pd-xfs-class.yaml이라는 YAML 파일로 저장합니다.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: xfs-class
    provisioner: pd.csi.storage.gke.io
    parameters:
      # The type of Compute Engine persistent disk to provision.
      type: pd-balanced
      # Specify "xfs" as the filesystem type.
      csi.storage.k8s.io/fstype: xfs
    volumeBindingMode: WaitForFirstConsumer
    
  2. 매니페스트를 적용합니다.

    kubectl apply -f pd-xfs-class.yaml
    

PersistentVolumeClaim 만들기

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

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: xfs-pvc
    spec:
      # References the StorageClass created earlier.
      storageClassName: xfs-class
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          # The amount of storage requested.
          storage: 10Gi
    
  2. 매니페스트를 적용합니다.

    kubectl apply -f pd-xfs-pvc.yaml
    

볼륨을 사용하는 포드 만들기

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

    apiVersion: v1
    kind: Pod
    metadata:
      name: pd-xfs-pod
    spec:
      containers:
      - name: cloud-sdk
        image: google/cloud-sdk:slim
        # Keep the container running for 1 hour.
        args: ["sleep","3600"]
        volumeMounts:
        # The path in the container where the volume will be mounted.
        - mountPath: /xfs
          name: xfs-volume
      # Define the volumes available to the containers in the Pod.
      volumes:
      - name: xfs-volume
        persistentVolumeClaim:
          # References the PersistentVolumeClaim created earlier.
          claimName: xfs-pvc
    
  2. 매니페스트를 적용합니다.

    kubectl apply -f pd-xfs-pod.yaml
    

볼륨이 올바르게 마운트되었는지 확인

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

    kubectl exec -it pd-xfs-pod -- /bin/bash
    
  2. xfs 파티션을 찾습니다.

    df -aTh --type=xfs
    

    출력은 다음과 비슷하게 표시됩니다.

    Filesystem     Type  Size  Used Avail Use% Mounted on
    /dev/sdb       xfs    30G   63M   30G   1% /xfs
    

Compute Engine 영구 디스크 CSI 드라이버의 로그 보기

Cloud Logging을 사용하여 Compute Engine Persistent Disk CSI 드라이버와 관련된 이벤트를 볼 수 있습니다. 로그는 문제를 해결하는 데 도움이 됩니다.

Cloud Logging에 대한 자세한 내용은 GKE 로그 보기를 참조하세요.

Compute Engine 영구 디스크 CSI 드라이버의 로그를 보려면 다음 단계를 완료합니다.

  1. Google Cloud 콘솔에서 Cloud Logging 페이지로 이동합니다.

    Cloud Logging으로 이동

  2. 네임스페이스에서 실행되는 CSI 드라이버와 관련된 항목만 표시되도록 로그 항목을 필터링하려면 다음 Cloud Logging 쿼리를 실행하세요.

     resource.type="k8s_container"
     resource.labels.project_id="PROJECT_ID"
     resource.labels.location="LOCATION"
     resource.labels.cluster_name="CLUSTER_NAME"
     resource.labels.namespace_name="kube-system"
     resource.labels.container_name="gce-pd-driver"
    

    다음을 바꿉니다.

    • PROJECT_ID: 프로젝트의 이름
    • LOCATION: 클러스터의 Compute Engine 리전 또는 영역입니다.
    • CLUSTER_NAME: 클러스터 이름입니다.

알려진 문제

지원되지 않는 머신 유형

C3 시리즈 머신 계열을 사용하는 경우 pd-standard 영구 디스크 유형은 지원되지 않습니다.

머신에서 포드를 실행하려고 하는데 포드에서 지원되지 않는 영구 디스크 유형을 사용하는 경우 포드에 다음과 같은 경고 메시지가 표시됩니다.

AttachVolume.Attach failed for volume "pvc-d7397693-5097-4a70-9df0-b10204611053" : rpc error: code = Internal desc = unknown Attach error: failed when waiting for zonal op: operation operation-1681408439910-5f93b68c8803d-6606e4ed-b96be2e7 failed (UNSUPPORTED_OPERATION): [pd-standard] features are not compatible for creating instance.

클러스터에 머신 계열이 다른 노드 풀이 여러 개 있는 경우 노드 taint노드 어피니티를 사용하여 워크로드를 예약할 수 있는 위치를 제한할 수 있습니다. 예를 들어 이 접근 방식을 사용하면 pd-standard를 사용하는 워크로드가 지원되지 않는 머신 계열에서 실행되는 것을 제한할 수 있습니다.

pd-extreme 영구 디스크 유형을 사용하는 경우 디스크가 적절한 머신 셰이프가 있는 VM 인스턴스에 연결되어 있는지 확인해야 합니다. 자세한 내용은 머신 유형 지원을 참고하세요.

다음 단계