5.3. 호스팅된 클러스터에서 etcd 백업 및 복원
OpenShift Container Platform에서 호스팅되는 컨트롤 플레인을 사용하는 경우 etcd를 백업하고 복원하는 프로세스는 일반적인 etcd 백업 프로세스 와 다릅니다.
호스트 컨트롤 플레인은 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
5.3.1. 호스팅된 클러스터에서 etcd의 스냅샷 찍기
호스팅된 클러스터의 etcd를 백업하는 프로세스의 일부로 etcd의 스냅샷을 만듭니다. 예를 들어 재해 복구 작업의 일부로 스냅샷을 복원할 수 있습니다.
이 절차를 수행하려면 API 다운 타임이 필요합니다.
절차
다음 명령을 입력하여 호스팅 클러스터의 조정을 일시 중지합니다.
$ oc patch -n clusters hostedclusters/${CLUSTER_NAME} -p '{"spec":{"pausedUntil":"'${PAUSED_UNTIL}'"}}' --type=merge
다음 명령을 입력하여 모든 etcd-writer 배포를 중지합니다.
$ oc scale deployment -n ${HOSTED_CLUSTER_NAMESPACE} --replicas=0 kube-apiserver openshift-apiserver openshift-oauth-apiserver
각 etcd 컨테이너에서
exec
명령을 사용하여 etcd 스냅샷을 만듭니다.$ oc exec -it etcd-0 -n ${HOSTED_CLUSTER_NAMESPACE} -- env ETCDCTL_API=3 /usr/bin/etcdctl --cacert /etc/etcd/tls/client/etcd-client-ca.crt --cert /etc/etcd/tls/client/etcd-client.crt --key /etc/etcd/tls/client/etcd-client.key --endpoints=localhost:2379 snapshot save /var/lib/data/snapshot.db $ oc exec -it etcd-0 -n ${HOSTED_CLUSTER_NAMESPACE} -- env ETCDCTL_API=3 /usr/bin/etcdctl -w table snapshot status /var/lib/data/snapshot.db
다음 예와 같이 나중에 검색할 수 있는 위치에 스냅샷 데이터를 복사합니다.
참고다음 예제에서는 서명 버전 2를 사용합니다. us-east-2 리전과 같이 서명 버전 4를 지원하는 리전에 있는 경우 서명 버전 4를 사용합니다. 그렇지 않으면 서명 버전 2를 사용하여 스냅샷을 S3 버킷에 복사하는 경우 업로드가 실패하고 서명 버전 2는 더 이상 사용되지 않습니다.
예제
BUCKET_NAME=somebucket FILEPATH="/${BUCKET_NAME}/${CLUSTER_NAME}-snapshot.db" CONTENT_TYPE="application/x-compressed-tar" DATE_VALUE=`date -R` SIGNATURE_STRING="PUT\n\n${CONTENT_TYPE}\n${DATE_VALUE}\n${FILEPATH}" ACCESS_KEY=accesskey SECRET_KEY=secret SIGNATURE_HASH=`echo -en ${SIGNATURE_STRING} | openssl sha1 -hmac ${SECRET_KEY} -binary | base64` oc exec -it etcd-0 -n ${HOSTED_CLUSTER_NAMESPACE} -- curl -X PUT -T "/var/lib/data/snapshot.db" \ -H "Host: ${BUCKET_NAME}.s3.amazonaws.com" \ -H "Date: ${DATE_VALUE}" \ -H "Content-Type: ${CONTENT_TYPE}" \ -H "Authorization: AWS ${ACCESS_KEY}:${SIGNATURE_HASH}" \ https://${BUCKET_NAME}.s3.amazonaws.com/${CLUSTER_NAME}-snapshot.db
나중에 새 클러스터에서 스냅샷을 복원하려면 다음 예와 같이 호스팅된 클러스터 참조 암호화 시크릿을 저장합니다.
예제
oc get hostedcluster $CLUSTER_NAME -o=jsonpath='{.spec.secretEncryption.aescbc}' {"activeKey":{"name":"CLUSTER_NAME-etcd-encryption-key"}} # Save this secret, or the key it contains so the etcd data can later be decrypted oc get secret ${CLUSTER_NAME}-etcd-encryption-key -o=jsonpath='{.data.key}'
다음 단계
etcd 스냅샷을 복원하십시오.
5.3.2. 호스팅된 클러스터에서 etcd 스냅샷 복원
호스팅된 클러스터의 etcd 스냅샷이 있는 경우 복원할 수 있습니다. 현재는 클러스터 생성 중에만 etcd 스냅샷을 복원할 수 있습니다.
etcd 스냅샷을 복원하려면 create cluster --render
명령에서 출력을 수정하고 HostedCluster
사양의 etcd 섹션에 restoreSnapshotURL
값을 정의합니다.
사전 요구 사항
호스팅된 클러스터에서 etcd 스냅샷을 가져왔습니다.
절차
aws
CLI(명령줄 인터페이스)에서 인증 정보를 etcd 배포에 전달하지 않고 S3에서 etcd 스냅샷을 다운로드할 수 있도록 사전 서명된 URL을 생성합니다.ETCD_SNAPSHOT=${ETCD_SNAPSHOT:-"s3://${BUCKET_NAME}/${CLUSTER_NAME}-snapshot.db"} ETCD_SNAPSHOT_URL=$(aws s3 presign ${ETCD_SNAPSHOT})
URL을 참조하도록
HostedCluster
사양을 수정합니다.spec: etcd: managed: storage: persistentVolume: size: 4Gi type: PersistentVolume restoreSnapshotURL: - "${ETCD_SNAPSHOT_URL}" managementType: Managed
-
spec.secretEncryption.aescbc
값에서 참조하는 시크릿에 이전 단계에서 저장한 동일한 AES 키가 포함되어 있는지 확인합니다.