第 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
$ oc patch -n clusters hostedclusters/${CLUSTER_NAME} -p '{"spec":{"pausedUntil":"'${PAUSED_UNTIL}'"}}' --type=merge
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令停止所有 etcd-writer 部署:
oc scale deployment -n ${HOSTED_CLUSTER_NAMESPACE} --replicas=0 kube-apiserver openshift-apiserver openshift-oauth-apiserver
$ oc scale deployment -n ${HOSTED_CLUSTER_NAMESPACE} --replicas=0 kube-apiserver openshift-apiserver openshift-oauth-apiserver
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用每个 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
$ 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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将快照数据复制到稍后检索它的位置,如 S3 存储桶,如下例所示。
注意以下示例使用签名版本 2。如果您位于支持签名版本 4 的区域,如 us-east-2 区域,请使用签名版本 4。否则,如果您使用签名版本 2 将快照复制到 S3 存储桶,上传会失败,签名版本 2 已被弃用。
Example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果要稍后在新集群中恢复快照,请保存托管集群引用的加密 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}'
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}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
后续步骤
恢复 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})
ETCD_SNAPSHOT=${ETCD_SNAPSHOT:-"s3://${BUCKET_NAME}/${CLUSTER_NAME}-snapshot.db"} ETCD_SNAPSHOT_URL=$(aws s3 presign ${ETCD_SNAPSHOT})
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 修改
HostedCluster
规格以引用 URL:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
确保从
spec.secretEncryption.aescbc
值引用的 secret 包含您在前面的步骤中保存的相同 AES 密钥。