SAN 워크로드를 위해 Google Cloud NetApp Volumes 구성
Google Cloud NetApp Volumes에서 iSCSI 프로토콜을 사용하여 블록 스토리지 볼륨을 프로비저닝하도록 Trident를 구성할 수 있습니다. SAN 볼륨은 google-cloud-netapp-volumes-san 스토리지 드라이버를 사용하여 Flex Unified 스토리지 풀에서 프로비저닝됩니다.
|
|
이 드라이버는 블록 워크로드 전용이며 NAS 프로토콜을 지원하지 않습니다. |
|
|
google-cloud-netapp-volumes-san 백엔드는 iSCSI 블록 볼륨을 프로비저닝하는 데 필요합니다. google-cloud-netapp-volumes 백엔드는 NAS 프로토콜만 지원하며 SAN 워크로드에는 사용할 수 없습니다.
|
개요
Trident는 google-cloud-netapp-volumes-san 드라이버를 사용하여 Google Cloud NetApp Volumes SAN(iSCSI) 워크로드를 지원합니다.
SAN 볼륨은 Flex Unified 스토리지 풀에서 프로비저닝되어 iSCSI 블록 디바이스로 Kubernetes 노드에 제공됩니다.
이는 다음 환경에 적용됩니다.
-
Trident 26.02 이상
-
Google Kubernetes Engine(GKE) 또는 Red Hat OpenShift
-
Google Cloud NetApp Volumes Flex 통합 스토리지 풀
-
iSCSI 기반 워크로드
Flex Unified 스토리지 풀
Flex Unified 스토리지 풀은 iSCSI 프로토콜을 사용하여 블록 스토리지를 제공하며 SAN 프로비저닝에 필요합니다.
-
Flex Unified REGIONAL 풀이 지원됩니다.
-
Flex Unified ZONAL 풀은 Trident 26.02.1부터 지원됩니다.
-
SAN 워크로드의 경우 Flex 서비스 레벨만 지원됩니다.
Trident SAN 백엔드를 구성합니다
apiVersion: trident.netapp.io/v1
kind: TridentBackendConfig
metadata:
name: gcnv-san
namespace: trident
spec:
version: 1
storageDriverName: google-cloud-netapp-volumes-san
projectNumber: "<project-number>"
location: "<region>"
sdkTimeout: "600"
storage:
- labels:
cloud: gcp
performance: flex
network: "<vpc-network>"
serviceLevel: Flex
StorageClass 생성
SAN 백엔드를 구성한 후 google-cloud-netapp-volumes-san 드라이버를 참조하는 StorageClass를 생성합니다.
파일 시스템 유형은 백엔드가 아닌 StorageClass에서 정의됩니다.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: gcnv-san
provisioner: csi.trident.netapp.io
parameters:
backendType: "google-cloud-netapp-volumes-san"
fsType: "ext4"
allowVolumeExpansion: true
지원되는 파일 시스템 유형:
-
ext4(기본값) -
ext3 -
xfs
|
|
SAN 드라이버는 Flex 서비스 레벨만 지원하며 exportRule, unixPermissions, nasType, snapshotDir, `nfsMountOptions`와 같은 NAS 관련 백엔드 매개변수나 티어링 관련 설정은 사용하지 않습니다.
|
블록 볼륨 프로비저닝
ReadWriteOnce(RWO)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: gcnv-san-rwo
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
storageClassName: gcnv-san
ReadWriteOncePod(RWOP)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: gcnv-san-rwop
spec:
accessModes:
- ReadWriteOncePod
resources:
requests:
storage: 100Gi
storageClassName: gcnv-san
ReadOnlyMany (ROX)
ROX에서 흔히 사용되는 패턴은 기존 ReadWriteOnce 볼륨을 복제하고 복제본을 읽기 전용으로 마운트하는 것입니다.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: gcnv-san-rox
spec:
accessModes:
- ReadOnlyMany
resources:
requests:
storage: 100Gi
storageClassName: gcnv-san
dataSource:
kind: PersistentVolumeClaim
name: gcnv-san-rwo
ReadWriteMany (RWX) — 원시 블록 전용
ReadWriteMany는 `volumeMode: Block`인 경우에만 지원됩니다.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: gcnv-san-raw-rwx
spec:
accessModes:
- ReadWriteMany
volumeMode: Block
resources:
requests:
storage: 100Gi
storageClassName: gcnv-san
블록 볼륨 동작
블록 볼륨은 iSCSI LUN으로 프로비저닝되고 Kubernetes 노드에 블록 디바이스로 제공됩니다.
블록 볼륨:
-
iSCSI 프로토콜 사용
-
파일 시스템 및 원시 블록 프레젠테이션 지원
-
Trident에 의해 연결되고 관리됩니다
-
여러 Kubernetes 액세스 모드 지원
액세스 모드
Trident에서 프로비저닝한 블록 볼륨은 다음과 같은 액세스 모드를 지원합니다.
-
ReadWriteOnce(RWO) -
ReadOnlyMany(ROX) -
ReadWriteOncePod(RWOP) -
ReadWriteMany(RWX), 다음과 같은 경우에만 지원됩니다volumeMode: Block
volumeMode 동작
`volumeMode` 필드는 블록 볼륨이 노출되는 방식을 제어합니다.
-
FilesystemTrident가 볼륨을 포맷하고 마운트합니다. -
BlockTrident는 장치를 연결하고 이를 원시 블록 장치로 노출합니다.
지원되는 작업
`google-cloud-netapp-volumes-san` 드라이버를 사용하여 프로비저닝된 블록 볼륨은 다음을 지원합니다:
-
생성
-
삭제
-
클론
-
스냅샷
-
크기 조정
-
가져오기
추가 GiB 오버프로비저닝 동작
Google Cloud NetApp Volumes 블록 볼륨에는 내부 메타데이터 오버헤드가 포함됩니다. 이 오버헤드로 인해 커널에서 인식되는 장치 크기가 프로비저닝된 용량보다 작아집니다.
테스트 결과:
-
초기 생성 시 약 300 KiB의 오버헤드가 발생합니다
-
크기 조정 후 최대 약 107MiB의 오버헤드
Google Cloud NetApp Volumes는 GiB 단위의 할당만 허용하므로 Trident는 다음과 같은 방법으로 사용 가능한 장치 크기가 항상 PVC 요청을 충족하거나 초과하도록 합니다.
-
요청된 크기를 다음 정수 GiB로 올림합니다
-
추가 1 GiB 버퍼 추가
예:
-
PVC 요청: 100 GiB
-
Google Cloud NetApp Volumes에 프로비저닝된 크기: 101 GiB
-
애플리케이션에 표시되는 사용 가능한 공간: 최소 100 GiB
Pod 예
파일 시스템 마운트 블록 볼륨(RWO)
apiVersion: v1
kind: Pod
metadata:
name: app-rwo
spec:
containers:
- name: app
image: ubuntu:22.04
command: ["sleep", "infinity"]
volumeMounts:
- name: data
mountPath: /mnt/data
volumes:
- name: data
persistentVolumeClaim:
claimName: gcnv-san-rwo
원시 블록 디바이스(RWX)
apiVersion: v1
kind: Pod
metadata:
name: app-raw-rwx
spec:
containers:
- name: app
image: ubuntu:22.04
command: ["sleep", "infinity"]
volumeDevices:
- name: data
devicePath: /dev/xda
volumes:
- name: data
persistentVolumeClaim:
claimName: gcnv-san-raw-rwx
연결 및 마운트 동작
Google Cloud NetApp Volumes에서 프로비저닝된 SAN 볼륨의 경우:
-
Trident는 Flex Unified 스토리지 풀에 LUN(논리 유닛 번호)을 생성합니다.
-
게시 중에 Trident는 LUN을 노드별 호스트 그룹에 매핑합니다.
-
노드 스테이징 중에 Trident는 다음을 수행합니다.
-
iSCSI 타겟에 로그인합니다
-
LUN을 검색합니다
-
다중 경로를 구성합니다
-
-
`volumeMode: Filesystem`Trident는 필요한 경우 장치를 포맷하고 마운트합니다.
-
`volumeMode: Block`인 경우 Trident는 포맷이나 마운트 없이 장치를 연결하고 Pod에 직접 노출합니다.
|
|
SAN 블록 볼륨은 분산 잠금 또는 쓰기 조정을 제공하지 않습니다. 여러 노드에서 블록 볼륨에 액세스할 때(ReadWriteMany 사용 시 volumeMode: Block) 애플리케이션 또는 파일 시스템이 동시성을 관리해야 합니다.
|