Kubernetes Namespace 또는 Pod 의 리소스 및 볼륨 백업하기 (Velero)
쿠버네티스 환경에서는 백업 및 복원을 위해 다양한 도구를 사용할 수 있습니다. 대표적인 도구로는 Velero, Kopia 가 있습니다. 이것은 쿠버네티스 클러스터의 백업, 복원, 마이그레이션을 위한 오픈 소스 도구입니다.
백업 파일을 저장하기 위해서는 S3 호환 스토리지 (예: AWS S3, MinIO 등) 가 필요한데, 여기서는 MinIO 를 예로 들어 설명합니다.
1. Velero 클라이언트 설치
Velero 클라이언트를 설치하려면 Velero GitHub 릴리즈 페이지에서 최신 버전을 다운로드하고 설치합니다.
1) 최신 버전 확인 및 다운로드
# export VELERO_VERSION=$(curl -s https://api.github.com/repos/vmware-tanzu/velero/releases/latest | jq -r .tag_name)
2) Velero 다운로드
# wget https://github.com/vmware-tanzu/velero/releases/download/${VELERO_VERSION}/velero-${VELERO_VERSION}-linux-amd64.tar.gz
3) 압축 해제 및 이동
# tar -xvf velero-${VELERO_VERSION}-linux-amd64.tar.gz
# mv velero-${VELERO_VERSION}-linux-amd64/velero /usr/local/bin/
4) 설치 확인
# velero version
Client:
Version: v1.14.0
Git commit: 2fc6300f2239f250b40b0488c35feae59520f2d3
<error getting server version: no matches for kind "ServerStatusRequest" in version "velero.io/v1">
아래에서 서버 컴포넌트를 설치할 예정이므로, 출력된 에러는 무시해도 됩니다.
2. Velero 서버 컴포넌트 설치
Velero 는 Kubernetes 리소스 설정 및 볼륨 데이터 백업이 가능하지만, 볼륨에 포함되지 않은 컨테이너 내에 추가 생성된 파일은 백업이 되지 않습니다.
Velero 서버 컴포넌트 사용시 S3 호환 스토리지 (예: AWS S3, MinIO 등) 가 필요한데, 여기서는 MinIO 를 예로 들어 설명합니다.
MinIO 설치 방법은 별도 포스팅을 참고해 주세요.
(https://sysdocu.tistory.com/1942)
1) MinIO 자격 증명 파일 생성
Velero 가 MinIO 에 접근할 수 있도록 자격 증명 파일을 생성합니다. credentials-velero 라는 파일을 다음과 같이 작성합니다.
설정에 aws 라는 문구가 있어도 무시해도 됩니다. S3 를 기준으로 만들어졌으나 MinIO 스토리지도 호환됩니다.
# vi credentials-velero.ini
| [default] aws_access_key_id = minioadmin aws_secret_access_key = minioadmin |
(어디에서든)
MinIO 버킷을 생성 합니다.
# wget https://dl.min.io/client/mc/release/linux-amd64/mc
# chmod +x mc
# mv mc /usr/local/bin/
# mc alias set sysdocu http://115.68.249.52:9000 minioadmin minioadmin
# mc mb sysdocu/mybucket
2) Velero 서버 설치
(마스터 노드에서)
MinIO 버킷과 서버 IP, Port 를 이용하여 Velero 서버를 설치합니다.
# velero install \
--provider aws \
--plugins velero/velero-plugin-for-aws:v1.10.0 \
--bucket mybucket \
--secret-file ./credentials-velero.ini \
--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://115.68.249.52:9000 \
--snapshot-location-config region=minio \
--use-node-agent \
--privileged-node-agent \
--uploader-type=kopia
provider 가 aws 인 이유는 MinIO 는 S3 호환 스토리지이기 때문입니다.
맨 아래 세개 옵션은 Kopia 형식으로 백업이 가능하다고 하고 옵션은 존재하지만, 실제로 해보니 컨테이너 내 임시파일까지는 백업이 되지 않습니다.
추후 방법 확인시 업데이트 하겠습니다.
3) 설치 확인
# kubectl get pods -n velero
NAME READY STATUS RESTARTS AGE
velero-6d798fd6f9-7drfh 1/1 Running 0 29s
서버 버전도 잘 표시 됩니다.
# velero version
Client:
Version: v1.14.0
Git commit: 2fc6300f2239f250b40b0488c35feae59520f2d3
Server:
Version: v1.14.0
3. Velero 백업 및 복원
Velero 를 설치한 후에는 백업 및 복원 작업을 수행할 수 있습니다.
1) 백업 생성
형식) velero backup create <backup-name> --include-namespaces <namespace-name>
# velero backup create sysdocu-full-backup --include-namespaces sysdocu
위 명령어는 지정된 네임스페이스 내의 모든 리소스를 백업합니다.
이 명령어를 실행하면 해당 네임스페이스에 있는 모든 Pod, Service, Secret, ConfigMap, PersistentVolumeClaim 등의 Kubernetes 리소스가 백업됩니다.
특정 Pod 하나에 관련된 리소스만 백업하려면 --selector 옵션만 추가하여 다음과 같이 명령을 실행합니다.
형식) velero backup create <backup-name> --include-namespaces <namespace-name> --selector <selector-value>
# velero backup create nginx-backup --include-namespaces sysdocu --selector app=nginx
참고로, selector 가 없는 경우 아래와 같이 Pod 에 selector 를 추가할 수 있습니다.
# kubectl label pod nginx-deployment-7c79c4bf97-7wj9r -n sysdocu app=nginx
velero 는 볼륨 데이터도 백업이 가능하지만, 볼륨에 포함되지 않은 컨테이너 내에 추가 생성된 파일은 백업이 되지 않습니다.
2) 백업 목록 조회
# velero backup get
3) 백업 복원
# velero restore create --from-backup <backup-name>
백업본을 다른 이름의 네임스페이스로 복원할 수 있습니다. (컨테이너 이전에 사용하면 좋을듯)
# velero restore create --from-backup <backup_name> --namespace-mappings <old-namespace>:<new-namespace>
4) 백업 삭제
잘못된 백업 파일이나 오래된 백업 파일의 경우 다음과 같이 삭제 할 수 있습니다.
# velero backup delete <backup-name>
※ 참고 : Velero 제거
Velero 설치를 취소하려면 Velero 관련 리소스를 삭제하기만 하면 됩니다.
# kubectl delete namespace velero
========== 아래는 미검증 작성 자료 ==========
4. Kopia 백업 툴 설치 (임시 파일도 백업 가능)
이번에는 Pod 파일시스템 영역의 변경된 파일 백업 기능을 지원하며, 다량의 파일 백업시 진가 (속도) 를 발휘하는 Kopia 백업 툴을 설치해 보도록 하겠습니다.
1) Kopia 설치하기
# curl -s https://kopia.io/signing-key | gpg --dearmor > kopia.gpg
# install -o root -g root -m 644 kopia.gpg /usr/share/keyrings/
# echo "deb [signed-by=/usr/share/keyrings/kopia.gpg] https://packages.kopia.io/apt/ stable main" | sudo tee /etc/apt/sources.list.d/kopia.list > /dev/null
# apt -y update
# apt -y install kopia
# apt -y install kopia-ui # 어디에 사용하는지 확인 필요
설치 버전을 확인합니다.
# kopia --version
0.17.0 build: 89c8eb47af2e1d5c1d14fe299a0cf7eaac095abf from: kopia/kopia
2) Kopia 저장소 초기화
# kopia repository create s3 \
--bucket=mybucket \
--endpoint=http://115.68.249.52:9000 \
--access-key=minioadmin \
--secret-access-key=minioadmin \
--region=minio \
--config-file=/root/kopia-repo.config
3)
5. Kanister 백업 툴 (임시 파일도 백업 가능)
Helm 으로 쉽게 설치하고 사용할 수 있습니다.
1) Helm 설치
# wget https://get.helm.sh/helm-v3.12.0-linux-amd64.tar.gz
# tar xvzf helm-v3.12.0-linux-amd64.tar.gz
# mv linux-amd64/helm /usr/local/bin/
2) Kanister 설치
# helm repo add kanister https://charts.kanister.io
# helm repo update
# helm install my-kanister --namespace kanister --create-namespace kanister/kanister-operator
3) Kanister 프로필 생성
백업 데이터를 저장할 스토리지 위치를 정의하는 Profile 을 생성합니다.
여기에서는 MinIO 로 구성한 서버의 Profile 을 생성하겠습니다.
# vi minio-secret.yaml
| apiVersion: v1 kind: Secret metadata: name: minio-secret namespace: kanister type: Opaque stringData: aws_access_key_id: minioadmin aws_secret_access_key: minioadmin |
# kubectl apply -f minio-secret.yaml
# vi minio-profile.yaml
| apiVersion: cr.kanister.io/v1alpha1 kind: Profile metadata: name: minio-profile namespace: kanister spec: location: type: s3Compliant bucket: mybucket endpoint: 115.68.249.52:9000 prefix: sysdocu/mybucket secret: name: minio-secret namespace: kanister |
# kubectl apply -f minio-profile.yaml
'리눅스 > DaaS' 카테고리의 다른 글
| Proxmox 에서 Ubuntu VM 싱글모드 진입, root 패스워드 초기화 (0) | 2024.08.27 |
|---|---|
| Proxmox VM IP 설정 방법 (Private, NAT, VXLAN) (0) | 2024.08.06 |
| Incus (LXC 리눅스 컨테이너 관리자) 설치 및 설정 (0) | 2024.08.02 |
| Proxmox 에서 SDN (영역 및 VNets) 설정하여 네트워크 분리하기 (0) | 2024.07.31 |
| Kubernetes 에서 네임스페이스 네트워크 격리 및 특정 포트 허용하기 (Calico) (0) | 2024.07.22 |







