第 4 章 托管的 control plane 的备份、恢复和灾难恢复
如果您需要在托管集群中备份和恢复 etcd,或为托管集群提供灾难恢复,请参阅以下步骤。
托管的 control plane 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
4.1. 在托管集群中备份和恢复 etcd
如果您在 OpenShift Container Platform 上使用托管的 control plane,则备份和恢复 etcd 的过程与通常的 etcd 备份过程不同。
4.1.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
将快照数据复制到稍后检索它的位置,如 S3 存储桶,如下例所示。
注意以下示例使用签名版本 2。如果您位于支持签名版本 4 的区域,如 us-east-2 区域,请使用签名版本 4。否则,如果您使用签名版本 2 将快照复制到 S3 存储桶,上传会失败,签名版本 2 已被弃用。
Example
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
如果要稍后在新集群中恢复快照,请保存托管集群引用的加密 secret,如下例所示:
Example
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 快照。
4.1.2. 在托管集群中恢复 etcd 快照
如果从托管集群中有 etcd 快照,可以恢复它。目前,您只能在集群创建过程中恢复 etcd 快照。
要恢复 etcd 快照,您需要修改 create cluster --render
命令的输出,并在 HostedCluster
规格的 etcd 部分中定义 restoreSnapshotURL
值。
hcp create
命令中的 --render
标志不会呈现 secret。要呈现 secret,您必须在 hcp create
命令中使用 --render
和 --render-sensitive
标志。
先决条件
在托管集群中执行 etcd 快照。
流程
在
aws
命令行界面 (CLI) 中,创建一个预签名的 URL,以便您可以从 S3 下载 etcd 快照,而无需将凭证传递给 etcd 部署:ETCD_SNAPSHOT=${ETCD_SNAPSHOT:-"s3://${BUCKET_NAME}/${CLUSTER_NAME}-snapshot.db"} ETCD_SNAPSHOT_URL=$(aws s3 presign ${ETCD_SNAPSHOT})
修改
HostedCluster
规格以引用 URL:spec: etcd: managed: storage: persistentVolume: size: 4Gi type: PersistentVolume restoreSnapshotURL: - "${ETCD_SNAPSHOT_URL}" managementType: Managed
-
确保从
spec.secretEncryption.aescbc
值引用的 secret 包含您在前面的步骤中保存的相同 AES 密钥。