Skip to content

#90DaysOfDevOps - Hands-On Backup & Recovery - Day 87

백업 및 복구 실습

지난 세션에서는 로컬 NAS와 클라우드 기반 오브젝트 스토리지에 중요한 데이터를 백업하는 데 사용한 오픈소스 백업 도구인 Kopia에 대해 살펴봤습니다.

이번 섹션에서는 Kubernetes 백업의 세계로 들어가 보겠습니다. 이 플랫폼은 챌린지 초반에 큰 그림: Kubernetes에서 다뤘던 플랫폼입니다.

이번에도 Minikube 클러스터를 사용하지만, 이번에는 사용 가능한 몇 가지 애드온을 활용하겠습니다.

Kubernetes 클러스터 설정

Minikube 클러스터를 설정하기 위해 minikube start --addons volumesnapshots,csi-hostpath-driver --apiserver-port=6443 --container-runtime=containerd -p 90daysofdevops --kubernetes-version=1.21.2를 실행하면 백업을 수행할 때 이를 최대한 활용하기 위해 volumesnapshotscsi-hostpath-driver를 사용하고 있는 것을 알 수 있습니다.

이 시점에서는 아직 Kasten K10을 배포하지 않았지만, 클러스터가 가동되면 다음 명령을 실행하여 Kasten K10이 이를 사용할 수 있도록 volumesnapshotclass에 주석을 달려고 합니다.

kubectl annotate volumesnapshotclass csi-hostpath-snapclass \
    k10.kasten.io/is-snapshot-class=true

또한 다음을 사용하여 기본 저장소 클래스를 표준 기본 저장소 클래스에서 csi-hostpath 저장소 클래스로 변경할 것입니다.

kubectl patch storageclass csi-hostpath-sc -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

kubectl patch storageclass standard -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'

Kasten K10 배포하기

Kasten Helm 리포지토리를 추가합니다.

helm repo add kasten https://charts.kasten.io/

여기에서도 arkade kasten install k10을 사용할 수 있지만 데모를 위해 다음 단계를 진행하겠습니다. 자세한 내용

네임스페이스를 생성하고 K10을 배포합니다.(약 5분 정도 소요됨)

helm install k10 kasten/k10 --namespace=kasten-io --set auth.tokenAuth.enabled=true --set injectKanisterSidecar.enabled=true --set-string injectKanisterSidecar.namespaceSelector.matchLabels.k10/injectKanisterSidecar=true --create-namespace

다음 명령어를 실행하여 pod가 생성되는 것을 확인할 수 있습니다.

kubectl get pods -n kasten-io -w

포트 포워딩을 통해 K10 대시보드에 접속하고, 새 터미널을 열어 아래 명령을 실행합니다.

kubectl --namespace kasten-io port-forward service/gateway 8080:8000

Kasten 대시보드는 http://127.0.0.1:8080/k10/#/에서 사용할 수 있습니다.

이제 대시보드로 인증하려면 다음 명령어로 얻을 수 있는 토큰이 필요합니다.

TOKEN_NAME=$(kubectl get secret --namespace kasten-io|grep k10-k10-token | cut -d " " -f 1)
TOKEN=$(kubectl get secret --namespace kasten-io $TOKEN_NAME -o jsonpath="{.data.token}" | base64 --decode)

echo "Token value: "
echo $TOKEN

이제 이 토큰을 가져와 브라우저에 입력하면 이메일과 회사 이름을 입력하라는 메시지가 표시됩니다.

그러면 Kasten K10 대시보드에 액세스할 수 있습니다.

stateful 애플리케이션 배포

Kubernetes 섹션에서 사용한 stateful 애플리케이션을 사용합니다.

이 애플리케이션의 YAML 구성 파일은 여기에서 찾을 수 있습니다. -> pacman-stateful-demo.yaml

kubectl get all -n pacman을 사용하여 다가오는 pod를 확인할 수 있습니다.

그런 다음 새 터미널에서 pacman 프론트엔드를 포트 포워드할 수 있습니다. kubectl port-forward svc/pacman 9090:80 -n pacman을 실행합니다.

브라우저에서 다른 탭을 열어 http://localhost:9090/ 에접속합니다.

시간을 내어 백엔드 MongoDB 데이터베이스에서 높은 점수를 기록하세요.

높은 점수 보호

이제 데이터베이스에 미션 크리티컬한 데이터가 있으며 이를 잃고 싶지 않습니다. 이 전체 애플리케이션을 보호하기 위해 Kasten K10을 사용할 수 있습니다.

Kasten K10 대시보드 탭으로 돌아가면 Kubernetes 클러스터에 pacman 애플리케이션이 추가되어 애플리케이션 수가 1개에서 2개로 늘어난 것을 볼 수 있습니다.

애플리케이션 카드를 클릭하면 클러스터에서 자동으로 검색된 애플리케이션을 볼 수 있습니다.

Kasten K10을 사용하면 스토리지 기반 스냅샷을 활용할 수 있을 뿐만 아니라 사본을 오브젝트 스토리지 옵션으로 내보낼 수도 있습니다.

데모에서는 클러스터에 수동 스토리지 스냅샷을 생성한 다음, 고득점 데이터에 불량 데이터를 추가하여 실수로 실수하는 상황을 시뮬레이션해 보겠습니다.

먼저 아래의 수동 스냅샷 옵션을 사용할 수 있습니다.

데모에서는 모든 것을 기본값으로 두겠습니다.

대시보드로 돌아가면 실행 중인 작업에 대한 상태 보고서가 표시되며, 완료되면 이와 같이 성공적으로 표시됩니다.

실패 시나리오

이제 애플리케이션에 규범적인 잘못된 변경을 추가하기만 하면 미션 크리티컬 데이터에 치명적인 변경을 수행할 수 있습니다.

아래에서 볼 수 있듯이, 프로덕션 미션 크리티컬 데이터베이스에는 원하지 않는 두 가지 입력이 있습니다.

데이터 복원

이것은 간단한 데모이며 현실적이지 않은 방식이지만 데이터베이스를 삭제하는 것이 얼마나 쉬운지 보셨나요?

이제 고득점 목록을 실수하기 전의 상태로 조금 더 깔끔하게 정리해 보겠습니다.

애플리케이션 카드와 pacman 탭으로 돌아가면 이제 복원할 수 있는 복원 지점이 하나 생겼습니다.

복원을 선택하면 해당 애플리케이션에 연결된 모든 스냅샷과 내보내기를 볼 수 있습니다.

복원을 선택하면 사이드 창이 나타나며, 기본 설정을 유지하고 복원을 누릅니다.

복원할 것인지 확인합니다.

그런 다음 대시보드로 돌아가서 복원 진행 상황을 확인할 수 있습니다. 다음과 같은 화면이 표시됩니다.

하지만 더 중요한 것은 미션 크리티컬 애플리케이션에서 고점수 목록이 어떻게 보이는지입니다. 앞서 다룬 대로 pacman으로 포트 포워딩을 다시 시작해야 합니다.

매우 간단한 데모이며, 백업과 관련하여 Kasten K10이 달성할 수 있는 것의 표면적인 부분만 다루었습니다. 앞으로 이러한 영역 중 일부에 대해 좀 더 심층적인 비디오 콘텐츠를 제작할 예정입니다. 또한 재해 복구 및 데이터의 이동성과 관련하여 데이터 관리와 관련된 몇 가지 다른 주요 영역을 강조하기 위해 Kasten K10을 사용할 것입니다.

다음에는 애플리케이션 일관성에 대해 살펴보겠습니다.

자료

Day 88에서 봐요!