FCP 프로토콜을 사용하는 Kubernetes 블록 스토리지를 위한 NetApp ASA r2 시스템의 잠재력을 최대한 활용하기 

NetApp Tech Blog에 갔다가 흥미로운 주제의 글이 보여서 AI 번역(+약간 수정)의 힘을 빌려 읽어보았습니다.
출처: https://community.netapp.com/t5/Tech-ONTAP-Blogs/Unlocking-the-power-of-NetApp-ASA-r2-systems-for-Kubernetes-block-storage-with/ba-p/464664

기업들이 쿠버네티스를 대규모로 도입함에 따라, 단순성은 핵심 설계 원칙 중 하나가 되었습니다. 사용자들은 제한된 시간과 자원을 최대한 활용하기를 원합니다. 바로 이 점에서 NetApp® ASA r2 시스템은 쿠버네티스 애플리케이션을 위한 스토리지 공간을 간소화하여 사용자들을 지원합니다.

NetApp Trident  소프트웨어는 Container Storage Interface (CSI)를 준수하는 스토리지 오케스트레이터로, 이미 iSCSI 및 NVMe/TCP 프로토콜을 사용하는 이러한 시스템을 지원합니다. Trident 25.10에서는 FCP 프로토콜 지원이 추가되었습니다. 이를 통해 ASA r2 시스템에서 FCP의 확장성과 성능 이점을 더욱 향상시킬 수 있습니다.

이 글에서는 ASA r2 시스템의 최첨단 기능을 살펴보고, Kubernetes 워크로드와 원활하게 통합하는 방법, 그리고 FCP 프로토콜을 사용하여 Trident에서 ASA r2를 활용하는 방법을 알아보겠습니다.  그럼 바로 시작하겠습니다.


ASA r2 시스템 소개

시작하기 전에 ASA r2 시스템이 무엇 이며, 어떤 기능을 제공하는지 간략 하게 살펴보겠습니다 . NetApp ASA r2 시스템은 NetApp ASA A1K, ASA A90, ASA A70, ASA A50, ASA A30, ASA A20 모델을 포함하며, SAN 전용 고객의 특정 요구 사항에 맞춘 통합 하드웨어 및 소프트웨어 솔루션을 제공합니다. 새로운 NetApp ONTAP® 디자인 센터 아키텍처를 기반으로 구축된  시스템은 스토리지 프로비저닝에 혁신적인 접근 방식을 도입하여 최신 Kubernetes 워크로드에 이상적인 선택이 됩니다.

ASA r2 시스템의 핵심 차별점 중 하나는 분산형 아키텍처입니다. 기존 시스템과 달리, ASA r2 시스템은 애그리게이트 개념을 사용자에게 노출하지 않습니다. 대신, LUN(논리 장치 번호)을 핵심 구성 요소로 취급하여 볼륨 내부에 LUN을 래핑할 필요성을 없앱니다. 이러한 혁신적인 설계 덕분에 블록 스토리지 관리가 더욱 간편하고 효율적으로 이루어집니다.

NetApp Trident와 CSI 통합

ASA r2 시스템과의 통합을 지원하기 위해 NetApp의 Container Storage Interface (CSI) 호환 스토리지 오케스트레이터인 NetApp Trident™ 소프트웨어는 25.10 릴리스부터 FCP 프로토콜을 사용한 블록 스토리지 프로비저닝을 지원합니다. 가장 큰 장점은 기존 Trident 고객이라면 최소한의 변경만으로 ASA r2 시스템으로 원활하게 전환할 수 있다는 것입니다. Trident 백엔드에 올바른 자격 증명만 제공하면 나머지는 모두 자동으로 결정됩니다.

필수 조건

  1. Netapp Trident 25.10 이상 버전.
  2. 호스트와 대상의 WWPN을 사용하여 FC 스위치에서 영역 설정을 구성합니다.자세한 내용은 해당 스위치 제조업체의 설명서를 참조하십시오.자세한 내용은 다음 ONTAP 문서를 참조하십시오.


프로비저닝 단계:

Trident를 처음 사용하는 사용자이든 아니든, Trident를 이용한 스토리지 프로비저닝 과정은 간단합니다. 다음은 간단한 단계입니다.

  • 1단계:  Trident 백엔드 생성.
     스토리지 드라이버로 ontap-san을 사용하여 Trident 백엔드를 생성합니다. Kubernetes 네이티브 방식을 사용하여 TridentBackendConfig(TBC) 사용자 정의 리소스 정의를 구성하거나, Trident 관리 명령줄 유틸리티인 tridentctl을 사용하여 사용자 정의 JSON 파일을 생성하는 두 가지 방법이 있습니다. 관리자 자격 증명을 사용하여 클러스터 관리 IP를 사용하거나, 특정 스토리지 가상 머신(SVM)의 관리 IP와 자격 증명을 지정할 수 있습니다. 자세한 내용은 Trident 설명서의 ONTAP SAN 드라이버 세부 정보를 참조하십시오.
# Kubernetes secret required for creating Trident backend from TBC
[core@cp1 trident-installer]$ cat secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: asa-r2-fcp-secret
type: Opaque
stringData:
username: <username>
password: <password>


[core@cp1 trident-installer]$ kubectl create -f secret.yaml -n trident
secret/asa-r2-fcp-secret created

[core@cp1 trident-installer]$ kubectl get secret asa-r2-fcp-secret -n trident
NAME TYPE DATA AGE
asa-r2-fcp-secret Opaque 2 18s

# Kubernetes CR TridentBackendConfig (TBC)
[core@cp1 trident-installer]$ cat tbc.yaml
apiVersion: trident.netapp.io/v1
kind: TridentBackendConfig
metadata:
name: asa-r2-fcp-backend-tbc
spec:
version: 1
backendName: asa-r2-fcp-backend
storageDriverName: ontap-san
managementLIF: 1.2.3.4
svm: svm0
sanType: fcp
credentials:
name: asa-r2-fcp-secret

# Or, Trident backend json
[core@cp1 trident-installer]$ cat backend.json
{
"version": 1,
"storageDriverName": "ontap-san",
"managementLIF": "1.2.3.4",
"backendName": "asa-r2-fcp-backend"
"svm": "svm0",
"username": "<username>",
"password": "<password>",
"sanType": "fcp"
}

  • 2단계: 백엔드 추가 .
    백엔드 구성이 완료되면 kubectl 또는 tridentctl을 사용하여 Trident에 추가할 수 있습니다. 이러한 도구를 사용하면 새로 구성된 백엔드를 Trident에 편리하게 추가하고 사용할 수 있습니다.
# Create Trident Backend via kubectl
[core@cp1 trident-installer]$ kubectl create -f tbc.yaml -n trident
tridentbackendconfig.trident.netapp.io/asa-r2-fcp-backend-tbc created

[core@cp1 trident-installer]$ kubectl get tbc asa-r2-fcp-backend-tbc -n trident
NAME BACKEND NAME BACKEND UUID PHASE STATUS
asa-r2-fcp-backend-tbc asa-r2-fcp-backend 36f3227c-bdbb-4052-94f2-79123a004990 Bound Success

[core@cp1 trident-installer]$ ./tridentctl -n trident get b
+--------------------+----------------+--------------------------------------+--------+------------+---------+
| NAME | STORAGE DRIVER | UUID | STATE | USER-STATE | VOLUMES |
+--------------------+----------------+--------------------------------------+--------+------------+---------+
| asa-r2-fcp-backend | ontap-san | 36f3227c-bdbb-4052-94f2-79123a004990 | online | normal | 0 |
+--------------------+----------------+--------------------------------------+--------+------------+---------+


# Or, create Trident Backend via tridentctl
[core@cp1 trident-installer]$ tridentctl create b -f backend.json -n trident
+--------------------+----------------+--------------------------------------+--------+------------+---------+
| NAME | STORAGE DRIVER | UUID | STATE | USER-STATE | VOLUMES |
+--------------------+----------------+--------------------------------------+--------+------------+---------+
| asa-r2-fcp-backend | ontap-san | 82141337e-e35c-6dex-2017-0h2282614f7 | online | normal | 0|
+--------------------+----------------+--------------------------------------+--------+------------+---------+​
  • 3단계: 스토리지 클래스 정의.
    필요한 스토리지 드라이버 유형에 해당하는 스토리지 클래스를 생성합니다. 이 단계를 통해 동적으로 프로비저닝할 스토리지의 특성을 정의할 수 있습니다.
[core@cp1 trident-installer]$ cat sc.yaml 
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: asa-r2-fcp-sc
parameters:
backendType: ontap-san
storagePools: "asa-r2-fcp-backend:.*"
provisioner: csi.trident.netapp.io

[core@cp1 trident-installer]$ kubectl create -f sc.yaml
storageclass.storage.k8s.io/asa-r2-fcp-sc created

[core@cp1 trident-installer]$ kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
asa-r2-fcp-sc csi.trident.netapp.io Delete Immediate false 7s
  • 이제 ASA r2 시스템에서 스토리지의 동적 프로비저닝을 위한 모든 준비가 완료되었으므로, 사용 예시를 살펴보겠습니다.
  • 4단계: PVC 생성.
    필요한 스토리지 용량을 지정하고 적절한 스토리지 클래스를 참조하는 PersistentVolumeClaim(PVC)을 정의합니다. 이 단계를 통해 Kubernetes 애플리케이션이 필요한 블록 스토리지에 액세스할 수 있게 됩니다.
[core@cp1 trident-installer]$ cat pvc.yaml 
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: asa-r2-fcp-pvc
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: asa-r2-fcp-sc


[core@cp1 trident-installer]$ kubectl create -f pvc.yaml 
persistentvolumeclaim/asa-r2-fcp-pvc created​
  • 5단계: PVC 바인딩을 확인합니다.
    PVC가 생성되면 영구 볼륨(PV)에 성공적으로 바인딩되었는지 확인합니다. 이 확인을 통해 블록 스토리지가 애플리케이션에서 사용할 준비가 되었는지 확인할 수 있습니다.
[core@cp1 trident-installer]$ kubectl get pvc
NAME                STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS    VOLUMEATTRIBUTESCLASS   AGE
asa-r2-fcp-pvc      Bound    pvc-0794ae01-b0ae-4135-801e-2417437e9d7f   1Gi        RWO            asa-r2-fcp-sc   <unset>                 14s​

  • 6단계: PVC 사용.
    축하합니다! 이제 원하는 포드에서 PVC를 사용할 준비가 되었습니다. 포드 사양에 맞게 PVC를 장착하면 애플리케이션에서 FCP 프로토콜을 사용하여 ASA r2 시스템에서 제공하는 고성능 블록 스토리지에 원활하게 액세스할 수 있습니다.
[core@cp1 trident-installer]$ cat pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: asa-r2-fcp-pod
spec:
  containers:
  - image: nginx:alpine
    name: nginx
    volumeMounts:
    - mountPath: mnt/pvc
      name: local-storage
  nodeSelector:
    kubernetes.io/arch: amd64
    kubernetes.io/os: linux
  volumes:
  - name: local-storage
    persistentVolumeClaim:
      claimName: asa-r2-fcp-pvc

[core@cp1 trident-installer]$ kubectl create -f pod.yaml 
pod/asa-r2-fcp-pod created

[core@cp1 trident-installer]$ kubectl get po
NAME                 READY   STATUS    RESTARTS   AGE
asa-r2-fcp-pod       1/1     Running   0          8s


[core@cp1 trident-installer]$ kubectl exec -it asa-r2-fcp-pod -- /bin/ash -c "mount | fgrep mnt/pvc" 
/dev/mapper/3600a09803831504c315d58684978384c on /mnt/pvc type ext4 (rw,seclabel,relatime,stripe=16)​

문제 해결이 간편해졌습니다

문제가 발생할 경우를 대비하여 몇 가지 유용한 문제 해결 명령어를 준비했습니다. 문제가 발생한 리소스에 대해 `kubectl describe` 명령어를 실행하여 자세한 정보를 확인할 수 있습니다. 시스템 동작에 대한 더 자세한 정보를 얻으려면 `kubectl` 또는 `tridentctl` 명령어를 사용하여 Trident 로그를 확인하세요 .

[core@cp1 trident-installer]$ kubectl get pvc
NAME                STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS    VOLUMEATTRIBUTESCLASS   AGE
asa-r2-fcp-pvc      Bound    pvc-0794ae01-b0ae-4135-801e-2417437e9d7f   1Gi        RWO            asa-r2-fcp-sc   <unset>                 2m55s


[core@cp1 trident-installer]$  kubectl describe pvc asa-r2-fcp-pvc
Name:          asa-r2-fcp-pvc
Namespace:     default
StorageClass:  asa-r2-fcp-sc
Status:        Bound
Volume:        pvc-0794ae01-b0ae-4135-801e-2417437e9d7f
Labels:        <none>
Annotations:   pv.kubernetes.io/bind-completed: yes
               pv.kubernetes.io/bound-by-controller: yes
               volume.beta.kubernetes.io/storage-provisioner: csi.trident.netapp.io
               volume.kubernetes.io/storage-provisioner: csi.trident.netapp.io
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:      1Gi
Access Modes:  RWO
VolumeMode:    Filesystem
Used By:       asa-r2-fcp-pod
Events:
  Type    Reason                 Age    From                                                                                            Message
  ----    ------                 ----   ----                                                                                            -------
  Normal  Provisioning           3m11s  csi.trident.netapp.io_trident-controller-84d7f798fc-kv8xc_9c6963aa-60f5-43a4-b25c-b8cca37b6171  External provisioner is provisioning volume for claim "default/asa-r2-fcp-pvc"
  Normal  ExternalProvisioning   3m11s  persistentvolume-controller                                                                     Waiting for a volume to be created either by the external provisioner 'csi.trident.netapp.io' or manually by the system administrator. If volume creation is delayed, please verify that the provisioner is running and correctly registered.
  Normal  ProvisioningSuccess    3m6s   csi.trident.netapp.io                                                                           provisioned a volume
  Normal  ProvisioningSucceeded  3m6s   csi.trident.netapp.io_trident-controller-84d7f798fc-kv8xc_9c6963aa-60f5-43a4-b25c-b8cca37b6171  Successfully provisioned volume pvc-0794ae01-b0ae-4135-801e-2417437e9d7f
[core@cp1 trident-installer]$ 


#For more troubleshooting check controller logs using: kubectl logs <trident-controller> -n trident


결론

NetApp ASA r2 시스템의 강력한 성능과 NetApp Trident의 통합 기능을 활용하면 Kubernetes 애플리케이션을 위한 고성능 블록 스토리지를 그 어느 때보다 쉽게 ​​프로비저닝할 수 있습니다. 특히, Trident에서 활용하는 FCP 프로토콜에 대한 ASA r2의 지원은 Kubernetes 워크로드에 탁월한 효율성과 유연성을 제공하는 동시에 지연 시간이 짧고 확장 가능한 스토리지를 제공할 수 있도록 해줍니다. 이 글을 통해 FCP 지원을 활용하여 ASA r2 시스템에서 Kubernetes 워크로드를 구성하는 데 필요한 지식과 자신감을 얻으셨기를 바랍니다. 성공적인 구성을 기원하며, Kubernetes 여정이 순조롭고 행복하기를 바랍니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

You May Also Like
Read More

SNIA: RDMA QA

SNIA 홈페이지 갔다가 RDMA Q&A란 글이 보여서 AI번역(+살짝 교정)의 힘을 빌려 정리해 봤습니다. “Everything You Wanted to Know…