웹사이트 검색

Kubernetes용 TrilioVault를 사용하여 Kubernetes 클러스터를 백업 및 복원하는 방법


저자는 Write for DOnations 프로그램을 선택했습니다.

소개

Kubernetes용 TrilioVault(TVK)는 독립 스토리지 리포지토리에 온디맨드 백업을 저장하여 애플리케이션 메타데이터 및 데이터를 보호하는 클라우드 네이티브 솔루션입니다.

Trilio를 사용하면 몇 가지 장점이 있습니다. Trilio를 사용하면 클러스터의 전체 또는 증분 백업을 수행하고 데이터 손실 시 복원할 수 있습니다. 한 클러스터에서 다른 클러스터로 마이그레이션하고 백업 및 복원 작업을 위해 사전 및 사후 후크를 실행할 수 있습니다. 백업을 예약하고 백업에 대한 보존 정책을 정의할 수도 있습니다. 마지막으로 웹 관리 콘솔을 사용하여 백업 및 복원 작업 상태를 자세히 검사할 수도 있습니다(다른 많은 기능과 함께).

이 문서에서는 클러스터에 배포된 상태 저장 또는 상태 비저장 애플리케이션을 포함하여 TVK를 사용하여 로컬 Kubernetes 클러스터 배포 또는 DigitalOcean Kubernetes Service를 보호하기 위한 지침을 제공합니다. 이 자습서에서는 Kubernetes 클러스터에 TVK를 배포하고, 클러스터 백업을 만들고, 백업에서 복구합니다.

전제 조건

이 자습서를 완료하려면 다음이 필요합니다.

  • DigitalOcean 계정. 계정이 없으면 새 계정에 가입하세요.
  • 여러 네임스페이스가 있는 DigitalOcean Kubernetes 클러스터. 클러스터 생성 방법에 대한 설명서를 따라 클러스터를 생성할 수 있습니다.
  • doctl 설치 및 구성 방법.
  • Kubernetes 상호 작용을 위한 Kubectl. 설치 및 설정에 대해서는 설치 도구에 대한 Kubernetes 제품 설명서를 참조하세요.
  • DigitalOcean Spaces 버킷 또는 액세스 키가 있는 S3 호환 객체 스토리지 버킷. DigitalOcean Spaces 버킷을 사용하려면 액세스 키로 관리 액세스를 관리하는 방법에 대한 가이드를 따르세요. 나중에 사용할 수 있도록 액세스비밀 키를 안전한 장소에 저장하십시오. NFS 내보내기를 사용하여 백업을 저장할 수도 있습니다.
  • Helm 3 패키지 관리자를 사용하여 Kubernetes 클러스터에 소프트웨어를 설치하는 방법
  • yaml 파일로 저장된 TrilioVault 라이선스. 이 자습서에서는 라이선스를 가져올 때 선택해야 할 수 있는 클러스터 범위 설치를 사용합니다. DigitalOcean 사용자의 경우 TVK 설치는 5년 동안 무료입니다. DigitalOcean Kubernetes 클러스터를 사용하지 않는 경우 TVK 라이선스를 요청하려면 Trilio 웹사이트에 등록해야 합니다. 무료 평가판과 무료 기본 버전이 있습니다.

1단계 - Kubernetes 클러스터 구성

이 단계에서는 Kubernetes 클러스터의 구성을 확인하여 TrilioVault가 올바르게 작동하는지 확인합니다.

TrilioVault가 올바르게 작동하고 PersistentVolumeClaim(PVC)을 백업하려면 컨테이너 스토리지 인터페이스(CSI)를 지원하도록 Kubernetes 클러스터를 구성해야 합니다. 기본적으로 DigitalOcean Managed Kubernetes Service는 이미 설치 및 구성된 CSI 드라이버와 함께 제공됩니다. 다음 명령을 사용하여 이를 확인할 수 있습니다.

  1. kubectl get storageclass

출력은 다음과 유사해야 합니다.

Output
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE do-block-storage (default) dobs.csi.linux-console.net Delete Immediate true 1d

보시다시피 제공자는 dobs.csi.linux-console.net입니다.

성공적인 설치를 위해 TrilioVault 설치에는 volumeSnapshot CRD(Custom Resource Definition)도 필요합니다. 다음 명령을 사용하여 이를 확인할 수 있습니다.

  1. kubectl get crd | grep volumesnapshot

volumeSnapshot이 이미 설치된 경우 출력은 다음과 유사합니다.

Output
volumesnapshotclasses.snapshot.storage.k8s.io2022-03-02T07:24:23Z volumesnapshotcontents.snapshot.storage.k8s.io2022-03-02T07:24:23Z volumesnapshots.snapshot.storage.k8s.io2022-03-02T07:24:23Z |

volumeSnapshot이 아직 설치되지 않은 경우 VolumeSnapshot CRD 설치 설명서를 참조하세요.

마지막으로 CRD가 v1 API 버전을 지원하는지 확인하십시오. 다음 명령을 실행하여 확인할 수 있습니다.

  1. kubectl get crd volumesnapshots.snapshot.storage.k8s.io -o yaml

CRD yaml 출력의 끝에 v1 값이 포함된 storedVersions 목록이 표시되어야 합니다.

Output
... - lastTransitionTime: "2022-01-20T07:58:06Z" message: approved in https://github.com/kubernetes-csi/external-snapshotter/pull/419 reason: ApprovedAnnotation status: "True" type: KubernetesAPIApprovalPolicyConformant storedVersions: - v1

설치되지 않은 경우 VolumeSnapshot CRD 설치 설명서를 참조하십시오.

이 단계에서는 다음 단계에서 수행할 TrilioVault 설치를 위해 Kubernetes 구성이 준비되었음을 확인했습니다.

2단계 - Kubernetes용 TrilioVault 설치

이 단계에서는 로컬 Kubernetes 클러스터용 TrilioVault를 배포하고 Helm을 통해 TVK 설치를 관리합니다. 백업 데이터는 전제 조건의 일부로 생성한 S3 호환 버킷에 저장됩니다.

TrilioVault 응용 프로그램은 triliovault-연산자 차트에 설치할 수 있습니다.

이 자습서에서는 tvk 애플리케이션에 대해 클러스터 범위 설치 유형을 사용합니다. 이러한 유형의 설치를 통해 TVK는 네임스페이스 전체에서 모든 애플리케이션을 보호할 수 있습니다. (반대로 네임스페이스 범위 설치의 경우 TVK는 해당 네임스페이스에 배포된 애플리케이션만 보호할 수 있습니다.)

Kubernetes용 TrilioVault를 설치하려면 전제 조건의 일부로 요청한 라이선스가 필요합니다. TVK 라이선스를 가져올 때 클러스터 범위 설치를 선택해야 할 수 있습니다.

Helm을 사용하여 TrilioVault 설치

Helm을 통해 TrilioVault를 설치하려면 먼저 TrilioVault Helm 리포지토리를 추가하고 다음 명령을 사용하여 사용 가능한 차트를 나열합니다.

  1. helm repo add triliovault-operator http://charts.k8strilio.net/trilio-stable/k8s-triliovault-operator
  2. helm repo update triliovault-operator
  3. helm search repo triliovault-operator

출력은 다음과 유사합니다.

Output
NAME CHART VERSION APP VERSION DESCRIPTION triliovault-operator/k8s-triliovault-operator 2.10.3 2.10.3 K8s-TrilioVault-Operator is an operator designe...

마지막으로 helm을 사용하여 Kubernetes용 TrilioVault를 설치합니다.

  1. helm install triliovault-operator triliovault-operator/k8s-triliovault-operator \
  2. --namespace tvk \
  3. --set installTVK.ingressConfig.host="demo-tutorial.tvk-doks.com" \
  4. --create-namespace

이 명령은 TrilioVault Helm 값 파일 triliovault-values.yaml에 제공된 기본 매개변수를 사용하여 triliovault-operatorTriloVault Manager(TVM) 사용자 지정 리소스를 설치합니다. .

  • TVK Operator: TVK에는 TrilioVault Manager라는 CRD에서 관리하는 Helm 기반 Operator가 있습니다. TVK Operator는 애플리케이션 구성 요소 중 하나가 다운될 경우 애플리케이션 및 자동 복구의 수명 주기를 관리합니다.\n
  • TVK Manager: TVK 애플리케이션에는 여러 CRD와 해당 컨트롤러가 포함되어 있습니다. CRD 인스턴스의 유효성 검사 및 변형을 관리하는 자체 웹후크 서버가 있습니다. 컨트롤러는 사용자 지정 리소스에서 수행된 작업에 의해 생성된 이벤트를 조정합니다.\n

이 자습서에서는 다음을 포함하여 TrilioVault Helm 값 파일(triliovault-values.yaml)의 기본값을 사용합니다.

  • installTVK.applicationScope: TVK 설치 범위는 Cluster 또는 Namespaced일 수 있습니다. 이 매개변수는 '클러스터' 또는 '네임스페이스'에서 애플리케이션을 보호하며 설치 범위에 따라 TVK 라이선스도 생성됩니다. 이 자습서에서는 클러스터 범위 설치를 사용합니다.
  • installTVK.ingressConfig.host: TVK UI 호스트 이름의 도메인 이름(demo-tutorial.tvk-doks.com)입니다. 사용자는 이 도메인 이름을 통해 TVK 관리 콘솔에 액세스합니다.
  • installTVK.ComponentConfiguration.ingressController.service.type: NodePort 또는 LoadBalancer와 같이 TVK UI에 액세스하기 위한 서비스 유형입니다.< /리>

참고: 사용 가능한 모든 옵션을 보려면 TrilioVault Helm 값 파일을 검사할 수 있습니다. 자세한 내용은 구성 옵션에 대한 TVK 설명서를 확인하십시오.

다음 명령을 실행하여 tvk 배포를 확인합니다.

  1. helm ls -n tvk

이 명령은 추가한 helm 리포지토리를 나열합니다.

Output
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION triliovault-manager-tvk tvk 1 2022-08-18 08:19:50.409742366 +0000 UTC deployed k8s-triliovault-2.10.3 2.10.3 triliovault-operator tvk 1 2022-08-18 08:15:51.618651231 +0000 UTC deployed k8s-triliovault-operator-2.10.3 2.10.3

STATUS 열에 deployed가 표시되어야 합니다.

다음으로 TrilioVault가 실행 중인지 확인합니다. 다음 명령을 실행하면 tvk 설치 상태가 표시됩니다.

  1. kubectl get deployments -n tvk

이 명령은 tvk 네임스페이스의 배포를 표시합니다.

출력은 다음과 유사합니다.

Output
NAME READY UP-TO-DATE AVAILABLE AGE k8s-triliovault-admission-webhook 1/1 1 1 83s k8s-triliovault-control-plane 1/1 1 1 83s k8s-triliovault-exporter 1/1 1 1 83s k8s-triliovault-ingress-nginx-controller 1/1 1 1 83s k8s-triliovault-web 1/1 1 1 83s k8s-triliovault-web-backend 1/1 1 1 83s triliovault-operator-k8s-triliovault-operator 1/1 1 1 4m22s

READY 열은 ready/desired 패턴에 따라 사용 가능한 배포 수를 표시합니다. 모든 배포 포드는 READY 상태이며 이는 tvk가 성공적으로 설치되었음을 의미합니다. 다음으로 TrilioVault 라이선스 유형과 유효성을 확인합니다.

TrilioVault 애플리케이션 라이선스 확인

전제 조건의 일부로 Cluster 범위 설치 유형에 대한 TrilioVault 라이선스를 요청하고 이를 yaml 파일로 저장했습니다. 이 섹션에서는 TrilioVault 라이센스를 적용하고 상태를 확인하고 해당 필드를 검사합니다.

전제 조건의 일부로 Trilio 웹사이트에서 무료 라이선스를 다운로드하여 yaml 파일로 저장했습니다. 이제 아래 명령을 사용하여 적용하십시오.

  1. kubectl apply -f your_license_filename.yaml -n tvk

다음으로 라이선스가 설치되어 있고 클러스터에서 활성 상태인지 확인합니다.

  1. kubectl get license -n tvk

출력은 다음과 유사합니다.

Output
NAME STATUS MESSAGE CURRENT NODE COUNT GRACE PERIOD END TIME EDITION CAPACITY EXPIRATION TIME MAX NODES your_license Active Cluster License Activated successfully. 1 Basic 100 2023-04-25T00:00:00Z 1

활성이어야 하는 STATUS,를 확인하십시오. EDITION 열에서 라이선스 유형을 확인하고 EXPIRATION TIME 열에서 라이선스 만료를 확인할 수도 있습니다.

라이선스는 License 개체라는 특수 CRD를 통해 관리됩니다. 이전 출력과 같이 강조 표시된 부분을 라이선스 이름으로 바꾸고 아래 명령을 실행하여 검사할 수 있습니다.

  1. kubectl describe license your_license -n tvk

출력은 다음과 유사합니다.

Output
Name: your_license Namespace: tvk Labels: <none> Annotations: generation: 4 triliovault.trilio.io/creator: trilio.user@trilio.io triliovault.trilio.io/instance-id: 1350188a-9289-49ba-9086-553e8cd7cabe triliovault.trilio.io/updater: [{"username":"system:serviceaccount:tvk:k8s-triliovault","lastUpdatedTimestamp":"2022-04-21T09:50:40.530365762Z"},{"username":"0c9f7f19-c4... API Version: triliovault.trilio.io/v1 Kind: License Metadata: Creation Timestamp: 2022-04-06T08:07:16Z ... Status: Condition: Message: Cluster License Activated successfully. Status: Active Timestamp: 2022-04-06T08:07:17Z Current CPU Count: 6 Max CP Us: 6 Message: Cluster License Activated successfully. Properties: Active: true Capacity: 100 Company: TRILIO-KUBERNETES-LICENSE-GEN-BASIC Creation Timestamp: 2022-04-21T00:00:00Z Edition: Basic Expiration Timestamp: 2027-04-25T00:00:00Z Kube UID: 1350188a-9289-49ba-9086-553e8cd7cabe License ID: TVAULT-7f70e73e-c158-11ec-990f-0cc47a9fd48e Maintenance Expiry Timestamp: 2027-04-25T00:00:00Z Number Of Users: -1 Purchase Timestamp: 2022-04-21T00:00:00Z Scope: Cluster ...

MessageCapacity 필드와 Edition을 확인하십시오.

위의 출력은 Expiration Timestamp 필드와 Scope(Cluster 기반 이 경우). 자세한 내용은 Kubernetes 라이선스 문서 페이지용 TrilioVault에서 확인할 수 있습니다.

이 단계에서는 TVK 라이선스를 적용하고 해당 상태를 확인했습니다. 다음으로 대상, 백업, 복원 등을 관리하는 데 도움이 되는 TVK 웹 콘솔을 탐색합니다.

3단계 - TVK 관리 콘솔에 액세스

이 단계에서는 GUI를 통해 대상을 만들고 백업 및 복원과 같은 작업을 관리할 수 있는 TVK 관리 콘솔에 액세스합니다. kubectlCRD를 통해 CLI에서 작업을 관리할 수 있는 동안 TVK 관리 콘솔은 포인트 앤 클릭 작업을 통해 일반적인 작업을 단순화하고 TVK의 더 나은 시각화 및 검사를 제공합니다. 클러스터 객체.

TVK용 인그레스 컨트롤러 서비스에 대한 이전 섹션에서.

Kubernetes 클러스터에 대한 kubeconfig 파일을 내보내는 것부터 시작하십시오. 웹 콘솔에서 사용자를 인증하려면 이 단계가 필요합니다.

DigitalOcean Kubernetes 서비스를 사용하는 경우 다음 단계에 따라 kubeconfig 파일을 내보낼 수 있습니다.

사용 가능한 클러스터를 나열합니다.

  1. doctl k8s cluster list

클러스터 구성을 YAML에 저장하고 강조 표시된 값을 클러스터 이름으로 바꿉니다.

  1. doctl kubernetes cluster kubeconfig show YOUR_CLUSTER_NAME_ > config_YOUR_CLUSTER_NAME_.yaml

참고: 클러스터가 하나만 있는 경우 아래 명령을 사용할 수 있습니다.

  1. DOKS_CLUSTER_NAME="$(doctl k8s cluster list --no-header --format Name)"
  2. doctl kubernetes cluster kubeconfig show $DOKS_CLUSTER_NAME > config_${DOKS_CLUSTER_NAME}.yaml

생성된 kubeconfig 파일에는 클러스터에 액세스하는 데 사용되는 토큰 및 사용자 세부 정보와 같은 민감한 데이터가 포함되어 있으므로 안전하게 보관하십시오. 파일을 비공개 위치에 저장하고 암호 관리 응용 프로그램 또는 암호화된 형식을 사용하는 것이 좋습니다.

이제 인증을 위한 kubeconfig 파일이 있으므로 포트 포워드를 설정하여 관리 콘솔에 액세스합니다.

먼저 tvk 네임스페이스에서 ingress-nginx-controller 서비스를 식별합니다. 다음 명령을 실행하여 tvk 네임스페이스의 서비스를 나열하면 됩니다.

  1. kubectl get svc -n tvk

출력은 다음과 유사합니다.

Output
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE k8s-triliovault-admission-webhook ClusterIP 10.245.202.17 <none> 443/TCP 13m k8s-triliovault-ingress-nginx-controller NodePort 10.245.192.140 <none> 80:32448/TCP,443:32588/TCP 13m k8s-triliovault-ingress-nginx-controller-admission ClusterIP 10.3.20.89 <none> 443/TCP 13m k8s-triliovault-web ClusterIP 10.245.214.13 <none> 80/TCP 13m k8s-triliovault-web-backend ClusterIP 10.245.10.221 <none> 80/TCP 13m triliovault-operator-k8s-triliovault-operator-webhook-service ClusterIP 10.245.186.59 <none> 443/TCP 16m

k8s-triliovault-ingress-nginx-controller 줄을 검색하고 PORT(s) 열의 포트 80에서 수신 대기하는지 확인합니다. .

TrilioVault 인그레스 서비스는 Type 열에 표시되는 NodePort 또는 LoadBalancer로 구성할 수 있습니다. NodePort로 설정된 경우 도메인에 액세스할 수 있는지 확인해야 합니다. NodePort를 사용하여 TVK 관리 콘솔에 액세스하는 경우 TrilioVault 인그레스 서비스는 TVK 콘솔에 액세스하는 데 사용되는 도메인 이름을 확인하지 않고는 외부 네트워크에 직접 연결할 수 없습니다. 이 문제를 해결하려면 etc/hosts 파일에 IP 주소와 도메인 이름 항목을 추가하여 도메인 이름을 IP로 확인합니다.

이렇게 하려면 편집을 위해 /etc/hosts 파일을 열고 다음 항목을 추가합니다.

127.0.0.1 demo-tutorial.tvk-doks.com

demo-tutorial.tvk-doks.com은 TrilioVault 인그레스 컨트롤러 서비스용으로 설정된 도메인 이름입니다. 이 도메인을 사용하여 TVK 관리 콘솔에 액세스합니다.

파일을 저장하고 닫습니다.

다음으로 TVK 수신 컨트롤러 서비스에 대한 포트 전달을 만듭니다.

  1. kubectl port-forward svc/k8s-triliovault-ingress-nginx-controller 8080:80 -n tvk &

이제 웹 브라우저에서 http://demo-tutorial.tvk-doks.com:8080으로 이동하여 콘솔에 액세스할 수 있습니다. kubeconfig 파일을 요청하면 이 섹션에서 생성한 파일을 선택하십시오.

참고: TVK는 kubeconfig 파일을 사용하여 인증을 위한 토큰을 생성합니다. kubeconfig 파일에 있는 사용자 세부 정보는 저장하지 않습니다.

이 단계에서는 TVK 관리 콘솔에 대한 액세스를 설정합니다. 콘솔의 사용 가능한 기능에 대한 자세한 내용은 TVK 웹 관리 콘솔 공식 문서를 참조하십시오.

다음 단계에서는 대상이라고 하는 TrilioVault의 스토리지 백엔드를 정의합니다.

4단계 - 백업을 저장할 TrilioVault 대상 생성

TrilioVault는 대상이라고 하는 백업을 저장할 위치를 알아야 합니다. 다음 대상 유형이 지원됩니다: S3NFS. 이 자습서에서는 S3 스토리지 유형을 사용합니다. 자세한 내용은 TVK 설명서의 백업 대상 섹션에서 확인할 수 있습니다.

S3 스토리지에 액세스하려면 각 대상이 비밀에 저장된 버킷의 자격 증명을 알아야 합니다. 이 단계에서는 백업용 TrilioVault 대상과 버킷의 자격 증명을 저장할 암호를 생성합니다.

시작하려면 대상 S3 버킷 자격 증명이 포함된 Kubernetes 암호를 생성합니다. nano 또는 즐겨 사용하는 텍스트 편집기를 사용하여 trilio-s3-target-secret라는 파일을 만들고 다음 코드를 추가하여 강조 표시된 값을 DigitalOcean Spaces로 바꾸십시오. 액세스 키 및 비밀 키:

apiVersion: v1
kind: Secret
metadata:
  name: trilio-s3-target-secret
  namespace: tvk
type: Opaque
stringData:
  accessKey: your_bucket_access_key
  secretKey: your_bucket_secret_key

비밀 이름trilio-s3-target-secret입니다. 이것은 다음에 생성할 target 매니페스트의 spec.objectStoreCredentials.credentialSecret 필드에서 참조됩니다. 비밀TrilioVault가 설치된 동일한 네임스페이스(기본값은 tvk) 또는 다음의 다른 네임스페이스에 있을 수 있습니다. 당신의 선택. (사용하는 네임스페이스가 올바르게 참조되는지 확인하십시오.)

파일을 저장하고 닫습니다.

이 매니페스트를 적용하고 비밀을 만들려면 다음 명령을 실행합니다.

  1. kubectl apply -f trilio-s3-target-secret.yaml -n tvk

참고: 또는 다음 명령을 실행하여 자리 표시자 값을 DigtalOcean 버킷 액세스 키 및 비밀 키로 대체하여 비밀을 생성할 수 있습니다.

  1. kubectl create secret generic trilio-s3-target-secret \
  2. --namespace=tvk \
  3. --from-literal=accessKey="your_bucket_access_key" \
  4. --from-literal=secretKey="your_bucket_secret_key"

출력은 다음과 같습니다.

Output
secret/trilio-s3-target-secret created

다음으로 대상에 대한 매니페스트를 만듭니다. trilio-s3-target.yaml이라는 새 파일을 만들고 다음 코드 블록을 추가합니다. bucketName, regionurl에 대해 강조 표시된 값을 버킷의 제어판에서 찾을 수 있는 DigitalOcean 버킷에 대한 정보로 바꿉니다.

apiVersion: triliovault.trilio.io/v1
kind: Target
metadata:
  name: trilio-s3-target
  namespace: tvk
spec:
  type: ObjectStore
  vendor: Other
  enableBrowsing: true
  objectStoreCredentials:
    bucketName: your_bucket_name
    region: your_bucket_region           # e.g.: nyc1 or us-east-1
    url: https://nyc1.digitaloceanspaces.com      # update the region to match your bucket
    credentialSecret:
      name: trilio-s3-target-secret
      namespace: tvk
  thresholdCapacity: 10Gi

위 구성에 대한 설명은 다음과 같습니다.

  • spec.type: 백업 스토리지의 대상 유형(S3은 ObjectStore임).
  • spec.vendor: 대상을 호스팅하는 타사 스토리지 공급업체입니다(DigitalOcean Spaces의 경우 Other를 사용해야 함).
  • spec.enableBrowsing: 대상 탐색을 활성화합니다.
  • spec.objectStoreCredentials: S3 스토리지에 액세스하는 데 필요한 credentials(credentialSecret를 통해) 및 버킷 영역과 같은 기타 매개변수를 정의합니다. 그리고 이름.
  • spec.thresholdCapacity: 백업 데이터를 저장하기 위한 최대 임계 용량.

credentialSecret 이름은 방금 만든 비밀과 일치합니다.

매니페스트 파일을 저장하고 닫습니다.

이제 kubectl을 사용하여 target 객체를 생성합니다.

  1. kubectl apply -f trilio-s3-target.yaml -n tvk

출력은 다음과 같습니다.

Output
target.triliovault.trilio.io/trilio-s3-target created

TrilioVaulttrilio-s3-target-validator라는 작업자 작업을 생성하여 S3 버킷(가용성, 권한 등)의 유효성 검사를 담당합니다 , 등등). 작업이 성공적으로 완료되면 버킷이 정상이거나 사용 가능한 것으로 간주되며 나중에 trilio-s3-target-validator 작업 리소스가 삭제됩니다.

이제 다음 명령을 실행하고 대상 이름을 전달하여 이전에 만든 대상 리소스가 정상인지 확인합니다.

  1. kubectl get target trilio-s3-target -n tvk

출력은 다음과 유사합니다.

Output
NAME TYPE THRESHOLD CAPACITY VENDOR STATUS BROWSING ENABLED trilio-s3-target ObjectStore 10Gi Other Available true

STATUS 열 값은 Available이며 대상이 정상 상태임을 의미합니다.

TVK 관리 콘솔을 사용하여 대상 상태를 확인할 수도 있습니다. 로그인 후 백업 및 복구를 선택한 후 대상을 클릭하여 확인합니다.

상태가 사용 가능으로 표시되면 S3 대상 객체를 성공적으로 구성한 것입니다.

그러나 구성에 문제가 있으면 상태가 사용할 수 없음으로 표시됩니다. 이러한 경우 로그를 검사하고 가능한 문제를 찾을 수 있도록 S3 대상 유효성 검사기 작업이 그대로 실행됩니다. 대상 개체가 정상 상태가 되지 못하는 경우 trilio-s3-target-validator 포드에서 로그를 검사하여 문제를 찾을 수 있습니다.

로그를 확인하려면 대상 유효성 검사기를 찾는 것으로 시작합니다.

  1. kubectl get pods -n tvk | grep trilio-s3-target-validator

출력은 다음과 유사하지만 고유 식별자가 있습니다.

Output
trilio-s3-target-validator-tio99a-6lz4q 1/1 Running 0 104s

이전 출력의 대상 유효성 검사기를 사용하여 다음 명령을 사용하여 데이터 로그를 가져옵니다.

  1. kubectl logs pod/trilio-s3-target-validator-tio99a-6lz4q -n tvk

출력은 다음과 비슷할 것입니다(예외를 참고하십시오).

Output
... INFO:root:2021-11-24 09:06:50.595166: waiting for mount operation to complete. INFO:root:2021-11-24 09:06:52.595772: waiting for mount operation to complete. ERROR:root:2021-11-24 09:06:54.598541: timeout exceeded, not able to mount within time. ERROR:root:/triliodata is not a mountpoint. We can't proceed further. Traceback (most recent call last): File "/opt/tvk/datastore-attacher/mount_utility/mount_by_target_crd/mount_datastores.py", line 56, in main utilities.mount_datastore(metadata, datastore.get(constants.DATASTORE_TYPE), base_path) File "/opt/tvk/datastore-attacher/mount_utility/utilities.py", line 377, in mount_datastore mount_s3_datastore(metadata_list, base_path) File "/opt/tvk/datastore-attacher/mount_utility/utilities.py", line 306, in mount_s3_datastore wait_until_mount(base_path) File "/opt/tvk/datastore-attacher/mount_utility/utilities.py", line 328, in wait_until_mount base_path)) Exception: /triliodata is not a mountpoint. We can't proceed further. ...

디버깅에 대한 추가 도움이 필요하거나 대상을 생성하는 동안 문제가 발생하는 경우 지원을 확인하십시오.

이 단계에서는 TrilioVault 대상을 구성하고 버킷의 자격 증명을 제공하는 암호를 생성했습니다. 다음으로 백업 및 복원 작업을 수행하여 재해 복구 시나리오를 다룹니다.

5단계 - Kubernetes 클러스터 백업 및 복원

이 단계에서는 Kubernetes 클러스터의 백업을 수행합니다. 그런 다음 네임스페이스를 삭제하고 백업을 사용하여 모든 중요한 애플리케이션을 해당 네임스페이스로 복원합니다. target에서 location을 통해 클러스터 복원 작업을 수행합니다. 클러스터 마이그레이션을 수행해야 하는 경우에도 동일한 흐름이 적용됩니다.

여기서 주요 아이디어는 필수 애플리케이션 및 구성을 보유하는 매우 중요한 네임스페이스를 포함하여 완전한 클러스터 백업을 수행하는 것입니다. 전체 클러스터 백업 및 복원이 아니라 다중 네임스페이스 백업 및 복원 작업입니다. 실제로 Kubernetes에서는 모든 것이 네임스페이스이기 때문에 이것이 필요한 전부입니다.

Kubernetes 클러스터 백업 생성

이 섹션에서는 Kubernetes 클러스터에서 가장 중요한 네임스페이스를 대상으로 하는 ClusterBackupPlan CRD를 사용하여 다중 네임스페이스 백업을 만듭니다.

클러스터 백업 작업을 시작하려면 백업할 리소스 집합을 정의하는 ClusterBackupPlan을 만듭니다. 사양에는 백업 일정, 백업 대상 및 백업할 리소스가 포함됩니다. 리소스는 Helm 릴리스, 오퍼레이터 또는 베어 Kubernetes API 리소스의 형태로 정의할 수 있습니다.

텍스트 편집기를 사용하여 k8s-cluster-backup-plan.yaml이라는 ClusterBackupPlan 매니페스트 파일을 만듭니다. 여러 네임스페이스를 대상으로 하는 일반적인 매니페스트인 다음 코드 블록을 추가합니다.

apiVersion: triliovault.trilio.io/v1
kind: ClusterBackupPlan
metadata:
  name: k8s-cluster-backup-plan
  namespace: tvk
spec:
  backupConfig:
    target:
      name: trilio-s3-target
      namespace: tvk
  backupComponents:
    - namespace: wordpress
    - namespace: mysqldb
    - namespace: etcd

backupComponents에 나열된 네임스페이스가 클러스터에 있는지 확인하십시오.

kube-system(또는 다른 Kubernetes 클러스터 관련 네임스페이스)이 backupComponents에 포함되어 있지 않음을 알 수 있습니다. 일반적으로 해당 수준에서 일부 설정을 유지해야 하는 특별한 경우가 아니면 필요하지 않습니다.

파일을 저장하고 닫습니다.

이제 kubectl을 사용하여 ClusterBackupPlan 리소스를 생성합니다.

  1. kubectl apply -f k8s-cluster-backup-plan.yaml

출력은 다음과 같습니다.

Output
clusterbackupplan.triliovault.trilio.io/k8s-cluster-backup-plan created

이제 kubectl을 사용하여 ClusterBackupPlan 상태를 검사합니다.

  1. kubectl get clusterbackupplan k8s-cluster-backup-plan -n tvk

출력은 다음과 유사합니다.

Output
NAME TARGET ... STATUS k8s-cluster-backup-plan trilio-s3-target ... Available

사용 가능으로 설정되어야 하는 STATUS 열 값을 확인합니다.

TVK 관리 콘솔을 사용하여 ClusterBackupPlan 상태를 볼 수도 있습니다. 로그인 후 백업 및 복구를 선택한 다음 보려는 백업 계획을 선택합니다.

이 시점에서 ClusterBackupPlan을 생성했습니다. 다음으로 spec.clusterBackupPlan.name의 실제 ClusterBackupPlan을 가리키는 구성인 ClusterBackup을 생성합니다. ClusterBackupPlan은 항상 동일하게 유지됩니다. 여러 ClusterBackup 매니페스트 파일로 새로 고쳐서 여러 백업을 만들 수 있습니다.

이제 k8s-cluster-backup.yaml이라는 ClusterBackup 매니페스트 파일을 생성합니다. 다음 코드 블록을 추가합니다.

apiVersion: triliovault.trilio.io/v1
kind: ClusterBackup
metadata:
  name: k8s-cluster-backup
  namespace: tvk
spec:
  type: Full
  clusterBackupPlan:
    name: k8s-cluster-backup-plan
    namespace: tvk

파일을 저장하고 닫습니다.

마지막으로 kubectl을 사용하여 ClusterBackup 리소스를 생성합니다.

  1. kubectl apply -f k8s-cluster-backup.yaml

ClusterBackup 매니페스트를 적용하면 백업 프로세스가 트리거됩니다.

출력은 다음과 같습니다.

Output
clusterbackup.triliovault.trilio.io/k8s-cluster-backup created

이제 kubectl을 사용하여 ClusterBackup 상태를 검사합니다.

  1. kubectl get clusterbackup k8s-cluster-backup -n tvk

출력은 다음과 유사합니다.

Output
NAME BACKUPPLAN BACKUP TYPE STATUS ... PERCENTAGE COMPLETE k8s-cluster-backup k8s-cluster-backup-plan Full Available ... 100

Available로 설정되어야 하는 STATUS 열 값과 100으로 설정된 PERCENTAGE COMPLETE를 확인합니다. .

TVK 관리 콘솔을 사용하여 클러스터 백업 상태를 볼 수도 있습니다. 기본 대시보드에서 모니터링을 선택한 다음 왼쪽 창에서 TrilioVault 모니터링을 선택합니다.

전체 클러스터 백업을 완료하는 데는 네임스페이스, 연결된 리소스 및 PVC에 있는 데이터가 프로세스에 포함된 데이터에 따라 다소 시간이 걸립니다. 출력이 위와 같으면 백업 계획에 포함된 중요한 애플리케이션 네임스페이스가 모두 성공적으로 백업된 것입니다.

웹 콘솔 기본 대시보드를 열고 다중 네임스페이스 백업을 검사할 수도 있습니다. 기본 대시보드에서 백업 및 복구를 선택한 다음 네임스페이스를 선택합니다. 오른쪽 상단에서 목록 보기와 벌집 구조 사이를 전환할 수 있습니다.

벌집 보기에서 백업의 일부였던 모든 중요한 네임스페이스가 강조 표시됩니다.

이 섹션에서는 클러스터 백업을 생성했습니다. 다음 섹션에서는 네임스페이스를 삭제한 다음 백업에서 복원합니다.

네임스페이스 삭제

이제 클러스터 백업이 있으므로 이후 단계에서 백업에서 복원할 수 있도록 네임스페이스를 삭제합니다. 네임스페이스를 삭제하려면 다음 명령을 실행하여 필요에 따라 강조 표시된 네임스페이스를 바꿉니다.

  1. kubectl delete ns wordpress
  2. kubectl delete ns mysqldb
  3. kubectl delete ns etcd

출력은 다음과 같습니다.

Output
namespace "wordpress" deleted namespace "mysqldb" deleted namespace "etcd" deleted

이제 네임스페이스가 삭제되었으므로 백업을 복원합니다.

관리 콘솔을 사용하여 백업 복원

이 섹션에서는 TVK 웹 콘솔을 사용하여 백업에서 모든 중요한 애플리케이션을 복원합니다. 복원 프로세스는 백업이 저장된 대상의 유효성을 검사합니다. TVK는 대상 리포지토리에 연결하여 datamovermetamover pods를 사용하여 백업 파일을 가져옵니다. TVK는 백업 스토리지에서 가져온 Kubernetes 애플리케이션을 생성합니다.

복원 작업을 시작하려면 먼저 대상 매니페스트를 다시 만들어야 합니다. 기존 네임스페이스가 삭제되었으므로 해당 네임스페이스에서 생성된 대상 사용자 지정 리소스도 삭제되었습니다. 이는 클러스터에 대상 사용자 지정 리소스가 없음을 의미합니다.

백업을 저장할 TrilioVault 대상 생성에 설명된 대로 TVK 대상을 구성하고 백업 데이터가 있는 동일한 S3 버킷을 가리킵니다. 대상 탐색이 활성화되어 있는지 확인하십시오.

그런 다음 백업 및 복구로 이동한 다음 네임스페이스가 있는 대상: 모두 선택됨:

사용 가능한 백업을 나열하려면 오른쪽에 있는 작업 버튼을 클릭한 다음 드롭다운 메뉴에서 브라우저 시작 옵션을 선택합니다.

이것이 작동하려면 대상에 enableBrowsing 플래그가 true로 설정되어 있어야 합니다.

브라우저 시작을 선택하면 대상 브라우저가 나타납니다.

이제 백업 계획 목록에서 k8s-cluster-backup-plan 항목을 클릭합니다. 상태를 포함하여 백업에 대한 정보를 보여주는 하위 창이 오른쪽에 나타납니다.

오른쪽 하위 창에서 k8s-cluster-backup 항목을 클릭하고 확장합니다.

복원 프로세스를 시작하려면 복원 버튼을 클릭하십시오.

다음으로 복원 프로세스에 대한 몇 가지 옵션이 있는 팝업 창이 표시됩니다. 복원 프로세스의 다양한 옵션을 이해하기 위해 TrilioVault 설명서의 복원 플래그 섹션에서 각 플래그에 대한 세부 정보를 찾을 수 있습니다.

복원 사용자 지정 리소스 생성을 위한 복원 이름을 입력합니다. 이름을 제공하면 백업의 모든 중요한 네임스페이스를 데이터를 복원하려는 네임스페이스에 매핑할 수 있습니다. 이 경우 구성 창에서 네임스페이스 구성을 선택한 다음 원하는 네임스페이스를 선택합니다.

복원 프로세스가 시작되면 진행률을 모니터링할 수 있습니다. 다음과 유사한 진행률 창이 표시됩니다.

잠시 후 진행이 완료되면 다중 네임스페이스 복원 작업이 성공적으로 완료된 것입니다.

이 섹션에서는 관리 콘솔을 사용하여 백업을 복원했습니다. 다음 섹션에서는 복원 작업이 성공했는지 확인합니다.

DOKS 클러스터 애플리케이션 상태 확인

이 섹션에서는 복원 작업이 성공했고 복원 후 응용 프로그램에 액세스할 수 있는지 확인합니다. 시작하려면 다음 명령을 실행하여 나열된 네임스페이스에서 애플리케이션과 관련된 모든 개체를 검색합니다.

  1. kubectl get all --namespace wordpress
  2. kubectl get all --namespace mysqldb
  3. kubectl get all --namespace etcd

출력은 각 애플리케이션에 대해 다음과 유사하게 표시됩니다.

Output
NAME READY STATUS RESTARTS AGE pod/wordpress-5dcf55f8fc-72h9q 1/1 Running 1 2m21s pod/wordpress-mariadb-0 1/1 Running 1 2m20s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/wordpress LoadBalancer 10.120.1.38 34.71.102.21 80:32402/TCP,443:31522/TCP 2m21s service/wordpress-mariadb ClusterIP 10.120.7.213 <none> 3306/TCP 2m21s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/wordpress 1/1 1 1 2m21s NAME DESIRED CURRENT READY AGE replicaset.apps/wordpress-5dcf55f8fc 1 1 1 2m21s NAME READY AGE statefulset.apps/wordpress-mariadb 1/1 2m21s

출력 세부 정보는 WordPress 애플리케이션 배포의 1/1 컨테이너가 READY 상태에 있음을 보여줍니다. 또한 WordPress 애플리케이션 포드 및 WordPress MariaDB 포드에는 RUNNING 상태의 1/1 컨테이너가 있습니다. 이러한 상태는 애플리케이션이 성공적으로 복원되었음을 확인합니다.

다음 단계에서는 DOKS 클러스터 응용 프로그램에 대해 예약된(또는 자동) 백업을 수행하는 방법을 배웁니다.

6단계 - 백업 예약

일정에 따라 자동으로 백업을 생성하는 것은 매우 유용한 기능입니다. 문제가 발생하면 시간을 되감고 시스템을 이전 작업 상태로 복원할 수 있습니다. 기본적으로 TrilioVault는 매일, 매주 및 매월의 세 가지 예약 정책을 생성합니다.

TVK 콘솔에서 백업 및 복구, 정책 예약에서 기본 정책을 볼 수 있습니다.

예약 정책은 BackupPlan 또는 ClusterBackupPlan CRD에 사용할 수 있습니다.

scheduled-backup-every-5min.yaml이라는 매니페스트 파일을 만들고 일반적인 사용자 지정 일정 정책 CRD인 다음 코드를 추가합니다.

apiVersion: triliovault.trilio.io/v1
kind: Policy
apiVersion: triliovault.trilio.io/v1
metadata:
  name: scheduled-backup-every-5min
  namespace: tvk
spec:
  type: Schedule
  scheduleConfig:
    schedule:
      - "*/5 * * * *" # trigger every 5 minutes

이 매니페스트는 tvk 네임스페이스 아래에 scheduled-backup-every-5min라는 예약된 백업 정책을 생성합니다. BackupPlan 개체에 따라 5분마다 예약된 백업을 트리거하는 데 사용됩니다.

매니페스트를 생성한 후 이를 사용하여 일정 Policy를 생성할 수 있습니다.

  1. kubectl apply -f scheduled-backup-every-5min.yaml

출력은 다음과 같습니다.

Output
policy.triliovault.trilio.io/scheduled-backup-every-5min created

일정 정책을 적용하려면 ClusterBackupPlan CRD에 추가합니다. 5단계에서 만든 ClusterBackupPlan CRD를 열고 강조 표시된 줄을 추가합니다.

apiVersion: triliovault.trilio.io/v1
kind: ClusterBackupPlan
metadata:
  name: k8s-cluster-backup-plan
  namespace: tvk
spec:
  backupConfig:
    target:
      name: trilio-s3-target
      namespace: tvk
    schedulePolicy:
      fullBackupPolicy:
        name: scheduled-backup-every-5min
        namespace: tvk
  backupComponents:
    - namespace: wordpress
    - namespace: mysqldb
    - namespace: etcd

ClusterBackupPlan CRD는 spec.backupConfig.schedulePolicy 필드를 통해 이전에 정의된 Policy CRD를 참조합니다. 전체 또는 증분 백업에 대해 별도의 정책을 생성할 수 있으므로 fullBackupPolicy 또는 incrementalBackupPolicy를 투기.

파일을 저장하고 닫습니다.

이 단계에서는 백업을 예약하고 예약 정책을 ClusterBackupPlan에 추가했습니다. 다음 단계에서는 백업에 대한 보존 정책을 설정하는 방법을 배웁니다.

7단계 - 백업 보존 정책 생성

이 단계에서는 백업의 주기를 결정하는 백업 보존 정책을 생성합니다. 스토리지는 한정되어 있고 너무 많은 개체를 보관하면 비용이 많이 들 수 있으므로 보관 정책이 중요합니다.

보존 정책을 사용하면 준수 요구 사항에 따라 보존할 백업 수와 백업 삭제 주기를 정의할 수 있습니다. 보존 정책 CRD는 보존할 백업 수를 , , , 년으로 정의하는 YAML 사양을 제공합니다. , 최신 등.

또한 TVK에는 백업 및 복구 아래의 TVK 콘솔에서 볼 수 있는 기본 보존 정책이 있으며, 그 다음 보존 정책이 있습니다.

보존 정책은 BackupPlan 또는 ClusterBackupPlan CRD에 사용할 수 있습니다. sample-retention-policy.yaml이라는 새 파일을 만들고 다음 줄을 추가합니다.

apiVersion: triliovault.trilio.io/v1
kind: Policy
metadata:
  name: sample-retention-policy
spec:
  type: Retention
  retentionConfig:
    latest: 2
    weekly: 1
    dayOfWeek: Wednesday
    monthly: 1
    dateOfMonth: 15
    monthOfYear: March
    yearly: 1

이것은 보유 유형에 대한 일반적인 정책 매니페스트입니다. 위 구성에 대한 설명은 다음과 같습니다.

  • spec.type: 정책 유형을 정의합니다: Retention 또는 Schedule.
  • spec.retentionConfig: 백업 보존에 사용할 간격 및 보존 횟수와 같은 보존 구성을 설명합니다.
  • spec.retentionConfig.latest: 보관할 최대 최신 백업 수.
  • spec.retentionConfig.weekly: 일주일에 보관할 최대 백업 수.
  • spec.retentionConfig.dayOfWeek: 주간 백업을 유지 관리할 요일
  • spec.retentionConfig.monthly: 한 달에 보관할 최대 백업 수.
  • spec.retentionConfig.dateOfMonth: 매월 백업을 유지 관리할 날짜.
  • spec.retentionConfig.monthOfYear: 연간 백업을 위해 보관할 백업 월.
  • spec.retentionConfig.yearly: 1년 동안 보존할 최대 백업 수.

위에서 구성된 보존 정책에서 백업 정책은 매주 기준으로 수요일마다 하나의 백업을 보존합니다. 매월 기준으로 15일일에 하나의 백업; 그리고 매년 기준으로 3월마다 한 번 백업합니다. 전반적으로 최신 2개 백업을 사용할 수 있습니다.

보존 정책 리소스를 생성하는 기본 흐름은 예약된 백업과 동일합니다. 보존 정책을 참조하도록 정의된 BackupPlan 또는 ClusterBackupPlan CRD와 Backup 또는 ClusterBackup 개체가 필요합니다. 프로세스를 트리거합니다.

보존 정책을 적용하려면 ClusterBackupPlan CRD를 열고 다음과 같이 업데이트하십시오.

apiVersion: triliovault.trilio.io/v1
kind: ClusterBackupPlan
metadata:
  name: k8s-cluster-backup-plan
  namespace: tvk
spec:
  backupConfig:
    target:
      name: trilio-s3-target
      namespace: tvk
    retentionPolicy:
      fullBackupPolicy:
        name: sample-retention-policy
        namespace: tvk
  backupComponents:
    - namespace: wordpress
    - namespace: mysqldb
    - namespace: etcd

매니페스트는 retentionPolicy 필드를 사용하여 해당 정책을 참조합니다. 예약된 백업을 수행하고 보존 전략을 처리할 수 있도록 두 가지 유형의 정책이 설정된 백업 계획을 가질 수 있습니다.

이 단계에서는 백업에 대한 보존 정책을 설정합니다.

결론

이 자습서에서는 Kubernetes용 TrilioVault를 설치하고 이를 사용하여 클러스터를 백업 및 복원했습니다. 또한 백업을 예약하고 보존 정책을 구성했습니다.

Kubernetes용 TrilioVault로 클러스터 백업을 위한 기본 작업을 완료했으므로 이제 TrilioVault 제품 문서의 다음 콘텐츠로 다른 주제와 자료를 탐색할 수 있습니다.

  • TVK 사용자 지정 리소스 정의 API 설명서.
  • 다양한 데이터베이스에 대해 제공된 예와 함께 백업 작업을 위한 사전/사후 후크 통합 방법.
  • 다중 클러스터 관리
  • Helm Releases Backup, Helm 릴리스 백업 전략의 예를 보여줍니다.
  • 타겟 스토리지의 백업을 덮어쓰도록 제한하는 변경 불가능한 백업.
  • 백업 암호화: 대상(스토리지)에서 중요한 데이터를 암호화하고 보호하는 방법을 설명합니다.
  • 변환 복원
  • 재해 복구 계획

Kubernetes에 대한 자세한 내용은 추가 자습서를 확인하세요.