전공영역 공부 기록

veleor minio 백업 연습 - 작성중

악분 2022. 1. 16. 12:04
반응형

1. Velero, minio 소개

velero는 vmware에서 만들고 관리하는 오픈소스입니다. 메인페이지에서 소개하는 것처럼 재해복구, 클러스터이관, 데이터보호 기능이 있습니다.

참고자료: https://velero.io/

 

 

역할소개

minio distriubuted mode

 

2. 실습환경

 

3. Minio 설치

helm차트를 이용해서 minio를 설치합니다. virtualbox처럼 가상머신을 사용하면 minioAPIPort, minioConsolePort 포트설정이 필요합니다.

 

helm repo를 추가합니다.

helm repo add minio https://charts.min.io/
helm repo update

 

minio차트를 이용해서 minio를 릴리즈합니다. 이 글은 테스트 목적이므로 persistentvolume을 emptydir를 사용합니다. 그 이외 사용한 옵션은 아래와 같습니다.

  • minioAPIPort: minio server port
  • minioConsolePort: mino console port
  • rootUser(계정)
  • rootPassword(계정 비밀번호)
  • replicas: 워커 갯수만큼 설정
  • memory: pod 메모리
  • service type: nodeport

 

replicas: 4

minioAPIPort: "32000"
minioConsolePort: "32001"

rootUser: rootUser
rootPassword: rootpass123

persistence:
  enabled: false

resources:
  requests:
    memory: 1Gi

service:
  type: NodePort
  port: "32000"

consoleService:
  type: NodePort
  port: "32001"

 

helm upgrade --install --namespace backup --create-namespace \
-f values.yaml \
minio \
minio/minio

 

설치가 성공하면 pod 4개, nodeport 타입서비스가 보입니다.

 

nodeport로 접속하면 minio 로그인페이지가 뜹니다.

 

로그인 후 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

 

마치며

  • 인프라 엔지니어가 아니여서 minio의 디스크 분산모드 알고리즘에 대해 아직 이해하지 못했습니다. 엘라스틱서치나 하둡처럼 복제샤딩을 저장하는 개념이 아닌 것같은데 어떻게 안전성을 보장하는지 모르겠습니다 ㅜ.ㅜ
  • 설치형 객체스토리지 사용할 때 minio를 사용하면 매우 좋을 것같습니다.
  • 내용이 생각보다 많아서 나중에 업무에 사용한다면 깊게 공부해야겠습니다. 
  • 클러스터 이관관점에서 argocd와 비교해서 어떤 장점이 있는지 나중에 확인해야할 것 같습니다.

 

참고자료

[1] [블로그] https://www.jacobbaek.com/957

[2] [minio 공식문서] https://docs.min.io/docs/

[3] [velero 공식문서] https://velero.io/docs/main/index.html

[4] [minio helm] https://github.com/minio/minio/tree/master/helm/minio

[5] [velero helm] https://github.com/vmware-tanzu/velero
[6] [블로그] velero helm values.yaml - https://devopstales.github.io/kubernetes/k8s-velero-backup/

 

 

 

 

반응형