- Kubernetes 환경에서 backup 후 복원하는 방법 구축
- Velero를 통해 백업 및 복원 기능을 제공할 수 있고 Velero에서 연동 가능한 스토리지로 MinIO가 있다.
왜 Kubernetes 환경에서 Backup이 중요할까
Kubernetes 클러스터의 downtime이 발생하면 필요한 모든 에플리케이션으로 전체 클러스터를 설정하는 것은 쉬운 일이 아니며
클러스터를 다시 설정하고 작업 준비를 하는데 상당한 시간이 소요된다.
따라서 조직의 비지니스에 영향을 주지 않고 클러스터의 disaster scenario에 신속하게 대비하기 위해 backup이 중요하다.
1. 사전 작업
개발 환경(Env : Debian 10 Server image, k8s 설치)
- OS : Debian 10 Server image : 상대적으로 서버의 안정성이 높고 의존성 있는 패키지들을 자동으로 알려주어 패키지의 업데이트가 용이한 데비안 리눅스 환경에 구축
- 클러스터 만들기 (master / worker 노드)
1) docker install on debian 10 : https://docs.docker.com/engine/install/debian/#install-using-the-repository
- Set up the repository
- Add Docker’s official GPG key
- Install Docker Engine
2) k8s install : https://www.hostafrica.co.za/blog/new-technologies/install-kubernetes-cluster-debian-9/
- Swap disabled
- Letting iptables see bridged traffic
- Disable firewall
- Installing kubeadm, kubelet and kubectl
- Initializing your control-plane node(only master node)
- Installing a Pod network add-on(only master node)
- Setting worker node
kubectl get node
2. minIO
- minIO는 GNU Affero General Public License v3.0에 따라 출시된 고성능 오브젝트 스토리지
- Amazon S3 클라우드 스토리지 서비스와 호환되는 API
- minIO는 standalone(single), distributed 모드로 구성할 수 있다.
참고: Standalone Deployments - Minio Docs
Standalone Deployments
단일 스토리지 볼륨 또는 폴더가 있는 단일 MinIO 서버.
Standalone Deployments는 오브젝트 스토리지에 MinIO를 사용 하거나 단일 스토리지 볼륨에 S3 액세스 계층을 제공하는 애플리케이션의 평가 및 초기 개발에 가장 적합하다.
Standalone Deployments는 MinIO의 고급 S3 기능의 전체 집합에 대한 액세스를 제공하지 않는다.
1) minIO 설치 : https://docs.min.io/docs/minio-quickstart-guide.html
wget https://dl.min.io/server/minio/release/linux-arm64/minio
chmod +x minIO
./minio server /data
minIO 콘솔 접속 후, 버킷 생성 - nginx-deployment
3. Velero https://velero.io/docs/v1.7/
- Velero는 Kubernetes 클러스터 리소스 및 영구 볼륨을 백업 및 복원하는 도구 제공
- cloud provider 또는 on-premises에서 velero를 실행할 수 있다
1) Velero를 설치한다 : github 링크 에서 velero 설정의 최신 릴리스를 다운로드
curl -L https://github.com/vmware-tanzu/velero/releases/download/v1.7.0/velero-v1.7.0-linux-arm64.tar.gz | tar xvfz -
mv velero-v1.7.0-linux-arm64/velero /usr/local/bin
velero version
2) 아래 명령을 사용하여 velero install 명령을 실행 중인 마스터 컴퓨터의 일부 위치에 minio 자격 증명을 만든다.
cat <> minio.credentials
[default]
aws_access_key_id=minioadmin
aws_secret_access_key=minioadmin
EOF
velero install \
--provider aws \
--use-restic \
--plugins velero/velero-plugin-for-aws:v1.2.1 \
--bucket nginx-deployment \
--secret-file ./minio.credentials \
--backup-location-config region=minio,s3ForcePathStyle=true,s3Url=http://[minio IP address]:9000
3) nginx pod 생성
kubectl create ns nginx-test
kubectl get ns
kubectl create deploy nginx --image nginx --replicas=2 -n nginx-test
kubectl get pods -n nginx-test
watch kubectl get pods -n nginx-test
kubectl create service nodeport nginx --tcp=80:80 -n nginx-test
kubectl get all -n nginx-test
4) 백업하기
velero backup create first-backup --include-namespaces nginx-test
velero backup describe first-backup
kubectl get backups -n velero
velero backup get
kubectl get all -n nginx-test
5) 복원하기
kubectl delete ns nginx-test
kubectl get all -n nginx-test
velero restore get
kubectl get restore -n velero
velero restore create firstbackup-restore1 --from-backup first-backup
velero restore describe firstbackup-restore1
kubectl get all -n nginx-test
velero restore get
kubectl get restore -n velero
velero delete backup --all
velero schedule get
kubectl get schedule -n velero
velero schedule create firstschedule --schedule="@every 1m" --include-namespaces nginx-test
velero describe schedule firstschedule
velero backup get
kubectl get schedule -n velero
kubectl get backups -n velero
velero schedule delete firstschedule
kubectl get schedule -n velero
velero schedule get
velero backup create second-backup --include-namespaces nginx-test --ttl 2h
velero backup describe second-backup
velero backup get
[Reference]
https://velero.io/docs/v1.7/
https://medium.com/@maheshd7878/restore-backup-migrate-kubernetes-cluster-with-velero-434fa151f1e8
https://www.debontonline.com/p/kubernetes.html
https://ichi.pro/ko/veleroleul-sayonghan-kubernetes-keulleoseuteo-maigeuleisyeon-146918669234861
https://teamsmiley.github.io/2020/10/10/kubernetes-backup-velero/