8.3. 在 AWS 上备份和恢复 etcd
您可以在 Amazon Web Services (AWS) 上的托管集群中备份和恢复 etcd,以修复失败。
在 AWS 平台上托管的 control plane 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
8.3.1. 为托管集群生成 etcd 快照 复制链接链接已复制到粘贴板!
要为托管集群备份 etcd,您必须执行 etcd 快照。之后,您可以使用快照恢复 etcd。
此流程需要 API 停机时间。
流程
输入以下命令暂停托管集群的协调:
oc patch -n clusters hostedclusters/<hosted_cluster_name> -p '{"spec":{"pausedUntil":"true"}}' --type=merge
$ oc patch -n clusters hostedclusters/<hosted_cluster_name> -p '{"spec":{"pausedUntil":"true"}}' --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 快照,请输入以下命令在每个 etcd 容器中使用
exec
命令:oc exec -it <etcd_pod_name> -n <hosted_cluster_namespace> -- env ETCDCTL_API=3 /usr/bin/etcdctl --cacert /etc/etcd/tls/etcd-ca/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_pod_name> -n <hosted_cluster_namespace> -- env ETCDCTL_API=3 /usr/bin/etcdctl --cacert /etc/etcd/tls/etcd-ca/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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要检查快照状态,请运行以下命令在每个 etcd 容器中使用
exec
命令:oc exec -it <etcd_pod_name> -n <hosted_cluster_namespace> -- env ETCDCTL_API=3 /usr/bin/etcdctl -w table snapshot status /var/lib/data/snapshot.db
$ oc exec -it <etcd_pod_name> -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。否则,当将快照复制到 S3 存储桶时,上传会失败。Example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要稍后在新集群中恢复快照,请保存托管集群引用的加密 secret。
输入以下命令来获取 secret 加密密钥:
oc get hostedcluster <hosted_cluster_name> -o=jsonpath='{.spec.secretEncryption.aescbc}'
$ oc get hostedcluster <hosted_cluster_name> -o=jsonpath='{.spec.secretEncryption.aescbc}' {"activeKey":{"name":"<hosted_cluster_name>-etcd-encryption-key"}}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令保存 secret 加密密钥:
oc get secret <hosted_cluster_name>-etcd-encryption-key -o=jsonpath='{.data.key}'
$ oc get secret <hosted_cluster_name>-etcd-encryption-key -o=jsonpath='{.data.key}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以在新集群中恢复快照时解密此密钥。
后续步骤
恢复 etcd 快照。
8.3.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 密钥。