티스토리 뷰

카테고리 없음

벨레로 테스트

미니대왕님 2022. 11. 27. 21:59

 

wget https://github.com/vmware-tanzu/velero/releases/download/v1.7.1/velero-v1.7.1-linux-amd64.tar.gz

역할소개

minio distriubuted mode

 

2. 실습환경

 

3. Minio 설치

 

(admin-k8s:velero) root@k8s6-m:/home/minio#  wget https://dl.min.io/server/minio/release/linux-amd64/minio
--2022-11-27 16:15:59--  https://dl.min.io/server/minio/release/linux-amd64/minio
Resolving dl.min.io (dl.min.io)... 138.68.11.125, 178.128.69.202
Connecting to dl.min.io (dl.min.io)|138.68.11.125|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 102510592 (98M) [application/octet-stream]
Saving to: ‘minio’

minio                       100%[===========================================>]  97.76M   652KB/s    in 4m 50s

2022-11-27 16:20:49 (345 KB/s) - ‘minio’ saved [102510592/102510592]

(admin-k8s:velero) root@k8s6-m:/home/minio# chmod +x minio
(admin-k8s:velero) root@k8s6-m:/home/minio# ./minio server /data
Formatting 1st pool, 1 set(s), 1 drives per set.
WARNING: Host local has more than 0 drives of set. A host failure will result in data becoming unavailable.
Warning: Default parity set to 0. This can lead to data loss.
WARNING: Detected default credentials 'minioadmin:minioadmin', we recommend that you change these values with 'MINIO_ROOT_USER' and 'MINIO_ROOT_PASSWORD' environment variables
MinIO Object Storage Server
Copyright: 2015-2022 MinIO, Inc.
License: GNU AGPLv3 <https://www.gnu.org/licenses/agpl-3.0.html>
Version: RELEASE.2022-11-26T22-43-32Z (go1.19.3 linux/amd64)

Status:         1 Online, 0 Offline.
API: http://172.16.12.64:9000  http://10.0.2.15:9000  http://192.168.100.10:9000  http://172.17.0.1:9000  http://127.0.0.1:9000
RootUser: minioadmin
RootPass: minioadmin
Console: http://172.16.12.64:38095 http://10.0.2.15:38095 http://192.168.100.10:38095 http://172.17.0.1:38095 http://127.0.0.1:38095
RootUser: minioadmin
RootPass: minioadmin

Command-line: https://min.io/docs/minio/linux/reference/minio-mc.html#quickstart
   $ mc alias set myminio http://172.16.12.64:9000 minioadmin minioadmin

Documentation: https://min.io/docs/minio/linux/index.html

 

로그인 후 velero가 사용한 bucket을 생성합니다.

 

4. Velero 설치

helm repo를 추가합니다.

 
helm repo add vmware-tanzu https://vmware-tanzu.github.io/helm-charts
 
helm repo update

 

velero차트를 이용해서 minio를 릴리즈합니다. 사용한 옵션은 아래와 같습니다. 리소스 자원이 없어서 resource memory 필드는 적게 설정했습니다.

  • initContainers: aws 플러그인을 설치하는 컨테이너
  • congiruation: provider 설정
  • credentials: provider 계정/비밀번호
  • snapshotEnabled: 테스트 목적이여서 비활성화 했습니다.
 
initContainers:
 
- name: velero-plugin-for-aws
 
image: velero/velero-plugin-for-aws:v1.2.0
 
imagePullPolicy: IfNotPresent
 
volumeMounts:
 
- mountPath: /target
 
name: plugins
 
 
 
configuration:
 
provider: aws
 
backupStorageLocation:
 
name: aws
 
bucket: velero
 
config:
 
region: minio
 
s3ForcePathStyle: true
 
publicUrl: http://minio.backup.svc:32000
 
s3Url: http://minio.backup.svc:32000
 
 
 
credentials:
 
useSecret: true
 
secretContents:
 
cloud: |
 
[default]
 
aws_access_key_id = rootUser
 
aws_secret_access_key = rootpass123
 
 
 
snapshotsEnabled: false
 
deployRestic: true
 
 
 
restic:
 
resources:
 
requests:
 
cpu: 500m
 
memory: 256Mi
 
limits:
 
cpu: 1000m
 
memory: 256Mi

 

install명령어로 차트를 릴리즈합니다.

helm install -n backup -f values.yaml velero vmware-tanzu/velero

 

pod로그에서 에러가 없으면 veleor설치 성공입니다.

kubectl logs deploy/velero -n backup -f

 

velero와 minio연결은 backupstoragelocations api로 알수 있습니다. Available상태이면 연결성공입니다.

kubectl get backupstoragelocations -n backup

 

velero, minio설치가 성공하면 아래처럼 리소스가 보입니다.

 

5. velero클라이언트 설치

helm으로 설치한 거는 velero서버이고 서버에게 작업내용을 전달할 클라이언트를 별도로 설치해야합니다. 설치방법은 github 릴리즈페이지에서 압축파일을 다운로드 받고 압축을 해제하면 끝입니다. 아래 예제는 1.7.1버전을 다운로드 받았습니다.

velero클라이언트는 디폴트로 velelro서버에게 요청할때 velero 네임스페이스로 찾습니다.

wget https://github.com/vmware-tanzu/velero/releases/download/v1.7.1/velero-v1.7.1-linux-amd64.tar.gz

 

6. 백업 예제

백업 예제는 공식문서 예제(https://velero.io/docs/main/examples/)를 사용했습니다. 실습을 위해 LoadBalancer 서비스 타입을 사용할 수 있어야 합니다.

 

6.1 nginx 배포

velero gith repo를 다운로드 받습니다.

 
git clone https://github.com/vmware-tanzu/velero.git
 
cd velero

 

예제 nginx 리소스를 릴리즈합니다.

kubectl apply -f examples/nginx-app/base.yaml

 

성공적으로 릴리즈되면 nginx-example 네임스페이스에 쿠버네티스 리소스가 릴리즈됩니다.

 

LoadBalacner External-IP로 접속하면 nginx index.html페이지가 보입니다.

 

6.2 백업 예제

velero클라이언트에서 명령어를 입력하여 velero컨트롤러에게 백업을 요청합니다. helm에서 설정한 storage이름과 backup 데이터 이름을 설정합니다.

 
./velero backup create nginx-backup \
 
--namespace backup \
 
--include-namespaces \
 
--storage-location aws \
 
nginx-example

 

백업 성공/실패 여부는 backup get으로 확인할 수 있습니다. 성공하면 Completed상태로 변합니다.

./velero backup get --namespace backup

 

minio로 이동하면 backup요청한 이름이 버킷에 저장되어 있습니다.

 

 

복원 예제

복원하기 위해 nginx-example에 있는 모든 리소스를 삭제합니다.

kubectl delete namespaces nginx-example

 

restore명령어와 백업데이터를 입력하면 복원요청이 velero컨트롤러에게 전달됩니다.

./velero restore create --namespace backup --from-backup nginx-backup2

 

복원 실패 또는 성공여부는 restore get으로 확인할 수 있습니다. 성공하면 Completed상태로 표시됩니다.

 

삭제되었던 nginx-example네임스페이스가 다시 생성되고 리소스도 복원되었습니다. AGE를 보시면 12s로 방금 막 복원되었다는 것을 알 수 있습니다.

kubectl get all -n nginx-example

 

 

댓글