Velero 백업 및 복원 테스트 예제

Prev Next

Velero 플러그인에서 설명한 내용을 바탕으로 백업과 복원 기능이 정상적으로 작동하는지 테스트하는 예제입니다.

nginx 배포 예제

백업 및 복원 테스트 예제를 수행할 수 있도록 먼저 nginx를 배포합니다.

nginx를 배포하는 예제는 다음과 같습니다.

  1. 아래 코드를 복사하여 nginx-example.yaml 파일로 저장해 주십시오.
    # nginx-example.yaml
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: nginx-example
      labels:
        app: nginx
    ---
    
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: nginx-log-pvc
      namespace: nginx-example
      labels:
        app: nginx
    spec:
      storageClassName: nks-block-storage
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
    
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deploy
      namespace: nginx-example
      labels:
        app: nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          volumes:
            - name: nginx-logs
              persistentVolumeClaim:
               claimName: nginx-log-pvc
          containers:
          - image: nks.kr.ncr.ntruss.com/nginx:1.9
            name: nginx
            ports:
            - containerPort: 80
            volumeMounts:
            - mountPath: "/var/log/nginx"
              name: nginx-logs
              readOnly: false
    
  2. 아래 명령어를 실행하여 클러스터에 nginx를 배포해 주십시오.
    $ kubectl --kubeconfig $KUBE_CONFIG apply -f nginx-example.yaml
    
  3. nginx에 접속할 수 있도록 아래 명령어를 차례대로 실행하여 Pod를 확인한 후 포트포워딩해 주십시오.
    $ kubectl --kubeconfig $KUBE_CONFIG get pods --namespace nginx-example
    
    $ kubectl --kubeconfig $KUBE_CONFIG --namespace nginx-example port-forward pod/nginx-deploy-749cb5ff64-x8j4w 9191:80
    
  4. 포워딩된 포트를 브라우저에 입력하거나 curl 명령어를 사용하여 ngix에 접속한 후 화면이 정상적으로 표시되는지 확인해 주십시오.

Velero를 통한 백업 예제

Velero를 통해 백업을 수행하는 예제는 다음과 같습니다.

  1. 아래 명령어를 차례대로 실행하여 nginx 컨테이너에서 로그를 확인한 후 컨테이너에서 나와 주십시오.
    $ kubectl --kubeconfig $KUBE_CONFIG exec -it nginx-deploy-749cb5ff64-x8j4w --namespace nginx-example -- /bin/bash
    
    nginx-deploy-749cb5ff64-x8j4w:/# cat /var/log/nginx/access.log
    
    $ exit
    
  2. 아래 명령어를 실행하여 현재 클러스터 상태의 백업을 생성해 주십시오.
    $ velero --kubeconfig $KUBE_CONFIG backup create nginx-backup --selector app=nginx
    
    • nginx의 Kubernetes 오브젝트를 Object Storage에 저장하고, nginx를 배포할 때 생성했던 PersistentVolume의 스냅샷을 생성합니다.
    • --selector app=nginx 옵션은 Velero 서버가 Label Selector를 통해 app=nginx라는 Label이 설정되어 있는 Kubernetes 오브젝트만 백업하도록 지정합니다.

Velero를 통한 복원 예제

Velero에서 백업한 데이터를 사용하여 복원을 수행하는 예제는 다음과 같습니다.

  1. 아래 명령어를 차례대로 실행하여 nginx-example Namespace를 삭제한 후 정상적으로 삭제되었는지 확인해 주십시오.
    $ kubectl --kubeconfig $KUBE_CONFIG delete namespace nginx-example
    
    $ kubectl --kubeconfig $KUBE_CONFIG get deployments --namespace=nginx-example
    
  2. 아래 명령어를 실행하여 복원을 수행해 주십시오.
velero --kubeconfig $KUBE_CONFIG restore create --from-backup nginx-backup
  1. 아래 명령어를 각각 실행하여 복원이 정상적으로 수행되었는지 확인해 주십시오.
    • 복원된 Deployment의 상태 확인
    $ kubectl --kubeconfig $KUBE_CONFIG get deployments --namespace=nginx-example
    
    • PersistentVolume이 생성되었는지 확인
    $ kubectl --kubeconfig $KUBE_CONFIG get pvc --namespace=nginx-example
    
    • 아래 명령어를 차례대로 실행하여 복원 전과 같은 로그가 표시되는지 확인
    $ kubectl --kubeconfig $KUBE_CONFIG get pods --namespace nginx-example
    
    $ kubectl --kubeconfig $KUBE_CONFIG exec -it nginx-deploy-749cb5ff64-x8j4w --namespace nginx-example -- /bin/bash
    
    $ nginx-deploy-749cb5ff64-x8j4w:/# cat /var/log/nginx/access.log