본문 바로가기
서버인프라/kubernetes

velero backup

by techwold ted 2024. 5. 7.
Velero란?

Kubernetes 클러스터 리소스와 영구 볼륨을 백업하고 복원하는 도구 입니다.
클라우드 공급자 또는 온프레미스를 통해 Velero를 실행할 수 있습니다

 

kubernetes환경에서의 백업 솔루션 입니다. 그럼 이제 어떻게 사용 하는 지 확인해 보겠습니다.

 

Velero설치

https://github.com/vmware-tanzu/velero/releases

 

Releases · vmware-tanzu/velero

Backup and migrate Kubernetes applications and their persistent volumes - vmware-tanzu/velero

github.com

Go 언어로 작성 되어 있습니다. 사용 OS에 맞게 설치 하셔서 명령어를 사용 할 수 있도록 해주세요

 

백업해보기

velero를 사용하기위해서 velero파드를 배포해야 합니다.

저는 여기서 Ncloud에서 사용 할 것입니다. NKS를 구성해서 사용 했습니다. 여기서 NKS구성 내용은 빼고 오로지 velero에 관련해서만 작성 하도록 하겠습니다.

 

>>> mkdir velero
>>> vi cloud-credential
[default]
aws_access_key_id=<ACCESS_KEY_ID>
aws_secret_access_key=<SECRET_ACCESS_KEY>
region=<REGION>
server_api_uri=https://ncloud.apigw.ntruss.com/vserver/v2
velero install \
  --provider velero.io/aws \
  --bucket ted-velero-backup \
  --plugins velero/velero-plugin-for-aws:v1.6.2,nks.kr.private-ncr.ntruss.com/velero-plugin-for-ncloud:v0.0.7 \
  --backup-location-config region=kr,s3ForcePathStyle="true",s3Url=https://kr.object.private.ncloudstorage.com \
  --use-volume-snapshots=false \
  --secret-file=./cloud-credential

 

위 bucket과 동일한 object storage를 생성해 줍니다.

>>> velero snapshot-location create default --provider ncloud/volume-snapshotter-plugin

 

 

이제 velero설치를 마쳤습니다.

$ kubectl get pod -n velero
NAME                      READY   STATUS    RESTARTS   AGE
velero-5bdd7b8656-bdxxr   1/1     Running   0          5h47m

 

위와 같이 생성 됐다면, 정상적으로 설치된 것입니다. 여기서 스냅샷 사용을 위해 플러그인 설치를 진행합니다.

>>> velero snapshot-location create default --provider ncloud/volume-snapshotter-plugin

 

백업 / 복구

백업과 복구를 테스트 하기 위해, Nginx를 배포할 생각입니다.

>>> vi nginx_scenario.yaml

---

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: nginx-log-pvc
  namespace: nginx
  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
  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

 

>>> kubectl create ns nginx
>>> kubectl apply -f nginx_scenario.yaml -n nginx

PV가생성이 되고, Nginx의 "/var/log/nginx" 디렉토리를 pv에 붙을 겁니다.

 

 

시나리오

엔진엑스 로그를 생성하고, 로그가 잘 생성 되었는지 확인 합니다.
그리고, velero 백업을 통하여 백업을 진행하고 nginx네임스페이를 삭제및  pv도 삭제 후 velero를 통한 복원 후 기존 로그들이 그대로 남아 있는지 확인합니다.

 

>>> kubectl get pod -n nginx
NAME                          READY   STATUS    RESTARTS   AGE
nginx-deploy-ff9dd9b9-bds9m   1/1     Running   0          134m
>>> kubectl -n nginx port-forward pod/nginx-deploy-ff9dd9b9-bds9m 9191:80

웹 에서 localhost:9191 접속하여 로그 생성합니다.

>>> kubectl exec -it nginx-deploy-ff9dd9b9-bds9m -n nginx -- /bin/bash

 

로그가 잘 생성 된 것을 확인 할 수 있습니다.

root@nginx-deploy-ff9dd9b9-bds9m:/# cat /var/log/nginx/access.log
127.0.0.1 - - [12/Mar/2024:08:04:19 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36" "-"
127.0.0.1 - - [12/Mar/2024:08:04:56 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36" "-"
127.0.0.1 - - [12/Mar/2024:08:04:57 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36" "-"
127.0.0.1 - - [12/Mar/2024:08:04:58 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36" "-"
127.0.0.1 - - [12/Mar/2024:08:04:59 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36" "-"

 

이제 velero백업을 진행해 보겠습니다. 간단하니 잘 따라와 보세요

>>> velero backup create nginx-backup-20240312 --selector app=nginx

selector app=nginx로 정한 것들을 다 백업합니다. 아니면 아래와 같이 namespace기준으로 백업할 수있습니다.

>>> velero backup create nginx-backup-20240312 --include-namespaces nginx-example

 

그리고 snapshot으로 백업하는 방법도 있습니다.

>>> velero backup create nginx-backup-20240312 --include-namespaces nginx-example --snapshot-volumes

 

Object스토리지와 snapshot을 확인해 보세요. 변화된 것들을 찾을 수 있습니다.

이제 복구 테스트를 위해서 다음과 같이 삭제를 진행 하도록 하겠습니다.

>>> kubectl delete ns nginx
>>> kubectl get pv
NAME                             CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS     CLAIM                         STORAGECLASS        REASON   AGE
pvc-a0ff2be871024e69a37ba8118b   10Gi       RWO            Delete           Released   nginx-example/nginx-log-pvc   nks-block-storage            3h9m
>>> kubectl delete pv pvc-a0ff2be871024e69a37ba8118b

네임스페이스를 삭제해 주시고, pv검색해서 해당 pv역시 삭제해 주세요

 

복구

다음과 같이 복구를 진행하면 됩니다.

>>> velero restore create --from-backup nginx-backup-20240312

 

그리고, 백업한 파일을 찾기 위해 다음과 같은 명령어를 실행 할 수 있습니다.

>>> velero get backups
NAME                       STATUS      ERRORS   WARNINGS   CREATED                         EXPIRES   STORAGE LOCATION   SELECTOR
nginx-backup               Completed   0        0          2024-05-07 09:53:41 +0900 KST   29d       default            <none>
nginx-backup-20240507      Completed   0        0          2024-05-07 13:14:27 +0900 KST   29d       default            <none>
nginx-backup-20240507-01   Completed   0        0          2024-05-07 13:16:29 +0900 KST   29d       default            nginx-example

 

위와 같이 velero를 통해 백업을 통하여 안전하고 견고한 Kubernetes를 운영하세요

'서버인프라 > kubernetes' 카테고리의 다른 글

[Private Container Registry] Harbor  (50) 2024.04.15
K8S 기본 볼륨을 nfs로 사용해볼까  (57) 2024.02.01
쿠버네티스 networkpolicy  (68) 2024.01.30
service와 endpoint  (65) 2024.01.25
K8S 리셋  (30) 2023.12.24

댓글