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


Google Kubernetes Engine(GKE)은 클러스터에 Compute Engine Persistent Disk Container Storage Interface(CSI) 드라이버를 자동으로 배포하고 관리하는 간단한 방법을 제공합니다.

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

Compute Engine Persistent Disk CSI 드라이버 사용 시 이점

Kubernetes 트리 내 gcePersistentDisk 볼륨 플러그인 대신 Compute Engine Persistent Disk CSI 드라이버를 사용하면 다음과 같은 이점이 있습니다.

  • CSI 드라이버는 Kubernetes의 스토리지 확장 프로그램의 미래입니다. Kubernetes는 버전 1.21에서 트리 내 볼륨 플러그인이 Kubernetes에서 제거된다고 발표했습니다. 자세한 내용은 Kubernetes 트리 내 CSI 볼륨 마이그레이션이 베타 단계로 이동을 참조하세요. 트리 내 볼륨 플러그인이 삭제되면 트리 내 볼륨 플러그인을 사용하는 기존 볼륨은 대신 CSI 드라이버를 통해 통신하게 됩니다.
  • Persistent Disk 드라이버를 수동으로 설정하지 않고도 Persistent Disk 드라이브 자동 배포 및 관리가 가능하거나 트리 내 볼륨 플러그인을 사용합니다.
  • GKE에 추가 Persistent Disk 기능을 제공합니다. 예를 들면 다음과 같습니다.
    • Compute Engine Persistent Disk CSI 드라이버와 함께 고객 관리 암호화 키(CMEK)를 사용할 수 있지만 트리 내 볼륨 플러그인은 사용할 수 없습니다. 이러한 키는 데이터 암호화용으로 사용되는 데이터 암호화 키를 암호화하는 데 사용됩니다. GKE의 CMEK에 대한 자세한 내용은 CMEK 사용을 참조하세요.
    • 볼륨 스냅샷을 Compute Engine Persistent Disk CSI 드라이버와 함께 사용할 수 있습니다. 볼륨 스냅샷을 사용하면 특정 시점의 볼륨 사본을 만들 수 있습니다. 이 사본을 사용하여 볼륨을 이전 상태로 되돌리거나 새 볼륨을 프로비저닝할 수 있습니다.
  • 버그 수정 및 기능 업데이트는 마이너 Kubernetes 출시와 독립적으로 롤아웃됩니다. 이 출시 일정은 일반적으로 출시 주기가 빨라집니다.

요구사항

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

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

새 클러스터에서 Compute Engine Persistent Disk CSI 드라이버 사용 설정

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

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

gcloud

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

다음을 바꿉니다.

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

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

Console

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

    Google Kubernetes Engine으로 이동

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

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

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

  5. Compute Engine Persistent Disk CSI 드라이버 사용 설정 체크박스를 선택합니다.

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

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

기존 클러스터에서 Compute Engine Persistent Disk CSI 드라이버 사용 설정

기존 클러스터에서 Compute Engine Persistent Disk CSI 드라이버를 사용 설정하려면 gcloud 명령줄 도구 또는 Google Cloud Console을 사용합니다.

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

gcloud

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

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

Console

  1. Cloud Console에서 Google Kubernetes Engine 메뉴로 이동합니다.

    Google Kubernetes Engine 메뉴로 이동

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

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

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

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

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

gcloud 명령줄 도구 또는 Google Cloud Console을 사용하여 Compute Engine 영구 디스크 CSI 드라이버를 사용 중지합니다.

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

gcloud

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

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

Console

  1. Cloud Console에서 Google Kubernetes Engine 메뉴로 이동합니다.

    Google Kubernetes Engine으로 이동

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

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

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

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

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

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

StorageClass 만들기

Compute Engine Persistent Disk CSI 드라이버를 사용 설정하면 GKE는 다음 StorageClass를 자동으로 설치합니다.

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

1.17 이하 버전의 일부 이전 클러스터 버전에는 표준 영구 디스크를 사용하는 singlewriter-standard 또는 standard-singlewriter StorageClass가 대신 포함될 수 있습니다.

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

kubectl get sc

또한 프로비저닝 도구 필드에 pd.csi.storage.gke.io를 추가하여 Compute Engine Persistent Disk 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-ssd, pd-standard 또는 pd-balanced)로 지정할 수 있습니다.

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

kubectl create -f pd-example-class.yaml

PersistentVolumeClaim 만들기

Compute Engine Persistent Disk 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을 참조하는 Pod가 예약될 때까지 PersistentVolume이 프로비저닝되지 않습니다. StorageClass의 volumeBindingModeImmediate로 설정되거나 생략되는 경우, PersistentVolumeClaim이 만들어진 후에 Persistent Disk 지원 PersistentVolume이 프로비저닝됩니다.

볼륨을 사용하는 pod 만들기

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

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

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

볼륨을 사용하는 pod 만들기

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

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

알려진 문제

CSI 노드 ID 사양의 글자 수 128자 제한과 GKE에서 인스턴스 이름을 생성하고 Compute Engine Persistent Disk CSI 드라이버를 설치하는 것으로 인해 특정 노드 풀에 대한 새로운 또는 기존 GKE 클러스터가 실패할 수 있습니다. 자세한 내용은 이 GitHub 문제를 참조하세요.

이 문제는 다음 버전에서 해결되었습니다.

  • 1.16.15-gke.1700 이상
  • 1.17.9-6300 이상
  • 1.18.6-4801 이상

이전 버전의 클러스터를 사용하는 경우 나열된 버전 중 하나로 업그레이드하여 문제를 해결하세요.

다음 단계