Engineering
NKS: 복제 기능 소개
2022년 4월 28일
원문에서 보기 ↗NKS(NHN Kubernetes Service)는 클라우드에서 Kubernetes를 올바르고 안전하게 구동할 수 있게 Kubernetes 클러스터를 생성하고 관리할 수 있는 서비스입니다. 사용자는 웹 콘솔을 이용해 NHN Cloud에 Kubernetes 클러스터를 만들고 관리할 수 있습니다. 안전하고 효율적으로 운영할 수 있게 마스터는 NHN Cloud에서 관리하고, 사용자는 노드와 서비스, Pod(파드) 등을 관리합니다.
본 문서에서는 Velero와 Object Storage 서비스를 이용해 NKS 클러스터를 리전간 복제하는 방법에 대해서 설명해드리겠습니다.
Velero란?
Kubernetes 클러스터 자원과 Persistent Volume의 백업 및 복구 기능을 제공하는 오픈 소스입니다. Velero를 사용하여 다음 기능을 수행할 수 있습니다.
- 클러스터를 백업하고 필요할 때 복구를 할 수 있습니다.
- 클러스터 자원을 다른 클러스터로 마이그레이션 할 수 있습니다.
- 클러스터를 복제할 수 있습니다.
본 문서는 백업 클러스터와 복구 클러스터가 서로 다른 리전에 이미 존재한다고 가정하였습니다.
- 백업 클러스터와 복구 클러스터가 동일한 리전, 동일한 클러스터인 경우에도 사용할 수 있습니다.
Velero의 백업 및 복구 절차는 아래 그림과 같습니다. 
Velero 설치
Velero 클라이언트 설치
Velero 클라이언트는 클러스터의 백업 및 복구 명령을 입력하는 프로그램입니다. 백업 및 복구 클러스터에 접근이 가능한 인스턴스에 설치해야 합니다.
$ wget https://github.com/vmware-tanzu/velero/releases/download/v1.7.1/velero-v1.7.1-linux-amd64.tar.gz
$ tar xzf velero-v1.7.1-linux-amd64.tar.gz
$ sudo mv velero-v1.7.1-linux-amd64/velero /usr/local/bin
Velero 서버 설치
Velero 서버 설치전에 웹 콘솔에서 Object Storage의 API 엔드포인트 확인 및 API 비밀번호 설정을 해야 합니다. 
백업 및 복구 클러스터에 접근할 수 있도록 클러스터 설정 파일(kubeconfig)을 다운로드받습니다. 
백업 및 복구 클러스터에 접근이 가능한 인스턴스에서 KUBECONFIG 환경 변수를 대상 클러스터 설정 파일로 정확하게 지정합니다.
$ export KUBECONFIG={클러스터 설정 파일 경로}
Velero 서버는 백업 클러스터와 복구 클러스터에 각각 설치해야 합니다. 동일한 Object Storage를 사용하도록 두 클러스터에 동일한 helm 명령어를 사용하여 설치하시길 권장합니다.
$ helm install velero vmware-tanzu/velero \
--namespace velero \
--create-namespace \
--set configuration.provider=community.openstack.org/openstack \
--set initContainers[0].name=velero-plugin-for-openstack \
--set initContainers[0].image=lirt/velero-plugin-for-openstack:v0.3.0 \
--set initContainers[0].volumeMounts[0].mountPath=/target \
--set initContainers[0].volumeMounts[0].name=plugins \
--set deployRestic=true \
--set configuration.defaultVolumesToRestic=true \
--set configuration.defaultResticPruneFrequency=0h1m0s \
--set configuration.backupStorageLocation.bucket={Container} \
--set configuration.backupStorageLocation.config.region={Region} \
--set configuration.backupStorageLocation.config.resticRepoPrefix=swift:{Container}:/restic \
--set configuration.extraEnvVars.OS_AUTH_URL={신원 서비스(Identity)} \
--set configuration.extraEnvVars.OS_TENANT_ID={테넌트 ID} \
--set configuration.extraEnvVars.OS_USERNAME={NHN Cloud 아이디} \
--set configuration.extraEnvVars.OS_PASSWORD={API 비밀번호} \
--set configuration.extraEnvVars.OS_REGION_NAME={Region} \
--set configuration.extraEnvVars.OS_DOMAIN_ID=default
| 항목 | 설명 |
|---|---|
| Container | Object Storage에서 사용하는 컨테이너 이름 |
| Region | 한국(판교) 리전: KR1 한국(평촌) 리전: KR2 |
| 신원 서비스(Identity) | API Endpoint 설정의 신원 서비스(Identity) |
| 테넌트 ID | API Endpoint 설정의 테넌트 ID |
| NHN Cloud 아이디 | NHN Cloud 아이디 |
| API 비밀번호 | API Endpoint 설정에 입력한 API 비밀번호 |
클러스터 백업 만들기
KUBECONFIG 환경 변수를 백업 클러스터 설정 파일로 설정합니다.
$ export KUBECONFIG=backup-cluster
velero backup create 명령어로 클러스터의 백업 정보를 만들 수 있습니다.
$ velero backup create my-backup --include-namespaces nks
클러스터의 백업 정보는 velero backup get 명령어와 웹 콘솔의 Object Storage 페이지에서 확인할 수 있습니다.
$ velero backup get
NAME STATUS ERRORS WARNINGS CREATED EXPIRES STORAGE LOCATION SELECTOR
my-backup Completed 0 0 2022-04-04 16:54:17 +0900 KST 29d default <none>
- Kubernetes 클러스터 자원 정보

- Persistenet Volume 정보

클러스터 백업 주의 사항
- kube-system, velero와 같이 백업이 필요하지 않은 namespace는 제외해야 합니다.
클러스터 복구 하기
KUBECONFIG 환경 변수를 복구 클러스터 설정 파일로 설정합니다.
$ export KUBECONFIG=restore-cluster
velero restore create 명령어로 클러스터의 복구를 진행할 수 있습니다.
$ velero restore create --from-backup my-backup
클러스터 복구 이력은 velero restore get 명령어로 확인할 수 있습니다.
$ velero restore get
NAME BACKUP STATUS STARTED COMPLETED ERRORS WARNINGS CREATED SELECTOR
my-backup-20220404170530 my-backup Completed 2022-04-04 17:05:30 +0900 KST <nil> 0 0 2022-04-04 17:05:30 +0900 KST <none>
복구된 Kubernetes 클러스터 자원은 kubectl 명령어로 확인할 수 있습니다.
$ kubectl get pod -n nks
example 1/1 Running 0 3m37s
클러스터 복구 주의 사항
- 스토리지 클래스(StorageClass) 자원은 백업되지 않으므로, 복구 전에 백업 클러스터에 존재하는 것과 동일한 이름의 스토리지 클래스를 복구 클러스터에 미리 생성해 두어야 합니다.
- 백업 클러스터와 복구 클러스터의 버전이 다른 경우 복구 시 문제가 발생할 수 있습니다.
마치며
클러스터 백업과 복구를 이용하여 리전 간 복제에 대해서 알아보았습니다. 정리하면 아래와 같습니다.
- 클러스터 복제를 할 수 있습니다.
- 클러스터를 이전 클러스터로 복구할 수 있습니다.
클러스터의 백업 및 복구에 대한 자세한 내용은 백업 가이드를 참고해 주세요.