1. Velero, minio 소개
velero는 vmware에서 만들고 관리하는 오픈소스입니다. 메인페이지에서 소개하는 것처럼 재해복구, 클러스터이관, 데이터보호 기능이 있습니다.
역할소개
minio distriubuted mode
2. 실습환경
- 인프라
- virtualbox, vagrant
- 쿠버네티스 클러스터는 kubespray(https://github.com/choisungwook-vagrant/kubespray-onpremise)로 구성
- 클러스터 구성과 사양
- controlplane node 1개: 4core 4GB
- worker node 4개: 각각 4core 2GB
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/
'전공영역 공부 기록' 카테고리의 다른 글
CKS 1편: 쿠버네티스 보안 개요 (0) | 2022.01.31 |
---|---|
[CKS] 클러스터 보안 - pod의 serviceaccount token (0) | 2022.01.24 |
[CKS] 시스템 보안 - App armor (0) | 2022.01.16 |
mariadb 인코딩 확인 명령어 (0) | 2022.01.09 |
디지털 인증서 (0) | 2022.01.04 |