Velero란?
Kubernetes 클러스터 리소스와 영구 볼륨을 백업하고 복원하는 도구 입니다.
클라우드 공급자 또는 온프레미스를 통해 Velero를 실행할 수 있습니다
kubernetes환경에서의 백업 솔루션 입니다. 그럼 이제 어떻게 사용 하는 지 확인해 보겠습니다.
Velero설치
https://github.com/vmware-tanzu/velero/releases
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 |
댓글