- Kubernetes 환경에서 Backup 후 복원하는 방법 구축
- Velero를 통해 백업 및 복원 기능을 제공할 수 있고 Velero에서 연동 가능한 스토리지로 MinIO가 있다.
왜 Kubernetes 환경에서 Backup이 중요할까
Kubernetes 클러스터의 downtime은 비지니스적으로 financial impact가 있고 조직의 brand에 영향을 끼친다. 필요한 모든 에플리케이션으로 전체 클러스터를 설정하는 것은 쉬운 일이 아니며 클러스터를 다시 설정하고 작업 준비를 하는데 상당한 시간이 소요된다. 따라서 조직의 비지니스에 영향을 주지 않고 클러스터의 disaster scenario에 신속하게 대비하기 위해 backup이 중요하다.
1. 사전 작업
개발 환경(Env : Debian 10 Server image, k8s 설치)
- OS : Debian 10 Server image : 상대적으로 서버의 안정성이 높고 의존성 있는 패키지들을 자동으로 알려주어 패키지의 업데이트가 용이한 데비안 리눅스 환경에 구축
- 클러스터 만들기
1) docker install on debian 10 : https://docs.docker.com/engine/install/debian/#install-using-the-repository
2) k8s install : https://www.hostafrica.co.za/blog/new-technologies/how-to-install-docker-on-linux-and-windows/#debian
2. minIO
- minIO는 GNU Affero General Public License v3.0에 따라 출시된 고성능 오브젝트 스토리지
- Amazon S3 클라우드 스토리지 서비스와 호환되는 API
- minIO는 standalone(single), distributed 모드로 구성할 수 있다.
참고: Distributed Deployments - Minio Docs
Distributed Deployments
모든 서버에서 총 스토리지 볼륨이 4개 이상인 하나 이상의 MinIO 서버.
Distributed Deployments는 프로덕션 환경 및 워크로드에 가장 적합하며 모든 MinIO의 핵심 및 고급 S3 기능을 지원한다.
- Data Protection : erasure code를 사용한 여러 노드/드라이브 failure 및 bit rot에 대한 보호 기능을 제공
- High Availability : n개의 디스크가 있는 분산형 MinIO 설정은 n/2 개 이상의 디스크가 온라인 상태인한 데이터를 안전하게 유지함
- Limits : 분산형 MinIO에는 테넌트당 최소 2개, 최대 32개의 서버 제한이 있다. 이러한 서버의 디스크 수에는 제한이 없다. 여러 테넌트 설정이 필요한 경우 Kubernetes, Docker Swarm 등과 같은 오케스트레이션 도구로 관리되는 여러 MinIO 인스턴스를 쉽게 스핀업할 수 있다
- Consistency Guarantees : MinIO 는 distributed 및 standalone 모드 모두에서 모든 i/o 작업에 대해 엄격한 쓰기 후 읽기 및 쓰기 후 목록 일관성 모델을 따른다
MinIO는 프로덕션 환경에 대해 각각 4개의 드라이브가 있는 4개의 노드로 구성된 기본 토폴로지를 권장한다.
4개 이상의 노드가 없을 경우, 아래와 같은 에러 발생
Invalid command line arguments: Incorrect number of endpoints provided [http://192.168.1.5:9000/usr/local/minio/data http://192.168.1.6:9000/usr/local/minio/data]
Please provide an even number of endpoints greater or equal to 4
Distributed mode에서는 최소 4개 이상의 디스크가 있어야 한다
디스크를 잘 구분해서 설정해주는 것이 관건이다
Distributed mode를 통해 장애 상황 등에 대비할 수 있다
서로 다른 IP를 가진 클러스터 간 동일 minIO에 접속하는 것을 확인할 수 있다
https://docs.min.io/minio/baremetal/installation/deployment-and-management.html
[Reference]