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를 실행하여 최신 버전을 가져옵니다.

요구사항

Compute Engine 영구 디스크 CSI 드라이버를 사용하려면 클러스터에서 다음 버전을 사용해야 합니다.

  • Linux 클러스터: GKE 버전 1.14 이상
  • Windows 클러스터: GKE 버전 1.18 이상

버전 1.22 이상에서는 CSI 마이그레이션이 사용 설정됩니다. gce-pd 제공업체를 사용하는 기존 볼륨은 대신 CSI 드라이버를 통해 통신하도록 마이그레이션됩니다. StorageClass를 변경할 필요가 없습니다. gce-pd 제공업체는 CMEK 또는 볼륨 스냅샷과 같은 기능을 계속 지원하지 않습니다. 이러한 기능을 사용 설정하려면 StorageClass에서 pd.csi.storage.gke.io 제공업체를 사용해야 합니다.

GKE용 워크로드 아이덴티티 제휴와 함께 Compute Engine 영구 디스크 CSI 드라이버를 사용하려면 Standard 클러스터에서 다음 버전을 사용해야 합니다.

  • Linux 클러스터: GKE 버전 1.16 이상
  • Windows 클러스터: GKE 버전 1.20.8-gke.900 이상

새 클러스터에서 Compute Engine 영구 디스크 CSI 드라이버 사용 설정

Compute Engine 영구 디스크 CSI 드라이버가 자동으로 사용 설정되지 않는 버전으로 Standard 클러스터를 만들려면 Google Cloud CLI 또는 Google Cloud 콘솔을 사용하면 됩니다.

클러스터를 만들 때 드라이버를 사용 설정하려면 다음 단계를 완료합니다.

gcloud

gcloud container clusters create CLUSTER-NAME \
    --addons=GcePersistentDiskCsiDriver \
    --cluster-version=VERSION

다음을 바꿉니다.

  • CLUSTER-NAME: 클러스터 이름
  • VERSION: GKE 버전 번호입니다. 이 기능을 사용하려면 1.14 이상 버전을 선택해야 합니다.

플래그 전체 목록은 gcloud container clusters create 문서를 참조하세요.

콘솔

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

    Google Kubernetes Engine으로 이동

  2. 만들기를 클릭합니다.

  3. 표준 섹션에서 구성을 클릭합니다.

  4. 원하는 대로 클러스터를 구성합니다.

  5. 탐색창의 클러스터에서 기능을 클릭합니다.

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

  7. 만들기를 클릭합니다.

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

기존 클러스터에서 Compute Engine 영구 디스크 CSI 드라이버 사용 설정

기존 Standard 클러스터에서 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 드라이버 사용 중지

Google Cloud CLI 또는 Google Cloud 콘솔을 사용하여 Standard 클러스터의 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는 다음 StorageClasses를 자동으로 설치합니다.

  • 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
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:
       - mountPath: /var/lib/www/html
         name: mypvc
  volumes:
   - name: mypvc
     persistentVolumeClaim:
       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:
  nodeSelector:
    kubernetes.io/os: windows
  containers:
    - name: iis-server
      image: mcr.microsoft.com/windows/servercore/iis
      ports:
      - containerPort: 80
      volumeMounts:
      - mountPath: /var/lib/www/html
        name: mypvc
  volumes:
    - name: mypvc
      persistentVolumeClaim:
        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:
      type: pd-balanced
      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:
      storageClassName: xfs-class
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          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
        args: ["sleep","3600"]
        volumeMounts:
        - mountPath: /xfs
          name: xfs-volume
      volumes:
      - name: xfs-volume
        persistentVolumeClaim:
          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. 다음 쿼리를 실행합니다.

     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 인스턴스에 연결되었는지 확인해야 합니다. 자세한 내용은 머신 유형 지원을 참고하세요.

다음 단계