NetApp Tech Blog에 갔다가 흥미로운 주제의 글이 보여서 AI 번역(+약간 수정)의 힘을 빌려 읽어보았습니다.
출처: https://community.netapp.com/t5/Tech-ONTAP-Blogs/NetApp-Backup-amp-Recovery-enters-public-preview-support-for-Kubernetes/ba-p/463537
10월 6일, NetApp은 쿠버네티스 기반 컨테이너 및 가상 머신을 위한 새로운 백업 및 복구 솔루션의 업데이트된 프리뷰를 공개했습니다. 이 솔루션은 NetApp 스토리지의 애플리케이션에 대한 원활하고 통합적인 보호를 제공합니다. 이러한 통합은 조직에서 최신 애플리케이션을 관리하는 사람들에게 획기적인 변화를 가져올 것입니다.
주요 내용:
- 통합 보호: 단일 콘솔에서 Kubernetes 애플리케이션과 리소스를 관리하고 보호합니다.
- 향상된 데이터 보호: 강력한 Trident™ 소프트웨어를 기반으로 NetApp SnapMirror®를 활용하여 백업과 복원 속도를 높입니다.
- 간소화된 운영: SnapMirror 기술을 사용하여 백업 데이터를 개체 스토리지로 효율적으로 이동합니다.
- 보호 정책을 적용한 구조화된 증분 백업.
- 탁월한 데이터 보호를 위한 3-2-1 팬아웃 보호 정책.
- 최적화된 성능을 위해 블록 추적을 변경합니다.
미리보기 릴리스에서 지원되는 기능의 전체 목록은 릴리스 노트를 참조하세요 .
미리보기 기간 동안 더 많은 기능이 추가될 예정이니 기대해주세요!
이 블로그 게시물에서는 NetApp Backup & Recovery를 사용하여 보호 정책을 설정하고 K8s 애플리케이션을 보호하고 복원하는 방법을 안내합니다.
데이터 보호 수준을 한 단계 높일 준비가 되셨나요? 지금 바로 시작해 보세요!
테스트 환경
추가 데모를 위해 NetApp Trident CSI 프로비저너의 최신 버전이 설치된 RKE2 클러스터 patric-sks4177과 백엔드 스토리지를 제공하기 위해 NetApp ONTAP 9 시뮬레이터를 사용했습니다.
RKE2 스냅샷 컨트롤러를 설치하고 해당 스토리지와 볼륨 스냅샷 클래스를 포함하여 Trident 백엔드를 구성한 후 클러스터에 다음과 같은 스토리지 구성이 생겼습니다.
$ tridentctl -n trident get backends +-----------------+----------------+--------------------------------------+--------+------------+---------+ | NAME | STORAGE DRIVER | UUID | STATE | USER-STATE | VOLUMES | +-----------------+----------------+--------------------------------------+--------+------------+---------+ | ontap-nas-vsim1 | ontap-nas | 1654b6a5-b588-4d53-859d-20303c6d2f60 | online | normal | 0 | +-----------------+----------------+--------------------------------------+--------+------------+---------+ $ kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE ontap-vsim1-nas (default) csi.trident.netapp.io Delete Immediate false 18s $ kubectl get volumesnapshotclass NAME DRIVER DELETIONPOLICY AGE trident-snapshotclass csi.trident.netapp.io Delete 57s
백업 및 복원 테스트를 위해 간단한 Minio® 애플리케이션을 설치했습니다.
$ kubectl get all,pvc -n minio NAME READY STATUS RESTARTS AGE pod/minio-b6b84f46c-sr2qm 1/1 Running 0 114s pod/minio-console-cb99559c-zgq76 1/1 Running 0 114s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/minio ClusterIP 10.98.237.51 <none> 9000/TCP 115s service/minio-console ClusterIP 10.104.0.87 <none> 9090/TCP 115s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/minio 1/1 1 1 115s deployment.apps/minio-console 1/1 1 1 115s NAME DESIRED CURRENT READY AGE replicaset.apps/minio-b6b84f46c 1 1 1 115s replicaset.apps/minio-console-cb99559c 1 1 1 115s NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE persistentvolumeclaim/minio Bound pvc-b0fed8f1-c5ed-4000-b938-ba29393864f0 8Gi RWO ontap-vsim1-nas <unset> 116s
당사의 백업 및 복구 계정과 환경은 Backup and Recovery 요구 사항 에 따라 이미 준비되었습니다 . 사용자에게는 필요한 SuperAdmin 권한이 있으며 , Backup and Recovery 에이전트가 온-프레미스 테스트 환경에 이미 설치 및 구성되어 있으며, 작업 환경이 생성되어 Azure Storage 계정과 연결되었습니다.
Kubernetes 클러스터 탐색
K8s 애플리케이션을 보호하기 위한 일반적인 워크플로는 K8s 클러스터를 백업 및 복구에 추가하는 것으로 시작됩니다. 그런 다음 클러스터에 애플리케이션을 추가하고 클러스터에서 호스팅되는 리소스를 보호할 수 있습니다.
Kubernetes 워크로드를 처음 검색하는 경우 백업 및 복구에서 Kubernetes 워크로드 유형 아래에서 Discover and Manage를 선택합니다. 이미 Kubernetes 워크로드를 검색한 적이 있는 경우 백업 및 복구에서 Inventory > Workloads를 선택한 다음 Discover resources을 선택합니다 .
다음 화면에서 Kubernetes 워크로드 유형을 선택합니다.
Backup and Recovery에 추가할 클러스터 이름을 입력하고 K8s 클러스터와 함께 사용할 Backup and Recovery 에이전트를 선택하세요.
이제 Backup and Recovery는 K8s 클러스터를 백업 및 복구에 추가하기 위한 명령줄 지침을 생성합니다.
K8s 클러스터에서 명령줄 지침을 따르세요.
$ kubectl create namespace trident-protect namespace/trident-protect created $ kubectl create secret generic occmauthcreds --namespace=trident-protect --from-literal=client_id=aSXCqUIWxYoGVR6hhXHBPNoP8uwDUj7G --from-literal=client_secret=SCDfvf8BoN-eG0dJ_SDnGtz-wIL3PJSbrbMQle91IWqObbln1pnZ1yR3y6Z_pZUB secret/occmauthcreds created $ helm repo add --force-update netapp-trident-protect https://netapp.github.io/trident-protect-helm-chart "netapp-trident-protect" has been added to your repositories $ helm install trident-protect netapp-trident-protect/trident-protect-bxp-preview --version 100.2510.0-bxp-preview --namespace trident-protect --set clusterName=patric-sks4177 --set trident-protect.cbs.accountID=7f2955ab-d109-4597-8d32-3363cf95ca9e --set trident-protect.cbs.agentID=Bk99JO3PiLIJODBCQWXbiHv4f0v4DSsWclients --set trident-protect.cbs.proxySecretName=occmauthcreds --set trident-protect.cbs.proxyHostIP=http://10.192.8.118 NAME: trident-protect LAST DEPLOYED: Fri Sep 19 13:53:51 2025 NAMESPACE: trident-protect STATUS: deployed REVISION: 1 TEST SUITE: None
이 단계에서는 trident-protect 네임스페이스 의 K8s 클러스터에 Trident protect와 Trident protect 커넥터를 설치하여 Backup and Recovery가 K8s 클러스터와 상호 작용할 수 있도록 합니다.
$ kubectl get all -n trident-protect NAME READY STATUS RESTARTS AGE pod/trident-protect-connector-78d6798b5c-j4nr4 1/1 Running 0 12m pod/trident-protect-controller-manager-57c59d8857-ff94s 2/2 Running 0 12m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/tp-webhook-service ClusterIP 10.111.7.135 <none> 443/TCP 12m service/trident-protect-controller-manager-metrics-service ClusterIP 10.103.21.64 <none> 8443/TCP 12m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/trident-protect-connector 1/1 1 1 12m deployment.apps/trident-protect-controller-manager 1/1 1 1 12m NAME DESIRED CURRENT READY AGE replicaset.apps/trident-protect-connector-78d6798b5c 1 1 1 12m replicaset.apps/trident-protect-controller-manager-57c59d8857 1 1 1 12m
단계를 완료한 후 Discover을 선택하세요 . 클러스터가 인벤토리에 추가됩니다.
연결된 Kubernetes 워크로드에서 View를 선택하면 해당 워크로드의 애플리케이션, 클러스터 및 네임스페이스 목록을 볼 수 있습니다. 새로 추가된 클러스터 patric-sks4177 이 관리형 클러스터 목록에서 ‘연결됨’으로 표시됩니다.
Create application
테스트 클러스터 patric-sks4177을 백업 및 복구에 추가했으므로 이제 샘플 Minio 애플리케이션을 백업 및 복구에 추가하여 쿠버네티스 클러스터에서 실행 중인 애플리케이션을 백업 및 복구가 인식하도록 할 수 있습니다. 백업 및 복구에서 Inventory를 선택한 다음, Applications 탭을 선택하고 Create application을 클릭합니다 .
이제 애플리케이션 이름을 추가하고, 애플리케이션이 실행 중인 K8s 클러스터와 앱 리소스가 포함된 네임스페이스를 선택하세요. 선택적으로 레이블 및 GroupVersionKind(GVK) 필터를 기반으로 리소스를 포함하고, 클러스터 범위 리소스를 백업 및 복구 애플리케이션 정의에 추가할 수도 있습니다. 여기서는 애플리케이션 정의에 minio 네임스페이스만 추가합니다.
다음 창에서는 사전 스크립트와 사후 스크립트(스냅샷/백업 전후 실행 후크)를 추가하고 애플리케이션에 보호 정책을 할당할 수 있습니다. 사전 스크립트와 사후 스크립트는 필요하지 않고 보호 정책을 별도로 생성하려고 하므로 두 단계를 모두 건너뛰고 애플리케이션을 직접 생성합니다.
minio 애플리케이션이 생성되어 Kubernetes 인벤토리의 Applications 탭 에 있는 애플리케이션 목록에 보호 상태는 “Unprotected”, 애플리케이션 상태는 “Ready”로 표시됩니다.
보호 정책 생성
다음으로, 새로운 보호 정책을 만들어 보겠습니다. Backup & recovery 인벤토리의 애플리케이션 목록에서 보호되지 않은 minio 애플리케이션을 찾아 연결된 Actions 메뉴에서 Protect를 선택합니다.
여기에서 새로운 보호 정책을 만들거나 기존 정책을 추가할 수 있습니다.
첫 번째 단계에서는 워크로드 유형으로 Kubernetes를 선택하고 정책 이름을 pu-minio-11 로 설정합니다 .
그런 다음 백업 아키텍처를 선택합니다. 예를 들어 K8s 클러스터, 기반 ONTAP 스토리지 또는 전체 데이터 센터 장애로부터도 애플리케이션을 보호해야 하므로, 데이터 흐름 모델로 “Disk to object storage”를 선택합니다. 이 모델은 로컬 스냅샷과 오프사이트 오브젝트 스토리지의 데이터 복사본을 통해 애플리케이션 데이터를 보호합니다. 3-2-1 팬아웃 보호 정책은 더욱 높은 수준의 보호를 제공하며, 별도의 블로그에서 다룰 예정입니다.
이제 매시간 스냅샷과 매일 스냅샷의 기본 일정을 고수하고 각 주기의 마지막 3개 스냅샷을 보관하여 보호 일정을 정의합니다.
다음으로, 각 스냅샷 주기 동안 Kubernetes 애플리케이션 리소스를 저장할 개체 스토리지 위치를 선택하고, 이미 구성된 Azure 백업 대상을 선택합니다.
그런 다음 실제 애플리케이션 백업 데이터를 저장할 개체 저장소 위치를 선택합니다. 이 경우에는 애플리케이션 리소스와 동일한 대상을 사용합니다. 필요한 경우 백업 일정을 조정하고 Create를 클릭하여 보호 일정을 생성할 수도 있습니다.
애플리케이션 보호
샘플 애플리케이션을 보호하기 위해 Backup & recovery Inventory 의 애플리케이션 목록으로 돌아가서 minio 애플리케이션을 선택하고 연관된 Actions 메뉴에서 Protect 를 선택합니다 .
이제 기존 정책 목록에서 새로 생성된 보호 정책 pu-minio-11 을 검색하여 선택합니다.
사전 또는 사후 스크립트를 추가하고 싶지 않으므로 Done를 선택하면 정책이 애플리케이션에 첨부됩니다.
이제 백업 및 복구가 애플리케이션의 전체 백업인 기준 백업을 즉시 시작합니다. 향후 증분 백업은 애플리케이션과 연결된 보호 정책에 정의된 일정에 따라 생성됩니다. Track progress을 선택하면 백업 진행 상황을 추적할 수 있습니다 .
그러면 Monitoring 탭 으로 이동하여 보호 작업의 세부 정보를 볼 수 있으며, 잠시 후 작업이 성공합니다.
Trident Protect CLI를 사용하여 K8s 클러스터를 확인하면 기준 백업과 스냅샷을 확인할 수 있습니다.
$ tridentctl-protect get backup -n minio +-------------------------------------+--------------------------+----------------+---------+-------+-------+ | NAME | APP | RECLAIM POLICY | STATE | ERROR | AGE | +-------------------------------------+--------------------------+----------------+---------+-------+-------+ | baseline-transfer-backup-gghvyc3qmo | patricu-minio-9vvnkvosql | Retain | Running | | 3m31s | +-------------------------------------+--------------------------+----------------+---------+-------+-------+ ~$ tridentctl-protect get snapshot -n minio +---------------------------------------------+--------------------------+----------------+-----------+-------+-------+ | NAME | APP | RECLAIM POLICY | STATE | ERROR | AGE | +---------------------------------------------+--------------------------+----------------+-----------+-------+-------+ | backup-df8460c6-07f2-4016-9e1c-33afc259c7d5 | patricu-minio-9vvnkvosql | Delete | Completed | | 3m52s | +---------------------------------------------+--------------------------+----------------+-----------+-------+-------+
주문형 백업
필요한 경우, 최신 데이터를 보호하기 위해 샘플 애플리케이션의 백업을 수동으로 생성할 수도 있습니다. 다시 한번, Inventory의 애플리케이션 목록에서 minio 애플리케이션 을 선택 하고 Actions 메뉴 에서 Backup now을 선택하세요 .
애플리케이션의 Actions 메뉴에서 View and restore을 선택하면 애플리케이션 보호에 대한 세부 정보와 사용 가능한 복원 지점 및 해당 위치 목록을 확인할 수 있습니다.
여러 개의 복원 지점이 표시되는데, 그 사이에 일정이 적용되어 첫 번째 예약된 백업이 생성됩니다.
이는 CLI에서도 확인할 수 있으며, 사용 가능한 백업과 스냅샷을 보여줍니다.
$ tridentctl-protect get snapshot -n minio +---------------------------------------------+--------------------------+----------------+-----------+-------+--------+ | NAME | APP | RECLAIM POLICY | STATE | ERROR | AGE | +---------------------------------------------+--------------------------+----------------+-----------+-------+--------+ | backup-df8460c6-07f2-4016-9e1c-33afc259c7d5 | patricu-minio-9vvnkvosql | Delete | Completed | | 14h42m | | custom-8525a-20250925050048 | patricu-minio-9vvnkvosql | Delete | Completed | | 2h13m | | custom-8525a-20250925060048 | patricu-minio-9vvnkvosql | Delete | Completed | | 1h13m | | custom-8525a-20250925070048 | patricu-minio-9vvnkvosql | Delete | Completed | | 13m12s | | custom-e5bfd-20250925000048 | patricu-minio-9vvnkvosql | Delete | Completed | | 7h13m | +---------------------------------------------+--------------------------+----------------+-----------+-------+--------+ ~$ tridentctl-protect get backup -n minio +-------------------------------------+--------------------------+----------------+-----------+-------+--------+ | NAME | APP | RECLAIM POLICY | STATE | ERROR | AGE | +-------------------------------------+--------------------------+----------------+-----------+-------+--------+ | baseline-transfer-backup-gghvyc3qmo | patricu-minio-9vvnkvosql | Retain | Completed | | 14h42m | | custom-8525a-20250925030048 | patricu-minio-9vvnkvosql | Retain | Completed | | 4h13m | | custom-8525a-20250925040048 | patricu-minio-9vvnkvosql | Retain | Completed | | 3h13m | | custom-8525a-20250925050048 | patricu-minio-9vvnkvosql | Retain | Completed | | 2h13m | | custom-8525a-20250925060048 | patricu-minio-9vvnkvosql | Retain | Completed | | 1h13m | | custom-8525a-20250925070048 | patricu-minio-9vvnkvosql | Retain | Completed | | 13m16s | | custom-e5bfd-20250925000048 | patricu-minio-9vvnkvosql | Retain | Completed | | 7h13m | +-------------------------------------+--------------------------+----------------+-----------+-------+--------+
애플리케이션 복원
이제 minio 샘플 애플리케이션 의 복원을 테스트할 준비가 되었습니다 . 여러 가지 가능한 복원(및 실패) 시나리오 중에서, 애플리케이션을 호스팅하는 원래 클러스터에 장애가 발생할 경우 애플리케이션을 다른 클러스터로 복구하는 방법을 자세히 살펴보겠습니다.
현실적인 테스트 시나리오를 위해 먼저 클러스터에서 Trident Protect 커넥터를 중지하여 클러스터 장애를 시뮬레이션해 보겠습니다. Trident Protect 커넥터 배포 규모를 0으로 줄이고 연결된 Pod가 중지될 때까지 기다립니다.
$ kubectl -n trident-protect scale deployment.apps/trident-protect-connector --replicas=0 deployment.apps/trident-protect-connector scaled
이로 인해 백업 및 복구가 K8s 클러스터와의 통신을 잃게 됩니다. 몇 분 후, 클러스터가 백업 및 복구에서 “Failed” 상태로 전환됩니다.
다행히 애플리케이션은 이미 보호되어 있으므로 다른 클러스터로 쉽게 복원을 시작할 수 있습니다. 애플리케이션 목록에서 minio 애플리케이션 의 Actions 메뉴 에서 View and restore을 다시 선택합니다.
사용 가능한 복원 지점 목록에서 복원하려는 복원 지점을 선택하고 연관된 Actions 메뉴에서 Restore을 선택합니다 .
클러스터 오류로 인해 로컬 스냅샷을 더 이상 사용할 수 없으므로 개체 저장소에서 복원을 선택하고 관리되는 클러스터 목록에서 대상 클러스터를 선택합니다.
대상 클러스터에서 대상 네임스페이스로 minio-dr을 선택 하고 Next을 선택합니다 .
전체 애플리케이션을 복원하려면 Restore all resources을 선택한 후 Next을 선택합니다 .
마지막으로 대상 클러스터의 기본 스토리지 클래스로 복원하도록 선택하고 Restore을 선택하여 복원을 시작합니다 .
몇 분 후에 완료되는 복구 작업의 진행 상황을 추적합니다.
마지막으로, minio-dr 네임스페이스의 대상 클러스터에서 minio 애플리케이션이 제대로 실행되고 있는지 확인합니다 .
$ kubectl get all,pvc -n minio-dr --context sks3794-admin@sks3794 NAME READY STATUS RESTARTS AGE pod/minio-b6b84f46c-v7cxw 1/1 Running 0 4h42m pod/minio-console-cb99559c-td8f4 1/1 Running 0 4h42m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/minio ClusterIP 10.103.102.117 <none> 9000/TCP 4h42m service/minio-console ClusterIP 10.108.79.13 <none> 9090/TCP 4h42m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/minio 1/1 1 1 4h42m deployment.apps/minio-console 1/1 1 1 4h42m NAME DESIRED CURRENT READY AGE replicaset.apps/minio-b6b84f46c 1 1 0 4h42m replicaset.apps/minio-console-cb99559c 1 1 1 4h42m NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE persistentvolumeclaim/minio Bound pvc-d2bbdd4f-9fe1-4fa3-a89d-8c65264b400e 8Gi RWO ontap-vsim4-nas <unset> 4h42m
Backup and Recovery Dashboard에서 보호 상태 보기
NetApp 백업 및 복구 대시보드에서 백업 및 복원 상태를 확인하여 간략한 개요를 확인할 수 있습니다. 백업 및 복구 메뉴에서 대시보드를 선택하고 드롭다운 메뉴에서 Kubernetes 워크로드를 선택합니다.
대시보드에서는 보호된 시스템, 클러스터, 애플리케이션의 수, 백업 및 메타데이터 버킷의 수, 구성된 보호 정책, 총 보호 용량에 대한 간략한 개요를 제공합니다.
작업 요약에서는 지난 24시간, 7일 또는 30일 중 선택한 기간 동안 완료, 실행 중 또는 실패한 백업 및 복원 작업을 검토할 수 있습니다.
데이터 보호 상태에서는 보호 상태와 보호 상태를 기준으로 애플리케이션을 볼 수 있으며, 대상 저장소에서는 로컬, 보조 및 개체 저장소 저장소에서 사용된 저장 용량을 확인할 수 있습니다.
결론 및 행동 촉구
NetApp은 쿠버네티스 워크로드를 위한 백업 및 복구 솔루션 프리뷰를 출시하여 쿠버네티스 기반 컨테이너의 보안을 강화했습니다. 이 새로운 솔루션은 SnapMirror를 활용하여 효율적인 백업 및 복원을 지원하는 통합 관리 콘솔을 제공하며, Trident 소프트웨어와 완벽하게 통합되어 운영 효율을 높입니다. 주요 기능으로는 중앙 집중식 관리, 체계적인 증분 백업, 그리고 여러 클러스터와 네임스페이스에 걸쳐 애플리케이션을 복원하는 기능이 있습니다.
이 블로그 게시물에서는 백업 및 복구를 사용하여 보호 정책을 설정하고, 쿠버네티스 애플리케이션을 보호하고 복원하는 방법에 대한 자세한 가이드를 제공합니다. 테스트 환경 구성, 쿠버네티스 클러스터 검색, 애플리케이션 생성 및 보호 정책 구현에 대한 단계별 지침이 포함되어 있습니다. 또한, 수동 및 온디맨드 백업과 장애 발생 시 애플리케이션을 다른 클러스터로 복원하는 방법도 다룹니다.
데이터 보호 전략을 강화할 준비가 되셨나요? 종합 가이드를 살펴보고 지금 바로 쿠버네티스 워크로드에 백업 및 복구를 활용해 보세요! 원활하고 효율적이며 통합된 백업 솔루션으로 모든 장애로부터 애플리케이션을 안전하게 보호하세요. 지금 바로 백업 및 복구를 통해 데이터 보호의 미래를 경험해 보세요!
지금 NetApp Console 에 로그인하여 시작하세요!