Velero 도입 및 적용기(2)

Velero 도입 및 적용기(2)

지난 주 여행을 다녀오느라 패스권을 사용하면서 간만에 올해 첫 포스팅으로 찾아뵙게 되네요.

이어지는 이번 포스팅에서는 Velero를 직접 설치하여 주기적으로 컴포넌트를 백업하고 복구하는 방법을 살펴보겠습니다. 중간에 네임스페이스를 삭제하는 과정이 있으니, Velero를 검증하는 단계라면 실제 서비스에 미치는 영향도가 없는 네임스페이스를 만들어서 진행할 것을 권장합니다.

Velero 설치

Velero를 설치하는 방법은 다양하지만, 저는 Helm Chart를 내려받아 설치를 진행하였습니다. Object Storage를 연동하고, Restic을 설치하기 위해 values.yaml을 다음과 같이 수정합니다.

<details>
configuration:
  backupStorageLocation:
    - accessMode: ReadWrite
      bucket: <your-bucket-name>
      cacert: null
      config:
        insecureSkipTLSVerify: true
        publicUrl: <your-s3-public-url>
        region: <your-s3-region>
        s3ForcePathStyle: true
        s3Url: <your-s3-url>
      credential:
        key: cloud
        name: velero-backup
      default: true
      name: velero
      prefix: <your-prefix>
      provider: aws
      validationFrequency: null

defaultVolumesToFsBackup: true
</details>

먼저, 스냅샷이 저장될 Object Storage의 주소와 Bucket명을 명시합니다. 그리고, defaultVolumesToFsBackup은 true로 설정해야 Restic 설치가 함께 진행됩니다. Restic은 Go언어로 작성된 백업 클라이언트로, k8s provider가 AWS, GCP, Azure 등이 아닐 경우 Restic을 backup plugin으로 활용할 수 있게끔 true로 변경해야 합니다. 저는 온프레미스 환경에 k8s를 구축해두었기 때문에 Restic을 함께 설치했습니다.

Velero CLI 설치

Velero가 동작할 클러스터의 워커노드에 SSH 접속합니다. 앞서 설치한 Velero의 버전과 동일하게 github release을 수정하여 curl 명령어를 날려줍니다. 그리고 velero 명령어를 사용할 수 있게 /usr/local/bin 으로 옮겨줍니다.

### v1.12.x 버전 수정 필요(꼭 1.12버전대가 아니어도 됨)
$ curl -L https://github.com/vmware-tanzu/velero/releases/download/v1.12.x/velero-v1.12.x-linux-amd64.tar.gz | tar xvfz -
$ mv velero-v1.12.x-linux-amd64/velero /usr/local/bin

버전이 맞게 설치되었는지 확인합니다.

$ velero version

Velero Backup

Velero CLI가 설치되어있는 노드에서 velero backup create 명령어를 통해 백업을 수행합니다.

$ velero backup create keycloak-backup --include-namespaces keycloak-test

일시적으로 백업을 하는 것도 좋지만, 주기적으로 schedule을 걸어둘 때 그 진가를 발휘한다고 생각합니다.

CronJob 형태로 주기적인 백업을 스케줄할 수도 있습니다.

velero schedule create 명령어를 통해 스케줄링 백업 작업을 수행합니다.

velero schedule create daily-keycloak-backup --include-namespaces keycloak-test --schedule="0 8 * * *"

Linux 서버가 UTC+0 시간을 따를 때, 한국 시간으로 매일 17시마다 백업을 자동적으로 진행하게끔 schedule하였습니다.

Velero Restore

마찬가지로 Velero CLI가 있는 노드에서 velero restore create 명령어를 통해 복구를 수행합니다. 유사시를 가정하여 keycloak-test 네임스페이스를 먼저 삭제하고, 복구를 진행합니다.

$ kubectl delete ns keycloak-test

$ velero restore create --from-backup daily-keycloak-backup-xxxxxxxxxxxxxx