grep

Engineering

NKS: 복제 기능 소개

NHN

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의 백업 및 복구 절차는 아래 그림과 같습니다. 1.png

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 비밀번호 설정을 해야 합니다. 2.png

백업 및 복구 클러스터에 접근할 수 있도록 클러스터 설정 파일(kubeconfig)을 다운로드받습니다. 3.png

백업 및 복구 클러스터에 접근이 가능한 인스턴스에서 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
항목설명
ContainerObject Storage에서 사용하는 컨테이너 이름
Region한국(판교) 리전: KR1 한국(평촌) 리전: KR2
신원 서비스(Identity)API Endpoint 설정의 신원 서비스(Identity)
테넌트 IDAPI 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>

클러스터 백업 주의 사항

클러스터 복구 하기

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

클러스터 복구 주의 사항

마치며

클러스터 백업과 복구를 이용하여 리전 간 복제에 대해서 알아보았습니다. 정리하면 아래와 같습니다.

  1. 클러스터 복제를 할 수 있습니다.
  2. 클러스터를 이전 클러스터로 복구할 수 있습니다.

클러스터의 백업 및 복구에 대한 자세한 내용은 백업 가이드를 참고해 주세요.