검색 및 복원 카탈로그 저장소를 ONTAP NFS로 마이그레이션
NetApp Console 로컬 배포 환경에서 검색 및 복원 성능을 향상시키려면 카탈로그 인덱스 스토리지를 클러스터의 기본 스토리지 클래스에서 ONTAP 기반 NFS 공유로 마이그레이션하십시오. 카탈로그 인덱스는 검색 및 복원을 지원하며, ONTAP 기반 NFS를 사용하면 상당한 성능 향상을 얻을 수 있습니다.
시작하기 전에 다음 사항을 준비했는지 확인하십시오.
-
클러스터에 구성된 ONTAP NFS StorageClass 및 ONTAP 시스템의 충분한 용량.
-
리소스를 가져오고, 생성하고, 적용하고, 실행하고, 패치하고, 확장하고, 삭제할 수 있는 권한이 있는 클러스터 관리자 자격 증명입니다.
-
원본 PVC에 있는 데이터의 유효성이 검증된 백업본(마이그레이션 전에 스냅샷을 찍거나 다른 곳에 복사해 두십시오).
작업자 수를 줄입니다
워커 배포 목록을 작성하고 각 워커의 복제본 수를 0으로 줄입니다.
-
카탈로그 워커 배포 목록을 모두 나열합니다.
kubectl get deploy -n cbs -o name | grep '/cloudmanager-cbs-catalog-worker-' -
모든 워커 배포를 복제본 수 0개로 축소합니다.
for d in $(kubectl get deploy -n cbs -o name | grep '/cloudmanager-cbs-catalog-worker-'); do kubectl scale "$d" --replicas=0 -n cbs done -
남아 있는 워커 포드가 없는지 확인하십시오.
kubectl get pods -n cbs | grep cloudmanager-cbs-catalog-worker- || echo "no worker pods running"
NetApp Console 로컬 배포에 ONTAP 볼륨을 마운트하고 Pod에서 데이터를 복사합니다
-
ONTAP NFS 내보내기를 NetApp Console 로컬 배포 OVA를 배포할 때 생성된 VM의 로컬 마운트 지점에 마운트합니다.
-
실행 중인 코디네이터 파드의 데이터를 중간 디렉터리 없이 ONTAP 마운트 위치로 복사합니다. 코디네이터는 반드시 실행 중이어야 합니다.
내용을 하위 디렉터리가 아닌 볼륨 루트에 복사하십시오. ONTAP 볼륨이 새 /opt/netapp/cbs/catalog/shared디렉터리입니다. 데이터는 앱이 동일한 경로(예: /opt/netapp/cbs/catalog/shared/cbs/<DATASET_NAME>/…)에서 찾을 수 있도록 볼륨 루트에 있어야 합니다. 다음 명령에서 tar 명령 형식은 디렉터리 내용(dotfiles 포함)을 중첩된shared폴더를 거치지 않고 마운트 루트에 스트리밍합니다. -
ONTAP NFS 내보내기를 NetApp Console 로컬 배포 환경의 로컬 마운트 지점에 마운트합니다. 나중에 pv.yaml 파일에서 사용할 것과 동일한 서버/경로를 사용하십시오.
sudo mkdir -p /mnt/ontap_nfs_vol sudo mount -t nfs 10.x.x.x:/my_nfs_vol /mnt/ontap_nfs_vol # ONTAP SVM data LIF IP : junction path -
Pod의 공유 볼륨을 ONTAP 마운트 위치로 복사합니다.
POD=$(kubectl get pod -n cbs -l app=cloudmanager-cbs-catalog -o jsonpath='{.items[0].metadata.name}') kubectl exec -n cbs "$POD" -- tar cf - -C /opt/netapp/cbs/catalog/shared . \ | sudo tar xf - -C /mnt/ontap_nfs_vol -
포드 ID와 일치하도록 소유권을 설정합니다.
sudo chown -R 10001:10001 /mnt/ontap_nfs_vol -
데이터가 볼륨 루트에 복사되었는지 확인하십시오(마운트 바로 아래에 중첩된 "shared/" 폴더가 아닌 "cbs" 폴더가 있어야 합니다).
ls -la /mnt/ontap_nfs_vol -
복사본을 확인한 다음 마운트를 해제하십시오(나중에 pod가 PVC를 통해 마운트합니다).
sudo umount /mnt/ontap_nfs_vol -
코디네이터를 축소합니다. 예를 들면 다음과 같습니다.
kubectl scale deployment cloudmanager-cbs-catalog --replicas=0 -n cbs kubectl rollout status deployment/cloudmanager-cbs-catalog -n cbs
기존 PVC 및 PV를 삭제합니다.
-
연결된 PV에 대한 정보를 캡처한 다음 기존 PVC 및 PV를 삭제합니다.
PV=$(kubectl get pvc cloudmanager-cbs-catalog-shared-pvc -n cbs -o jsonpath='{.spec.volumeName}') kubectl delete pvc cloudmanager-cbs-catalog-shared-pvc -n cbs kubectl delete pv "$PV"
정적 ONTAP PV 및 PVC를 생성합니다.
-
다음 PV 및 PVC YAML 오브젝트를 생성합니다.
pv.yamlapiVersion: v1 kind: PersistentVolume metadata: name: ontap-manual-pv labels: volume: ontap-nfs-share # Used by the PVC selector to find this exact volume spec: capacity: storage: 50Gi # Match or remain under the actual ONTAP volume size volumeMode: Filesystem accessModes: - ReadWriteMany # Allows multiple Pods to share the NFS mount persistentVolumeReclaimPolicy: Retain # Retains ONTAP data if the PVC is deleted storageClassName: "" # Leave blank for manual/static provisioning nfs: server: 10.x.x.x # Replace with your ONTAP SVM data LIF IP address path: /my_nfs_vol # Replace with your ONTAP junction pathpvc.yamlapiVersion: v1 kind: PersistentVolumeClaim metadata: name: cloudmanager-cbs-catalog-shared-pvc annotations: "helm.sh/resource-policy": keep spec: accessModes: - ReadWriteMany # Must match the PV's access mode resources: requests: storage: 50Gi # Must be <= the PV capacity (50Gi) storageClassName: "" # Explicitly matches the empty StorageClass on the PV selector: matchLabels: volume: ontap-nfs-share # Forces binding to the specific PV above -
YAML 객체를 적용할 때는 먼저 PV를 적용한 다음 PVC를 적용합니다(PVC의 레이블 선택기가 바인딩되려면 PV가 존재해야 합니다). 그런 다음 PVC 클레임이 바인딩되었는지 확인합니다.
kubectl apply -f pv.yaml kubectl apply -f pvc.yaml -n cbs kubectl get pvc cloudmanager-cbs-catalog-shared-pvc -n cbs # expect STATUS: Bound -
코디네이터를 1개 복제본으로 확장합니다.
kubectl scale deployment cloudmanager-cbs-catalog --replicas=1 -n cbs kubectl rollout status deployment/cloudmanager-cbs-catalog -n cbs -
작업자를 수동으로 축소했는데 자동으로 해제되지 않은 경우, 수동으로 다시 확대하십시오(작업자는 일반적으로 자동으로 프로비저닝되므로 이 작업이 필요하지 않을 수 있습니다).
for d in $(kubectl get deploy -n cbs -o name | grep '/cloudmanager-cbs-catalog-worker-'); do kubectl scale "$d" --replicas=1 -n cbs done -
마운트 및 데이터 상태를 확인하십시오. 데이터가 존재하고 사용자 및 그룹 10001:10001의 소유인지 확인하십시오.
POD=$(kubectl get pod -n cbs -l app=cloudmanager-cbs-catalog -o jsonpath='{.items[0].metadata.name}') kubectl exec -n cbs "$POD" -- mount | grep /opt/netapp/cbs/catalog/shared kubectl exec -n cbs "$POD" -- ls -la /opt/netapp/cbs/catalog/shared
|
|
|