备份和恢复
备份和恢复 OpenShift Container Platform 集群
摘要
第 1 章 备份和恢复 复制链接链接已复制到粘贴板!
1.1. control plane 备份和恢复操作 复制链接链接已复制到粘贴板!
作为集群管理员,您可能需要在一段时间内停止 OpenShift Container Platform 集群,并在以后重启集群。重启集群的一些原因是您需要对集群执行维护或希望降低资源成本。在 OpenShift Container Platform 中,您可以对集群执行安全关闭,以便在以后轻松重启集群。
您必须在关闭集群前 备份 etcd 数据 ;etcd 是 OpenShift Container Platform 的键值存储,它会保留所有资源对象的状态。etcd 备份在灾难恢复中扮演着关键角色。在 OpenShift Container Platform 中,您还可以替换不健康的 etcd 成员。
当您希望集群再次运行时,请安全地重启集群。
集群的证书在安装日期后一年后过期。您可以关闭集群,并在证书仍有效时安全地重启集群。虽然集群自动检索过期的 control plane 证书,但您仍需要批准证书签名请求(CSR)。
您可能会遇到 OpenShift Container Platform 无法按预期工作的一些情况,例如:
- 您有一个在重启后无法正常工作的集群,因为意外状况(如节点故障或网络连接问题)无法正常工作。
- 您已错误地删除了集群中的某些关键内容。
- 您丢失了大多数 control plane 主机,从而导致 etcd 仲裁丢失。
通过使用保存的 etcd 快照,始终可以通过将集群恢复到之前的状态来从灾难中恢复。
1.2. 应用程序备份和恢复操作 复制链接链接已复制到粘贴板!
作为集群管理员,您可以使用 OpenShift API 进行数据保护(OADP)来备份和恢复在 OpenShift Container Platform 上运行的应用程序。
根据下载 Velero CLI 工具中的表,按照命名空间粒度来备份和恢复 Kubernetes 资源和内部镜像。OADP 使用快照或 Restic 来备份和恢复持久性卷(PV)。详情请查看 OADP 功能。
1.2.1. OADP 要求 复制链接链接已复制到粘贴板!
OADP 有以下要求:
-
您必须以具有
cluster-admin角色的用户身份登录。 您必须具有用于存储备份的对象存储,比如以下存储类型之一:
- OpenShift Data Foundation
- Amazon Web Services
- Microsoft Azure
- Google Cloud
- S3 兼容对象存储
- IBM Cloud® Object Storage S3
如果要在 OCP 4.11 及之后的版本中使用 CSI 备份,请安装 OADP 1.1.x。
OADP 1.0.x 不支持 OCP 4.11 及更高版本上的 CSI 备份。OADP 1.0.x 包括 Velero 1.7.x,并需要 API 组 snapshot.storage.k8s.io/v1beta1,这在 OCP 4.11 及更高版本中不存在。
要使用快照备份 PV,您必须有具有原生快照 API 的云存储,或者支持 Container Storage Interface(CSI)快照,如以下供应商:
- Amazon Web Services
- Microsoft Azure
- Google Cloud
- 支持 CSI 快照的云存储,如 Ceph RBD 或 Ceph FS
如果您不想使用快照备份 PV,可以使用 Restic,这由 OADP Operator 安装。
1.2.2. 备份和恢复应用程序 复制链接链接已复制到粘贴板!
您可以通过创建一个 Backup 自定义资源 (CR) 来备份应用程序。请参阅创建备份 CR。您可以配置以下备份选项:
- 创建备份 hook,以便在备份操作之前或之后运行命令
- 调度备份
- 使用文件系统备份对应用程序进行备份:Kopia 或 Restic
-
您可以通过创建一个
Restore(CR) 来恢复应用程序备份。请参阅创建 Restore CR。 - 您可以配置 restore hook,以便在 init 容器或应用程序容器中运行命令。
第 2 章 安全地关闭集群 复制链接链接已复制到粘贴板!
本文档描述了安全关闭集群的过程。出于维护或者节约资源成本的原因,您可能需要临时关闭集群。
2.1. 先决条件 复制链接链接已复制到粘贴板!
在关闭集群前进行 etcd 备份。
重要执行此流程前务必要进行 etcd 备份,以便在重启集群遇到任何问题时可以恢复集群。
例如,以下条件可能会导致重启的集群失败:
- 关机过程中的 etcd 数据崩溃
- 因硬件原因造成节点故障
- 网络连接问题
如果集群无法恢复,请按照以下步骤恢复到以前的集群状态。
2.2. 关闭集群 复制链接链接已复制到粘贴板!
您可以以安全的方式关闭集群,以便稍后重启集群。
您可以在安装日期起的一年内关闭集群,并期望它可以正常重启。安装日期起一年后,集群证书会过期。但是,您可能需要手动批准待处理的证书签名请求(CSR),以便在集群重启时恢复 kubelet 证书。
先决条件
-
您可以使用具有
cluster-admin角色的用户访问集群。 - 已进行 etcd 备份。
- 如果运行一个单节点 OpenShift 集群,需要撤离集群的所有工作负载 pod,然后才能关闭它。
流程
如果您要长时间关闭集群,请确定证书过期的日期,并运行以下命令:
oc -n openshift-kube-apiserver-operator get secret kube-apiserver-to-kubelet-signer -o jsonpath='{.metadata.annotations.auth\.openshift\.io/certificate-not-after}'$ oc -n openshift-kube-apiserver-operator get secret kube-apiserver-to-kubelet-signer -o jsonpath='{.metadata.annotations.auth\.openshift\.io/certificate-not-after}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
2022-08-05T14:37:50Zuser@user:~ $
2022-08-05T14:37:50Zuser@user:~ $1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 为确保集群可以正常重启,请计划在指定的日期或之前重启集群。当集群重启时,可能需要您手动批准待处理的证书签名请求 (CSR) 来恢复 kubelet 证书。
将集群中的所有节点标记为不可调度。您可以从云供应商的 web 控制台或运行以下循环来完成此操作:
for node in $(oc get nodes -o jsonpath='{.items[*].metadata.name}'); do echo ${node} ; oc adm cordon ${node} ; done$ for node in $(oc get nodes -o jsonpath='{.items[*].metadata.name}'); do echo ${node} ; oc adm cordon ${node} ; doneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下方法撤离 pod:
for node in $(oc get nodes -l node-role.kubernetes.io/worker -o jsonpath='{.items[*].metadata.name}'); do echo ${node} ; oc adm drain ${node} --delete-emptydir-data --ignore-daemonsets=true --timeout=15s --force ; done$ for node in $(oc get nodes -l node-role.kubernetes.io/worker -o jsonpath='{.items[*].metadata.name}'); do echo ${node} ; oc adm drain ${node} --delete-emptydir-data --ignore-daemonsets=true --timeout=15s --force ; doneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 关闭集群中的所有节点。您可以使用云供应商的 Web 控制台或运行以下循环来完成此操作。使用以下方法关闭节点可让 pod 安全终止,从而减少数据崩溃的可能性。
注意确保分配了 API VIP 的 control plane 节点是循环中处理的最后一个节点。否则,shutdown 命令会失败。
for node in $(oc get nodes -o jsonpath='{.items[*].metadata.name}'); do oc debug node/${node} -- chroot /host shutdown -h 1; done$ for node in $(oc get nodes -o jsonpath='{.items[*].metadata.name}'); do oc debug node/${node} -- chroot /host shutdown -h 1; done1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
-h 1表示此过程在 control-plane 节点关闭前可以持续的时间(以分钟为单位)。对于具有 10 个节点或更多节点的大型集群,设置为-h 10或更长时间,以确保所有计算节点都有时间关闭。
输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意在关闭前,不需要排空 OpenShift Container Platform 中附带的标准 pod 的 control plane 节点。集群管理员负责确保在集群重启后,彻底重启自己的工作负载。如果因为自定义工作负载的原因已在关闭前排空 control plane 节点,您必须在重启后将 control plane 节点标记为可调度,然后集群才可以重新正常工作。
关闭不再需要的集群依赖项,如外部存储或 LDAP 服务器。在进行操作前请务必查阅您的厂商文档。
重要如果您在云供应商平台上部署了集群,请不要关闭、挂起或删除关联的云资源。如果您删除挂起的虚拟机的云资源,OpenShift Container Platform 可能无法成功恢复。
第 3 章 正常重启集群 复制链接链接已复制到粘贴板!
本文档论述了在安全关闭后重启集群的过程。
尽管在重启后集群应该可以正常工作,但可能会因为意外状况集群可能无法恢复,例如:
- 关机过程中的 etcd 数据崩溃
- 因硬件原因造成节点故障
- 网络连接问题
如果集群无法恢复,请按照以下步骤恢复到以前的集群状态。
3.1. 先决条件 复制链接链接已复制到粘贴板!
- 已安全关闭集群。
3.2. 重启集群 复制链接链接已复制到粘贴板!
您可以在集群被安全关闭后重启它。
先决条件
-
您可以使用具有
cluster-admin角色的用户访问集群。 - 此流程假设您安全关闭集群。
流程
打开 control plane 节点。
如果您在集群安装中使用
admin.kubeconfig,且 API 虚拟 IP 地址(VIP) 为 up,请完成以下步骤:-
将
KUBECONFIG环境变量设置为admin.kubeconfig路径。 对于集群中的每个 control plane 节点,运行以下命令:
oc adm uncordon <node>
$ oc adm uncordon <node>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
将
如果您无法访问
admin.kubeconfig凭证,请完成以下步骤:- 使用 SSH 连接到 control plane 节点。
-
将
localhost-recovery.kubeconfig文件复制到/root目录中。 使用该文件为集群中的每个 control plane 节点运行以下命令:
oc adm uncordon <node>
$ oc adm uncordon <node>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 启动所有依赖设备,如外部存储或 LDAP 服务器。
启动所有集群机器。
使用适合您的云环境的方法启动机器,例如从云供应商的 Web 控制台启动机器。
等待大约 10 分钟,然后继续检查 control plane 节点的状态。
验证所有 control plane 节点都已就绪。
oc get nodes -l node-role.kubernetes.io/master
$ oc get nodes -l node-role.kubernetes.io/masterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果状态为
Ready,如以下输出中所示,则代表 control plane 节点已就绪:NAME STATUS ROLES AGE VERSION ip-10-0-168-251.ec2.internal Ready control-plane,master 75m v1.32.3 ip-10-0-170-223.ec2.internal Ready control-plane,master 75m v1.32.3 ip-10-0-211-16.ec2.internal Ready control-plane,master 75m v1.32.3
NAME STATUS ROLES AGE VERSION ip-10-0-168-251.ec2.internal Ready control-plane,master 75m v1.32.3 ip-10-0-170-223.ec2.internal Ready control-plane,master 75m v1.32.3 ip-10-0-211-16.ec2.internal Ready control-plane,master 75m v1.32.3Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 control plane 节点没有就绪,请检查是否有待批准的证书签名请求 (CSR)。
获取当前 CSR 列表:
oc get csr
$ oc get csrCopy to Clipboard Copied! Toggle word wrap Toggle overflow 查看一个 CSR 的详细信息以验证其是否有效:
oc describe csr <csr_name>
$ oc describe csr <csr_name>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<csr_name>是当前 CSR 列表中 CSR 的名称。
批准每个有效的 CSR:
oc adm certificate approve <csr_name>
$ oc adm certificate approve <csr_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在 control plane 节点就绪后,验证所有 worker 节点是否已就绪。
oc get nodes -l node-role.kubernetes.io/worker
$ oc get nodes -l node-role.kubernetes.io/workerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果状态为
Ready,如下所示,则代表 worker 节点已就绪:NAME STATUS ROLES AGE VERSION ip-10-0-179-95.ec2.internal Ready worker 64m v1.32.3 ip-10-0-182-134.ec2.internal Ready worker 64m v1.32.3 ip-10-0-250-100.ec2.internal Ready worker 64m v1.32.3
NAME STATUS ROLES AGE VERSION ip-10-0-179-95.ec2.internal Ready worker 64m v1.32.3 ip-10-0-182-134.ec2.internal Ready worker 64m v1.32.3 ip-10-0-250-100.ec2.internal Ready worker 64m v1.32.3Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 worker 节点 未 就绪,请检查是否有待批准的证书签名请求(CSR)。
获取当前 CSR 列表:
oc get csr
$ oc get csrCopy to Clipboard Copied! Toggle word wrap Toggle overflow 查看一个 CSR 的详细信息以验证其是否有效:
oc describe csr <csr_name>
$ oc describe csr <csr_name>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<csr_name>是当前 CSR 列表中 CSR 的名称。
批准每个有效的 CSR:
oc adm certificate approve <csr_name>
$ oc adm certificate approve <csr_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在 control plane 和计算节点就绪后,运行以下命令将集群中的所有节点标记为可以调度:
for node in $(oc get nodes -o jsonpath='{.items[*].metadata.name}'); do echo ${node} ; oc adm uncordon ${node} ; done$ for node in $(oc get nodes -o jsonpath='{.items[*].metadata.name}'); do echo ${node} ; oc adm uncordon ${node} ; doneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证集群是否已正确启动。
检查是否有降级的集群 Operator。
oc get clusteroperators
$ oc get clusteroperatorsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 确定没有
DEGRADED条件为True的集群 Operator。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查所有节点是否处于
Ready状态:oc get nodes
$ oc get nodesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查所有节点的状态是否为
Ready。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果集群无法正确启动,您可能需要使用 etcd 备份来恢复集群。
第 4 章 休眠 OpenShift Container Platform 集群 复制链接链接已复制到粘贴板!
您可以休眠 OpenShift Container Platform 集群,最多 90 天。
4.1. 关于集群休眠 复制链接链接已复制到粘贴板!
您可以休眠 OpenShift Container Platform 集群,以节省云托管成本。您可以休眠 OpenShift Container Platform 集群,最多 90 天,并在需要的时间成功恢复它们。
在集群安装后,需要等待至少等待 24 小时以便进行第一次认证轮转,还能进行休眠,。
如果需要在 24 小时证书轮转前休眠集群,请使用以下步骤:启用 OpenShift 4 集群以停止和恢复集群虚拟机。
当休眠集群时,您需要休眠所有集群节点。不支持仅暂停某些特定节点。
在恢复后,集群最多可能需要 45 分钟才能就绪。
4.2. 先决条件 复制链接链接已复制到粘贴板!
在休眠集群前进行 etcd 备份。
重要在休眠前请务必进行 etcd 备份,以便在恢复集群时遇到任何问题,可以恢复集群。
例如,以下条件可能会导致恢复的集群失败:
- 在休眠过程中 etcd 数据崩溃
- 因硬件原因造成节点故障
- 网络连接问题
如果集群无法恢复,请按照以下步骤恢复到以前的集群状态。
4.3. 休眠一个集群 复制链接链接已复制到粘贴板!
您可以休眠集群最多 90 天。如果在集群处于休眠状态时证书过期,集群可以恢复。
先决条件
集群需要至少运行 24 小时,以便完成第一次证书轮转。
重要如果需要在 24 小时证书轮转前休眠集群,请使用以下步骤:启用 OpenShift 4 集群以停止和恢复集群虚拟机。
- 已进行 etcd 备份。
-
您可以使用具有
cluster-admin角色的用户访问集群。
流程
- 确认集群至少已安装了 24 小时。
运行以下命令,确保所有节点都处于良好状态:
oc get nodes
$ oc get nodesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 所有节点的
STATUS列都应显示Ready。运行以下命令,确保所有集群 Operator 都处于良好状态:
oc get clusteroperators
$ oc get clusteroperatorsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 所有集群 Operator 都应显示
AVAILABLE=True,PROGRESSING=False, 和DEGRADED=False。运行以下命令,确保所有机器配置池都处于良好状态:
oc get mcp
$ oc get mcpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE master rendered-master-87871f187930e67233c837e1d07f49c7 True False False 3 3 3 0 96m worker rendered-worker-3c4c459dc5d90017983d7e72928b8aed True False False 3 3 3 0 96m
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE master rendered-master-87871f187930e67233c837e1d07f49c7 True False False 3 3 3 0 96m worker rendered-worker-3c4c459dc5d90017983d7e72928b8aed True False False 3 3 3 0 96mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 所有机器配置池都应该显示
UPDATING=False和DEGRADED=False。停止集群虚拟机:
使用集群云环境的原生工具来关闭集群的虚拟机。
重要如果使用堡垒虚拟机,请不要关闭此虚拟机。
4.4. 恢复一个休眠集群 复制链接链接已复制到粘贴板!
当您在 90 天内恢复休眠集群时,您可能需要批准证书签名请求(CSR)以使节点就绪。
根据集群的大小,集群可能需要大约 45 分钟才能恢复。
先决条件
- 您在 90 天内休眠集群。
-
您可以使用具有
cluster-admin角色的用户访问集群。
流程
在集群休眠的 90 天内恢复集群虚拟机:
使用集群云环境原生的工具来恢复集群的虚拟机。
- 具体取决于集群中的节点数量,等待大约 5 分钟。
批准节点的 CSR:
检查每个节点是否处于
NotReady状态的 CSR:oc get csr
$ oc get csrCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME AGE SIGNERNAME REQUESTOR REQUESTEDDURATION CONDITION csr-4dwsd 37m kubernetes.io/kube-apiserver-client system:node:ci-ln-812tb4k-72292-8bcj7-worker-c-q8mw2 24h Pending csr-4vrbr 49m kubernetes.io/kube-apiserver-client system:node:ci-ln-812tb4k-72292-8bcj7-master-1 24h Pending csr-4wk5x 51m kubernetes.io/kubelet-serving system:node:ci-ln-812tb4k-72292-8bcj7-master-1 <none> Pending csr-84vb6 51m kubernetes.io/kube-apiserver-client-kubelet system:serviceaccount:openshift-machine-config-operator:node-bootstrapper <none> Pending
NAME AGE SIGNERNAME REQUESTOR REQUESTEDDURATION CONDITION csr-4dwsd 37m kubernetes.io/kube-apiserver-client system:node:ci-ln-812tb4k-72292-8bcj7-worker-c-q8mw2 24h Pending csr-4vrbr 49m kubernetes.io/kube-apiserver-client system:node:ci-ln-812tb4k-72292-8bcj7-master-1 24h Pending csr-4wk5x 51m kubernetes.io/kubelet-serving system:node:ci-ln-812tb4k-72292-8bcj7-master-1 <none> Pending csr-84vb6 51m kubernetes.io/kube-apiserver-client-kubelet system:serviceaccount:openshift-machine-config-operator:node-bootstrapper <none> PendingCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来批准每个有效的 CSR:
oc adm certificate approve <csr_name>
$ oc adm certificate approve <csr_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令验证所有必需的 CSR 是否已批准:
oc get csr
$ oc get csrCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME AGE SIGNERNAME REQUESTOR REQUESTEDDURATION CONDITION csr-4dwsd 37m kubernetes.io/kube-apiserver-client system:node:ci-ln-812tb4k-72292-8bcj7-worker-c-q8mw2 24h Approved,Issued csr-4vrbr 49m kubernetes.io/kube-apiserver-client system:node:ci-ln-812tb4k-72292-8bcj7-master-1 24h Approved,Issued csr-4wk5x 51m kubernetes.io/kubelet-serving system:node:ci-ln-812tb4k-72292-8bcj7-master-1 <none> Approved,Issued csr-84vb6 51m kubernetes.io/kube-apiserver-client-kubelet system:serviceaccount:openshift-machine-config-operator:node-bootstrapper <none> Approved,Issued
NAME AGE SIGNERNAME REQUESTOR REQUESTEDDURATION CONDITION csr-4dwsd 37m kubernetes.io/kube-apiserver-client system:node:ci-ln-812tb4k-72292-8bcj7-worker-c-q8mw2 24h Approved,Issued csr-4vrbr 49m kubernetes.io/kube-apiserver-client system:node:ci-ln-812tb4k-72292-8bcj7-master-1 24h Approved,Issued csr-4wk5x 51m kubernetes.io/kubelet-serving system:node:ci-ln-812tb4k-72292-8bcj7-master-1 <none> Approved,Issued csr-84vb6 51m kubernetes.io/kube-apiserver-client-kubelet system:serviceaccount:openshift-machine-config-operator:node-bootstrapper <none> Approved,IssuedCopy to Clipboard Copied! Toggle word wrap Toggle overflow CSR 应该在
CONDITION列中显示为Approved,Issued。
运行以下命令验证所有节点现在显示为 ready :
oc get nodes
$ oc get nodesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 所有节点的
STATUS列都应显示Ready。批准 CSR 后,所有节点可能需要几分钟时间才会变为就绪。等待集群 Operator 重启以加载新证书。
这可能需要 5 分钟或 10 分钟。
运行以下命令,验证所有集群 Operator 是否都处于良好状态:
oc get clusteroperators
$ oc get clusteroperatorsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 所有集群 Operator 都应显示
AVAILABLE=True,PROGRESSING=False, 和DEGRADED=False。
第 5 章 OADP 应用程序备份和恢复 复制链接链接已复制到粘贴板!
5.1. OpenShift API for Data Protection 简介 复制链接链接已复制到粘贴板!
OpenShift API for Data Protection (OADP) 产品保护 OpenShift Container Platform 上的客户应用程序。它提供全面的灾难恢复保护,涵盖 OpenShift Container Platform 应用程序、应用程序相关的集群资源、持久性卷和内部镜像。OADP 还能够备份容器化应用程序和虚拟机 (VM)。
但是,OADP 不会充当 etcd 或 OpenShift Operator 的灾难恢复解决方案。
5.1.1. OpenShift API for Data Protection API 复制链接链接已复制到粘贴板!
OADP 提供了 API,它允许多种方法自定义备份,并防止包含不必要的或不当的资源。
OADP 提供以下 API:
5.1.1.1. 支持 OpenShift API for Data Protection 复制链接链接已复制到粘贴板!
| Version | OCP 版本 | 公开发行(GA) | 完全支持结束 | 维护结束 | 延长更新支持(EUS) | 延长更新支持条款 2 (EUS Term 2) |
| 1.5 |
| 2025 年 6 月 17 日 | 1.6 发行之日 | 1.7 发行之日 | EUS 需要是 OCP 4.20 | EUS Term 2 必须是 OCP 4.20 |
| 1.4 |
| 2024 年 7 月 10 日 | 1.5 发行之日 | 1.6 发行之日 | 2026 年 6 月 27 日 EUS 必须是针对 OCP 4.16 的 | 2027 年 6 月 27 日 EUS Term 2 必须是针对 OCP 4.16 的 |
| 1.3 |
| 2023 年 11 月 29 日 | 2024 年 7 月 10 日 | 1.5 发行之日 | 2025 年 10 月 31 日 EUS 必须是 OCP 4.14 | 2026 年 10 月 31 日 EUS Term 2 必须在 OCP 4.14 中 |
5.1.1.1.1. 不支持的 OADP Operator 版本 复制链接链接已复制到粘贴板!
| Version | 公开发行(GA) | 完全支持结束 | 维护结束 |
| 1.2 | 2023 年 6 月 14 日 | 2023 年 11 月 29 日 | 2024 年 7 月 10 日 |
| 1.1 | 2022 年 9 月 1 日 | 2023 年 6 月 14 日 | 2023 年 11 月 29 日 |
| 1.0 | 2022 年 2 月 9 日 | 2022 年 9 月 1 日 | 2023 年 6 月 14 日 |
有关 EUS 的详情,请参阅延长更新支持。
有关 EUS Term 2 的详情,请参阅延长更新支持 Term 2。
5.2. OADP 发行注记 复制链接链接已复制到粘贴板!
5.2.1. OADP 1.5 发行注记 复制链接链接已复制到粘贴板!
OpenShift API for Data Protection (OADP) 的发行注记介绍了新的功能和增强功能、已弃用的功能、产品建议、已知问题和解决问题。
有关 OADP 的更多信息,请参阅 OpenShift API for Data Protection (OADP) FAQ
5.2.1.1. OADP 1.5.2 发行注记 复制链接链接已复制到粘贴板!
OpenShift API for Data Protection (OADP) 1.5.2 发现注记列出了所有已知的问题。
5.2.1.1.1. 已解决的问题 复制链接链接已复制到粘贴板!
内部镜像备份的自签名证书不应破坏其他 BSLs
在此次更新之前,OADP 只会处理在所有备份存储位置(BSLs)中找到的第一个自定义 CA 证书,并在全局范围内应用它。这个行为可防止带有不同 CA 证书的多个 BSLs 正常工作。另外,不会包括系统可信证书,从而导致连接到标准服务时失败。在这个版本中,OADP 现在:
- 将 AWS BSLs 的所有唯一 CA 证书连接到单个捆绑包中。
- 自动包含系统可信证书。
- 启用具有不同自定义 CA 证书的多个 BSLs 可以同时操作。
- 仅在启用镜像备份时处理 CA 证书(默认行为)。
此功能增强提高了使用具有不同证书要求的多个存储供应商的环境的兼容性,特别是在使用自签名证书将内部镜像备份到 AWS S3 兼容存储时。
5.2.1.2. OADP 1.5.1 发行注记 复制链接链接已复制到粘贴板!
OpenShift API for Data Protection (OADP) 1.5.1 发行注记列出了新功能、已解决的问题、已知问题和已弃用的功能。
5.2.1.2.1. 新功能 复制链接链接已复制到粘贴板!
CloudStorage API 被完全支持
在此版本之前,CloudStorage API 功能作为一个技术预览提供,在 OADP 1.5.1 中被完全支持。CloudStorage API 会自动为对象存储创建存储桶。
新的 DataProtectionTest 自定义资源可用
DataProtectionTest (DPT) 是一个自定义资源 (CR),它提供验证 OADP 配置的框架。DPT CR 检查并报告以下参数信息:
- 将备份上传到对象存储的性能。
- 持久性卷声明的 Container Storage Interface (CSI) 快照就绪。
- 存储桶配置,如加密和版本控制。
在 DPT CR 中使用此信息,您可以确保正确配置并正确配置您的数据保护环境,并根据设置配置执行。
请注意,当使用带有 Azure 上的 OADP 的 DPT 时,您必须配置 STORAGE_ACCOUNT_ID。
新的节点代理负载均衡配置可用
-
节点代理负载关联性: 您可以使用
DataProtectionApplication(DPA) 自定义资源 (CR) 的spec.podConfig.nodeSelector对象将节点代理 pod 调度到特定的节点上。您可以使用 DPA spec 中的nodeagent.loadAffinity对象对节点代理 pod 调度添加更多限制。 存储库维护作业关联性配置 : 只有在使用 Kopia 作为备份存储库时,您可以使用
DataProtectionApplication(DPA)自定义资源(CR) 中的存储库维护作业关联性配置。您可以选择在全局级别上配置负载关联性,会影响所有存储库或每个存储库。您还可以使用全局和每个存储库配置的组合。
-
Velero load 关联性: 您可以使用
podConfig.nodeSelector对象将 Velero pod 分配给特定的节点。您还可以为 pod 级别关联性和反关联性配置velero.loadAffinity对象。
节点代理负载并发可用
在这个版本中,用户可以控制集群中每个节点上可以同时运行的最大节点代理操作数量。它还启用了更好的资源管理、优化备份和恢复工作流,以提高性能和更精简的体验。
5.2.1.2.2. 已解决的问题 复制链接链接已复制到粘贴板!
DataProtectionApplicationSpec 超过注解限制,从而导致部署出现潜在的错误配置
在此次更新之前,DataProtectionApplicationSpec 使用已弃用的 PodAnnotations,这会导致注解限制溢出。这会导致部署出现潜在的错误配置。在本发行版本中,我们为 Operator 部署的 pod 中的注解添加了 PodConfig,确保最终用户提供一致的注解并改进了可管理性。现在,部署应该更加可靠且更易于管理。
OADP 控制器管理器的根文件系统现在是只读
在此次更新之前,openshift-adp-controller-manager-* pod 的 manager 容器被配置为使用可写的根文件系统运行。因此,这可能会导致使用容器的文件系统或外部可执行文件的篡改。在这个版本中,容器的安全上下文已被更新,将 root 文件系统设置为只读,同时确保需要写入访问权限所需的功能(如 Kopia 缓存)可以继续正确运行。因此,容器会针对潜在的威胁进行强化。
在多个 DPAs 中,nonAdmin.enable: false 不再导致协调问题
在此次更新之前,当用户尝试在已存在的集群中创建第二个非管理员 DataProtectionApplication (DPA) 时,新的 DPA 无法协调。在这个版本中,每个集群中对 Non-Admin Controller 安装的限制已被删除。因此,用户可以在集群中安装多个 Non-Admin Controller,而不会遇到错误。
OADP 支持自签名证书
在此次更新之前,使用自签名证书作为带有存储供应商(如 Minio)的备份镜像会导致备份过程中出现 x509: certificate signed by unknown authority 错误。在这个版本中,证书验证已被更新,以支持 OADP 中的自签名证书,确保成功备份。
Velero describe 包括 defaultVolumesToFsBackup
在此次更新之前,velero describe 输出命令会省略 defaultVolumesToFsBackup 标志。这会影响用户的备份配置详情的可见性。在这个版本中,velero describe 输出包含 defaultVolumesToFsBackup 标志信息,改进了备份设置的可见性。
当 s3Url 是安全的时,DPT CR 不再失败
在此次更新之前,当 s3Url 是安全的时,因为一个未验证的证书而导致 DataProtectionTest (DPT) 失败,因为 DPT CR 缺少在 spec 字段中跳过或添加 caCert 的功能。因此,因为未验证的证书,数据上传失败。在这个版本中,DPT CR 已更新,可以接受和跳过 spec 字段中的 CA 证书,从而解决了 SSL 验证错误的问题。因此,在使用安全 s3Url 时,DPT 不再失败。
向 DPA 添加一个其 backupLocation 名称已存在的 backupLocation 时不会被拒绝
在此次更新之前,在 DataProtectionApplication (DPA) 中添加第二个 backupLocation 会导致 OADP 进入无效的状态,从而导致 Backup 和 Restore 失败,因为 Velero 无法读取 Secret 凭证。因此,备份和恢复操作会失败。在这个版本中,DPA 中重复的 backupLocation 名称不再被允许,防止 Backup 和 Restore 失败。因此,重复的 backupLocation 名称会被拒绝,确保无缝的数据保护。
5.2.1.2.3. 已知问题 复制链接链接已复制到粘贴板!
恢复使用 Cinder CSI 驱动程序在 OpenStack 上创建的备份会失败
当您为使用 Cinder Container Storage Interface (CSI) 驱动程序的 OpenStack 平台上创建的备份启动恢复操作时,初始备份仅在源应用程序手动缩减后成功。恢复作业失败,使您无法从备份中恢复应用程序的数据和状态。当前还没有已知的临时解决方案。
如果 nodeAgent.loadAffinity 参数有多个元素,Datamover pod 会被调度在一个意料外的节点上
由于 Velero 1.14 及之后的版本中的一个问题,OADP node-agent 只处理 loadAffinity 数组中的第一个 nodeSelector 元素。因此,如果您定义了多个 nodeSelector 对象,会忽略除第一个以外的所有对象,从而可能会导致在备份过程中将数据 pod 调度到意外节点上。
要临时解决这个问题,将来自多个 nodeSelector 对象的所有所需的 matchExpressions 整合到第一个 nodeSelector 对象中。因此,所有节点关联性规则都会被正确应用,确保将数据 pod 调度到适当的节点。
当使用带有别名的命令的 CA 证书时,OADP Backup 会失败
CA 证书不会作为一个文件存储在运行的 Velero 容器上。因为这个原因,会由于 Velero 容器中缺少 caCert 出现降级的情况,需要手动设置和下载。要临时解决这个问题,在 Velero 部署中手动添加证书。具体步骤请参阅使用带有 velero 部署的 cacert 命令别名。
Data Mover restore 操作不支持 nodeSelector spec
当使用 nodeAgent 参数中设置的 nodeSelector 字段创建数据保护应用程序(DPA)时,Data Mover restore 部分会失败,而不是完成恢复操作。当前还没有已知的临时解决方案。
当使用 caCert 配置 DPA 时,镜像流备份部分失败
在 S3 连接中使用 DataProtectionApplication (DPA) 中的 caCert 备份过程中的未验证证书会导致 ocp-django 应用程序的备份部分失败,并导致数据丢失。当前还没有已知的临时解决方案。
Kopia 不会删除 worker 节点上的缓存
当配置了 ephemeral-storage 参数并运行文件系统恢复时,缓存不会自动从 worker 节点中删除。因此,在恢复备份过程时 /var 分区会溢出,从而增加了存储使用量并潜在存在资源耗尽的情况。要临时解决这个问题,重启节点代理 pod,这会清除缓存。这样,缓存会被删除。
Google Cloud VSL 备份失败并显示 Workload Identity,因为项目配置无效
当在 Google Cloud Workload Identity 上执行 volumeSnapshotLocation (VSL)备份时,Velero Google Cloud 插件也会在 DataProtectionApplication (DPA)的 snapshotLocations 配置中指定,Velero Google Cloud 插件会创建一个无效的 API 请求。因此,Google Cloud API 返回 RESOURCE_PROJECT_INVALID 错误,备份作业会完成 PartiallyFailed 状态。当前还没有已知的临时解决方案。
使用 STS 的 AWS 上的 CloudStorage API 的 VSL 备份失败
volumeSnapshotLocation (VSL) 备份失败,因为凭证文件中缺少 AZURE_RESOURCE_GROUP 参数,即使 VSL 的 DataProtectionApplication (DPA) 配置中提到了 AZURE_RESOURCE_GROUP。当前还没有已知的临时解决方案。
使用 STS 的 Azure 上备份带有 ImageStreams 的应用程序会失败
当使用 STS 在 Azure 集群上备份包含镜像流资源的应用程序时,OADP 插件会错误地尝试为容器 registry 查找基于 secret 的凭证。因此,STS 环境中没有找到所需的 secret,从而导致 ImageStream 自定义备份操作失败。这会导致标记为 PartiallyFailed 的整体备份状态。当前还没有已知的临时解决方案。
对于 CloudStorageRef 配置,DPA 协调失败
当用户创建存储桶并使用 backupLocations.bucket.cloudStorageRef 配置时,存储桶凭证不会出现在 DataProtectionApplication (DPA) 自定义资源 (CR) 中。因此,即使 CloudStorage CR 中存在存储桶凭证,DPA 协调也会失败。要临时解决这个问题,在 DPA CR 的 backupLocations 部分添加相同的凭证。
5.2.1.2.4. 弃用的功能 复制链接链接已复制到粘贴板!
configuration.restic specification 字段已弃用
在 OADP 1.5.0 中,config.restic 规格字段已弃用。使用带有 uploaderType 字段的 nodeAgent 部分选择 kopia 或 restic 作为 uploaderType。请注意,Restic 在 OADP 1.5.0 中已弃用。
5.2.1.3. OADP 1.5.0 发行注记 复制链接链接已复制到粘贴板!
OpenShift API for Data Protection (OADP) 1.5.0 发行注记列出了已解决的问题和已知问题。
5.2.1.3.1. 新功能 复制链接链接已复制到粘贴板!
OADP 1.5.0 引入了一个新的自助服务功能
OADP 1.5.0 引入了名为 OADP Self-Service 的新功能,启用命名空间管理员用户在 OpenShift Container Platform 上备份和恢复应用程序。在之前的 OADP 版本中,您需要 cluster-admin 角色来执行 OADP 操作,如备份和恢复应用程序、创建备份存储位置等。
从 OADP 1.5.0 开始,您不需要 cluster-admin 角色来执行备份和恢复操作。您可以将 OADP 与命名空间 admin 角色一起使用。命名空间 admin 角色仅对该用户分配到的命名空间具有管理员访问权限。您只能在集群管理员安装 OADP Operator 并提供所需权限后使用 Self-Service 功能。
使用 must-gather 工具收集日志已使用 Markdown 概述进行了改进
您可以使用 must-gather 工具来收集用于数据保护 (OADP) 自定义资源的日志以及 OpenShift API 的信息。must-gather 数据必须附加到所有客户案例。这个工具使用收集的信息生成 Markdown 输出文件,它位于 must-gather 日志集群目录中。
dataMoverPrepareTimeout 和 resourceTimeout 参数现在添加到 DPA 中的 nodeAgent 中
Data Protection Application (DPA) 中的 nodeAgent 字段现在包含以下参数:
-
dataMoverPrepareTimeout: 定义DataUpload或DataDownload进程将等待的持续时间。默认值为 30 分钟。 -
resourceTimeout:设置没有被其他特定超时参数解决的资源进程的超时时间。默认值为 10 分钟。
使用 DPA 中的 spec.configuration.nodeAgent 参数来配置 nodeAgent 守护进程集
Velero 不再使用 node-agent-config 配置映射来配置 nodeAgent 守护进程集。在这个版本中,您必须在数据保护应用程序(DPA)中使用新的 spec.configuration.nodeAgent 参数来配置 nodeAgent 守护进程集。
现在可以使用备份存储库配置配置映射配置 DPA
使用 Velero 1.15 及之后的版本,您现在可以配置每个存储库缓存的总大小。这可防止因为临时存储不足而无法移除 pod。请参阅以下新参数添加到 DPA 中的 NodeAgentConfig 字段中:
-
cacheLimitMB:以 MB 为单位设置本地数据缓存大小限制。 fullMaintenanceInterval:默认值为 24 小时。使用以下覆盖选项控制 Kopia 存储库中的已删除 Velero 备份率:-
normalGC: 24 小时 -
fastGC: 12 小时 -
eagerGC: 6 小时
-
提高 node-agent 安全性
在这个版本中,添加了以下更改:
-
现在,在 DPA 中的
velero字段中添加了新的configuration选项。 disableFsBackup参数的默认值为false或non-existing。在这个版本中,以下选项添加到SecurityContext字段中:-
Privileged: true -
AllowPrivilegeEscalation: true
-
如果将
disableFsBackup参数设置为true,它会从 node-agent 中删除以下挂载:-
host-pods -
host-plugins
-
- 修改 node-agent 始终以非 root 用户身份运行。
- 将 root 文件系统更改为只读方式。
使用写访问权限更新以下挂载点:
-
/home/velero -
tmp/credentials
-
-
将
SeccompProfileTypeRuntimeDefault选项用于SeccompProfile参数。
为并行项目备份添加 DPA 支持
默认情况下,只有一个线程处理一个项目块。Velero 1.16 支持并行项目备份,其中可以并行处理备份中的多个项目。
您可以使用可选的 Velero 服务器参数 --item-block-worker-count 来运行额外的 worker 线程来并行处理项目。要在 OADP 中启用此功能,请将 dpa.Spec.Configuration.Velero.ItemBlockWorkerCount 参数设置为大于零的整数值。
目前还不支持并行运行多个完整备份。
OADP 日志现在以 JSON 格式提供
随着 OADP 1.5.0 的发布,日志现在以 JSON 格式提供。它有助于在 Elastic logs 管理系统中包含预解析的数据。
oc get dpa 命令现在显示 RECONCILED 状态
在这个版本中,oc get dpa 命令会显示 RECONCILED 状态,而不是只显示 NAME 和 AGE 以改进用户体验。例如:
oc get dpa -n openshift-adp
$ oc get dpa -n openshift-adp
NAME RECONCILED AGE
velero-sample True 2m51s
5.2.1.3.2. 已解决的问题 复制链接链接已复制到粘贴板!
容器现在对 terminationMessagePolicy 使用 FallbackToLogsOnError
在这个版本中,terminationMessagePolicy 字段可以为 Data Protection (OADP) Operator 容器(如 operator-manager,velero,node-agent, 和 non-admin-controller )设置 FallbackToLogsOnError 值。
此更改可确保容器退出并显示错误并且终止消息文件为空,OpenShift 会使用容器日志输出的最后一部分作为终止消息。
命名空间管理员现在可以在恢复后访问应用程序
在以前的版本中,在恢复操作后,命名空间 admin 无法执行带有以下错误的应用程序:
-
不允许 exec 操作,因为 pod 的安全上下文超出您的权限 -
无法针对任何安全性上下文约束进行验证 -
用户或 serviceaccount, provider restricted-v2 不可用
在这个版本中,这个问题已被解决,命名空间 admin 可以在恢复后成功访问应用程序。
现在,可以使用注解在单独的资源实例级别指定状态恢复
在以前的版本中,只有使用 Restore 自定义资源(CR)中的 restoreStatus 字段在资源类型中配置状态恢复。
在这个版本中,您可以使用以下注解在单独的资源实例级别指定状态恢复:
metadata:
annotations:
velero.io/restore-status: "true"
metadata:
annotations:
velero.io/restore-status: "true"
现在,恢复可以成功使用 excludedClusterScopedResources
在以前的版本中,当执行将 excludeClusterScopedResources 字段设置为 storageclasses,Namespace 参数的应用程序备份时,备份可以成功,但恢复会部分失败。在这个版本中,恢复可以成功。
备份已完成,即使它在 waitingForPluginOperations 阶段被重启
在以前的版本中,备份被标记为 failed,并带有以下错误消息:
failureReason: found a backup with status "InProgress" during the server starting, mark it as "Failed"
failureReason: found a backup with status "InProgress" during the server starting,
mark it as "Failed"
在这个版本中,如果备份在 waitingForPluginOperations 阶段被重启,则会完成备份。
现在,当 DPA 中的 ` disableFsbackup` 参数设置为 true 时,错误消息更为明确
在以前的版本中,当数据保护应用程序(DPA)的 spec.configuration.velero.disableFsBackup 字段被设置为 true 时,备份部分会失败并显示错误,但信息并不明确。
在这个版本中,错误消息更加明确,有助于对问题进行故障排除。例如,错误消息表示 disableFsBackup: true 是 DPA 中的问题,或者对于非管理员用户,则无法访问 DPA。
在 parseAWSSecret 中处理 AWS STS 凭证
在以前的版本中,使用 STS 身份验证的 AWS 凭证不会被正确验证。
在这个版本中,parseAWSSecret 功能检测到特定于 STS 的字段,并更新 ensureSecretDataExists 功能来正确处理 STS 配置集。
repositoryMaintenance 作业关联性配置可用于配置
在以前的版本中,DPA 规格中缺少存储库维护作业 pod 关联性的新配置。
在这个版本中,repositoryMaintenance 作业关联性配置可用于将 BackupRepository 标识符映射到其配置。
当 CR 规格正确后,ValidationErrors 字段会消失
在以前的版本中,当使用错误 spec.schedule 值创建调度 CR,之后使用正确的值修补了这个值,ValidationErrors 字段仍然存在。因此,即使 spec 正确,ValidationErrors 字段也会显示不正确的信息。
在这个版本中,在 CR 规格正确后,ValidationErrors 字段将不再存在。
当在 restoreSpec 中使用了 includedNamesapces 字段时,volumeSnapshotContents 自定义资源会被恢复
在以前的版本中,当在恢复规格中使用 includedNamespace 字段触发恢复操作时,恢复操作会成功完成,但没有创建 volumeSnapshotContents 自定义资源 (CR),且 PVC 处于 Pending 状态。
在这个版本中,即使 restoreSpec 中使用 includedNamesapces 字段,volumeSnapshotContents CR 也会被恢复。因此,应用程序 pod 在恢复后处于 Running 状态。
OADP operator 在 AWS 上成功创建存储桶
在以前的版本中,容器使用 readOnlyRootFilesystem: true 设置进行配置,但代码会尝试使用 os.CreateTemp() 函数在 /tmp 目录中创建临时文件。因此,当将 AWS STS 身份验证与 Cloud Credential Operator (CCO) 流搭配使用时,OADP 无法创建 AWS 凭证处理所需的临时文件,并显示以下错误:
ERROR unable to determine if bucket exists. {"error": "open /tmp/aws-shared-credentials1211864681: read-only file system"}
ERROR unable to determine if bucket exists. {"error": "open /tmp/aws-shared-credentials1211864681: read-only file system"}
在这个版本中,添加了以下更改来解决这个问题:
-
在控制器 pod 规格中,有一个新的名为
tmp-dir的emptyDir卷。 -
一个卷挂载到容器,该容器将此卷挂载到
/tmp目录中。 -
对于安全最佳实践,可维护
readOnlyRootFilesystem: true。 -
使用推荐的
os.CreateTemp()函数替换弃用的ioutil.TempFile()函数。 -
删除了不必要的
io/ioutil导入,这已不再需要。
有关本发行版本中解决的所有问题的完整列表,请参阅 JIRA 中的 OADP 1.5.0 解决的问题列表。
5.2.1.3.3. 已知问题 复制链接链接已复制到粘贴板!
Kopia 在备份过期后不会删除所有工件
在备份过期后,即使删除了备份,Kopia 也不会从 S3 位置的 ${bucket_name}/kopia/$openshift-adp 中删除卷工件。与过期和删除的数据文件相关的信息保留在元数据中。为确保 OpenShift API for Data Protection (OADP) 可以正常工作,数据不会被删除,并存在于 /kopia/ 目录中,例如:
-
kopia.repository:主仓库格式信息,如加密、版本和其他信息。 -
kopia.blobcfg: 配置如何命名数据 Blob。 -
kopia.maintenance: 跟踪维护所有者,调度和最新成功的构建。 -
log: 日志 blobs.
有关本发行版本中所有已知问题的完整列表,请参阅 JIRA 中的 OADP 1.5.0 已知问题 列表。
5.2.1.3.4. 弃用的功能 复制链接链接已复制到粘贴板!
configuration.restic specification 字段已弃用
在 OpenShift API for Data Protection (OADP) 1.5.0 中,config.restic specification 字段已弃用。使用带有 uploaderType 字段的 nodeAgent 部分选择 kopia 或 restic 作为 uploaderType。请注意,Restic 在 OpenShift API for Data Protection (OADP) 1.5.0 中已弃用。
5.2.1.3.5. 技术预览 复制链接链接已复制到粘贴板!
对 HyperShift 托管 OpenShift 集群的支持作为技术预览提供
OADP 可以作为技术预览支持并促进 HyperShift 托管 OpenShift 集群中的应用程序迁移。它为托管的集群中的应用程序确保无缝的备份和恢复操作。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
5.2.1.4. 将 OADP 1.4 升级到 1.5 复制链接链接已复制到粘贴板!
始终升级到下一个次版本。不要跳过版本。要升级到更新的版本,请一次只升级一个频道。例如,要从 OADP 1.1 升级到 1.3,请首先升级到 1.2,然后再升级到 1.3。
5.2.1.4.1. 从 OADP 1.4 更新到 1.5 复制链接链接已复制到粘贴板!
Velero 服务器已从 1.14 版本更新至 1.16。
这会更改以下内容:
- 版本支持更改
- OpenShift API for Data Protection 实施了一个简化的版本支持政策。红帽在一个 OpenShift 版本上只支持一个 OpenShift API for Data Protection (OADP),以确保其稳定性和可维护性。OADP 1.5.0 只在 OpenShift 4.19 版本中被支持。
- OADP 自助服务
OADP 1.5.0 引入了名为 OADP Self-Service 的新功能,启用命名空间管理员用户在 OpenShift Container Platform 上备份和恢复应用程序。在之前的 OADP 版本中,您需要 cluster-admin 角色来执行 OADP 操作,如备份和恢复应用程序、创建备份存储位置等。
从 OADP 1.5.0 开始,您不需要 cluster-admin 角色来执行备份和恢复操作。您可以将 OADP 与命名空间 admin 角色一起使用。命名空间 admin 角色仅对该用户分配到的命名空间具有管理员访问权限。您只能在集群管理员安装 OADP Operator 并提供所需权限后使用 Self-Service 功能。
backupPVC和restorePVC配置backupPVC资源是一个中间的持久性卷声明 (PVC),用于在数据移动备份操作期间访问数据。您可以使用DataProtectionApplication(DPA) 自定义资源中的nodeAgent.backupPVC部分创建一个readonly备份 PVC。restorePVC资源是一个中间 PVC,用于在 Data Mover restore 操作过程中写入数据。您可以使用
ignoreDelayBinding字段在 DPA 中配置restorePVC。
5.2.1.4.2. 备份 DPA 配置 复制链接链接已复制到粘贴板!
您必须备份当前的 DataProtectionApplication (DPA) 配置。
流程
运行以下命令来保存您当前的 DPA 配置:
示例命令
oc get dpa -n openshift-adp -o yaml > dpa.orig.backup
$ oc get dpa -n openshift-adp -o yaml > dpa.orig.backupCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.1.4.3. 升级 OADP Operator 复制链接链接已复制到粘贴板!
您可以按照以下流程升级 OpenShift API for Data Protection (OADP) Operator。
不要在 OpenShift 4.18 集群上安装 OADP 1.5.0。
先决条件
- 已安装最新的 OADP 1.4.6。
- 已备份了数据。
流程
将 OpenShift 4.18 升级到 OpenShift 4.19。
注意OpenShift 4.19 不支持 OpenShift API for Data Protection (OADP) 1.4。
-
将 OADP Operator 的订阅频道从
stable-1.4改为stable。 - 等待 Operator 和容器更新并重启。
5.2.1.4.4. 将 DPA 转换为 OADP 1.5.0 的新版本 复制链接链接已复制到粘贴板!
OpenShift 4.19 不支持 OpenShift API for Data Protection (OADP) 1.4。您可以使用新的 spec.configuration.nodeAgent 字段及其子字段将数据保护应用程序(DPA)转换为新的 OADP 1.5 版本。
流程
要配置
nodeAgent守护进程集,请使用 DPA 中的spec.configuration.nodeAgent参数。请参见以下示例:DataProtectionApplication配置示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要使用名为
node-agent-config的ConfigMap资源配置nodeAgent守护进程集,请参阅以下示例配置:配置映射示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.1.4.5. 验证升级 复制链接链接已复制到粘贴板!
您可以按照以下流程验证 OpenShift API for Data Protection (OADP) 升级。
流程
验证
DataProtectionApplication(DPA) 是否已成功协调:oc get dpa dpa-sample -n openshift-adp
$ oc get dpa dpa-sample -n openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME RECONCILED AGE dpa-sample True 2m51s
NAME RECONCILED AGE dpa-sample True 2m51sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意RECONCILED列必须为True。运行以下命令,通过查看 OADP 资源来验证安装是否完成:
oc get all -n openshift-adp
$ oc get all -n openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意node-agentpod 仅在DataProtectionApplication(DPA) 中使用restic或kopia时才创建。在 OADP 1.4.0 和 OADP 1.3.0 版本中,node-agentpod 被标记为restic。运行以下命令,验证备份存储位置并确认
PHASE为Available:oc get backupstoragelocations.velero.io -n openshift-adp
$ oc get backupstoragelocations.velero.io -n openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME PHASE LAST VALIDATED AGE DEFAULT dpa-sample-1 Available 1s 3d16h true
NAME PHASE LAST VALIDATED AGE DEFAULT dpa-sample-1 Available 1s 3d16h trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.2. OADP 1.4 发行注记 复制链接链接已复制到粘贴板!
OpenShift API for Data Protection (OADP) 的发行注记介绍了新的功能和增强功能、已弃用的功能、产品建议、已知问题和解决问题。
有关 OADP 的更多信息,请参阅 OpenShift API for Data Protection (OADP) FAQ
5.2.2.1. OADP 1.4.4 发行注记 复制链接链接已复制到粘贴板!
OpenShift API for Data Protection (OADP) 1.4.4 是一个 CGO(Container Grade Only)版本,它刷新了容器的健康级别。与 OADP 1.4.3 相比,产品本身的代码并没有变化。
5.2.2.1.1. 已知问题 复制链接链接已复制到粘贴板!
恢复有状态应用程序的问题
当您恢复使用 azurefile-csi 存储类的有状态应用程序时,恢复操作会保留在 Finalizing 阶段。(OADP-5508)
5.2.2.2. OADP 1.4.3 发行注记 复制链接链接已复制到粘贴板!
OpenShift API for Data Protection (OADP) 1.4.3 发行注记中列出了以下新功能。
5.2.2.2.1. 新功能 复制链接链接已复制到粘贴板!
版本 0.7.1 中的 kubevirt velero 插件的显著变化
在这个版本中,kubevirt velero 插件已更新至版本 0.7.1。主要改进包括以下程序错误修复和新功能:
- 当所有者虚拟机被排除时,备份不再会忽略虚拟机实例(VMI)。
- 对象图现在在备份和恢复操作过程中包括所有额外对象。
- 现在,在恢复操作过程中,可选生成的标签会添加到新的固件通用唯一标识符(UUID)中。
- 现在,可以在恢复操作期间切换虚拟机运行策略。
- 现在支持通过标签清除 MAC 地址。
- 现在,在备份操作过程中会跳过特定于恢复的检查。
-
现在支持
VirtualMachineClusterInstancetype和VirtualMachineClusterPreference自定义资源定义(CRD)。
5.2.2.3. OADP 1.4.2 发行注记 复制链接链接已复制到粘贴板!
OpenShift API for Data Protection (OADP) 1.4.2 发行注记列出了新功能、解决的问题和程序错误,以及已知的问题。
5.2.2.3.1. 新功能 复制链接链接已复制到粘贴板!
现在,可以使用 VolumePolicy 功能备份同一命名空间中的不同卷
在这个版本中,Velero 提供资源策略,以使用 VolumePolicy 功能备份同一命名空间中的不同卷。备份不同卷所支持的 VolumePolicy 功能包括 skip, snapshot, 和 fs-backup 操作。OADP-1071
文件系统 backup and data mover 现在可以使用短期凭证
文件系统 backup and data mover 现在可以使用短期凭证,如 AWS 安全令牌服务 (STS) 和 Google Cloud WIF。现在,备份会在没有 PartiallyFailed 状态的情况下成功完成。OADP-5095
5.2.2.3.2. 已解决的问题 复制链接链接已复制到粘贴板!
现在,如果 VSL 包含不正确的供应商值,DPA 会报告错误
在以前的版本中,如果卷快照位置(VSL) spec 的供应商不正确,则数据保护应用程序(DPA)可以成功协调。在这个版本中,DPA 会报告错误并请求一个有效的供应商值。OADP-5044
对于使用不同 OADP 命名空间的备份和恢复,Data Mover 恢复可以成功。
在以前的版本中,当使用在一个命名空间中安装的 OADP 执行备份,但使用安装在不同命名空间中的 OADP 恢复时,Data Mover 恢复会失败。在这个版本中,Data Mover 恢复可以成功。OADP-5460
SSE-C 备份可用于计算的 secret 密钥的 MD5
在以前的版本中,备份失败并显示以下错误:
Requests specifying Server Side Encryption with Customer provided keys must provide the client calculated MD5 of the secret key.
Requests specifying Server Side Encryption with Customer provided keys must provide the client calculated MD5 of the secret key.
在这个版本中,解决了使用客户提供密钥(SSE-C) base64 和 MD5 哈希的 Server-Side 加密。因此,SSE-C 备份可用于计算的 secret 密钥的 MD5另外,customerKey 大小的不正确的 errorhandling 也被修复。OADP-5388
有关本发行版本中解决的所有问题的完整列表,请参阅 JIRA 中的 OADP 1.4.2 解决的问题列表。
5.2.2.3.3. 已知问题 复制链接链接已复制到粘贴板!
Data Mover restore 操作不支持 nodeSelector spec
当使用 nodeAgent 参数中设置的 nodeSelector 字段创建数据保护应用程序(DPA)时,Data Mover restore 部分会失败,而不是完成恢复操作。OADP-5260
当指定了 TLS 跳过验证时,S3 存储不会使用代理环境
在镜像 registry 备份中,当 insecureSkipTLSVerify 参数设置为 true 时,S3 存储不会使用代理环境。OADP-3143
Kopia 在备份过期后不会删除工件
在备份过期后,即使删除了备份,Kopia 也不会从 S3 位置的 ${bucket_name}/kopia/$openshift-adp 中删除卷工件。如需更多信息,请参阅"关于 Kopia 仓库维护"。OADP-5131
5.2.2.4. OADP 1.4.1 发行注记 复制链接链接已复制到粘贴板!
OpenShift API for Data Protection (OADP) 1.4.1 发行注记列出了新功能、解决的问题和程序错误,以及已知的问题。
5.2.2.4.1. 新功能 复制链接链接已复制到粘贴板!
新的 DPA 字段以更新客户端 qps 和 burst
现在,您可以使用新的数据保护应用程序 (DPA) 字段更改 Velero Server Kubernetes API 查询每秒(qps)和突发(burst)值。新的 DPA 字段是 spec.configuration.velero.client-qps 和 spec.configuration.velero.client-burst,它们都默认为 100。OADP-4076
使用 Kopia 启用非默认算法
在这个版本中,您可以在 Kopia 中配置哈希、加密和分割程序算法来选择非默认选项来优化不同备份工作负载的性能。
要配置这些算法,在 DataProtectionApplication (DPA) 配置的 podConfig 部分中设置 velero pod 的 env 变量。如果没有设置此变量,或者选择了一个不被支持的算法,Kopia 将默认为其标准算法。OADP-4640
5.2.2.4.2. 已解决的问题 复制链接链接已复制到粘贴板!
现在可以成功恢复没有 pod 的备份
在以前的版本中,恢复没有 pod 的备份,并将 StorageClass VolumeBindingMode 设置为 WaitForFirstConsumer 会导致 PartiallyFailed 状态出现错误:fail to patch dynamic PV, err: context deadline exceeded。在这个版本中,会跳过对动态 PV 进行补丁,并可以成功恢复备份,不再会出现 PartiallyFailed 状态。OADP-4231
PodVolumeBackup CR 现在显示正确的消息
在以前的版本中,PodVolumeBackup 自定义资源 (CR) 会生成不正确的消息:get a podvolumebackup with status "InProgress" during the server starting, mark it as "Failed"。在这个版本中,生成的消息是:
found a podvolumebackup with status "InProgress" during the server starting, mark it as "Failed".
found a podvolumebackup with status "InProgress" during the server starting,
mark it as "Failed".
现在,可以使用 DPA 覆盖 imagePullPolicy
在以前的版本中,OADP 将所有镜像的 imagePullPolicy 参数都设置为 Always。在这个版本中,OADP 会检查每个镜像是否包含了 sha256 或 sha512 摘要,然后将 imagePullPolicy 设置为 IfNotPresent; 否则 imagePullPolicy 被设置为 Always。现在,您可以使用新的 spec.containerImagePullPolicy DPA 字段覆盖此策略。OADP-4172
现在,如果初始更新失败,OADP Velero 现在可以重试更新恢复状态
在以前的版本中,OADP Velero 无法更新恢复的 CR 状态。这会无限期保留 InProgress 状态。依赖于备份和恢复 CR 状态以确定完成会失败的组件。在这个版本中,恢复的恢复 CR 状态可以正确地进入 Completed 或 Failed 状态。OADP-3227
从不同的集群恢复 BuildConfig 构建会成功,且没有任何错误
在以前的版本中,当从其他集群执行 BuildConfig Build 资源恢复时,应用程序会在内部镜像 registry 的 TLS 验证过程中生成一个错误。错误信息 failed to verify certificate: x509: certificate signed by unknown authority。在这个版本中,BuildConfig 构建资源恢复到不同的集群可以成功进行,而不会生成 failed to verify certificate 错误。OADP-4692
恢复空的 PVC 可以成功
在以前的版本中,在恢复空的持久性卷声明 (PVC) 时,下载数据会失败。这个失败带有以下错误:
data path restore failed: Failed to run kopia restore: Unable to load
snapshot : snapshot not found
data path restore failed: Failed to run kopia restore: Unable to load
snapshot : snapshot not found
在这个版本中,在恢复空 PVC 时,下载数据的过程会正确处理,不会生成错误信息。OADP-3106
CSI 和 DataMover 插件中没有 Velero 内存泄漏的问题
在以前的版本中,使用 CSI 和 DataMover 插件会导致 Velero 内存泄漏。当备份结束时,Velero 插件实例不会被删除,在 Velero pod 中生成 内存不足(OOM )条件前,内存泄漏会消耗内存。在这个版本中,当使用 CSI 和 DataMover 插件时,不会出现 Velero 内存泄漏的问题。OADP-4448
在相关 PV 被释放前,post-hook 操作不会启动
在以前的版本中,由于 Data Mover 操作的异步性,在 Data Mover 持久性卷声明 (PVC) 释放相关 pod 的持久性卷 (PV) 前,可能会尝试进行 post-hook 操作。此问题会导致备份失败,并显示 PartiallyFailed 状态。在这个版本中,在 Data Mover PVC 发布相关的 PV 前,才会启动 post-hook 操作,从而避免出现 PartiallyFailed 备份状态。OADP-3140
在带有超过 37 个字符的命名空间中部署 DPA 可以正常工作
当您在带有超过 37 个字符的命名空间中安装 OADP Operator 来创建新的 DPA 时,标记 "cloud-credentials" Secret 会失败,DPA 报告以下错误:
The generated label name is too long.
The generated label name is too long.
在这个版本中,在名称中有超过 37 个字符的命名空间中创建 DPA 不会失败。OADP-3960
恢复可以通过覆盖超时错误成功完成
在以前的版本中,在大规模环境中,恢复操作会导致 Partiallyfailed 状态并带有错误:fail to patch dynamic PV, err: context deadline exceeded。在这个版本中,可以使用 resourceTimeout Velero 服务器参数覆盖这个超时错误,从而使恢复可以成功完成。OADP-4344
有关本发行版本中解决的所有问题的完整列表,请参阅 JIRA 中的 OADP 1.4.1 解决的问题列表。
5.2.2.4.3. 已知问题 复制链接链接已复制到粘贴板!
恢复 OADP 后,Cassandra 应用程序 pod 进入 CrashLoopBackoff 状态
在 OADP 恢复后,Cassandra 应用程序 pod 可能会进入 CrashLoopBackoff 状态。要临时解决这个问题,删除在恢复 OADP 后返回错误 CrashLoopBackoff 状态的 StatefulSet pod。然后,StatefulSet 控制器会重新创建这些 pod 并正常运行。OADP-4407
引用 ImageStream 的部署不会被正确恢复,并导致 pod 和卷内容被破坏
在文件系统备份(FSB)恢复操作中,引用 ImageStream 的 Deployment 资源没有被正确恢复。恢复运行 FSB 的 pod,postHook 会被提前终止。
在恢复操作过程中,OpenShift Container Platform 控制器会使用一个更新的 ImageStreamTag 哈希更新 Deployment 资源中的 spec.template.spec.containers[0].image 字段。更新会触发推出新的 pod,终止 velero 运行 FSB 和 post-hook 的 pod。
有关镜像流触发器的更多信息,请参阅触发镜像流更新。
这个行为的临时解决方案分为两个步骤:
执行排除了
Deployment资源的恢复,例如:velero restore create <RESTORE_NAME> \ --from-backup <BACKUP_NAME> \ --exclude-resources=deployment.apps
$ velero restore create <RESTORE_NAME> \ --from-backup <BACKUP_NAME> \ --exclude-resources=deployment.appsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 第一次恢复成功后,通过包含这些资源来执行第二次恢复,例如:
velero restore create <RESTORE_NAME> \ --from-backup <BACKUP_NAME> \ --include-resources=deployment.apps
$ velero restore create <RESTORE_NAME> \ --from-backup <BACKUP_NAME> \ --include-resources=deployment.appsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.2.5. OADP 1.4.0 发行注记 复制链接链接已复制到粘贴板!
OpenShift API for Data Protection (OADP) 1.4.0 发行注记列出了已解决的问题和已知问题。
5.2.2.5.1. 已解决的问题 复制链接链接已复制到粘贴板!
恢复在 OpenShift Container Platform 4.16 中可以正常工作
在以前的版本中,当恢复已删除的应用程序命名空间时,恢复操作部分失败,在 OpenShift Container Platform 4.16 中会出现 resource name may not be empty 错误。在这个版本中,恢复在 OpenShift Container Platform 4.16 中可以正常工作。OADP-4075
Data Mover backups 在 OpenShift Container Platform 4.16 集群中可以正常工作
在以前的版本中,Velero 使用早期版本的 SDK,其中 Spec.SourceVolumeMode 字段不存在。因此,在带有 v4.2 版本的外部快照器上的 OpenShift Container Platform 4.16 集群中,Data Mover backups 会失败。在这个版本中,外部快照升级到 v7.0 及更新版本。因此,在 OpenShift Container Platform 4.16 集群中备份不会失败。OADP-3922
有关本发行版本中解决的所有问题的完整列表,请参阅 JIRA 中的 OADP 1.4.0 解决的问题列表。
5.2.2.5.2. 已知问题 复制链接链接已复制到粘贴板!
在没有为 MCG 设置 checksumAlgorithm 时,备份会失败
在对任何使用 Noobaa 作为备份位置的应用程序进行备份时,如果未设置 checksumAlgorithm 配置参数,备份会失败。要解决这个问题,如果您在 Backup Storage Location (BSL) 配置中没有为 checksumAlgorithm 提供值,则会添加一个空值。空值只为使用数据保护应用程序 (DPA) 自定义资源 (CR) 创建的 BSLs 添加,如果使用任何其他方法创建 BSL,则不会添加这个值。OADP-4274
有关本发行版本中所有已知问题的完整列表,请参阅 JIRA 中的 OADP 1.4.0 已知问题 列表。
5.2.2.5.3. 升级备注 复制链接链接已复制到粘贴板!
始终升级到下一个次版本。不要 跳过版本。要升级到更新的版本,请一次只升级一个频道。例如,若要从 OpenShift API for Data Protection (OADP) 1.1 升级到 1.3,首先升级到 1.2,然后再升级到 1.3。
5.2.2.5.3.1. 从 OADP 1.3 更改为 1.4 复制链接链接已复制到粘贴板!
Velero 服务器已从 1.12 版本更新至 1.14。请注意,数据保护应用程序 (DPA) 没有改变。
这会更改以下内容:
-
velero-plugin-for-csi代码现在包括在 Velero 代码中,这意味着插件不再需要init容器。 - Velero 将客户端 Burst 和 QPS 默认值分别从 30 和 20 改为 100 和 100。
velero-plugin-for-aws插件更新了BackupStorageLocation对象(BSLs)中的spec.config.checksumAlgorithm字段的默认值,从""(不计算 checksum) 改为CRC32算法。知道 checksum 算法类型只能用于 AWS。几个 S3 供应商要求通过将 checksum 算法设置为""来禁用md5sum。使用您的存储供应商确认md5sum算法支持和配置。在 OADP 1.4 中,为此配置在 DPA 中创建 BSL 的默认值为
""。这个默认值表示没有检查md5sum,它与 OADP 1.3 一致。对于在 DPA 中创建的 BSL,使用 DPA 中的spec.backupLocations[].velero.config.checksumAlgorithm字段更新它。如果您的 BSLs 在 DPA 之外创建,您可以使用 BSLs 中的spec.config.checksumAlgorithm来更新此配置。
5.2.2.5.3.2. 备份 DPA 配置 复制链接链接已复制到粘贴板!
您必须备份当前的 DataProtectionApplication (DPA) 配置。
流程
运行以下命令来保存您当前的 DPA 配置:
示例命令
oc get dpa -n openshift-adp -o yaml > dpa.orig.backup
$ oc get dpa -n openshift-adp -o yaml > dpa.orig.backupCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.2.5.3.3. 升级 OADP Operator 复制链接链接已复制到粘贴板!
在升级 OpenShift API for Data Protection (OADP) Operator 时,请使用以下步骤。
流程
-
将 OADP Operator 的订阅频道从
stable-1.3改为stable-1.4。 - 等待 Operator 和容器更新并重启。
5.2.2.5.4. 将 DPA 转换为新版本 复制链接链接已复制到粘贴板!
要从 OADP 1.3 升级到 1.4,则不需要数据保护应用程序 (DPA) 更改。
5.2.2.5.5. 验证升级 复制链接链接已复制到粘贴板!
使用以下步骤验证升级。
流程
运行以下命令,查看 OpenShift API for Data Protection (OADP) 资源来验证安装:
oc get all -n openshift-adp
$ oc get all -n openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证
DataProtectionApplication(DPA) 是否已协调:oc get dpa dpa-sample -n openshift-adp -o jsonpath='{.status}'$ oc get dpa dpa-sample -n openshift-adp -o jsonpath='{.status}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
{"conditions":[{"lastTransitionTime":"2023-10-27T01:23:57Z","message":"Reconcile complete","reason":"Complete","status":"True","type":"Reconciled"}]}{"conditions":[{"lastTransitionTime":"2023-10-27T01:23:57Z","message":"Reconcile complete","reason":"Complete","status":"True","type":"Reconciled"}]}Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
验证
type被设置为Reconciled。 运行以下命令,验证备份存储位置并确认
PHASE为Available:oc get backupstoragelocations.velero.io -n openshift-adp
$ oc get backupstoragelocations.velero.io -n openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME PHASE LAST VALIDATED AGE DEFAULT dpa-sample-1 Available 1s 3d16h true
NAME PHASE LAST VALIDATED AGE DEFAULT dpa-sample-1 Available 1s 3d16h trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3. OADP 性能 复制链接链接已复制到粘贴板!
5.3.1. OADP 推荐的网络设置 复制链接链接已复制到粘贴板!
对于用于数据保护(OADP)的 OpenShift API 的支持体验,您应该在 OpenShift 节点、S3 存储和满足 OpenShift 网络要求建议的受支持云环境中有一个稳定且有弹性的网络。
为确保使用位于带有子优化数据路径的远程 S3 存储桶部署的成功备份和恢复操作,建议在这样的最佳条件中满足以下最低要求:
- 带宽(网络上传速度到对象存储):对小型备份而言大于 2 Mbps;对于大型备份,根据数据卷,需要 10-100 Mbps。
- 数据包丢失:1%
- 数据包崩溃:1%
- 延迟: 100ms
确保 OpenShift Container Platform 网络以最佳方式执行,并满足 OpenShift Container Platform 网络要求。
虽然红帽为标准备份和恢复失败提供支持,但它不支持由不符合推荐的阈值的网络设置导致的故障。
5.4. OADP 功能和插件 复制链接链接已复制到粘贴板!
OpenShift API 用于数据保护(OADP)功能,提供用于备份和恢复应用的选项。
默认插件使 Velero 能够与某些云供应商集成,并备份和恢复 OpenShift Container Platform 资源。
5.4.1. OADP 功能 复制链接链接已复制到粘贴板!
OpenShift API 用于数据保护(OADP)支持以下功能:
- Backup
您可以使用 OADP 备份 OpenShift Platform 中的所有应用程序,或者您可以根据类型、命名空间或标签过滤资源。
OADP 通过将 Kubernetes 对象和内部镜像保存为对象存储上的存档文件来备份 Kubernetes 对象和内部镜像。OADP 使用原生云快照 API 或通过容器存储接口(CSI)创建快照来备份持久性卷(PV)。对于不支持快照的云供应商,OADP 使用 Restic 备份资源和 PV 数据。
注意您必须从应用程序的备份中排除 Operator,以便成功备份和恢复。
- 恢复
您可以从备份中恢复资源和 PV。您可以恢复备份中的所有对象,或者根据命名空间、PV 或标签过滤对象。
注意您必须从应用程序的备份中排除 Operator,以便成功备份和恢复。
- 调度
- 您可以通过指定的间隔调度备份。
- 钩子
-
您可以使用 hook 在 pod 上的容器中运行命令,如
fsfreeze以冻结文件系统。您可以将 hook 配置为在备份或恢复之前或之后运行。恢复 hook 可以在 init 容器或应用程序容器中运行。
5.4.2. OADP 插件 复制链接链接已复制到粘贴板!
用于数据保护(OADP)的 OpenShift API 提供了与存储供应商集成的默认 Velero 插件,以支持备份和恢复操作。您可以根据 Velero 插件创建自定义插件。
OADP 还为 OpenShift Container Platform 资源备份、OpenShift Virtualization 资源备份和 Container Storage Interface(CSI)快照提供了插件。
| OADP 插件 | 功能 | 存储位置 |
|---|---|---|
|
| 备份和恢复 Kubernetes 对象。 | AWS S3 |
| 使用快照备份和恢复卷。 | AWS EBS | |
|
| 备份和恢复 Kubernetes 对象。 | Microsoft Azure Blob 存储 |
| 使用快照备份和恢复卷。 | Microsoft Azure 管理的磁盘 | |
|
| 备份和恢复 Kubernetes 对象。 | Google Cloud Storage |
| 使用快照备份和恢复卷。 | Google Compute Engine 磁盘 | |
|
| 备份和恢复 OpenShift Container Platform 资源。[1] | 对象存储 |
|
| 备份和恢复 OpenShift Virtualization 资源。[2] | 对象存储 |
|
| 使用 CSI 快照备份和恢复卷。[3] | 支持 CSI 快照的云存储 |
|
| VolumeSnapshotMover 将快照从集群重新定位到一个在恢复过程中使用的对象存储中以恢复有状态的应用程序,例如集群删除的情况。[4] | 对象存储 |
- 必需。
- 虚拟机磁盘使用 CSI 快照或 Restic 备份。
csi插件使用 Kubernetes CSI 快照 API。-
OADP 1.1 或更高版本使用
snapshot.storage.k8s.io/v1 -
OADP 1.0 使用
snapshot.storage.k8s.io/v1beta1
-
OADP 1.1 或更高版本使用
- 仅限 OADP 1.2。
5.4.3. 关于 OADP Velero 插件 复制链接链接已复制到粘贴板!
安装 Velero 时,您可以配置两种类型的插件:
- 默认云供应商插件
- 自定义插件
两种类型的插件都是可选的,但大多数用户都会至少配置一个云供应商插件。
5.4.3.1. 默认 Velero 云供应商插件 复制链接链接已复制到粘贴板!
当您在部署过程中配置 oadp_v1alpha1_dpa.yaml 文件时,您可以安装以下默认 Velero 云供应商插件:
-
aws(Amazon Web Services) -
gcp(Google Cloud) -
azure(Microsoft Azure) -
openshift(OpenShift Velero plugin) -
csi(Container Storage Interface) -
kubevirt(KubeVirt)
在部署过程中,您可以在 oadp_v1alpha1_dpa.yaml 文件中指定所需的默认插件。
示例文件
以下 .yaml 文件会安装 openshift、aws、azure 和 gcp 插件:
5.4.3.2. 自定义 Velero 插件 复制链接链接已复制到粘贴板!
您可在部署期间配置 oadp_v1alpha1_dpa.yaml 文件时,通过指定插件 镜像和名称来安装自定义 Velero 插件。
在部署过程中,您可以在 oadp_v1alpha1_dpa.yaml 文件中指定所需的自定义插件。
示例文件
以下 .yaml 文件会安装默认的 openshift、azure 和 gcp 插件,以及一个自定义插件,其名称为 custom-plugin-example 和镜像 quay.io/example-repo/custom-velero-plugin :
5.4.4. OADP 支持的构架 复制链接链接已复制到粘贴板!
OpenShift API for Data Protection (OADP) 支持以下构架:
- AMD64
- ARM64
- PPC64le
- s390x
OADP 1.2.0 及更新版本支持 ARM64 架构。
5.4.5. OADP 支持 IBM Power 和 IBM Z 复制链接链接已复制到粘贴板!
OpenShift API for Data Protection (OADP) 是一个平台中立的平台。以下的信息只与 IBM Power® 和 IBM Z® 相关。
- OADP 1.3.6 对于 IBM Power® 和 IBM Z® 中的 OpenShift Container Platform 4.12, 4.13, 4.14, 和 4.15 进行了成功测试。以下章节提供了在这些系统的备份位置上 OADP 1.3.6 的测试和支持信息。
- OADP 1.4.6 已针对 IBM Power® 和 IBM Z® 上的 OpenShift Container Platform 4.14、4.15、4.16 和 4.17 成功测试。以下章节提供了在这些系统的备份位置上 OADP 1.4.6 的测试和支持信息。
- OADP 1.5.0 对于 IBM Power® 和 IBM Z® 均针对 OpenShift Container Platform 4.19 进行了成功测试。以下章节提供了在这些系统的备份位置上 OADP 1.5.0 的测试和支持信息。
5.4.5.1. OADP 支持使用 IBM Power 的目标备份位置 复制链接链接已复制到粘贴板!
- 使用 OpenShift Container Platform 4.12, 4.13, 4.14, 和 4.15 和 OADP 1.3.6 运行 IBM Power® 已针对 AWS S3 备份位置目标成功进行了测试。虽然测试只涉及一个 AWS S3 目标,但红帽也支持针对所有 S3 备份位置目标使用 OpenShift Container Platform 4.13, 4.14, 和 4.15, 和 OADP 1.3.6 运行 IBM Power®,它们不是 AWS。
- 使用 OpenShift Container Platform 4.14、4.15、4.16 和 4.17 和 OADP 1.4.6 运行 IBM Power®,针对 AWS S3 备份位置目标成功进行了测试。虽然测试只涉及一个 AWS S3 目标,但红帽也支持在 IBM Power® 中运行的 OpenShift Container Platform 4.14, 4.15, 4.16, 和 4.17, 和 OADP 1.4.6 使用所有 S3 备份位置目标(可以不是 AWS)。
- 使用 OpenShift Container Platform 4.19 和 OADP 1.5.0 运行 IBM Power® 已针对 AWS S3 备份位置目标成功进行了测试。虽然测试只涉及一个 AWS S3 目标,但红帽也支持针对所有 S3 备份位置目标(不是 AWS)在 IBM Power® 中运行 OpenShift Container Platform 4.19 和 OADP 1.5.0。
5.4.5.2. OADP 测试并支持使用 IBM Z 的目标备份位置 复制链接链接已复制到粘贴板!
- 使用 OpenShift Container Platform 4.12, 4.13, 4.14, 和 4.15 以及 1.3.6 运行 IBM Z® 已针对 AWS S3 备份位置目标成功进行了测试。虽然测试只涉及一个 AWS S3 目标,但红帽也支持针对所有 S3 备份位置目标使用 OpenShift Container Platform 4.13 4.14, 和 4.15, 以及 1.3.6 运行 IBM Z®。
- 使用 OpenShift Container Platform 4.14, 4.15, 4.16, 和 4.17, 1.4.6 运行 IBM Z® 已针对 AWS S3 备份位置目标成功进行了测试。虽然测试只涉及一个 AWS S3 目标,但红帽也支持在 IBM Z® 上运行 OpenShift Container Platform 4.14, 4.15, 4.16, 和 4.17, 和 1.4.6 使用所有 S3 备份位置目标(可以不是 AWS)。
- 使用 OpenShift Container Platform 4.19 和 OADP 1.5.0 运行 IBM Z® 已针对 AWS S3 备份位置目标成功进行了测试。虽然测试只涉及一个 AWS S3 目标,但红帽也支持针对所有 S3 备份位置目标(不是 AWS)运行带有 OpenShift Container Platform 4.19 和 OADP 1.5.0 的 IBM Z®。
5.4.5.2.1. 使用 IBM Power (R) 和 IBM Z (R) 平台的 OADP 已知问题 复制链接链接已复制到粘贴板!
- 目前,在 IBM Power® 和 IBM Z® 平台上部署的单节点 OpenShift 集群的备份方法限制。目前,只有 NFS 存储与这些平台上的单节点 OpenShift 集群兼容。另外,只支持文件系统备份 (FSB) 方法,如 Kopia 和 Restic 用于备份和恢复操作。当前没有解决此问题的方法。
5.4.6. OADP 和 FIPS 复制链接链接已复制到粘贴板!
FIPS(Federal Information Processing Standards)是美国联邦政府根据联邦信息处理标准(FISMA)开发的一组计算机安全标准。
OpenShift API for Data Protection (OADP) 已被测试,并可用于启用了 FIPS 的 OpenShift Container Platform 集群。
5.4.7. 避免 Velero 插件 panic 错误 复制链接链接已复制到粘贴板!
缺少 secret 可能会导致 Velero 插件在镜像流备份过程中出现 panic 错误。
当备份和 Backup Storage Location (BSL) 在 Data Protection Application (DPA) 之外进行管理时,OADP 控制器不会创建相关的 oadp-<bsl_name>-<bsl_provider>-registry-secret 参数。
在备份操作过程中,OpenShift Velero 插件在 镜像流 备份上出现 panic,并显示以下错误:
024-02-27T10:46:50.028951744Z time="2024-02-27T10:46:50Z" level=error msg="Error backing up item" backup=openshift-adp/<backup name> error="error executing custom action (groupResource=imagestreams.image.openshift.io, namespace=<BSL Name>, name=postgres): rpc error: code = Aborted desc = plugin panicked: runtime error: index out of range with length 1, stack trace: goroutine 94…
024-02-27T10:46:50.028951744Z time="2024-02-27T10:46:50Z" level=error msg="Error backing up item"
backup=openshift-adp/<backup name> error="error executing custom action (groupResource=imagestreams.image.openshift.io,
namespace=<BSL Name>, name=postgres): rpc error: code = Aborted desc = plugin panicked:
runtime error: index out of range with length 1, stack trace: goroutine 94…
使用以下临时解决方案来避免 Velero 插件 panic 错误。
流程
运行以下命令,使用相关标签标记自定义 BSL:
oc label backupstoragelocations.velero.io <bsl_name> app.kubernetes.io/component=bsl
$ oc label backupstoragelocations.velero.io <bsl_name> app.kubernetes.io/component=bslCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在标记 BSL 后,等待 DPA 协调。
注意您可以通过对 DPA 本身进行任何更改来强制进行协调。
验证
在协调了 DPA 后,使用以下命令确认已创建了参数,并且正确的 registry 数据已填充到其中:
oc -n openshift-adp get secret/oadp-<bsl_name>-<bsl_provider>-registry-secret -o json | jq -r '.data'
$ oc -n openshift-adp get secret/oadp-<bsl_name>-<bsl_provider>-registry-secret -o json | jq -r '.data'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.4.8. OpenShift ADP Controller 分段错误临时解决方案 复制链接链接已复制到粘贴板!
如果您在同时启用了 cloudstorage 和 restic 的情况下配置 Data Protection Application (DPA),openshift-adp-controller-manager pod 会无限期重复崩溃和重启过程,直到 pod 出现一个崩溃循环分段错误为止。
在配置一个 DPA 时,定义 velero 或 cloudstorage。否则,openshift-adp-controller-manager pod 可能会因为以下设置而失败,并显示 crash loop 分段错误:
-
如果您同时定义了
velero和cloudstorage,openshift-adp-controller-manager会失败。 -
如果
velero和cloudstorage都没有定义,openshift-adp-controller-manager会失败。
有关此问题的更多信息,请参阅 OADP-1054。
5.5. OADP 用例 复制链接链接已复制到粘贴板!
以下是使用 OADP 和 ODF 备份应用程序的用例。
5.5.1.1. 使用 OADP 和 ODF 备份应用程序 复制链接链接已复制到粘贴板!
在这种情况下,您可以使用 OADP 备份应用程序,并将备份存储在 Red Hat OpenShift Data Foundation (ODF) 提供的对象存储中。
- 您可以创建一个对象存储桶声明(OBC)来配置备份存储位置。您可以使用 ODF 配置 Amazon S3 兼容对象存储桶。ODF 提供 MultiCloud Object Gateway (NooBaa MCG) 和 Ceph 对象网关,也称为 RADOS 网关(RGW)、对象存储服务。在这种情况下,您可以使用 NooBaa MCG 作为备份存储位置。
-
您可以使用
aws供应商插件在 OADP 中使用 NooBaa MCG 服务。 - 您可以使用备份存储位置(BSL)配置数据保护应用程序(DPA)。
- 您可以创建备份自定义资源(CR)并指定要备份的应用程序命名空间。
- 您可以创建并验证备份。
先决条件
- 已安装 OADP Operator。
- 已安装 ODF Operator。
- 您有一个应用程序,其数据库在单独的命名空间中运行。
流程
创建一个 OBC 清单文件来请求 NooBaa MCG 存储桶,如下例所示:
OBC 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建 OBC:
oc create -f <obc_file_name>
$ oc create -f <obc_file_name>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定对象存储桶声明清单的文件名。
当您创建 OBC 时,ODF 会创建一个
secret和一个配置映射,其名称与对象存储桶声明相同。secret具有存储桶凭证,配置映射有访问存储桶的信息。要从生成的配置映射中获取存储桶名称和存储桶主机,请运行以下命令:oc extract --to=- cm/test-obc
$ oc extract --to=- cm/test-obc1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
test-obc是 OBC 的名称。
输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要从生成的
secret获取存储桶凭证,请运行以下命令:oc extract --to=- secret/test-obc
$ oc extract --to=- secret/test-obcCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY
# AWS_ACCESS_KEY_ID ebYR....xLNMc # AWS_SECRET_ACCESS_KEY YXf...+NaCkdyC3QPymCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,从
openshift-storage命名空间中的 s3 路由获取 S3 端点的公共 URL:oc get route s3 -n openshift-storage
$ oc get route s3 -n openshift-storageCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用对象存储桶凭证创建一个
cloud-credentials文件,如下所示:[default] aws_access_key_id=<AWS_ACCESS_KEY_ID> aws_secret_access_key=<AWS_SECRET_ACCESS_KEY>
[default] aws_access_key_id=<AWS_ACCESS_KEY_ID> aws_secret_access_key=<AWS_SECRET_ACCESS_KEY>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
cloud-credentials文件内容创建cloud-credentialssecret,如下所示:oc create secret generic \ cloud-credentials \ -n openshift-adp \ --from-file cloud=cloud-credentials
$ oc create secret generic \ cloud-credentials \ -n openshift-adp \ --from-file cloud=cloud-credentialsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 配置 Data Protection Application (DPA),如下例所示:
DPA 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建 DPA:
oc apply -f <dpa_filename>
$ oc apply -f <dpa_filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证 DPA 是否已成功创建。在示例输出中,您可以看到
status对象将type字段设置为Reconciled。这意味着 DPA 已被成功创建。oc get dpa -o yaml
$ oc get dpa -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证备份存储位置(BSL)是否可用:
oc get backupstoragelocations.velero.io -n openshift-adp
$ oc get backupstoragelocations.velero.io -n openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME PHASE LAST VALIDATED AGE DEFAULT dpa-sample-1 Available 3s 15s true
NAME PHASE LAST VALIDATED AGE DEFAULT dpa-sample-1 Available 3s 15s trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 配置备份 CR,如下例所示:
备份 CR 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定要备份的应用程序的命名空间。
运行以下命令来创建备份 CR:
oc apply -f <backup_cr_filename>
$ oc apply -f <backup_cr_filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令,验证备份对象是否处于
Completed阶段。如需了解更多详细信息,请参阅示例输出。oc describe backup test-backup -n openshift-adp
$ oc describe backup test-backup -n openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.5.2. OpenShift API for Data Protection (OADP) 恢复用例 复制链接链接已复制到粘贴板!
以下是使用 OADP 的用例将备份恢复到不同的命名空间。
5.5.2.1. 使用 OADP 将应用程序恢复到不同的命名空间 复制链接链接已复制到粘贴板!
使用 OADP 将应用程序的备份恢复到新目标命名空间 test-restore-application。要恢复备份,请创建一个恢复自定义资源 (CR),如下例所示。在恢复 CR 中,源命名空间指的是您在备份中包含的应用程序命名空间。然后,您可以通过将项目更改为新的恢复的命名空间并验证资源来验证恢复。
先决条件
- 已安装 OADP Operator。
- 您已备份要恢复的应用程序。
流程
创建一个恢复 CR,如下例所示:
恢复 CR 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来应用恢复 CR:
oc apply -f <restore_cr_filename>
$ oc apply -f <restore_cr_filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令验证恢复是否处于
Completed阶段:oc describe restores.velero.io <restore_name> -n openshift-adp
$ oc describe restores.velero.io <restore_name> -n openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,进入恢复的命名空间
test-restore-application:oc project test-restore-application
$ oc project test-restore-applicationCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证恢复的资源,如持久性卷声明(pvc)、服务(svc)、部署、secret 和配置映射:
oc get pvc,svc,deployment,secret,configmap
$ oc get pvc,svc,deployment,secret,configmapCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.5.3. 在备份过程中包括自签名 CA 证书 复制链接链接已复制到粘贴板!
您可以在数据保护应用程序(DPA)中包括自签名证书颁发机构(CA)证书,然后备份应用程序。您可以将备份存储在 Red Hat OpenShift Data Foundation (ODF) 提供的 NooBaa 存储桶中。
5.5.3.1. 备份应用程序及其自签名 CA 证书 复制链接链接已复制到粘贴板!
ODF 提供的 s3.openshift-storage.svc 服务使用使用自签名服务 CA 签名的传输层安全协议 (TLS) 证书。
要防止 由未知颁发机构签名的证书,您必须在 DataProtectionApplication 自定义资源(CR)的备份存储位置(BSL)部分包含自签名 CA 证书。在这种情况下,您必须完成以下任务:
- 通过创建对象存储桶声明(OBC)来请求 NooBaa 存储桶。
- 提取存储桶详情。
-
在
DataProtectionApplicationCR 中包含自签名 CA 证书。 - 备份应用程序。
先决条件
- 已安装 OADP Operator。
- 已安装 ODF Operator。
- 您有一个应用程序,其数据库在单独的命名空间中运行。
流程
创建 OBC 清单以请求 NooBaa 存储桶,如下例所示:
ObjectBucketClaimCR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建 OBC:
oc create -f <obc_file_name>
$ oc create -f <obc_file_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当您创建 OBC 时,ODF 会创建一个
secret和一个配置映射,其名称与对象存储桶声明相同。secret对象包含存储桶凭证,ConfigMap对象包含用于访问存储桶的信息。要从生成的配置映射中获取存储桶名称和存储桶主机,请运行以下命令:oc extract --to=- cm/test-obc
$ oc extract --to=- cm/test-obc1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- OBC 的名称为
test-obc。
输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要从
secret对象获取存储桶凭证,请运行以下命令:oc extract --to=- secret/test-obc
$ oc extract --to=- secret/test-obcCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY
# AWS_ACCESS_KEY_ID ebYR....xLNMc # AWS_SECRET_ACCESS_KEY YXf...+NaCkdyC3QPymCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下示例配置创建带有对象存储桶凭证的
cloud-credentials文件:[default] aws_access_key_id=<AWS_ACCESS_KEY_ID> aws_secret_access_key=<AWS_SECRET_ACCESS_KEY>
[default] aws_access_key_id=<AWS_ACCESS_KEY_ID> aws_secret_access_key=<AWS_SECRET_ACCESS_KEY>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,创建带有
cloud-credentials文件内容的cloud-credentialssecret:oc create secret generic \ cloud-credentials \ -n openshift-adp \ --from-file cloud=cloud-credentials
$ oc create secret generic \ cloud-credentials \ -n openshift-adp \ --from-file cloud=cloud-credentialsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,从
openshift-service-ca.crt配置映射中提取服务 CA 证书。确保您以Base64格式编码证书,并记录下一步中使用的值。oc get cm/openshift-service-ca.crt \ -o jsonpath='{.data.service-ca\.crt}' | base64 -w0; echo$ oc get cm/openshift-service-ca.crt \ -o jsonpath='{.data.service-ca\.crt}' | base64 -w0; echoCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0... ....gpwOHMwaG9CRmk5a3....FLS0tLS0K
LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0... ....gpwOHMwaG9CRmk5a3....FLS0tLS0KCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用存储桶名称和 CA 证书配置
DataProtectionApplicationCR 清单文件,如下例所示:DataProtectionApplicationCR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
DataProtectionApplicationCR:oc apply -f <dpa_filename>
$ oc apply -f <dpa_filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令验证
DataProtectionApplicationCR 是否已成功创建:oc get dpa -o yaml
$ oc get dpa -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证备份存储位置(BSL)是否可用:
oc get backupstoragelocations.velero.io -n openshift-adp
$ oc get backupstoragelocations.velero.io -n openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME PHASE LAST VALIDATED AGE DEFAULT dpa-sample-1 Available 3s 15s true
NAME PHASE LAST VALIDATED AGE DEFAULT dpa-sample-1 Available 3s 15s trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下示例配置
BackupCR:BackupCR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定要备份的应用程序的命名空间。
运行以下命令来创建
BackupCR:oc apply -f <backup_cr_filename>
$ oc apply -f <backup_cr_filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令,验证
Backup对象是否处于Completed阶段:oc describe backup test-backup -n openshift-adp
$ oc describe backup test-backup -n openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.5.4. 使用 legacy-aws Velero 插件 复制链接链接已复制到粘贴板!
如果您使用一个 AWS S3 兼容备份存储位置,在备份应用程序时可能会出现 SignatureDoesNotMatch 错误。发生此错误的原因是,一些备份存储位置仍然使用旧版本的 S3 API,这与 Go V2 的较新的 AWS SDK 不兼容。要解决这个问题,您可以在 DataProtectionApplication 自定义资源(CR)中使用 legacy-aws Velero 插件。legacy-aws Velero 插件使用旧的 AWS SDK 用于 Go V1,它与旧的 S3 API 兼容,确保备份成功。
在以下用例中,您可以使用 legacy-aws Velero 插件配置 DataProtectionApplication CR,然后备份应用程序。
根据您选择的备份存储位置,您可以在 DataProtectionApplication CR 中使用 legacy-aws 或 aws 插件。如果您在 DataProtectionApplication CR 中同时使用了这两个插件,则会出现以下错误:aws and legacy-aws can not be both specified in DPA spec.configuration.velero.defaultPlugins。
先决条件
- 已安装 OADP Operator。
- 您已将一个 AWS S3 兼容对象存储配置为备份位置。
- 您有一个应用程序,其数据库在单独的命名空间中运行。
流程
将
DataProtectionApplicationCR 配置为使用legacy-awsVelero 插件,如下例所示:DataProtectionApplicationCR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
DataProtectionApplicationCR:oc apply -f <dpa_filename>
$ oc apply -f <dpa_filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证
DataProtectionApplicationCR 是否已成功创建。在示例输出中,您可以看到status对象将type字段设置为Reconciled,status字段设置为"True"。该状态表示DataProtectionApplicationCR 已被成功创建。oc get dpa -o yaml
$ oc get dpa -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证备份存储位置(BSL)是否可用:
oc get backupstoragelocations.velero.io -n openshift-adp
$ oc get backupstoragelocations.velero.io -n openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME PHASE LAST VALIDATED AGE DEFAULT dpa-sample-1 Available 3s 15s true
NAME PHASE LAST VALIDATED AGE DEFAULT dpa-sample-1 Available 3s 15s trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 配置
BackupCR,如下例所示:备份 CR 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定要备份的应用程序的命名空间。
运行以下命令来创建
BackupCR:oc apply -f <backup_cr_filename>
$ oc apply -f <backup_cr_filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令,验证备份对象是否处于
Completed阶段。如需了解更多详细信息,请参阅示例输出。oc describe backups.velero.io test-backup -n openshift-adp
$ oc describe backups.velero.io test-backup -n openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.5.5. 使用 OpenShift Container Platform 在 OADP 上备份工作负载 复制链接链接已复制到粘贴板!
5.5.5.1. 使用 OADP 和 OpenShift Container Platform 执行备份 复制链接链接已复制到粘贴板!
以下示例 hello-world 应用没有附加持久性卷 (PV)。在 OpenShift Container Platform 中使用 OpenShift API for Data Protection (OADP) 执行备份。
数据保护应用程序 (DPA) 配置都将正常工作。
运行以下命令,创建一个工作负载来备份:
oc create namespace hello-world
$ oc create namespace hello-worldCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc new-app -n hello-world --image=docker.io/openshift/hello-openshift
$ oc new-app -n hello-world --image=docker.io/openshift/hello-openshiftCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来公开路由:
oc expose service/hello-openshift -n hello-world
$ oc expose service/hello-openshift -n hello-worldCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令检查应用程序是否正常工作:
curl `oc get route/hello-openshift -n hello-world -o jsonpath='{.spec.host}'`$ curl `oc get route/hello-openshift -n hello-world -o jsonpath='{.spec.host}'`Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Hello OpenShift!
Hello OpenShift!Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来备份工作负载:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 等待备份完成,然后运行以下命令:
watch "oc -n openshift-adp get backup hello-world -o json | jq .status"
$ watch "oc -n openshift-adp get backup hello-world -o json | jq .status"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来删除 demo 工作负载:
oc delete ns hello-world
$ oc delete ns hello-worldCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,从备份中恢复工作负载:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令等待 Restore 完成:
watch "oc -n openshift-adp get restore hello-world -o json | jq .status"
$ watch "oc -n openshift-adp get restore hello-world -o json | jq .status"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令检查工作负载是否已恢复:
oc -n hello-world get pods
$ oc -n hello-world get podsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE hello-openshift-9f885f7c6-kdjpj 1/1 Running 0 90s
NAME READY STATUS RESTARTS AGE hello-openshift-9f885f7c6-kdjpj 1/1 Running 0 90sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来检查 JSONPath:
curl `oc get route/hello-openshift -n hello-world -o jsonpath='{.spec.host}'`$ curl `oc get route/hello-openshift -n hello-world -o jsonpath='{.spec.host}'`Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Hello OpenShift!
Hello OpenShift!Copy to Clipboard Copied! Toggle word wrap Toggle overflow
有关故障排除提示,请参阅故障排除文档。
5.5.5.2. 使用 OADP 和 ROSA STS 的备份后清理集群 复制链接链接已复制到粘贴板!
如果您需要卸载 OpenShift API for Data Protection (OADP) Operator 以及本例中的备份和 S3 存储桶,请按照以下步骤操作。
流程
运行以下命令来删除工作负载:
oc delete ns hello-world
$ oc delete ns hello-worldCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来删除数据保护应用程序 (DPA):
oc -n openshift-adp delete dpa ${CLUSTER_NAME}-dpa$ oc -n openshift-adp delete dpa ${CLUSTER_NAME}-dpaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来删除云存储:
oc -n openshift-adp delete cloudstorage ${CLUSTER_NAME}-oadp$ oc -n openshift-adp delete cloudstorage ${CLUSTER_NAME}-oadpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 警告如果这个命令挂起,您可能需要通过运行以下命令来删除终结器:
oc -n openshift-adp patch cloudstorage ${CLUSTER_NAME}-oadp -p '{"metadata":{"finalizers":null}}' --type=merge$ oc -n openshift-adp patch cloudstorage ${CLUSTER_NAME}-oadp -p '{"metadata":{"finalizers":null}}' --type=mergeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果不再需要 Operator,请运行以下命令删除它:
oc -n openshift-adp delete subscription oadp-operator
$ oc -n openshift-adp delete subscription oadp-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 从 Operator 中删除命名空间:
oc delete ns openshift-adp
$ oc delete ns openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果不再需要备份和恢复资源,请运行以下命令从集群中删除它们:
oc delete backups.velero.io hello-world
$ oc delete backups.velero.io hello-worldCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要删除 AWS S3 中的备份、恢复和远程对象,请运行以下命令:
velero backup delete hello-world
$ velero backup delete hello-worldCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您不再需要自定义资源定义 (CRD),请运行以下命令从集群中删除它们:
for CRD in `oc get crds | grep velero | awk '{print $1}'`; do oc delete crd $CRD; done$ for CRD in `oc get crds | grep velero | awk '{print $1}'`; do oc delete crd $CRD; doneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来删除 AWS S3 存储桶:
aws s3 rm s3://${CLUSTER_NAME}-oadp --recursive$ aws s3 rm s3://${CLUSTER_NAME}-oadp --recursiveCopy to Clipboard Copied! Toggle word wrap Toggle overflow aws s3api delete-bucket --bucket ${CLUSTER_NAME}-oadp$ aws s3api delete-bucket --bucket ${CLUSTER_NAME}-oadpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,将策略从角色分离:
aws iam detach-role-policy --role-name "${ROLE_NAME}" --policy-arn "${POLICY_ARN}"$ aws iam detach-role-policy --role-name "${ROLE_NAME}" --policy-arn "${POLICY_ARN}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来删除角色:
aws iam delete-role --role-name "${ROLE_NAME}"$ aws iam delete-role --role-name "${ROLE_NAME}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.6. 安装 OADP 复制链接链接已复制到粘贴板!
5.6.1. 关于安装 OADP 复制链接链接已复制到粘贴板!
作为集群管理员,您可以通过安装 OADP Operator 来为数据保护(OADP)安装 OpenShift API。OADP Operator 安装 Velero 1.16。
从 OADP 1.0.4 开始,所有 OADP 1.0.z 版本只能用作 Migration Toolkit for Containers Operator 的依赖项,且不能作为独立 Operator 提供。
要备份 Kubernetes 资源和内部镜像,必须将对象存储用作备份位置,如以下存储类型之一:
- Amazon Web Services
- Microsoft Azure
- Google Cloud
- 多云对象网关
- IBM Cloud® Object Storage S3
- AWS S3 兼容对象存储,如 Multicloud 对象网关或 MinIO
您可以为每个单独的 OADP 部署在同一命名空间中配置多个备份存储位置。
除非另有指定,"NooBaa" 指的是提供轻量级对象存储的开源项目,而 "Multicloud Object Gateway (MCG) " 是指 NooBaa 的红帽发行版本。
如需有关 MCG 的更多信息,请参阅使用应用程序访问多云对象网关。
您可以使用快照或文件系统备份 (FSB) 备份持久性卷 (PV)。
要使用快照备份 PV,您必须有一个支持原生快照 API 或 Container Storage Interface(CSI)快照的云供应商,如以下云供应商之一:
- Amazon Web Services
- Microsoft Azure
- Google Cloud
- 启用 CSI 快照的云供应商,如 OpenShift Data Foundation
如果要在 OCP 4.11 及之后的版本中使用 CSI 备份,请安装 OADP 1.1.x。
OADP 1.0.x 不支持 OCP 4.11 及更高版本上的 CSI 备份。OADP 1.0.x 包括 Velero 1.7.x,并需要 API 组 snapshot.storage.k8s.io/v1beta1,这在 OCP 4.11 及更高版本中不存在。
如果您的云供应商不支持快照,或者您的存储是 NFS,您可以在对象存储中使用文件系统备份对应用程序进行备份:Kopia 或 Restic 来备份应用程序。
您可以创建一个默认 Secret,然后安装数据保护应用程序。
5.6.1.1. AWS S3 兼容备份存储供应商 复制链接链接已复制到粘贴板!
OADP 可以与许多兼容 S3 的对象存储供应商一起工作。每个 OADP 发行版本中都经过认证并测试了多个对象存储供应商。多个 S3 供应商可以与 OADP 一起工作,但没有经过专门测试和认证。它们会以“尽力而为”的方式提供帮助。另外,本文档中列出了一些具有已知问题和限制的 S3 对象存储供应商。
红帽将在任何 S3 兼容存储上提供对 OADP 的支持,但如果明确了 S3 端点是问题的根本原因,支持将停止。
5.6.1.1.1. 认证的备份存储供应商 复制链接链接已复制到粘贴板!
通过 AWS 插件,以下 AWS S3 兼容对象存储供应商被 OADP 完全支持作为备份存储:
- MinIO
- 多云对象网关 (MCG)
- Amazon Web Services (AWS) S3
- IBM Cloud® Object Storage S3
- Ceph RADOS 网关 (Ceph 对象网关)
- Red Hat Container Storage
- Red Hat OpenShift Data Foundation
- NetApp ONTAP S3 对象存储
支持以下兼容对象存储供应商,并有自己的 Velero 对象存储插件:
- Google Cloud
- Microsoft Azure
5.6.1.1.2. 不支持的备份存储供应商 复制链接链接已复制到粘贴板!
通过 AWS 插件,以下 AWS S3 兼容对象存储供应商可以与 Velero 一起正常工作作为备份存储,但它们不被支持,且还没有经过红帽测试:
- Oracle Cloud
- DigitalOcean
- NooBaa,除非使用 Multicloud Object Gateway (MCG) 安装
- Tencent Cloud
- Ceph RADOS v12.2.7
- Quobyte
- Cloudian HyperStore
除非另有指定,"NooBaa" 指的是提供轻量级对象存储的开源项目,而 "Multicloud Object Gateway (MCG) " 是指 NooBaa 的红帽发行版本。
如需有关 MCG 的更多信息,请参阅使用应用程序访问多云对象网关。
5.6.1.1.3. 带有已知限制的备份存储供应商 复制链接链接已复制到粘贴板!
通过 AWS 插件,以下 AWS S3 兼容对象存储供应商可以与 Velero 搭配使用,但有一些已知的限制:
- Swift - 它可以作为备份存储的备份存储位置,但对于基于文件系统的卷备份和恢复,它与 Restic 不兼容。
如果您在 OpenShift Data Foundation 上为 MCG bucket backupStorageLocation 使用集群存储,请将 MCG 配置为外部对象存储。
将 MCG 配置为外部对象存储可能会导致备份不可用。
除非另有指定,"NooBaa" 指的是提供轻量级对象存储的开源项目,而 "Multicloud Object Gateway (MCG) " 是指 NooBaa 的红帽发行版本。
如需有关 MCG 的更多信息,请参阅使用应用程序访问多云对象网关。
流程
- 将 MCG 配置为外部对象存储,如为混合或多云添加存储资源中所述。
5.6.1.3. 关于 OADP 更新频道 复制链接链接已复制到粘贴板!
安装 OADP Operator 时,您可以选择更新频道。这个频道决定到您接收到的 OADP Operator 和 Velero 的哪些升级。您可以随时切换频道。
可用的更新频道如下:
-
stable 频道现已弃用。stable 频道包含
OADP.v1.1.z和自OADP.v1.0.z的更老版本的 OADPClusterServiceVersion的补丁 (z-stream 更新)。 - stable-1.0 频道已弃用,且不被支持。
- stable-1.1 频道已弃用,且不被支持。
- stable-1.2 频道已弃用,且不被支持。
-
stable-1.3 频道包含
OADP.v1.3.z,它是最新的 OADP 1.3ClusterServiceVersion。 -
stable-1.4 频道包含
OADP.v1.4.z,它是最新的 OADP 1.4ClusterServiceVersion。
如需更多信息,请参阅 OpenShift Operator 生命周期。
哪个更新频道适合您?
-
stable 频道现已弃用。如果您已使用 stable 频道,您可以继续从
OADP.v1.1.z获取更新。 - 选择 stable-1.y 更新频道来安装 OADP 1.y,并继续为其接收补丁。如果您选择此频道,您将收到版本 1.y.z 的所有 z-stream 补丁。
何时需要切换更新频道?
- 如果您安装了 OADP 1.y,且只想接收那个 y-stream 的补丁,则必须从 stable 更新频道切换到 stable-1.y 更新频道。然后,您将收到版本 1.y.z 的所有 z-stream 补丁。
- 如果您安装了 OADP 1.0,希望升级到 OADP 1.1,然后只接收 OADP 1.1 的补丁,则必须从 stable-1.0 更新频道切换到 stable-1.1 更新频道。然后,您将收到版本 1.1.z 的所有 z-stream 补丁。
- 如果您安装了 OADP 1.y,其 y 大于 0,并希望切换到 OADP 1.0,则必须卸载 OADP Operator,然后使用 stable-1.0 更新频道重新安装它。然后,您将收到 1.0.z 版本的所有 z-stream 补丁。
您无法通过切换更新频道从 OADP 1.y 切换到 OADP 1.0。您必须卸载 Operator,然后重新安装它。
5.6.1.4. 在多个命名空间中安装 OADP 复制链接链接已复制到粘贴板!
您可以将 OpenShift API for Data Protection (OADP) 安装到同一集群中的多个命名空间中,以便多个项目所有者可以管理自己的 OADP 实例。这个用例已通过文件系统备份 (FSB) 和 Container Storage Interface (CSI) 进行验证。
您可以根据本文档中包含的每个平台流程指定安装每个 OADP 实例,并有以下额外的要求:
- 同一集群中的所有 OADP 部署都必须相同版本,如 1.4.0。不支持在同一集群中安装 OADP 的不同版本。
-
每个 OADP 部署都必须具有一组唯一的凭证和唯一的
BackupStorageLocation配置。您还可以在同一命名空间中使用多个BackupStorageLocation配置。 - 默认情况下,每个 OADP 部署在不同的命名空间中都有集群级别的访问权限。OpenShift Container Platform 管理员需要仔细全面地检查潜在的影响,如不同时备份和恢复同一命名空间。
5.6.1.5. OADP 支持备份数据不可变 复制链接链接已复制到粘贴板!
从 OADP 1.4 开始,您可以将 OADP 备份存储在启用了版本控制的 AWS S3 存储桶中。版本支持仅适用于 AWS S3 存储桶,不适用于 S3 兼容存储桶。
请参阅以下列表以了解特定的云供应商限制:
- AWS S3 服务支持备份,因为 S3 对象锁定仅适用于有版本控制的存储桶。您仍然可以更新新版本的对象数据。但是,当备份被删除时,对象的旧版本不会被删除。
- 不支持 OADP 备份,当您在 Azure Storage Blob 上启用不可变性时,可能无法按预期工作。
- Google Cloud 存储策略只支持存储桶级别的不可变性。因此,在 Google Cloud 环境中实施它并不可行。
根据您的存储供应商,可以以不同的方式调用不可变选项:
- S3 对象锁定
- 对象保留
- 存储桶版本控制
- Write Once Read Many (WORM) 存储桶
不支持其他 S3 兼容对象存储的主要原因是 OADP 最初将备份状态保存为 finalizing,然后验证异步操作是否在进行。
5.6.1.6. 基于收集到的数据的 Velero CPU 和内存要求 复制链接链接已复制到粘贴板!
以下建议基于在扩展和性能实验室中观察到的性能。备份和恢复资源可能会受到插件类型、备份或恢复所需的资源数量,以及与这些资源相关的持久性卷 (PV) 中包含的相应数据。
5.6.1.6.1. 配置的 CPU 和内存要求 复制链接链接已复制到粘贴板!
| 配置类型 | [1] 平均用量 | [2] 大使用 | resourceTimeouts |
|---|---|---|---|
| CSI | Velero: CPU- Request 200m, Limits 1000m 内存 - Request 256Mi, Limits 1024Mi | Velero: CPU- Request 200m, Limits 2000m 内存- Request 256Mi, Limits 2048Mi | N/A |
| Restic | [3] Restic: CPU- Request 1000m, Limits 2000m 内存 - Request 16Gi, Limits 32Gi | [4] Restic: CPU - Request 2000m, Limits 8000m 内存 - Request 16Gi, Limits 40Gi | 900m |
| [5] 数据 Mover | N/A | N/A | 10m - 平均使用 60m - 大型使用 |
- 平均使用 - 将这些设置用于大多数使用情况。
- 大型使用 - 使用这些设置进行大型使用情况,如大型 PV (500GB 使用情况)、多个命名空间(100+)或单个命名空间中的多个 pod (2000 pods+),以及对涉及大型数据集进行备份和恢复的最佳性能。
- Restic 资源使用量与数据的数量和数据类型对应。例如,许多小文件或大量数据都可能导致 Restic 使用大量资源。在 Velero 文档中 500m 是默认设置,但在我们的大多数测试中,我们认为 200m request 和 1000m limit 是比较适当的设置。如 Velero 文档中所述,除了环境限制外,具体的 CPU 和内存用量还取决于文件和目录的规模。
- 增加 CPU 会对改进备份和恢复时间有重大影响。
- Data Mover - Data Mover 默认 resourceTimeout 为 10m。我们的测试显示恢复大型 PV (500GB 使用量),需要将 resourceTimeout 增加到 60m。
本指南中列出的资源要求仅用于平均使用。对于大型用途,请按照上表所述调整设置。
5.6.1.6.2. 用于大用量的 NodeAgent CPU 复制链接链接已复制到粘贴板!
测试显示,在使用 OpenShift API for Data Protection (OADP) 时,增加 NodeAgent CPU 可以显著提高备份和恢复的时间。
您可以根据性能分析和首选项调整 OpenShift Container Platform 环境。当您使用 Kopia 进行文件系统备份时,在工作负载中使用 CPU 限制。
如果没有对 pod 使用 CPU 限制,则 pod 可以在可用时使用过量 CPU。如果指定了 CPU 限值,如果 pod 超过其限值,则 pod 可能会节流。因此,在 pod 中使用 CPU 限制被视为反模式。
确保准确指定 CPU 请求,以便 pod 能够利用过量 CPU。根据 CPU 请求而不是 CPU 限制,可以保证资源分配。
测试显示,在具有 20 个内核和 32 Gi 内存的环境中运行 Kopia,支持在跨多个命名空间或在一个命名空间中的 2000 个 pod 中对 100 GB 数据进行备份和恢复操作。在具有这样配置的环境中的测试中没有出现 CPU 限制或内存饱和的问题。
在某些环境中,您可能需要调整 Ceph MDS pod 资源以避免 pod 重启,当默认设置导致资源饱和时会出现这种情况。
有关如何在 Ceph MDS pod 中设置 pod 资源限制的更多信息,请参阅更改 rook-ceph pod 上的 CPU 和内存资源。
5.6.2. 安装 OADP Operator 复制链接链接已复制到粘贴板!
您可以使用 Operator Lifecycle Manager (OLM)在 OpenShift Container Platform 4.19 上安装 Data Protection (OADP) Operator 的 OpenShift API。
OADP Operator 安装 Velero 1.16。
5.6.2.1. 安装 OADP Operator 复制链接链接已复制到粘贴板!
使用以下步骤安装 OADP Operator。
先决条件
您必须以具有
cluster-admin权限的用户身份登录。- 在 OpenShift Container Platform Web 控制台中,点击 Operators → OperatorHub。
- 使用 Filter by keyword 字段查找 OADP Operator。
- 选择 OADP Operator 并点 Install。
-
点 Install 在
openshift-adp项目中安装 Operator。 - 点 Operators → Installed Operators 来验证安装。
5.6.2.2. OADP-Velero-OpenShift Container Platform 版本关系 复制链接链接已复制到粘贴板!
| OADP 版本 | Velero 版本 | OpenShift Container Platform 版本 |
|---|---|---|
| 1.3.0 | {velero-1.12} | 4.12-4.15 |
| 1.3.1 | {velero-1.12} | 4.12-4.15 |
| 1.3.2 | {velero-1.12} | 4.12-4.15 |
| 1.3.3 | {velero-1.12} | 4.12-4.15 |
| 1.3.4 | {velero-1.12} | 4.12-4.15 |
| 1.3.5 | {velero-1.12} | 4.12-4.15 |
| 1.4.0 | {velero-1.14} | 4.14-4.18 |
| 1.4.1 | {velero-1.14} | 4.14-4.18 |
| 1.4.2 | {velero-1.14} | 4.14-4.18 |
| 1.4.3 | {velero-1.14} | 4.14-4.18 |
| 1.5.0 | {velero-1.16} | 4.19 |
5.7. 使用 AWS S3 兼容存储配置 OADP 复制链接链接已复制到粘贴板!
5.7.1. 为 AWS S3 兼容存储的数据保护配置 OpenShift API 复制链接链接已复制到粘贴板!
您可以通过安装 OADP Operator,使用 Amazon Web Services (AWS) S3 兼容存储安装 OpenShift API for Data Protection (OADP)。Operator 安装 Velero 1.16。
从 OADP 1.0.4 开始,所有 OADP 1.0.z 版本只能用作 Migration Toolkit for Containers Operator 的依赖项,且不能作为独立 Operator 提供。
您可以为 Velero 配置 AWS,创建一个默认 Secret,然后安装数据保护应用程序。如需了解更多详细信息,请参阅安装 OADP Operator。
要在受限网络环境中安装 OADP Operator,您必须首先禁用默认的 OperatorHub 源并镜像 Operator 目录。详情请参阅在断开连接的环境中使用 Operator Lifecycle Manager。
Amazon Simple Storage Service (Amazon S3)是 Amazon 用于互联网的存储解决方案。作为授权用户,您可以使用该服务根据需要从 web 上的任何位置存储和检索任何数量的数据。
您可以使用 AWS Identity and Access Management (IAM) web 服务安全地控制对 Amazon S3 和其他 Amazon 服务的访问。
您可以使用 IAM 来管理控制用户可以访问哪些 AWS 资源的权限。您可以使用 IAM 验证,或者验证用户是否是要声明的身份,并授权或使用资源的权限。
AWS GovCloud (US) 是一个 Amazon 存储解决方案,用于满足美国联邦政府特定的数据安全要求。AWS GovCloud (US )的工作方式与 Amazon S3 相同,但以下情况除外:
- 您不能将 AWS GovCloud (US)区域中的 Amazon S3 存储桶的内容直接复制到另一个 AWS 区域。
如果您使用 Amazon S3 策略,请使用 AWS GovCloud (US) Amazon Resource Name (ARN)标识符来在所有 AWS 中取消指定资源,如 IAM 策略、Amazon S3 存储桶名称和 API 调用。
在 AWS GovCloud (US) 区域,ARN 有一个与其它标准 AWS 区域中的标识符不同的标识符
arn:aws-us-gov。如果您需要指定 US-West 或 US-East 区域,请使用以下 ARN:-
对于 US-West,请使用
us-gov-west-1。 -
对于 US-East,请使用
us-gov-east-1。
-
对于 US-West,请使用
-
对于所有其他标准区域,ARN 以
arn:aws开头。
- 在 AWS GovCloud (US) 区域,使用 Amazon Simple Storage Service endpoints and quotas 中的 "Amazon S3 endpoints" 表中的 AWS GovCloud (US-East) AWS GovCloud (US-West) 行中列出的端点。如果您要处理导出控制的数据,请使用 SSL/TLS 端点之一。如果您有 FIPS 要求,请使用 FIPS 140-2 端点,如 https://s3-fips.us-gov-west-1.amazonaws.com 或 https://s3-fips.us-gov-east-1.amazonaws.com。
- 要查找其他 AWS 的限制,请参阅 How Amazon Simple Storage Service Differs for AWS GovCloud (US)。
5.7.1.2. 配置 Amazon Web Services 复制链接链接已复制到粘贴板!
您可以为 OpenShift API 配置 Amazon Web Services(AWS)以进行数据保护(OADP)。
先决条件
- 已安装 AWS CLI。
流程
设置
BUCKET变量:BUCKET=<your_bucket>
$ BUCKET=<your_bucket>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 设置
REGION变量:REGION=<your_region>
$ REGION=<your_region>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 AWS S3 存储桶:
aws s3api create-bucket \ --bucket $BUCKET \ --region $REGION \ --create-bucket-configuration LocationConstraint=$REGION$ aws s3api create-bucket \ --bucket $BUCKET \ --region $REGION \ --create-bucket-configuration LocationConstraint=$REGION1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
us-east-1不支持LocationConstraint。如果您的区域是us-east-1,忽略--create-bucket-configuration LocationConstraint=$REGION。
创建一个 IAM 用户:
aws iam create-user --user-name velero
$ aws iam create-user --user-name velero1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 如果要使用 Velero 备份具有多个 S3 存储桶的集群,请为每个集群创建一个唯一用户名。
创建
velero-policy.json文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 附加策略,为
velero用户提供所需的最低权限:aws iam put-user-policy \ --user-name velero \ --policy-name velero \ --policy-document file://velero-policy.json
$ aws iam put-user-policy \ --user-name velero \ --policy-name velero \ --policy-document file://velero-policy.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow 为
velero用户创建访问密钥:aws iam create-access-key --user-name velero
$ aws iam create-access-key --user-name veleroCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
credentials-velero文件:cat << EOF > ./credentials-velero [default] aws_access_key_id=<AWS_ACCESS_KEY_ID> aws_secret_access_key=<AWS_SECRET_ACCESS_KEY> EOF
$ cat << EOF > ./credentials-velero [default] aws_access_key_id=<AWS_ACCESS_KEY_ID> aws_secret_access_key=<AWS_SECRET_ACCESS_KEY> EOFCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在安装数据保护应用程序前,您可以使用
credentials-velero文件为 AWS 创建Secret对象。
5.7.1.3. 关于备份和恢复位置及其 secret 复制链接链接已复制到粘贴板!
您可以在 DataProtectionApplication 自定义资源(CR)中指定备份和快照位置及其 secret。
5.7.1.3.1. 备份位置 复制链接链接已复制到粘贴板!
您可以将以下 AWS S3 兼容对象存储解决方案之一指定为备份位置:
- 多云对象网关 (MCG)
- Red Hat Container Storage
- Ceph RADOS 网关;也称为 Ceph 对象网关
- Red Hat OpenShift Data Foundation
- MinIO
Velero 将 OpenShift Container Platform 资源、Kubernetes 对象和内部镜像备份为对象存储上的存档文件。
5.7.1.3.2. 快照位置 复制链接链接已复制到粘贴板!
如果使用云供应商的原生快照 API 备份持久性卷,您必须将云供应商指定为快照位置。
如果使用 Container Storage Interface(CSI)快照,则不需要指定快照位置,因为您要创建一个 VolumeSnapshotClass CR 来注册 CSI 驱动程序。
如果您使用文件系统备份 (FSB),则不需要指定快照位置,因为 FSB 在对象存储上备份文件系统。
5.7.1.3.3. Secrets 复制链接链接已复制到粘贴板!
如果备份和快照位置使用相同的凭证,或者不需要快照位置,请创建一个默认 Secret。
如果备份和恢复位置使用不同的凭证,您可以创建两个 secret 对象:
-
您在
DataProtectionApplicationCR 中指定的备份位置的自定义Secret。 -
快照位置的默认
Secret,在DataProtectionApplicationCR 中没有引用。
数据保护应用程序需要一个默认的 Secret。否则,安装将失败。
如果您不想在安装过程中指定备份或快照位置,您可以使用空 credentials-velero 文件创建默认 Secret。
5.7.1.3.4. 创建默认 Secret 复制链接链接已复制到粘贴板!
如果您的备份和快照位置使用相同的凭证,或者不需要快照位置,则创建一个默认 Secret。
Secret 的默认名称为 cloud-credentials。
DataProtectionApplication 自定义资源(CR)需要一个默认的 Secret。否则,安装将失败。如果没有指定备份位置 Secret 的名称,则会使用默认名称。
如果您不想在安装过程中使用备份位置凭证,您可以使用空 credentials-velero 文件创建带有默认名称的 Secret。
先决条件
- 您的对象存储和云存储(若有)必须使用相同的凭证。
- 您必须为 Velero 配置对象存储。
流程
为您的云供应商为备份存储位置创建一个
credentials-velero文件。请参见以下示例:
[default] aws_access_key_id=<AWS_ACCESS_KEY_ID> aws_secret_access_key=<AWS_SECRET_ACCESS_KEY>
[default] aws_access_key_id=<AWS_ACCESS_KEY_ID> aws_secret_access_key=<AWS_SECRET_ACCESS_KEY>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用默认名称创建
Secret自定义资源 (CR):oc create secret generic cloud-credentials -n openshift-adp --from-file cloud=credentials-velero
$ oc create secret generic cloud-credentials -n openshift-adp --from-file cloud=credentials-veleroCopy to Clipboard Copied! Toggle word wrap Toggle overflow
在安装 Data Protection Application 时,secret 会在 DataProtectionApplication CR 的 spec.backupLocations.credential 块中引用。
5.7.1.3.5. 为不同凭证创建配置集 复制链接链接已复制到粘贴板!
如果您的备份和快照位置使用不同的凭证,您可以在 credentials-velero 文件中创建单独的配置集。
然后,您可以创建一个 Secret 对象并在 DataProtectionApplication 自定义资源(CR)中指定配置集。
流程
使用备份和快照位置的独立配置集创建一个
credentials-velero文件,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
credentials-velero文件创建Secret对象:oc create secret generic cloud-credentials -n openshift-adp --from-file cloud=credentials-velero
$ oc create secret generic cloud-credentials -n openshift-adp --from-file cloud=credentials-velero1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
DataProtectionApplicationCR 中添加配置集,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.7.1.3.6. 使用 AWS 配置备份存储位置 复制链接链接已复制到粘贴板!
您可以配置 AWS 备份存储位置 (BSL),如下例所示。
先决条件
- 已使用 AWS 创建对象存储桶。
- 已安装 OADP Operator。
流程
使用适合您用例的值配置 BSL 自定义资源 (CR)。
备份存储位置
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1 1
- 对象存储插件的名称。在本例中,插件是
aws。此字段是必需的。 - 2
- 在其中存储备份的存储桶的名称。此字段是必需的。
- 3
- 在其中存储备份的存储桶的前缀。此字段是可选的。
- 4
- 备份存储位置的凭证。您可以设置自定义凭证。如果没有设置自定义凭证,则使用默认凭证的 secret。
- 5
- secret 凭证数据中的
密钥。 - 6
- 包含凭证的 secret 名称。
- 7
- 存储桶所在的 AWS 区域。如果 s3ForcePathStyle 为 false,则可选。
- 8
- 决定是否使用路径风格寻址而不是虚拟托管存储桶寻址的布尔值标志。如果使用存储服务,如 MinIO 或 NooBaa,则设置为
true。这是可选字段。默认值为false。 - 9
- 您可以在此处显式指定 AWS S3 URL。此字段主要用于存储服务,如 MinIO 或 NooBaa。这是可选字段。
- 10
- 此字段主要用于存储服务,如 MinIO 或 NooBaa。这是可选字段。
- 11
- 用于上传对象的服务器端加密算法的名称,如
AES256。这是可选字段。 - 12
- 指定 AWS KMS 密钥 ID。您可以格式化示例所示,如别名,如
alias/<KMS-key-alias-name>,或完整ARN,以启用存储在 S3 中的备份加密。请注意kmsKeyId无法用于customerKeyEncryptionFile。这是可选字段。 - 13
- 指定具有
SSE-C客户密钥的文件,以启用存储在 S3 中的备份的客户密钥加密。该文件必须包含一个 32 字节的字符串。customerKeyEncryptionFile字段指向velero容器中挂载的 secret。将以下“键-值”对添加到velerocloud-credentialssecret:customer-key: <your_b64_encoded_32byte_string>.请注意,customerKeyEncryptionFile字段不能与kmsKeyId字段一起使用。默认值为一个空字符串(""),这代表SSE-C被禁用。这是可选字段。 - 14
- 用于创建签名 URL 的签名算法版本。您可以使用签名的 URL 来下载备份或获取日志。有效值为
1和4。默认版本为4。这是可选字段。 - 15
- 凭证文件中的 AWS 配置集的名称。默认值为
default。这是可选字段。 - 16
- 如果您不想在连接到对象存储时验证 TLS 证书,例如,使用 MinIO 的自签名证书,请将
insecureSkipTLSVerify字段设置为true。将其设置为true容易受到中间人攻击的影响,不建议在生产环境工作负载中使用。默认值为false。这是可选字段。 - 17
- 如果要将凭据文件作为共享配置文件加载,请将
enableSharedConfig字段设置为true。默认值为false。这是可选字段。 - 18
- 指定要注解 AWS S3 对象的标签。以键值对的形式指定标签。默认值为一个空字符串 (
"")。这是可选字段。 - 19
- 指定用于上传对象到 S3 的校验和算法。支持的值包括:
CRC32,CRC32C,SHA1, 和SHA256。如果将字段设置为空字符串 (""),则会跳过 checksum 检查。默认值为CRC32。这是可选字段。
5.7.1.3.7. 创建 OADP SSE-C 加密密钥以提供额外的数据安全性 复制链接链接已复制到粘贴板!
Amazon Web Services (AWS) S3 应用 Amazon S3 管理密钥(SSE-S3)的服务器端加密,作为 Amazon S3 中每个 bucket 的基本加密级别。
OpenShift API for Data Protection (OADP) 在将数据从集群传输到存储时使用 SSL/TLS、HTTPS 和 velero-repo-credentials secret 来加密数据。要在丢失了 AWS 凭证或 AWS 凭证被盗用时保护备份数据,请使用额外的加密层。
velero-plugin-for-aws 插件提供了几个额外的加密方法。您应该查看其配置选项,并考虑实施其他加密。
您可以在客户提供的密钥(SSE-C)中使用服务器端加密来存储自己的加密密钥。如果您的 AWS 凭证被公开,此功能会提供额外的安全性。
确保以安全的方式存储加密密钥。如果没有加密密钥,则无法恢复加密的数据和备份。
先决条件
要使 OADP 将一个包含了您的 SSE-C 密钥的 secret 挂载到 Velero pod(位于
/credentials),为 AWS 使用以下默认 secret 名称:cloud-credentials,并至少将以下标签之一留空:-
dpa.spec.backupLocations[].velero.credential dpa.spec.snapshotLocations[].velero.credential这是对一个已知问题的临时解决方案:https://issues.redhat.com/browse/OADP-3971。
-
以下流程包含了一个没有指定凭证的 spec:backupLocations 块的示例。本例会触发 OADP secret 挂载。
-
如果您需要备份位置带有不是名为
cloud-credentials的凭证,则需要添加一个快照位置,如以下示例中的凭证,它没有包含凭证名称。由于示例没有包含凭证名称,快照位置将使用cloud-credentials作为其执行快照的 secret。
没有指定凭证的 DPA 中的快照位置示例
流程
创建 SSE-C 加密密钥:
运行以下命令,生成随机数字并将其保存为名为
sse.key的文件:dd if=/dev/urandom bs=1 count=32 > sse.key
$ dd if=/dev/urandom bs=1 count=32 > sse.keyCopy to Clipboard Copied! Toggle word wrap Toggle overflow
创建一个 OpenShift Container Platform secret:
如果您在初始安装和配置 OADP,同时创建 AWS 凭证和加密密钥 secret,请运行以下命令:
oc create secret generic cloud-credentials --namespace openshift-adp --from-file cloud=<path>/openshift_aws_credentials,customer-key=<path>/sse.key
$ oc create secret generic cloud-credentials --namespace openshift-adp --from-file cloud=<path>/openshift_aws_credentials,customer-key=<path>/sse.keyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果要更新一个现有的安装,编辑
DataProtectionApplicationCR 清单的cloud-credentialsecret块的值,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
编辑
DataProtectionApplicationCR 清单的backupLocations块中customerKeyEncryptionFile属性的值,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 警告您必须重启 Velero pod,以便在现有安装中正确重新挂载 secret 凭证。
在安装完成后,您可以备份和恢复 OpenShift Container Platform 资源。在 AWS S3 存储中保存的数据使用新密钥加密,您无法在没有额外加密密钥的情况下从 AWS S3 控制台或 API 下载。
验证
要验证在没有包含额外密钥的情况下无法下载加密文件,请创建一个测试文件,上传该文件,然后尝试下载该文件。
运行以下命令来创建测试文件:
echo "encrypt me please" > test.txt
$ echo "encrypt me please" > test.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来上传测试文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 尝试下载文件。在 Amazon Web 控制台或终端中运行以下命令:
s3cmd get s3://<bucket>/test.txt test.txt
$ s3cmd get s3://<bucket>/test.txt test.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 下载失败,因为文件使用了附加的密钥进行加密。
运行以下命令,下载带有额外加密密钥的文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来读取文件内容:
cat downloaded.txt
$ cat downloaded.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
encrypt me please
encrypt me pleaseCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.7.1.3.7.1. 下载带有由 Velero 备份的、带有 SSE-C 加密密钥的文件 复制链接链接已复制到粘贴板!
当您验证 SSE-C 加密密钥时,您也可以下载带有额外的加密密钥的由 Velero 备份的文件。
流程
运行以下命令,下载使用 Velero 备份的、带有额外加密密钥的文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.7.1.4. 配置数据保护应用程序 复制链接链接已复制到粘贴板!
您可以通过设置 Velero 资源分配或启用自签名 CA 证书来配置数据保护应用程序。
5.7.1.4.1. 设置 Velero CPU 和内存分配 复制链接链接已复制到粘贴板!
您可以通过编辑 DataProtectionApplication 自定义资源(CR)清单来为 Velero pod 设置 CPU 和内存分配。
先决条件
- 您必须安装了 OpenShift API for Data Protection(OADP)Operator。
流程
编辑
DataProtectionApplicationCR 清单的spec.configuration.velero.podConfig.ResourceAllocations块中的值,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意Kopia 是 OADP 1.3 及之后的版本中的一个选项。您可以使用 Kopia 进行文件系统备份,Kopia 是 Data Mover 的唯一选择,并带有内置数据 Mover。
和 Restic 相比,Kopia 需要更多资源,您可能需要相应地调整 CPU 和内存要求。
使用 nodeSelector 字段选择哪些节点可以运行节点代理。nodeSelector 字段是节点选择限制的最简单的形式。任何指定的标签都需要与每个节点上的标签匹配。
如需了解更多详细信息,请参阅配置节点代理和节点标签。
5.7.1.4.2. 启用自签名 CA 证书 复制链接链接已复制到粘贴板!
您必须通过编辑 DataProtectionApplication 自定义资源(CR)清单来为对象存储启用自签名 CA 证书,以防止由未知颁发机构签名的证书。
先决条件
- 您必须安装了 OpenShift API for Data Protection(OADP)Operator。
流程
编辑
DataProtectionApplicationCR 清单的spec.backupLocations.velero.objectStorage.caCert参数和spec.backupLocations.velero.config参数:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.7.1.4.2.1. 使用带有用于 velero 部署的 velero 命令的 CA 证书 复制链接链接已复制到粘贴板!
如果您望使用 Velero CLI 而又不想在您的系统中安装它,可以为它创建一个别名。
先决条件
-
您必须使用具有
cluster-admin角色的用户登录到 OpenShift Container Platform 集群。 已安装 OpenShift CLI (
oc)。要使用别名的 Velero 命令,请运行以下命令:
alias velero='oc -n openshift-adp exec deployment/velero -c velero -it -- ./velero'
$ alias velero='oc -n openshift-adp exec deployment/velero -c velero -it -- ./velero'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令检查别名是否正常工作:
Example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要使用这个命令来使用 CA 证书,您可以运行以下命令在 Velero 部署中添加证书:
CA_CERT=$(oc -n openshift-adp get dataprotectionapplications.oadp.openshift.io <dpa-name> -o jsonpath='{.spec.backupLocations[0].velero.objectStorage.caCert}') [[ -n $CA_CERT ]] && echo "$CA_CERT" | base64 -d | oc exec -n openshift-adp -i deploy/velero -c velero -- bash -c "cat > /tmp/your-cacert.txt" || echo "DPA BSL has no caCert"$ CA_CERT=$(oc -n openshift-adp get dataprotectionapplications.oadp.openshift.io <dpa-name> -o jsonpath='{.spec.backupLocations[0].velero.objectStorage.caCert}') $ [[ -n $CA_CERT ]] && echo "$CA_CERT" | base64 -d | oc exec -n openshift-adp -i deploy/velero -c velero -- bash -c "cat > /tmp/your-cacert.txt" || echo "DPA BSL has no caCert"Copy to Clipboard Copied! Toggle word wrap Toggle overflow velero describe backup <backup_name> --details --cacert /tmp/<your_cacert>.txt
$ velero describe backup <backup_name> --details --cacert /tmp/<your_cacert>.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要获取备份日志,请运行以下命令:
velero backup logs <backup_name> --cacert /tmp/<your_cacert.txt>
$ velero backup logs <backup_name> --cacert /tmp/<your_cacert.txt>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以使用这些日志来查看无法备份的资源的失败和警告。
-
如果 Velero pod 重启,
/tmp/your-cacert.txt文件会消失,您需要通过重新运行上一步中的命令来重新创建/tmp/your-cacert.txt文件。 您可以运行以下命令来检查
/tmp/your-cacert.txt文件是否存在(在存储它的文件位置中):oc exec -n openshift-adp -i deploy/velero -c velero -- bash -c "ls /tmp/your-cacert.txt"
$ oc exec -n openshift-adp -i deploy/velero -c velero -- bash -c "ls /tmp/your-cacert.txt" /tmp/your-cacert.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow
在以后的 OpenShift API for Data Protection (OADP) 发行版本中,我们计划将证书挂载到 Velero pod,以便不需要这一步。
5.7.1.5. 安装数据保护应用程序 复制链接链接已复制到粘贴板!
您可以通过创建 DataProtectionApplication API 的实例来安装数据保护应用程序(DPA)。
先决条件
- 您必须安装 OADP Operator。
- 您必须将对象存储配置为备份位置。
- 如果使用快照来备份 PV,云供应商必须支持原生快照 API 或 Container Storage Interface(CSI)快照。
-
如果备份和快照位置使用相同的凭证,您必须创建带有默认名称
cloud-credentials的Secret。 如果备份和快照位置使用不同的凭证,则必须使用默认名称
cloud-credentials创建一个Secret,其中包含备份和快照位置凭证的独立配置集。注意如果您不想在安装过程中指定备份或快照位置,您可以使用空
credentials-velero文件创建默认Secret。如果没有默认Secret,安装将失败。
流程
- 点 Operators → Installed Operators 并选择 OADP Operator。
- 在 Provided APIs 下,点 DataProtectionApplication 框中的 Create 实例。
点 YAML View 并更新
DataProtectionApplication清单的参数:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- OADP 的默认命名空间是
openshift-adp。命名空间是一个变量,可配置。 - 2
openshift插件是必需的。- 3
- 指定在超时发生前等待多个 Velero 资源的分钟,如 Velero CRD 可用、volumeSnapshot 删除和备份存储库可用。默认值为 10m。
- 4
- 将管理请求路由到服务器的管理代理。
- 5
- 如果要启用
nodeAgent并执行文件系统备份,则将此值设置为true。 - 6
- 输入
kopia或restic作为您的上传者。您不能在安装后更改选择。对于 Built-in DataMover,您必须使用 Kopia。nodeAgent部署守护进程集,这意味着nodeAgentpod 在每个工作节点上运行。您可以通过在BackupCR 中添加spec.defaultVolumesToFsBackup: true来配置文件系统备份。 - 7
- 指定 Kopia 或 Restic 可用的节点。默认情况下,Kopia 或 Restic 在所有节点上运行。
- 8
- 指定存储桶作为备份存储位置。如果存储桶不是 Velero 备份的专用存储桶,您必须指定一个前缀。
- 9
- 如果存储桶用于多个目的,请为 Velero 备份指定一个前缀,如
velero。 - 10
- 指定是否为 S3 对象强制路径风格 URL (Boolean)。AWS S3 不需要。只适用于 S3 兼容存储。
- 11
- 指定您用于存储备份的对象存储的 URL。AWS S3 不需要。只适用于 S3 兼容存储。
- 12
- 指定您创建的
Secret对象的名称。如果没有指定这个值,则使用默认值cloud-credentials。如果您指定了自定义名称,则使用自定义名称进行备份位置。 - 13
- 指定快照位置,除非您使用 CSI 快照或文件系统备份 (FSB)备份 PV。
- 14
- 快照位置必须与 PV 位于同一区域。
- 15
- 指定您创建的
Secret对象的名称。如果没有指定这个值,则使用默认值cloud-credentials。如果指定了自定义名称,则自定义名称用于快照位置。如果您的备份和快照位置使用不同的凭证,您可以在credentials-velero文件中创建单独的配置集。
- 点 Create。
验证
运行以下命令,查看 OpenShift API for Data Protection (OADP) 资源来验证安装:
oc get all -n openshift-adp
$ oc get all -n openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证
DataProtectionApplication(DPA) 是否已协调:oc get dpa dpa-sample -n openshift-adp -o jsonpath='{.status}'$ oc get dpa dpa-sample -n openshift-adp -o jsonpath='{.status}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
{"conditions":[{"lastTransitionTime":"2023-10-27T01:23:57Z","message":"Reconcile complete","reason":"Complete","status":"True","type":"Reconciled"}]}{"conditions":[{"lastTransitionTime":"2023-10-27T01:23:57Z","message":"Reconcile complete","reason":"Complete","status":"True","type":"Reconciled"}]}Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
验证
type被设置为Reconciled。 运行以下命令,验证备份存储位置并确认
PHASE为Available:oc get backupstoragelocations.velero.io -n openshift-adp
$ oc get backupstoragelocations.velero.io -n openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME PHASE LAST VALIDATED AGE DEFAULT dpa-sample-1 Available 1s 3d16h true
NAME PHASE LAST VALIDATED AGE DEFAULT dpa-sample-1 Available 1s 3d16h trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.7.1.5.1. 配置节点代理和节点标签 复制链接链接已复制到粘贴板!
Data Protection Application (DPA) 使用 nodeSelector 字段来选择哪些节点可以运行节点代理。nodeSelector 字段是推荐的节点选择约束形式。
流程
通过添加自定义标签,在您选择的任何节点上运行节点代理:
oc label node/<node_name> node-role.kubernetes.io/nodeAgent=""
$ oc label node/<node_name> node-role.kubernetes.io/nodeAgent=""Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意任何指定的标签都需要与每个节点上的标签匹配。
在
DPA.spec.configuration.nodeAgent.podConfig.nodeSelector字段中使用相同的自定义标签,用于标记节点。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下示例是
nodeSelector的反模式,除非标签'node-role.kubernetes.io/infra: ""'和'node-role.kubernetes.io/worker: ""'都位于节点上,否则无法工作:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.7.1.6. 使用 MD5 checksum 算法配置备份存储位置 复制链接链接已复制到粘贴板!
您可以在数据保护应用程序(DPA)中配置 Backup Storage Location (BSL),为 Amazon Simple Storage Service (Amazon S3)和 S3 兼容存储供应商使用 MD5 checksum 算法。checksum 算法计算校验和,以在 Amazon S3 中上传和下载对象。您可以使用以下选项之一,设置 DPA 的 spec.backupLocations.velero.config.checksumAlgorithm 部分中的 checksumAlgorithm 字段。
-
CRC32 -
CRC32C -
SHA1 -
SHA256
您还可以将 checksumAlgorithm 字段设置为空值来跳过 MD5 checksum 检查。
如果没有为 checksumAlgorithm 字段设置值,则默认值为 CRC32。
先决条件
- 已安装 OADP Operator。
- 您已将 Amazon S3 或 S3 兼容对象存储配置为备份位置。
流程
在 DPA 中配置 BSL,如下例所示:
数据保护应用程序示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定
checksumAlgorithm。在本例中,checksumAlgorithm字段被设置为一个空值。您可以从以下列表中选择一个选项:CRC32,CRC32C,SHA1,SHA256。
如果您使用 Noobaa 作为对象存储供应商,并且没有在 DPA 中设置 spec.backupLocations.velero.config.checksumAlgorithm 字段,则值为空的 checksumAlgorithm 会添加到 BSL 配置中。
空值只为使用 DPA 创建的 BSL 添加。如果您使用任何其他方法创建 BSL,则不会添加这个值。
5.7.1.7. 使用客户端 burst 和 QPS 设置配置 DPA 复制链接链接已复制到粘贴板!
burst 设置决定在应用限制前可以发送到 velero 服务器的请求数量。达到 burst 限制后,查询每秒 (QPS) 设置决定了每秒可以发送多少个额外请求。
您可以使用 burst 和 QPS 值配置数据保护应用程序 (DPA) 来设置 velero 服务器的 burst 和 QPS 值。您可以使用 DPA 的 dpa.configuration.velero.client-burst 和 dpa.configuration.velero.client-qps 字段来设置 burst 和 QPS 值。
先决条件
- 已安装 OADP Operator。
5.7.1.8. 配置节点代理负载关联性 复制链接链接已复制到粘贴板!
您可以使用 DataProtectionApplication (DPA) 自定义资源 (CR) 的 spec.podConfig.nodeSelector 对象将节点代理 pod 调度到特定的节点上。
请参阅以下示例,您可以在其中将节点代理 pod 调度到带有标签 label.io/role: cpu-1 和 other-label.io/other-role: cpu-2 的节点上。
您可以使用 DPA spec 中的 nodeagent.loadAffinity 对象对节点代理 pod 调度添加更多限制。
先决条件
-
您必须以具有
cluster-admin权限的用户身份登录。 - 已安装 OADP Operator。
- 您已配置了 DPA CR。
流程
配置 DPA spec
nodegent.loadAffinity对象,如下例所示。在示例中,您可以确保节点代理 pod 仅调度到具有标签
label.io/role: cpu-1的节点上,标签label.io/hostname与node1或node2匹配。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.7.1.9. 节点代理负载均衡指南 复制链接链接已复制到粘贴板!
使用以下准则在 DataProtectionApplication (DPA) 自定义资源 (CR) 中配置节点代理 loadAffinity 对象。
-
使用
spec.nodeagent.podConfig.nodeSelector对象进行简单节点匹配。 -
对于更复杂的场景,使用没有
podConfig.nodeSelector对象的loadAffinity.nodeSelector对象。 -
您可以使用
podConfig.nodeSelector和loadAffinity.nodeSelector对象,但loadAffinity对象必须与podConfig对象相比相等或更严格。在这种情况下,podConfig.nodeSelector标签必须是loadAffinity.nodeSelector对象中使用的标签的子集。 -
如果您在 DPA 中配置了
podConfig.nodeSelector和loadAffinity.nodeSelector对象,则无法使用matchExpressions和matchLabels字段。 请参见以下示例在 DPA 中配置
podConfig.nodeSelector和loadAffinity.nodeSelector对象。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.7.1.10. 配置节点代理负载并发 复制链接链接已复制到粘贴板!
您可以控制在集群中的每个节点上可以同时运行的最大节点代理操作数量。
您可以使用 Data Protection Application (DPA) 的以下字段之一配置它:
-
globalConfig:定义跨所有节点中的节点代理的默认并发限制。 -
perNodeConfig: 根据nodeSelector标签指定特定节点的不同并发限制。这为其中某些节点可能具有不同的作用或角色的环境提供了灵活性。
先决条件
-
您必须以具有
cluster-admin权限的用户身份登录。
流程
如果要对特定节点使用负载并发性,请在这些节点中添加标签:
oc label node/<node_name> label.io/instance-type='large'
$ oc label node/<node_name> label.io/instance-type='large'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为您的 DPA 实例配置负载并发字段:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.7.1.11. 以非 root 和非特权用户配置节点代理 复制链接链接已复制到粘贴板!
要增强节点代理安全性,您可以使用 DataProtectionApplication (DPA) 自定义资源 (CR) 中的 spec.configuration.velero.disableFsBackup 设置将 OADP Operator 节点代理 daemonset 配置为以非 root 用户身份运行。
通过将 spec.configuration.velero.disableFsBackup 设置为 true,节点代理安全上下文将 root 文件系统设置为只读,并将 privileged 标志设置为 false。
将 spec.configuration.velero.disableFsBackup 设置为 true 可增强节点代理安全性,方法是删除特权容器并强制实施只读根文件系统。
但是,它还使用 Kopia 禁用文件系统备份 (FSB)。如果您的工作负载依赖 FSB 备份不支持原生快照的卷,您应该评估 disableFsBackup 配置是否适合您的用例。
先决条件
- 已安装 OADP Operator。
流程
在 DPA 中配置
disableFsBackup字段,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令,验证节点代理安全上下文是否被设置为以非 root 身份运行,并且 root 文件系统是
readOnly:oc get daemonset node-agent -o yaml
$ oc get daemonset node-agent -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例如下:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.7.1.12. 配置存储库维护 复制链接链接已复制到粘贴板!
OADP 存储库维护是一个后台作业,您可以独立于节点代理 pod 配置它。这意味着,您可以将存储库维护 pod 调度到节点代理正在运行或没有运行的节点上。
只有在使用 Kopia 作为备份存储库时,您只能在 DataProtectionApplication (DPA)自定义资源(CR)中使用存储库维护作业关联性配置。
您可以选择在全局级别上配置负载关联性,会影响所有存储库。或者,您可以为每个存储库配置负载关联性。您还可以使用全局和每个存储库配置的组合。
先决条件
-
您必须以具有
cluster-admin权限的用户身份登录。 - 已安装 OADP Operator。
- 您已配置了 DPA CR。
流程
使用以下方法之一在 DPA spec 中配置
loadAffinity对象:
5.7.1.13. 配置 Velero 负载关联性 复制链接链接已复制到粘贴板!
对于每个 OADP 部署,有一个 Velero pod,其主要目的是调度 Velero 工作负载。要调度 Velero pod,您可以在 DataProtectionApplication (DPA) 自定义资源 (CR) spec 中使用 velero.podConfig.nodeSelector 和 velero.loadAffinity 对象。
使用 podConfig.nodeSelector 对象将 Velero pod 分配给特定的节点。您还可以为 pod 级别关联性和反关联性配置 velero.loadAffinity 对象。
OpenShift 调度程序应用规则并执行 Velero pod 部署调度。
先决条件
-
您必须以具有
cluster-admin权限的用户身份登录。 - 已安装 OADP Operator。
- 您已配置了 DPA CR。
流程
在 DPA spec 中配置
velero.podConfig.nodeSelector和velero.loadAffinity对象,如下例所示:velero.podConfig.nodeSelector对象配置:Copy to Clipboard Copied! Toggle word wrap Toggle overflow velero.loadAffinity对象配置:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.7.1.14. 覆盖 DPA 中的 imagePullPolicy 设置 复制链接链接已复制到粘贴板!
在 OADP 1.4.0 或更早版本中,Operator 会将 Velero 和节点代理 pod 的 imagePullPolicy 字段设置为 Always。
在 OADP 1.4.1 或更高版本中,Operator 首先检查每个镜像是否有 sha256 或 sha512 摘要,并相应地设置 imagePullPolicy 字段:
-
如果镜像有摘要,Operator 会将
imagePullPolicy设置为IfNotPresent。 -
如果镜像没有摘要,Operator 会将
imagePullPolicy设置为Always。
您还可以使用 Data Protection Application (DPA)中的 spec.imagePullPolicy 字段覆盖 imagePullPolicy 字段。
先决条件
- 已安装 OADP Operator。
流程
在 DPA 中配置
spec.imagePullPolicy字段,如下例所示:数据保护应用程序示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定
imagePullPolicy的值。在本例中,imagePullPolicy字段设置为Never。
5.7.1.15. 使用多个 BSL 配置 DPA 复制链接链接已复制到粘贴板!
您可以使用多个 BackupStorageLocation (BSL) CR 配置 DataProtectionApplication (DPA) 自定义资源 (CR),并指定云供应商提供的凭证。
例如,在配置了以下两个 BSLs 时:
- 在 DPA 中配置了一个 BSL,并将它设置为默认的 BSL。
-
使用
BackupStorageLocationCR 独立创建另一个 BSL。
因为您已通过 DPA 创建 BSL 作为默认值,您无法再次设置独立创建的 BSL 作为默认值。这意味着,在任何给定时间,您只能将一个 BSL 设置为默认的 BSL。
先决条件
- 您必须安装 OADP Operator。
- 您必须使用云供应商提供的凭证创建 secret。
流程
使用多个
BackupStorageLocationCR 配置DataProtectionApplicationCR。请参见以下示例:DPA 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 指定要在备份 CR 中使用的 BSL。请参见以下示例。
备份 CR 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.7.1.15.1. 在 DataProtectionApplication CR 中启用 CSI 复制链接链接已复制到粘贴板!
您可以在 DataProtectionApplication 自定义资源(CR)中启用 Container Storage Interface(CSI)来备份持久性卷,以使用 CSI 快照备份持久性卷。
先决条件
- 云供应商必须支持 CSI 快照。
流程
编辑
DataProtectionApplicationCR,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 添加
csi默认插件。
5.7.1.15.2. 在 DataProtectionApplication 中禁用节点代理 复制链接链接已复制到粘贴板!
如果您没有在备份中使用 Restic、Kopia 或 DataMover,您可以在 DataProtectionApplication 自定义资源(CR)中禁用 nodeAgent 字段。在禁用 nodeAgent 前,请确保 OADP Operator 闲置且没有运行任何备份。
流程
您可以设置一个作业来启用和禁用 DataProtectionApplication CR 中的 nodeAgent 字段。如需更多信息,请参阅"使用作业在 pod 中运行任务"。
5.8. 使用 IBM Cloud 配置 OADP 复制链接链接已复制到粘贴板!
5.8.1. 为 IBM Cloud 配置 OpenShift API for Data Protection 复制链接链接已复制到粘贴板!
您可以在 IBM Cloud 集群上安装 OpenShift API for Data Protection (OADP) Operator,以便在集群上备份和恢复应用程序。您可以配置 IBM Cloud Object Storage (COS)来存储备份。
5.8.1.1. 配置 COS 实例 复制链接链接已复制到粘贴板!
您可以创建一个 IBM Cloud Object Storage (COS) 实例来存储 OADP 备份数据。创建 COS 实例后,配置 HMAC 服务凭据。
先决条件
- 您有一个 IBM Cloud Platform 帐户。
- 已安装 IBM Cloud CLI。
- 登录到 IBM Cloud。
流程
运行以下命令来安装 IBM Cloud Object Storage (COS) 插件:
ibmcloud plugin install cos -f
$ ibmcloud plugin install cos -fCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来设置存储桶名称:
BUCKET=<bucket_name>
$ BUCKET=<bucket_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来设置存储桶区域:
REGION=<bucket_region>
$ REGION=<bucket_region>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定存储桶区域,如
eu-gb。
运行以下命令来创建资源组:
ibmcloud resource group-create <resource_group_name>
$ ibmcloud resource group-create <resource_group_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来设置目标资源组:
ibmcloud target -g <resource_group_name>
$ ibmcloud target -g <resource_group_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令验证目标资源组是否已正确设置:
ibmcloud target
$ ibmcloud targetCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
API endpoint: https://cloud.ibm.com Region: User: test-user Account: Test Account (fb6......e95) <-> 2...122 Resource group: Default
API endpoint: https://cloud.ibm.com Region: User: test-user Account: Test Account (fb6......e95) <-> 2...122 Resource group: DefaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在示例输出中,资源组设置为
Default。运行以下命令来设置资源组名称:
RESOURCE_GROUP=<resource_group>
$ RESOURCE_GROUP=<resource_group>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定资源组名称,例如
"default"。
运行以下命令来创建 IBM Cloud
service-instance资源:ibmcloud resource service-instance-create \ <service_instance_name> \ <service_name> \ <service_plan> \ <region_name>
$ ibmcloud resource service-instance-create \ <service_instance_name> \1 <service_name> \2 <service_plan> \3 <region_name>4 Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例命令
ibmcloud resource service-instance-create test-service-instance cloud-object-storage \ standard \ global \ -d premium-global-deployment
$ ibmcloud resource service-instance-create test-service-instance cloud-object-storage \1 standard \ global \ -d premium-global-deployment2 Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来提取服务实例 ID:
SERVICE_INSTANCE_ID=$(ibmcloud resource service-instance test-service-instance --output json | jq -r '.[0].id')
$ SERVICE_INSTANCE_ID=$(ibmcloud resource service-instance test-service-instance --output json | jq -r '.[0].id')Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建 COS 存储桶:
ibmcloud cos bucket-create \//
$ ibmcloud cos bucket-create \// --bucket $BUCKET \// --ibm-service-instance-id $SERVICE_INSTANCE_ID \// --region $REGIONCopy to Clipboard Copied! Toggle word wrap Toggle overflow $BUCKET,$SERVICE_INSTANCE_ID, 和$REGION等值会被您在前面设置的值替代。运行以下命令来创建
HMAC凭据。ibmcloud resource service-key-create test-key Writer --instance-name test-service-instance --parameters {\"HMAC\":true}$ ibmcloud resource service-key-create test-key Writer --instance-name test-service-instance --parameters {\"HMAC\":true}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从
HMAC凭证中提取访问密钥 ID 和 secret 访问密钥,并将它们保存到credentials-velero文件中。您可以使用credentials-velero文件为备份存储位置创建secret。运行以下命令:cat > credentials-velero << __EOF__ [default] aws_access_key_id=$(ibmcloud resource service-key test-key -o json | jq -r '.[0].credentials.cos_hmac_keys.access_key_id') aws_secret_access_key=$(ibmcloud resource service-key test-key -o json | jq -r '.[0].credentials.cos_hmac_keys.secret_access_key') __EOF__
$ cat > credentials-velero << __EOF__ [default] aws_access_key_id=$(ibmcloud resource service-key test-key -o json | jq -r '.[0].credentials.cos_hmac_keys.access_key_id') aws_secret_access_key=$(ibmcloud resource service-key test-key -o json | jq -r '.[0].credentials.cos_hmac_keys.secret_access_key') __EOF__Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.8.1.2. 创建默认 Secret 复制链接链接已复制到粘贴板!
如果您的备份和快照位置使用相同的凭证,或者不需要快照位置,则创建一个默认 Secret。
DataProtectionApplication 自定义资源(CR)需要一个默认的 Secret。否则,安装将失败。如果没有指定备份位置 Secret 的名称,则会使用默认名称。
如果您不想在安装过程中使用备份位置凭证,您可以使用空 credentials-velero 文件创建带有默认名称的 Secret。
先决条件
- 您的对象存储和云存储(若有)必须使用相同的凭证。
- 您必须为 Velero 配置对象存储。
流程
-
为您的云供应商为备份存储位置创建一个
credentials-velero文件。 使用默认名称创建
Secret自定义资源 (CR):oc create secret generic cloud-credentials -n openshift-adp --from-file cloud=credentials-velero
$ oc create secret generic cloud-credentials -n openshift-adp --from-file cloud=credentials-veleroCopy to Clipboard Copied! Toggle word wrap Toggle overflow
在安装 Data Protection Application 时,secret 会在 DataProtectionApplication CR 的 spec.backupLocations.credential 块中引用。
5.8.1.3. 为不同凭证创建 secret 复制链接链接已复制到粘贴板!
如果您的备份和恢复位置使用不同的凭证,您必须创建两个 Secret 对象:
-
具有自定义名称的备份位置
Secret。自定义名称在DataProtectionApplication自定义资源(CR)的spec.backupLocations块中指定。 -
带有默认名称
cloud-credentials的快照位置Secret。此Secret不在DataProtectionApplicationCR 中指定。
流程
-
为您的云供应商为快照位置创建一个
credentials-velero文件。 使用默认名称为快照位置创建
Secret:oc create secret generic cloud-credentials -n openshift-adp --from-file cloud=credentials-velero
$ oc create secret generic cloud-credentials -n openshift-adp --from-file cloud=credentials-veleroCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
为您的对象存储创建一个用于备份位置的
credentials-velero文件。 使用自定义名称为备份位置创建
Secret:oc create secret generic <custom_secret> -n openshift-adp --from-file cloud=credentials-velero
$ oc create secret generic <custom_secret> -n openshift-adp --from-file cloud=credentials-veleroCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将带有自定义名称的
Secret添加到DataProtectionApplicationCR 中,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 具有自定义名称的备份位置
Secret。
5.8.1.4. 安装数据保护应用程序 复制链接链接已复制到粘贴板!
您可以通过创建 DataProtectionApplication API 的实例来安装数据保护应用程序(DPA)。
先决条件
- 您必须安装 OADP Operator。
- 您必须将对象存储配置为备份位置。
- 如果使用快照来备份 PV,云供应商必须支持原生快照 API 或 Container Storage Interface(CSI)快照。
如果备份和快照位置使用相同的凭证,您必须创建带有默认名称
cloud-credentials的Secret。注意如果您不想在安装过程中指定备份或快照位置,您可以使用空
credentials-velero文件创建默认Secret。如果没有默认Secret,安装将失败。
流程
- 点 Operators → Installed Operators 并选择 OADP Operator。
- 在 Provided APIs 下,点 DataProtectionApplication 框中的 Create 实例。
点 YAML View 并更新
DataProtectionApplication清单的参数:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 点 Create。
验证
运行以下命令,查看 OpenShift API for Data Protection (OADP) 资源来验证安装:
oc get all -n openshift-adp
$ oc get all -n openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证
DataProtectionApplication(DPA) 是否已协调:oc get dpa dpa-sample -n openshift-adp -o jsonpath='{.status}'$ oc get dpa dpa-sample -n openshift-adp -o jsonpath='{.status}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
{"conditions":[{"lastTransitionTime":"2023-10-27T01:23:57Z","message":"Reconcile complete","reason":"Complete","status":"True","type":"Reconciled"}]}{"conditions":[{"lastTransitionTime":"2023-10-27T01:23:57Z","message":"Reconcile complete","reason":"Complete","status":"True","type":"Reconciled"}]}Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
验证
type被设置为Reconciled。 运行以下命令,验证备份存储位置并确认
PHASE为Available:oc get backupstoragelocations.velero.io -n openshift-adp
$ oc get backupstoragelocations.velero.io -n openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME PHASE LAST VALIDATED AGE DEFAULT dpa-sample-1 Available 1s 3d16h true
NAME PHASE LAST VALIDATED AGE DEFAULT dpa-sample-1 Available 1s 3d16h trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.8.1.5. 设置 Velero CPU 和内存分配 复制链接链接已复制到粘贴板!
您可以通过编辑 DataProtectionApplication 自定义资源(CR)清单来为 Velero pod 设置 CPU 和内存分配。
先决条件
- 您必须安装了 OpenShift API for Data Protection(OADP)Operator。
流程
编辑
DataProtectionApplicationCR 清单的spec.configuration.velero.podConfig.ResourceAllocations块中的值,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意Kopia 是 OADP 1.3 及之后的版本中的一个选项。您可以使用 Kopia 进行文件系统备份,Kopia 是 Data Mover 的唯一选择,并带有内置数据 Mover。
和 Restic 相比,Kopia 需要更多资源,您可能需要相应地调整 CPU 和内存要求。
5.8.1.6. 配置节点代理和节点标签 复制链接链接已复制到粘贴板!
Data Protection Application (DPA) 使用 nodeSelector 字段来选择哪些节点可以运行节点代理。nodeSelector 字段是推荐的节点选择约束形式。
流程
通过添加自定义标签,在您选择的任何节点上运行节点代理:
oc label node/<node_name> node-role.kubernetes.io/nodeAgent=""
$ oc label node/<node_name> node-role.kubernetes.io/nodeAgent=""Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意任何指定的标签都需要与每个节点上的标签匹配。
在
DPA.spec.configuration.nodeAgent.podConfig.nodeSelector字段中使用相同的自定义标签,用于标记节点。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下示例是
nodeSelector的反模式,除非标签'node-role.kubernetes.io/infra: ""'和'node-role.kubernetes.io/worker: ""'都位于节点上,否则无法工作:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.8.1.7. 使用客户端 burst 和 QPS 设置配置 DPA 复制链接链接已复制到粘贴板!
burst 设置决定在应用限制前可以发送到 velero 服务器的请求数量。达到 burst 限制后,查询每秒 (QPS) 设置决定了每秒可以发送多少个额外请求。
您可以使用 burst 和 QPS 值配置数据保护应用程序 (DPA) 来设置 velero 服务器的 burst 和 QPS 值。您可以使用 DPA 的 dpa.configuration.velero.client-burst 和 dpa.configuration.velero.client-qps 字段来设置 burst 和 QPS 值。
先决条件
- 已安装 OADP Operator。
5.8.1.8. 配置节点代理负载关联性 复制链接链接已复制到粘贴板!
您可以使用 DataProtectionApplication (DPA) 自定义资源 (CR) 的 spec.podConfig.nodeSelector 对象将节点代理 pod 调度到特定的节点上。
请参阅以下示例,您可以在其中将节点代理 pod 调度到带有标签 label.io/role: cpu-1 和 other-label.io/other-role: cpu-2 的节点上。
您可以使用 DPA spec 中的 nodeagent.loadAffinity 对象对节点代理 pod 调度添加更多限制。
先决条件
-
您必须以具有
cluster-admin权限的用户身份登录。 - 已安装 OADP Operator。
- 您已配置了 DPA CR。
流程
配置 DPA spec
nodegent.loadAffinity对象,如下例所示。在示例中,您可以确保节点代理 pod 仅调度到具有标签
label.io/role: cpu-1的节点上,标签label.io/hostname与node1或node2匹配。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.8.1.9. 节点代理负载均衡指南 复制链接链接已复制到粘贴板!
使用以下准则在 DataProtectionApplication (DPA) 自定义资源 (CR) 中配置节点代理 loadAffinity 对象。
-
使用
spec.nodeagent.podConfig.nodeSelector对象进行简单节点匹配。 -
对于更复杂的场景,使用没有
podConfig.nodeSelector对象的loadAffinity.nodeSelector对象。 -
您可以使用
podConfig.nodeSelector和loadAffinity.nodeSelector对象,但loadAffinity对象必须与podConfig对象相比相等或更严格。在这种情况下,podConfig.nodeSelector标签必须是loadAffinity.nodeSelector对象中使用的标签的子集。 -
如果您在 DPA 中配置了
podConfig.nodeSelector和loadAffinity.nodeSelector对象,则无法使用matchExpressions和matchLabels字段。 请参见以下示例在 DPA 中配置
podConfig.nodeSelector和loadAffinity.nodeSelector对象。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.8.1.10. 配置节点代理负载并发 复制链接链接已复制到粘贴板!
您可以控制在集群中的每个节点上可以同时运行的最大节点代理操作数量。
您可以使用 Data Protection Application (DPA) 的以下字段之一配置它:
-
globalConfig:定义跨所有节点中的节点代理的默认并发限制。 -
perNodeConfig: 根据nodeSelector标签指定特定节点的不同并发限制。这为其中某些节点可能具有不同的作用或角色的环境提供了灵活性。
先决条件
-
您必须以具有
cluster-admin权限的用户身份登录。
流程
如果要对特定节点使用负载并发性,请在这些节点中添加标签:
oc label node/<node_name> label.io/instance-type='large'
$ oc label node/<node_name> label.io/instance-type='large'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为您的 DPA 实例配置负载并发字段:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.8.1.11. 配置存储库维护 复制链接链接已复制到粘贴板!
OADP 存储库维护是一个后台作业,您可以独立于节点代理 pod 配置它。这意味着,您可以将存储库维护 pod 调度到节点代理正在运行或没有运行的节点上。
只有在使用 Kopia 作为备份存储库时,您只能在 DataProtectionApplication (DPA)自定义资源(CR)中使用存储库维护作业关联性配置。
您可以选择在全局级别上配置负载关联性,会影响所有存储库。或者,您可以为每个存储库配置负载关联性。您还可以使用全局和每个存储库配置的组合。
先决条件
-
您必须以具有
cluster-admin权限的用户身份登录。 - 已安装 OADP Operator。
- 您已配置了 DPA CR。
流程
使用以下方法之一在 DPA spec 中配置
loadAffinity对象:
5.8.1.12. 配置 Velero 负载关联性 复制链接链接已复制到粘贴板!
对于每个 OADP 部署,有一个 Velero pod,其主要目的是调度 Velero 工作负载。要调度 Velero pod,您可以在 DataProtectionApplication (DPA) 自定义资源 (CR) spec 中使用 velero.podConfig.nodeSelector 和 velero.loadAffinity 对象。
使用 podConfig.nodeSelector 对象将 Velero pod 分配给特定的节点。您还可以为 pod 级别关联性和反关联性配置 velero.loadAffinity 对象。
OpenShift 调度程序应用规则并执行 Velero pod 部署调度。
先决条件
-
您必须以具有
cluster-admin权限的用户身份登录。 - 已安装 OADP Operator。
- 您已配置了 DPA CR。
流程
在 DPA spec 中配置
velero.podConfig.nodeSelector和velero.loadAffinity对象,如下例所示:velero.podConfig.nodeSelector对象配置:Copy to Clipboard Copied! Toggle word wrap Toggle overflow velero.loadAffinity对象配置:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.8.1.13. 覆盖 DPA 中的 imagePullPolicy 设置 复制链接链接已复制到粘贴板!
在 OADP 1.4.0 或更早版本中,Operator 会将 Velero 和节点代理 pod 的 imagePullPolicy 字段设置为 Always。
在 OADP 1.4.1 或更高版本中,Operator 首先检查每个镜像是否有 sha256 或 sha512 摘要,并相应地设置 imagePullPolicy 字段:
-
如果镜像有摘要,Operator 会将
imagePullPolicy设置为IfNotPresent。 -
如果镜像没有摘要,Operator 会将
imagePullPolicy设置为Always。
您还可以使用 Data Protection Application (DPA)中的 spec.imagePullPolicy 字段覆盖 imagePullPolicy 字段。
先决条件
- 已安装 OADP Operator。
流程
在 DPA 中配置
spec.imagePullPolicy字段,如下例所示:数据保护应用程序示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定
imagePullPolicy的值。在本例中,imagePullPolicy字段设置为Never。
5.8.1.14. 使用多个 BSL 配置 DPA 复制链接链接已复制到粘贴板!
您可以使用多个 BackupStorageLocation (BSL) CR 配置 DataProtectionApplication (DPA) 自定义资源 (CR),并指定云供应商提供的凭证。
例如,在配置了以下两个 BSLs 时:
- 在 DPA 中配置了一个 BSL,并将它设置为默认的 BSL。
-
使用
BackupStorageLocationCR 独立创建另一个 BSL。
因为您已通过 DPA 创建 BSL 作为默认值,您无法再次设置独立创建的 BSL 作为默认值。这意味着,在任何给定时间,您只能将一个 BSL 设置为默认的 BSL。
先决条件
- 您必须安装 OADP Operator。
- 您必须使用云供应商提供的凭证创建 secret。
流程
使用多个
BackupStorageLocationCR 配置DataProtectionApplicationCR。请参见以下示例:DPA 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 指定要在备份 CR 中使用的 BSL。请参见以下示例。
备份 CR 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.8.1.15. 在 DataProtectionApplication 中禁用节点代理 复制链接链接已复制到粘贴板!
如果您没有在备份中使用 Restic、Kopia 或 DataMover,您可以在 DataProtectionApplication 自定义资源(CR)中禁用 nodeAgent 字段。在禁用 nodeAgent 前,请确保 OADP Operator 闲置且没有运行任何备份。
流程
您可以设置一个作业来启用和禁用 DataProtectionApplication CR 中的 nodeAgent 字段。如需更多信息,请参阅"使用作业在 pod 中运行任务"。
5.9. 使用 Azure 配置 OADP 复制链接链接已复制到粘贴板!
5.9.1. 为 Microsoft Azure 的数据保护配置 OpenShift API 复制链接链接已复制到粘贴板!
您可以通过安装 OADP Operator,使用 Microsoft Azure 安装 OpenShift API for Data Protection (OADP)。Operator 安装 Velero 1.16。
从 OADP 1.0.4 开始,所有 OADP 1.0.z 版本只能用作 Migration Toolkit for Containers Operator 的依赖项,且不能作为独立 Operator 提供。
您可以为 Velero 配置 Azure,创建一个默认 Secret,然后安装数据保护应用程序。如需了解更多详细信息,请参阅安装 OADP Operator。
要在受限网络环境中安装 OADP Operator,您必须首先禁用默认的 OperatorHub 源并镜像 Operator 目录。详情请参阅在断开连接的环境中使用 Operator Lifecycle Manager。
5.9.1.1. 配置 Microsoft Azure 复制链接链接已复制到粘贴板!
您可以为 OpenShift API 配置 Microsoft Azure for Data Protection (OADP)。
先决条件
- 已安装 Azure CLI。
使用 Azure 服务的工具应该始终具有受限权限,以确保 Azure 资源安全。因此,Azure 提供了服务主体,而不是以完全特权用户身份登录。Azure 服务主体是一个名称,可用于应用程序、托管服务或自动化工具。
此身份用于访问资源。
- 创建服务主体
- 使用服务主体和密码登录
- 使用服务主体和证书登录
- 管理服务主体角色
- 使用服务主体创建 Azure 资源
- 重置服务主体凭证
如需了解更多详细信息,请参阅使用 Azure CLI 创建 Azure 服务主体。
5.9.1.2. 关于备份和恢复位置及其 secret 复制链接链接已复制到粘贴板!
您可以在 DataProtectionApplication 自定义资源(CR)中指定备份和快照位置及其 secret。
5.9.1.2.1. 备份位置 复制链接链接已复制到粘贴板!
您可以将以下 AWS S3 兼容对象存储解决方案之一指定为备份位置:
- 多云对象网关 (MCG)
- Red Hat Container Storage
- Ceph RADOS 网关;也称为 Ceph 对象网关
- Red Hat OpenShift Data Foundation
- MinIO
Velero 将 OpenShift Container Platform 资源、Kubernetes 对象和内部镜像备份为对象存储上的存档文件。
5.9.1.2.2. 快照位置 复制链接链接已复制到粘贴板!
如果使用云供应商的原生快照 API 备份持久性卷,您必须将云供应商指定为快照位置。
如果使用 Container Storage Interface(CSI)快照,则不需要指定快照位置,因为您要创建一个 VolumeSnapshotClass CR 来注册 CSI 驱动程序。
如果您使用文件系统备份 (FSB),则不需要指定快照位置,因为 FSB 在对象存储上备份文件系统。
5.9.1.2.3. Secrets 复制链接链接已复制到粘贴板!
如果备份和快照位置使用相同的凭证,或者不需要快照位置,请创建一个默认 Secret。
如果备份和恢复位置使用不同的凭证,您可以创建两个 secret 对象:
-
您在
DataProtectionApplicationCR 中指定的备份位置的自定义Secret。 -
快照位置的默认
Secret,在DataProtectionApplicationCR 中没有引用。
数据保护应用程序需要一个默认的 Secret。否则,安装将失败。
如果您不想在安装过程中指定备份或快照位置,您可以使用空 credentials-velero 文件创建默认 Secret。
5.9.1.3. 关于使用 Azure 验证 OADP 复制链接链接已复制到粘贴板!
您可以使用以下方法通过 Azure 验证 OADP:
- 带有基于 secret 验证的 Velero 特定服务主体。
- 使用基于 secret 的身份验证的 Velero 特定的存储帐户访问密钥。
- Azure 安全令牌服务.
5.9.1.4. 使用服务主体或存储帐户访问密钥 复制链接链接已复制到粘贴板!
您可以创建默认 Secret 对象,并在备份存储位置自定义资源中引用它。Secret 对象的凭据文件可以包含 Azure 服务主体或存储帐户访问密钥的信息。
Secret 的默认名称为 cloud-credentials-azure。
DataProtectionApplication 自定义资源(CR)需要一个默认的 Secret。否则,安装将失败。如果没有指定备份位置 Secret 的名称,则会使用默认名称。
如果您不想在安装过程中使用备份位置凭证,您可以使用空 credentials-velero 文件创建带有默认名称的 Secret。
先决条件
-
您可以使用具有
cluster-admin特权的用户访问 OpenShift 集群。 - 您有一个具有适当权限的 Azure 订阅。
- 已安装 OADP。
- 您已配置了用于存储备份的对象存储。
流程
为您的云供应商为备份存储位置创建一个
credentials-velero文件。您可以使用以下两种方法之一通过 Azure 验证 OADP。
使用带有基于 secret 的验证的服务主体。请参见以下示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用存储帐户访问密钥。请参见以下示例:
AZURE_STORAGE_ACCOUNT_ACCESS_KEY=<azure_storage_account_access_key> AZURE_SUBSCRIPTION_ID=<azure_subscription_id> AZURE_RESOURCE_GROUP=<azure_resource_group> AZURE_CLOUD_NAME=<azure_cloud_name>
AZURE_STORAGE_ACCOUNT_ACCESS_KEY=<azure_storage_account_access_key> AZURE_SUBSCRIPTION_ID=<azure_subscription_id> AZURE_RESOURCE_GROUP=<azure_resource_group> AZURE_CLOUD_NAME=<azure_cloud_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用默认名称创建
Secret自定义资源 (CR):oc create secret generic cloud-credentials-azure -n openshift-adp --from-file cloud=credentials-velero
$ oc create secret generic cloud-credentials-azure -n openshift-adp --from-file cloud=credentials-veleroCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在安装 Data Protection Application 时,引用
DataProtectionApplicationCR 的spec.backupLocations.velero.credential块中的Secret,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 具有自定义名称的备份位置
Secret。
5.9.1.5. 在 Azure 安全令牌服务身份验证中使用 OADP 复制链接链接已复制到粘贴板!
您可以使用 Microsoft Entra Workload ID 来访问 OADP 备份和恢复操作的 Azure 存储。此方法使用 OpenShift 集群的已签名的 Kubernetes 服务帐户令牌。这些令牌会每小时自动轮转,并与 Azure Active Directory (AD) 访问令牌交换,无需长期的客户端 secret。
要使用 Azure 安全令牌服务 (STS) 配置,您需要在集群安装过程中将 credentialsMode 字段设置为 Manual。此方法使用 Cloud Credential Operator (ccoctl) 设置工作负载身份基础架构,包括 OpenID Connect (OIDC) 供应商、签发者配置和用户分配的身份。
先决条件
- 您已在 Microsoft Azure 上安装了配置了 Microsoft Entra Workload ID 的 OpenShift 集群。如需了解更多详细信息,请参阅配置 Azure 集群以使用短期凭证。
-
已安装并配置了 Azure CLI (
az)。 -
您可以使用具有
cluster-admin特权的用户访问 OpenShift 集群。 - 您有一个具有适当权限的 Azure 订阅。
如果您的 OpenShift 集群最初没有安装 Microsoft Entra Workload ID,您可以在安装后启用简短凭证。此安装后配置专用于 Azure 集群。
流程
如果您的集群安装了长期凭证,您可以在安装后切换到 Microsoft Entra Workload ID 身份验证。如需了解更多详细信息,请参阅在现有集群中启用 Microsoft Entra Workload ID。
重要在现有 Azure 集群上启用 Microsoft Entra Workload ID 后,您必须更新所有使用云凭证的集群组件,以使用新的身份验证方法。
为 Azure STS 配置设置环境变量,如下例所示:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为 OADP 创建 Azure Managed Identity,如下例所示:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将所需的 Azure 角色授予受管身份,如下例所示:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 Azure 存储帐户和容器,如下例所示:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从 OpenShift 集群获取 OIDC 签发者 URL,如下例所示:
export SERVICE_ACCOUNT_ISSUER=$(oc get authentication.config.openshift.io cluster -o json | jq -r .spec.serviceAccountIssuer) echo "OIDC Issuer: $SERVICE_ACCOUNT_ISSUER"
export SERVICE_ACCOUNT_ISSUER=$(oc get authentication.config.openshift.io cluster -o json | jq -r .spec.serviceAccountIssuer) echo "OIDC Issuer: $SERVICE_ACCOUNT_ISSUER"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 配置 Microsoft Entra Workload ID Federation,如下例所示:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,创建 OADP 命名空间(如果不存在):
oc create namespace openshift-adp
oc create namespace openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要使用
CloudStorageCR 创建 Azure 云存储资源,请运行以下命令:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
DataProtectionApplication(DPA) 自定义资源 (CR) 并配置 Azure STS 详情,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证 OADP operator pod 是否正在运行:
oc get pods -n openshift-adp
$ oc get pods -n openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证 Azure 角色分配:
az role assignment list --assignee ${IDENTITY_PRINCIPAL_ID} --all --query "[].roleDefinitionName" -o tsvaz role assignment list --assignee ${IDENTITY_PRINCIPAL_ID} --all --query "[].roleDefinitionName" -o tsvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证 Microsoft Entra Workload ID 身份验证:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 创建应用程序的备份,并验证备份是否成功存储在 Azure 存储中。
您可以通过设置 Velero 资源分配或启用自签名 CA 证书来配置数据保护应用程序。
5.9.1.6. 设置 Velero CPU 和内存分配 复制链接链接已复制到粘贴板!
您可以通过编辑 DataProtectionApplication 自定义资源(CR)清单来为 Velero pod 设置 CPU 和内存分配。
先决条件
- 您必须安装了 OpenShift API for Data Protection(OADP)Operator。
流程
编辑
DataProtectionApplicationCR 清单的spec.configuration.velero.podConfig.ResourceAllocations块中的值,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意Kopia 是 OADP 1.3 及之后的版本中的一个选项。您可以使用 Kopia 进行文件系统备份,Kopia 是 Data Mover 的唯一选择,并带有内置数据 Mover。
和 Restic 相比,Kopia 需要更多资源,您可能需要相应地调整 CPU 和内存要求。
使用 nodeSelector 字段选择哪些节点可以运行节点代理。nodeSelector 字段是节点选择限制的最简单的形式。任何指定的标签都需要与每个节点上的标签匹配。
如需了解更多详细信息,请参阅配置节点代理和节点标签。
5.9.1.7. 启用自签名 CA 证书 复制链接链接已复制到粘贴板!
您必须通过编辑 DataProtectionApplication 自定义资源(CR)清单来为对象存储启用自签名 CA 证书,以防止由未知颁发机构签名的证书。
先决条件
- 您必须安装了 OpenShift API for Data Protection(OADP)Operator。
流程
编辑
DataProtectionApplicationCR 清单的spec.backupLocations.velero.objectStorage.caCert参数和spec.backupLocations.velero.config参数:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.9.1.7.1. 使用带有用于 velero 部署的 velero 命令的 CA 证书 复制链接链接已复制到粘贴板!
如果您望使用 Velero CLI 而又不想在您的系统中安装它,可以为它创建一个别名。
先决条件
-
您必须使用具有
cluster-admin角色的用户登录到 OpenShift Container Platform 集群。 已安装 OpenShift CLI (
oc)。要使用别名的 Velero 命令,请运行以下命令:
alias velero='oc -n openshift-adp exec deployment/velero -c velero -it -- ./velero'
$ alias velero='oc -n openshift-adp exec deployment/velero -c velero -it -- ./velero'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令检查别名是否正常工作:
Example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要使用这个命令来使用 CA 证书,您可以运行以下命令在 Velero 部署中添加证书:
CA_CERT=$(oc -n openshift-adp get dataprotectionapplications.oadp.openshift.io <dpa-name> -o jsonpath='{.spec.backupLocations[0].velero.objectStorage.caCert}') [[ -n $CA_CERT ]] && echo "$CA_CERT" | base64 -d | oc exec -n openshift-adp -i deploy/velero -c velero -- bash -c "cat > /tmp/your-cacert.txt" || echo "DPA BSL has no caCert"$ CA_CERT=$(oc -n openshift-adp get dataprotectionapplications.oadp.openshift.io <dpa-name> -o jsonpath='{.spec.backupLocations[0].velero.objectStorage.caCert}') $ [[ -n $CA_CERT ]] && echo "$CA_CERT" | base64 -d | oc exec -n openshift-adp -i deploy/velero -c velero -- bash -c "cat > /tmp/your-cacert.txt" || echo "DPA BSL has no caCert"Copy to Clipboard Copied! Toggle word wrap Toggle overflow velero describe backup <backup_name> --details --cacert /tmp/<your_cacert>.txt
$ velero describe backup <backup_name> --details --cacert /tmp/<your_cacert>.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要获取备份日志,请运行以下命令:
velero backup logs <backup_name> --cacert /tmp/<your_cacert.txt>
$ velero backup logs <backup_name> --cacert /tmp/<your_cacert.txt>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以使用这些日志来查看无法备份的资源的失败和警告。
-
如果 Velero pod 重启,
/tmp/your-cacert.txt文件会消失,您需要通过重新运行上一步中的命令来重新创建/tmp/your-cacert.txt文件。 您可以运行以下命令来检查
/tmp/your-cacert.txt文件是否存在(在存储它的文件位置中):oc exec -n openshift-adp -i deploy/velero -c velero -- bash -c "ls /tmp/your-cacert.txt"
$ oc exec -n openshift-adp -i deploy/velero -c velero -- bash -c "ls /tmp/your-cacert.txt" /tmp/your-cacert.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow
在以后的 OpenShift API for Data Protection (OADP) 发行版本中,我们计划将证书挂载到 Velero pod,以便不需要这一步。
5.9.1.8. 安装数据保护应用程序 复制链接链接已复制到粘贴板!
您可以通过创建 DataProtectionApplication API 的实例来安装数据保护应用程序(DPA)。
先决条件
- 您必须安装 OADP Operator。
- 您必须将对象存储配置为备份位置。
- 如果使用快照来备份 PV,云供应商必须支持原生快照 API 或 Container Storage Interface(CSI)快照。
-
如果备份和快照位置使用相同的凭证,您必须创建带有默认名称
cloud-credentials-azure的Secret。 如果备份和快照位置使用不同的凭证,您必须创建两个
Secret:-
带有备份位置的自定义名称的
secret。您可以将此Secret添加到DataProtectionApplicationCR 中。 -
带有快照位置的另一个自定义名称的
Secret。您可以将此Secret添加到DataProtectionApplicationCR 中。
注意如果您不想在安装过程中指定备份或快照位置,您可以使用空
credentials-velero文件创建默认Secret。如果没有默认Secret,安装将失败。-
带有备份位置的自定义名称的
流程
- 点 Operators → Installed Operators 并选择 OADP Operator。
- 在 Provided APIs 下,点 DataProtectionApplication 框中的 Create 实例。
点 YAML View 并更新
DataProtectionApplication清单的参数:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- OADP 的默认命名空间是
openshift-adp。命名空间是一个变量,可配置。 - 2
openshift插件是必需的。- 3
- 指定在超时发生前等待多个 Velero 资源的分钟,如 Velero CRD 可用、volumeSnapshot 删除和备份存储库可用。默认值为 10m。
- 4
- 将管理请求路由到服务器的管理代理。
- 5
- 如果要启用
nodeAgent并执行文件系统备份,则将此值设置为true。 - 6
- 输入
kopia或restic作为您的上传者。您不能在安装后更改选择。对于 Built-in DataMover,您必须使用 Kopia。nodeAgent部署守护进程集,这意味着nodeAgentpod 在每个工作节点上运行。您可以通过在BackupCR 中添加spec.defaultVolumesToFsBackup: true来配置文件系统备份。 - 7
- 指定 Kopia 或 Restic 可用的节点。默认情况下,Kopia 或 Restic 在所有节点上运行。
- 8
- 指定 Azure 资源组。
- 9
- 指定 Azure 存储帐户 ID。
- 10
- 指定 Azure 订阅 ID。
- 11
- 如果没有指定这个值,则使用默认值
cloud-credentials-azure。如果您指定了自定义名称,则使用自定义名称进行备份位置。 - 12
- 指定存储桶作为备份存储位置。如果存储桶不是 Velero 备份的专用存储桶,您必须指定一个前缀。
- 13
- 如果存储桶用于多个目的,请为 Velero 备份指定一个前缀,如
velero。 - 14
- 如果您使用 CSI 快照或 Restic 备份 PV,则不需要指定快照位置。
- 15
- 指定您创建的
Secret对象的名称。如果没有指定这个值,则使用默认值cloud-credentials-azure。如果您指定了自定义名称,则使用自定义名称进行备份位置。
- 点 Create。
验证
运行以下命令,查看 OpenShift API for Data Protection (OADP) 资源来验证安装:
oc get all -n openshift-adp
$ oc get all -n openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证
DataProtectionApplication(DPA) 是否已协调:oc get dpa dpa-sample -n openshift-adp -o jsonpath='{.status}'$ oc get dpa dpa-sample -n openshift-adp -o jsonpath='{.status}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
{"conditions":[{"lastTransitionTime":"2023-10-27T01:23:57Z","message":"Reconcile complete","reason":"Complete","status":"True","type":"Reconciled"}]}{"conditions":[{"lastTransitionTime":"2023-10-27T01:23:57Z","message":"Reconcile complete","reason":"Complete","status":"True","type":"Reconciled"}]}Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
验证
type被设置为Reconciled。 运行以下命令,验证备份存储位置并确认
PHASE为Available:oc get backupstoragelocations.velero.io -n openshift-adp
$ oc get backupstoragelocations.velero.io -n openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME PHASE LAST VALIDATED AGE DEFAULT dpa-sample-1 Available 1s 3d16h true
NAME PHASE LAST VALIDATED AGE DEFAULT dpa-sample-1 Available 1s 3d16h trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.9.1.9. 使用客户端 burst 和 QPS 设置配置 DPA 复制链接链接已复制到粘贴板!
burst 设置决定在应用限制前可以发送到 velero 服务器的请求数量。达到 burst 限制后,查询每秒 (QPS) 设置决定了每秒可以发送多少个额外请求。
您可以使用 burst 和 QPS 值配置数据保护应用程序 (DPA) 来设置 velero 服务器的 burst 和 QPS 值。您可以使用 DPA 的 dpa.configuration.velero.client-burst 和 dpa.configuration.velero.client-qps 字段来设置 burst 和 QPS 值。
先决条件
- 已安装 OADP Operator。
5.9.1.10. 配置节点代理和节点标签 复制链接链接已复制到粘贴板!
Data Protection Application (DPA) 使用 nodeSelector 字段来选择哪些节点可以运行节点代理。nodeSelector 字段是推荐的节点选择约束形式。
流程
通过添加自定义标签,在您选择的任何节点上运行节点代理:
oc label node/<node_name> node-role.kubernetes.io/nodeAgent=""
$ oc label node/<node_name> node-role.kubernetes.io/nodeAgent=""Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意任何指定的标签都需要与每个节点上的标签匹配。
在
DPA.spec.configuration.nodeAgent.podConfig.nodeSelector字段中使用相同的自定义标签,用于标记节点。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下示例是
nodeSelector的反模式,除非标签'node-role.kubernetes.io/infra: ""'和'node-role.kubernetes.io/worker: ""'都位于节点上,否则无法工作:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.9.1.11. 配置节点代理负载关联性 复制链接链接已复制到粘贴板!
您可以使用 DataProtectionApplication (DPA) 自定义资源 (CR) 的 spec.podConfig.nodeSelector 对象将节点代理 pod 调度到特定的节点上。
请参阅以下示例,您可以在其中将节点代理 pod 调度到带有标签 label.io/role: cpu-1 和 other-label.io/other-role: cpu-2 的节点上。
您可以使用 DPA spec 中的 nodeagent.loadAffinity 对象对节点代理 pod 调度添加更多限制。
先决条件
-
您必须以具有
cluster-admin权限的用户身份登录。 - 已安装 OADP Operator。
- 您已配置了 DPA CR。
流程
配置 DPA spec
nodegent.loadAffinity对象,如下例所示。在示例中,您可以确保节点代理 pod 仅调度到具有标签
label.io/role: cpu-1的节点上,标签label.io/hostname与node1或node2匹配。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.9.1.12. 节点代理负载均衡指南 复制链接链接已复制到粘贴板!
使用以下准则在 DataProtectionApplication (DPA) 自定义资源 (CR) 中配置节点代理 loadAffinity 对象。
-
使用
spec.nodeagent.podConfig.nodeSelector对象进行简单节点匹配。 -
对于更复杂的场景,使用没有
podConfig.nodeSelector对象的loadAffinity.nodeSelector对象。 -
您可以使用
podConfig.nodeSelector和loadAffinity.nodeSelector对象,但loadAffinity对象必须与podConfig对象相比相等或更严格。在这种情况下,podConfig.nodeSelector标签必须是loadAffinity.nodeSelector对象中使用的标签的子集。 -
如果您在 DPA 中配置了
podConfig.nodeSelector和loadAffinity.nodeSelector对象,则无法使用matchExpressions和matchLabels字段。 请参见以下示例在 DPA 中配置
podConfig.nodeSelector和loadAffinity.nodeSelector对象。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.9.1.13. 配置节点代理负载并发 复制链接链接已复制到粘贴板!
您可以控制在集群中的每个节点上可以同时运行的最大节点代理操作数量。
您可以使用 Data Protection Application (DPA) 的以下字段之一配置它:
-
globalConfig:定义跨所有节点中的节点代理的默认并发限制。 -
perNodeConfig: 根据nodeSelector标签指定特定节点的不同并发限制。这为其中某些节点可能具有不同的作用或角色的环境提供了灵活性。
先决条件
-
您必须以具有
cluster-admin权限的用户身份登录。
流程
如果要对特定节点使用负载并发性,请在这些节点中添加标签:
oc label node/<node_name> label.io/instance-type='large'
$ oc label node/<node_name> label.io/instance-type='large'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为您的 DPA 实例配置负载并发字段:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.9.1.14. 以非 root 和非特权用户配置节点代理 复制链接链接已复制到粘贴板!
要增强节点代理安全性,您可以使用 DataProtectionApplication (DPA) 自定义资源 (CR) 中的 spec.configuration.velero.disableFsBackup 设置将 OADP Operator 节点代理 daemonset 配置为以非 root 用户身份运行。
通过将 spec.configuration.velero.disableFsBackup 设置为 true,节点代理安全上下文将 root 文件系统设置为只读,并将 privileged 标志设置为 false。
将 spec.configuration.velero.disableFsBackup 设置为 true 可增强节点代理安全性,方法是删除特权容器并强制实施只读根文件系统。
但是,它还使用 Kopia 禁用文件系统备份 (FSB)。如果您的工作负载依赖 FSB 备份不支持原生快照的卷,您应该评估 disableFsBackup 配置是否适合您的用例。
先决条件
- 已安装 OADP Operator。
流程
在 DPA 中配置
disableFsBackup字段,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令,验证节点代理安全上下文是否被设置为以非 root 身份运行,并且 root 文件系统是
readOnly:oc get daemonset node-agent -o yaml
$ oc get daemonset node-agent -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例如下:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.9.1.15. 配置存储库维护 复制链接链接已复制到粘贴板!
OADP 存储库维护是一个后台作业,您可以独立于节点代理 pod 配置它。这意味着,您可以将存储库维护 pod 调度到节点代理正在运行或没有运行的节点上。
只有在使用 Kopia 作为备份存储库时,您只能在 DataProtectionApplication (DPA)自定义资源(CR)中使用存储库维护作业关联性配置。
您可以选择在全局级别上配置负载关联性,会影响所有存储库。或者,您可以为每个存储库配置负载关联性。您还可以使用全局和每个存储库配置的组合。
先决条件
-
您必须以具有
cluster-admin权限的用户身份登录。 - 已安装 OADP Operator。
- 您已配置了 DPA CR。
流程
使用以下方法之一在 DPA spec 中配置
loadAffinity对象:
5.9.1.16. 配置 Velero 负载关联性 复制链接链接已复制到粘贴板!
对于每个 OADP 部署,有一个 Velero pod,其主要目的是调度 Velero 工作负载。要调度 Velero pod,您可以在 DataProtectionApplication (DPA) 自定义资源 (CR) spec 中使用 velero.podConfig.nodeSelector 和 velero.loadAffinity 对象。
使用 podConfig.nodeSelector 对象将 Velero pod 分配给特定的节点。您还可以为 pod 级别关联性和反关联性配置 velero.loadAffinity 对象。
OpenShift 调度程序应用规则并执行 Velero pod 部署调度。
先决条件
-
您必须以具有
cluster-admin权限的用户身份登录。 - 已安装 OADP Operator。
- 您已配置了 DPA CR。
流程
在 DPA spec 中配置
velero.podConfig.nodeSelector和velero.loadAffinity对象,如下例所示:velero.podConfig.nodeSelector对象配置:Copy to Clipboard Copied! Toggle word wrap Toggle overflow velero.loadAffinity对象配置:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.9.1.17. 覆盖 DPA 中的 imagePullPolicy 设置 复制链接链接已复制到粘贴板!
在 OADP 1.4.0 或更早版本中,Operator 会将 Velero 和节点代理 pod 的 imagePullPolicy 字段设置为 Always。
在 OADP 1.4.1 或更高版本中,Operator 首先检查每个镜像是否有 sha256 或 sha512 摘要,并相应地设置 imagePullPolicy 字段:
-
如果镜像有摘要,Operator 会将
imagePullPolicy设置为IfNotPresent。 -
如果镜像没有摘要,Operator 会将
imagePullPolicy设置为Always。
您还可以使用 Data Protection Application (DPA)中的 spec.imagePullPolicy 字段覆盖 imagePullPolicy 字段。
先决条件
- 已安装 OADP Operator。
流程
在 DPA 中配置
spec.imagePullPolicy字段,如下例所示:数据保护应用程序示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定
imagePullPolicy的值。在本例中,imagePullPolicy字段设置为Never。
5.9.1.17.1. 在 DataProtectionApplication CR 中启用 CSI 复制链接链接已复制到粘贴板!
您可以在 DataProtectionApplication 自定义资源(CR)中启用 Container Storage Interface(CSI)来备份持久性卷,以使用 CSI 快照备份持久性卷。
先决条件
- 云供应商必须支持 CSI 快照。
流程
编辑
DataProtectionApplicationCR,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 添加
csi默认插件。
5.9.1.17.2. 在 DataProtectionApplication 中禁用节点代理 复制链接链接已复制到粘贴板!
如果您没有在备份中使用 Restic、Kopia 或 DataMover,您可以在 DataProtectionApplication 自定义资源(CR)中禁用 nodeAgent 字段。在禁用 nodeAgent 前,请确保 OADP Operator 闲置且没有运行任何备份。
流程
您可以设置一个作业来启用和禁用 DataProtectionApplication CR 中的 nodeAgent 字段。如需更多信息,请参阅"使用作业在 pod 中运行任务"。
5.10. 使用 Google Cloud 配置 OADP 复制链接链接已复制到粘贴板!
5.10.1. 为 Google Cloud 的数据保护配置 OpenShift API 复制链接链接已复制到粘贴板!
您可以通过安装 OADP Operator,使用 Google Cloud 安装 OpenShift API for Data Protection (OADP)。Operator 安装 Velero 1.16。
从 OADP 1.0.4 开始,所有 OADP 1.0.z 版本只能用作 Migration Toolkit for Containers Operator 的依赖项,且不能作为独立 Operator 提供。
您可以为 Velero 配置 Google Cloud,创建一个默认 Secret,然后安装数据保护应用程序。如需了解更多详细信息,请参阅安装 OADP Operator。
要在受限网络环境中安装 OADP Operator,您必须首先禁用默认的 OperatorHub 源并镜像 Operator 目录。详情请参阅在断开连接的环境中使用 Operator Lifecycle Manager。
5.10.1.1. 配置 Google Cloud 复制链接链接已复制到粘贴板!
您可以为 OpenShift API 配置 Google Cloud for Data Protection (OADP)。
先决条件
-
您必须安装了
gcloud和gsutilCLI 工具。详情请查看 Google 云文档。
流程
登录到 Google Cloud:
gcloud auth login
$ gcloud auth loginCopy to Clipboard Copied! Toggle word wrap Toggle overflow 设置
BUCKET变量:BUCKET=<bucket>
$ BUCKET=<bucket>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定存储桶名称。
创建存储桶:
gsutil mb gs://$BUCKET/
$ gsutil mb gs://$BUCKET/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
PROJECT_ID变量设置为您的活跃项目:PROJECT_ID=$(gcloud config get-value project)
$ PROJECT_ID=$(gcloud config get-value project)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建服务帐户:
gcloud iam service-accounts create velero \ --display-name "Velero service account"$ gcloud iam service-accounts create velero \ --display-name "Velero service account"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 列出服务帐户:
gcloud iam service-accounts list
$ gcloud iam service-accounts listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 设置
SERVICE_ACCOUNT_EMAIL变量,使其与email值匹配:SERVICE_ACCOUNT_EMAIL=$(gcloud iam service-accounts list \ --filter="displayName:Velero service account" \ --format 'value(email)')$ SERVICE_ACCOUNT_EMAIL=$(gcloud iam service-accounts list \ --filter="displayName:Velero service account" \ --format 'value(email)')Copy to Clipboard Copied! Toggle word wrap Toggle overflow 附加策略,为
velero用户提供所需的最低权限:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
velero.server自定义角色:gcloud iam roles create velero.server \ --project $PROJECT_ID \ --title "Velero Server" \ --permissions "$(IFS=","; echo "${ROLE_PERMISSIONS[*]}")"$ gcloud iam roles create velero.server \ --project $PROJECT_ID \ --title "Velero Server" \ --permissions "$(IFS=","; echo "${ROLE_PERMISSIONS[*]}")"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为项目添加 IAM 策略绑定:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_EMAIL \ --role projects/$PROJECT_ID/roles/velero.server$ gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_EMAIL \ --role projects/$PROJECT_ID/roles/velero.serverCopy to Clipboard Copied! Toggle word wrap Toggle overflow 更新 IAM 服务帐户:
gsutil iam ch serviceAccount:$SERVICE_ACCOUNT_EMAIL:objectAdmin gs://${BUCKET}$ gsutil iam ch serviceAccount:$SERVICE_ACCOUNT_EMAIL:objectAdmin gs://${BUCKET}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 IAM 服务帐户的密钥保存到当前目录中的
credentials-velero文件中:gcloud iam service-accounts keys create credentials-velero \ --iam-account $SERVICE_ACCOUNT_EMAIL$ gcloud iam service-accounts keys create credentials-velero \ --iam-account $SERVICE_ACCOUNT_EMAILCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在安装数据保护应用程序前,您可以使用
credentials-velero文件为 Google Cloud 创建Secret对象。
5.10.1.2. 关于备份和恢复位置及其 secret 复制链接链接已复制到粘贴板!
您可以在 DataProtectionApplication 自定义资源(CR)中指定备份和快照位置及其 secret。
5.10.1.2.1. 备份位置 复制链接链接已复制到粘贴板!
您可以将以下 AWS S3 兼容对象存储解决方案之一指定为备份位置:
- 多云对象网关 (MCG)
- Red Hat Container Storage
- Ceph RADOS 网关;也称为 Ceph 对象网关
- Red Hat OpenShift Data Foundation
- MinIO
Velero 将 OpenShift Container Platform 资源、Kubernetes 对象和内部镜像备份为对象存储上的存档文件。
5.10.1.2.2. 快照位置 复制链接链接已复制到粘贴板!
如果使用云供应商的原生快照 API 备份持久性卷,您必须将云供应商指定为快照位置。
如果使用 Container Storage Interface(CSI)快照,则不需要指定快照位置,因为您要创建一个 VolumeSnapshotClass CR 来注册 CSI 驱动程序。
如果您使用文件系统备份 (FSB),则不需要指定快照位置,因为 FSB 在对象存储上备份文件系统。
5.10.1.2.3. Secrets 复制链接链接已复制到粘贴板!
如果备份和快照位置使用相同的凭证,或者不需要快照位置,请创建一个默认 Secret。
如果备份和恢复位置使用不同的凭证,您可以创建两个 secret 对象:
-
您在
DataProtectionApplicationCR 中指定的备份位置的自定义Secret。 -
快照位置的默认
Secret,在DataProtectionApplicationCR 中没有引用。
数据保护应用程序需要一个默认的 Secret。否则,安装将失败。
如果您不想在安装过程中指定备份或快照位置,您可以使用空 credentials-velero 文件创建默认 Secret。
5.10.1.2.4. 创建默认 Secret 复制链接链接已复制到粘贴板!
如果您的备份和快照位置使用相同的凭证,或者不需要快照位置,则创建一个默认 Secret。
Secret 的默认名称为 cloud-credentials-gcp。
DataProtectionApplication 自定义资源(CR)需要一个默认的 Secret。否则,安装将失败。如果没有指定备份位置 Secret 的名称,则会使用默认名称。
如果您不想在安装过程中使用备份位置凭证,您可以使用空 credentials-velero 文件创建带有默认名称的 Secret。
先决条件
- 您的对象存储和云存储(若有)必须使用相同的凭证。
- 您必须为 Velero 配置对象存储。
流程
-
为您的云供应商为备份存储位置创建一个
credentials-velero文件。 使用默认名称创建
Secret自定义资源 (CR):oc create secret generic cloud-credentials-gcp -n openshift-adp --from-file cloud=credentials-velero
$ oc create secret generic cloud-credentials-gcp -n openshift-adp --from-file cloud=credentials-veleroCopy to Clipboard Copied! Toggle word wrap Toggle overflow
在安装 Data Protection Application 时,secret 会在 DataProtectionApplication CR 的 spec.backupLocations.credential 块中引用。
5.10.1.2.5. 为不同凭证创建 secret 复制链接链接已复制到粘贴板!
如果您的备份和恢复位置使用不同的凭证,您必须创建两个 Secret 对象:
-
具有自定义名称的备份位置
Secret。自定义名称在DataProtectionApplication自定义资源(CR)的spec.backupLocations块中指定。 -
带有默认名称
cloud-credentials-gcp的快照位置Secret。此Secret不在DataProtectionApplicationCR 中指定。
流程
-
为您的云供应商为快照位置创建一个
credentials-velero文件。 使用默认名称为快照位置创建
Secret:oc create secret generic cloud-credentials-gcp -n openshift-adp --from-file cloud=credentials-velero
$ oc create secret generic cloud-credentials-gcp -n openshift-adp --from-file cloud=credentials-veleroCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
为您的对象存储创建一个用于备份位置的
credentials-velero文件。 使用自定义名称为备份位置创建
Secret:oc create secret generic <custom_secret> -n openshift-adp --from-file cloud=credentials-velero
$ oc create secret generic <custom_secret> -n openshift-adp --from-file cloud=credentials-veleroCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将带有自定义名称的
Secret添加到DataProtectionApplicationCR 中,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 具有自定义名称的备份位置
Secret。
5.10.1.3. 配置数据保护应用程序 复制链接链接已复制到粘贴板!
您可以通过设置 Velero 资源分配或启用自签名 CA 证书来配置数据保护应用程序。
5.10.1.3.1. 设置 Velero CPU 和内存分配 复制链接链接已复制到粘贴板!
您可以通过编辑 DataProtectionApplication 自定义资源(CR)清单来为 Velero pod 设置 CPU 和内存分配。
先决条件
- 您必须安装了 OpenShift API for Data Protection(OADP)Operator。
流程
编辑
DataProtectionApplicationCR 清单的spec.configuration.velero.podConfig.ResourceAllocations块中的值,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意Kopia 是 OADP 1.3 及之后的版本中的一个选项。您可以使用 Kopia 进行文件系统备份,Kopia 是 Data Mover 的唯一选择,并带有内置数据 Mover。
和 Restic 相比,Kopia 需要更多资源,您可能需要相应地调整 CPU 和内存要求。
使用 nodeSelector 字段选择哪些节点可以运行节点代理。nodeSelector 字段是节点选择限制的最简单的形式。任何指定的标签都需要与每个节点上的标签匹配。
如需了解更多详细信息,请参阅配置节点代理和节点标签。
5.10.1.3.2. 启用自签名 CA 证书 复制链接链接已复制到粘贴板!
您必须通过编辑 DataProtectionApplication 自定义资源(CR)清单来为对象存储启用自签名 CA 证书,以防止由未知颁发机构签名的证书。
先决条件
- 您必须安装了 OpenShift API for Data Protection(OADP)Operator。
流程
编辑
DataProtectionApplicationCR 清单的spec.backupLocations.velero.objectStorage.caCert参数和spec.backupLocations.velero.config参数:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.10.1.3.2.1. 使用带有用于 velero 部署的 velero 命令的 CA 证书 复制链接链接已复制到粘贴板!
如果您望使用 Velero CLI 而又不想在您的系统中安装它,可以为它创建一个别名。
先决条件
-
您必须使用具有
cluster-admin角色的用户登录到 OpenShift Container Platform 集群。 已安装 OpenShift CLI (
oc)。要使用别名的 Velero 命令,请运行以下命令:
alias velero='oc -n openshift-adp exec deployment/velero -c velero -it -- ./velero'
$ alias velero='oc -n openshift-adp exec deployment/velero -c velero -it -- ./velero'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令检查别名是否正常工作:
Example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要使用这个命令来使用 CA 证书,您可以运行以下命令在 Velero 部署中添加证书:
CA_CERT=$(oc -n openshift-adp get dataprotectionapplications.oadp.openshift.io <dpa-name> -o jsonpath='{.spec.backupLocations[0].velero.objectStorage.caCert}') [[ -n $CA_CERT ]] && echo "$CA_CERT" | base64 -d | oc exec -n openshift-adp -i deploy/velero -c velero -- bash -c "cat > /tmp/your-cacert.txt" || echo "DPA BSL has no caCert"$ CA_CERT=$(oc -n openshift-adp get dataprotectionapplications.oadp.openshift.io <dpa-name> -o jsonpath='{.spec.backupLocations[0].velero.objectStorage.caCert}') $ [[ -n $CA_CERT ]] && echo "$CA_CERT" | base64 -d | oc exec -n openshift-adp -i deploy/velero -c velero -- bash -c "cat > /tmp/your-cacert.txt" || echo "DPA BSL has no caCert"Copy to Clipboard Copied! Toggle word wrap Toggle overflow velero describe backup <backup_name> --details --cacert /tmp/<your_cacert>.txt
$ velero describe backup <backup_name> --details --cacert /tmp/<your_cacert>.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要获取备份日志,请运行以下命令:
velero backup logs <backup_name> --cacert /tmp/<your_cacert.txt>
$ velero backup logs <backup_name> --cacert /tmp/<your_cacert.txt>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以使用这些日志来查看无法备份的资源的失败和警告。
-
如果 Velero pod 重启,
/tmp/your-cacert.txt文件会消失,您需要通过重新运行上一步中的命令来重新创建/tmp/your-cacert.txt文件。 您可以运行以下命令来检查
/tmp/your-cacert.txt文件是否存在(在存储它的文件位置中):oc exec -n openshift-adp -i deploy/velero -c velero -- bash -c "ls /tmp/your-cacert.txt"
$ oc exec -n openshift-adp -i deploy/velero -c velero -- bash -c "ls /tmp/your-cacert.txt" /tmp/your-cacert.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow
在以后的 OpenShift API for Data Protection (OADP) 发行版本中,我们计划将证书挂载到 Velero pod,以便不需要这一步。
5.10.1.4. Google 工作负载身份联邦云身份验证 复制链接链接已复制到粘贴板!
在 Google Cloud 外部运行的应用程序使用服务帐户密钥(如用户名和密码)来访问 Google Cloud 资源。如果没有正确管理,则这些服务帐户密钥可能会成为安全风险。
使用 Google 的工作负载身份联邦,您可以使用 Identity and Access Management (IAM)提供 IAM 角色,包括模拟服务帐户到外部身份的功能。这消除了与服务帐户密钥相关的维护和安全风险。
工作负载联邦处理加密和解密证书、提取用户属性和验证。身份联邦对身份验证进行外部化,将其传递给安全令牌服务 (STS),并减少对各个开发人员的需求。授权和控制对资源的访问保持应用的职责。
Google 工作负载身份联邦可用于 OADP 1.3.x 及更新的版本。
在备份卷时,带有 Google 工作负载身份联邦身份验证的 Google Cloud 上的 OADP 只支持 CSI 快照。
带有 Google 工作负载身份联邦身份验证的 OADP 不支持卷快照位置(VSL)备份。如需了解更多详细信息,请参阅 Google 工作负载身份联邦已知问题。
如果不使用 Google 工作负载身份联邦云身份验证,请继续安装数据保护应用程序。
先决条件
- 您已以手动模式安装集群,并配置了 Google Cloud Workload Identity。
-
您可以访问 Cloud Credential Operator 实用程序 (
ccoctl) 以及关联的工作负载身份池。
流程
运行以下命令,创建一个
oadp-credrequest目录:mkdir -p oadp-credrequest
$ mkdir -p oadp-credrequestCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
CredentialsRequest.yaml文件,如下所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,使用
ccoctl实用程序处理oadp-credrequest目录中的CredentialsRequest对象:Copy to Clipboard Copied! Toggle word wrap Toggle overflow manifests/openshift-adp-cloud-credentials-gcp-credentials.yaml文件现在可用于以下步骤。运行以下命令来创建命名空间:
oc create namespace <OPERATOR_INSTALL_NS>
$ oc create namespace <OPERATOR_INSTALL_NS>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,将凭证应用到命名空间:
oc apply -f manifests/openshift-adp-cloud-credentials-gcp-credentials.yaml
$ oc apply -f manifests/openshift-adp-cloud-credentials-gcp-credentials.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.10.1.4.1. Google 工作负载身份联邦已知问题 复制链接链接已复制到粘贴板!
-
当配置了 Google Cloud 工作负载身份联邦时,卷快照位置(VSL)备份会完成带有
PartiallyFailed阶段。Google 工作负载身份联邦身份验证不支持 VSL 备份。
5.10.1.5. 安装数据保护应用程序 复制链接链接已复制到粘贴板!
您可以通过创建 DataProtectionApplication API 的实例来安装数据保护应用程序(DPA)。
先决条件
- 您必须安装 OADP Operator。
- 您必须将对象存储配置为备份位置。
- 如果使用快照来备份 PV,云供应商必须支持原生快照 API 或 Container Storage Interface(CSI)快照。
-
如果备份和快照位置使用相同的凭证,您必须创建带有默认名称
cloud-credentials-gcp的Secret。 如果备份和快照位置使用不同的凭证,您必须创建两个
Secret:-
带有备份位置的自定义名称的
secret。您可以将此Secret添加到DataProtectionApplicationCR 中。 -
带有快照位置的另一个自定义名称的
Secret。您可以将此Secret添加到DataProtectionApplicationCR 中。
注意如果您不想在安装过程中指定备份或快照位置,您可以使用空
credentials-velero文件创建默认Secret。如果没有默认Secret,安装将失败。-
带有备份位置的自定义名称的
流程
- 点 Operators → Installed Operators 并选择 OADP Operator。
- 在 Provided APIs 下,点 DataProtectionApplication 框中的 Create 实例。
点 YAML View 并更新
DataProtectionApplication清单的参数:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- OADP 的默认命名空间是
openshift-adp。命名空间是一个变量,可配置。 - 2
openshift插件是必需的。- 3
- 指定在超时发生前等待多个 Velero 资源的分钟,如 Velero CRD 可用、volumeSnapshot 删除和备份存储库可用。默认值为 10m。
- 4
- 将管理请求路由到服务器的管理代理。
- 5
- 如果要启用
nodeAgent并执行文件系统备份,则将此值设置为true。 - 6
- 输入
kopia或restic作为您的上传者。您不能在安装后更改选择。对于 Built-in DataMover,您必须使用 Kopia。nodeAgent部署守护进程集,这意味着nodeAgentpod 在每个工作节点上运行。您可以通过在BackupCR 中添加spec.defaultVolumesToFsBackup: true来配置文件系统备份。 - 7
- 指定 Kopia 或 Restic 可用的节点。默认情况下,Kopia 或 Restic 在所有节点上运行。
- 8
- 包含凭证的 secret 密钥。对于 Google 工作负载身份联邦云身份验证,请使用
service_account.json。 - 9
- 包含凭证的 secret 名称。如果没有指定这个值,则使用默认值
cloud-credentials-gcp。 - 10
- 指定存储桶作为备份存储位置。如果存储桶不是 Velero 备份的专用存储桶,您必须指定一个前缀。
- 11
- 如果存储桶用于多个目的,请为 Velero 备份指定一个前缀,如
velero。 - 12
- 指定快照位置,除非您使用 CSI 快照或 Restic 备份 PV。
- 13
- 快照位置必须与 PV 位于同一区域。
- 14
- 指定您创建的
Secret对象的名称。如果没有指定这个值,则使用默认值cloud-credentials-gcp。如果您指定了自定义名称,则使用自定义名称进行备份位置。 - 15
- Google 工作负载身份联邦支持内部镜像备份。如果您不想使用镜像备份,请将此字段设置为
false。
- 点 Create。
验证
运行以下命令,查看 OpenShift API for Data Protection (OADP) 资源来验证安装:
oc get all -n openshift-adp
$ oc get all -n openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证
DataProtectionApplication(DPA) 是否已协调:oc get dpa dpa-sample -n openshift-adp -o jsonpath='{.status}'$ oc get dpa dpa-sample -n openshift-adp -o jsonpath='{.status}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
{"conditions":[{"lastTransitionTime":"2023-10-27T01:23:57Z","message":"Reconcile complete","reason":"Complete","status":"True","type":"Reconciled"}]}{"conditions":[{"lastTransitionTime":"2023-10-27T01:23:57Z","message":"Reconcile complete","reason":"Complete","status":"True","type":"Reconciled"}]}Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
验证
type被设置为Reconciled。 运行以下命令,验证备份存储位置并确认
PHASE为Available:oc get backupstoragelocations.velero.io -n openshift-adp
$ oc get backupstoragelocations.velero.io -n openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME PHASE LAST VALIDATED AGE DEFAULT dpa-sample-1 Available 1s 3d16h true
NAME PHASE LAST VALIDATED AGE DEFAULT dpa-sample-1 Available 1s 3d16h trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.10.1.6. 使用客户端 burst 和 QPS 设置配置 DPA 复制链接链接已复制到粘贴板!
burst 设置决定在应用限制前可以发送到 velero 服务器的请求数量。达到 burst 限制后,查询每秒 (QPS) 设置决定了每秒可以发送多少个额外请求。
您可以使用 burst 和 QPS 值配置数据保护应用程序 (DPA) 来设置 velero 服务器的 burst 和 QPS 值。您可以使用 DPA 的 dpa.configuration.velero.client-burst 和 dpa.configuration.velero.client-qps 字段来设置 burst 和 QPS 值。
先决条件
- 已安装 OADP Operator。
5.10.1.7. 配置节点代理和节点标签 复制链接链接已复制到粘贴板!
Data Protection Application (DPA) 使用 nodeSelector 字段来选择哪些节点可以运行节点代理。nodeSelector 字段是推荐的节点选择约束形式。
流程
通过添加自定义标签,在您选择的任何节点上运行节点代理:
oc label node/<node_name> node-role.kubernetes.io/nodeAgent=""
$ oc label node/<node_name> node-role.kubernetes.io/nodeAgent=""Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意任何指定的标签都需要与每个节点上的标签匹配。
在
DPA.spec.configuration.nodeAgent.podConfig.nodeSelector字段中使用相同的自定义标签,用于标记节点。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下示例是
nodeSelector的反模式,除非标签'node-role.kubernetes.io/infra: ""'和'node-role.kubernetes.io/worker: ""'都位于节点上,否则无法工作:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.10.1.8. 配置节点代理负载关联性 复制链接链接已复制到粘贴板!
您可以使用 DataProtectionApplication (DPA) 自定义资源 (CR) 的 spec.podConfig.nodeSelector 对象将节点代理 pod 调度到特定的节点上。
请参阅以下示例,您可以在其中将节点代理 pod 调度到带有标签 label.io/role: cpu-1 和 other-label.io/other-role: cpu-2 的节点上。
您可以使用 DPA spec 中的 nodeagent.loadAffinity 对象对节点代理 pod 调度添加更多限制。
先决条件
-
您必须以具有
cluster-admin权限的用户身份登录。 - 已安装 OADP Operator。
- 您已配置了 DPA CR。
流程
配置 DPA spec
nodegent.loadAffinity对象,如下例所示。在示例中,您可以确保节点代理 pod 仅调度到具有标签
label.io/role: cpu-1的节点上,标签label.io/hostname与node1或node2匹配。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.10.1.9. 节点代理负载均衡指南 复制链接链接已复制到粘贴板!
使用以下准则在 DataProtectionApplication (DPA) 自定义资源 (CR) 中配置节点代理 loadAffinity 对象。
-
使用
spec.nodeagent.podConfig.nodeSelector对象进行简单节点匹配。 -
对于更复杂的场景,使用没有
podConfig.nodeSelector对象的loadAffinity.nodeSelector对象。 -
您可以使用
podConfig.nodeSelector和loadAffinity.nodeSelector对象,但loadAffinity对象必须与podConfig对象相比相等或更严格。在这种情况下,podConfig.nodeSelector标签必须是loadAffinity.nodeSelector对象中使用的标签的子集。 -
如果您在 DPA 中配置了
podConfig.nodeSelector和loadAffinity.nodeSelector对象,则无法使用matchExpressions和matchLabels字段。 请参见以下示例在 DPA 中配置
podConfig.nodeSelector和loadAffinity.nodeSelector对象。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.10.1.10. 配置节点代理负载并发 复制链接链接已复制到粘贴板!
您可以控制在集群中的每个节点上可以同时运行的最大节点代理操作数量。
您可以使用 Data Protection Application (DPA) 的以下字段之一配置它:
-
globalConfig:定义跨所有节点中的节点代理的默认并发限制。 -
perNodeConfig: 根据nodeSelector标签指定特定节点的不同并发限制。这为其中某些节点可能具有不同的作用或角色的环境提供了灵活性。
先决条件
-
您必须以具有
cluster-admin权限的用户身份登录。
流程
如果要对特定节点使用负载并发性,请在这些节点中添加标签:
oc label node/<node_name> label.io/instance-type='large'
$ oc label node/<node_name> label.io/instance-type='large'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为您的 DPA 实例配置负载并发字段:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.10.1.11. 以非 root 和非特权用户配置节点代理 复制链接链接已复制到粘贴板!
要增强节点代理安全性,您可以使用 DataProtectionApplication (DPA) 自定义资源 (CR) 中的 spec.configuration.velero.disableFsBackup 设置将 OADP Operator 节点代理 daemonset 配置为以非 root 用户身份运行。
通过将 spec.configuration.velero.disableFsBackup 设置为 true,节点代理安全上下文将 root 文件系统设置为只读,并将 privileged 标志设置为 false。
将 spec.configuration.velero.disableFsBackup 设置为 true 可增强节点代理安全性,方法是删除特权容器并强制实施只读根文件系统。
但是,它还使用 Kopia 禁用文件系统备份 (FSB)。如果您的工作负载依赖 FSB 备份不支持原生快照的卷,您应该评估 disableFsBackup 配置是否适合您的用例。
先决条件
- 已安装 OADP Operator。
流程
在 DPA 中配置
disableFsBackup字段,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令,验证节点代理安全上下文是否被设置为以非 root 身份运行,并且 root 文件系统是
readOnly:oc get daemonset node-agent -o yaml
$ oc get daemonset node-agent -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例如下:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.10.1.12. 配置存储库维护 复制链接链接已复制到粘贴板!
OADP 存储库维护是一个后台作业,您可以独立于节点代理 pod 配置它。这意味着,您可以将存储库维护 pod 调度到节点代理正在运行或没有运行的节点上。
只有在使用 Kopia 作为备份存储库时,您只能在 DataProtectionApplication (DPA)自定义资源(CR)中使用存储库维护作业关联性配置。
您可以选择在全局级别上配置负载关联性,会影响所有存储库。或者,您可以为每个存储库配置负载关联性。您还可以使用全局和每个存储库配置的组合。
先决条件
-
您必须以具有
cluster-admin权限的用户身份登录。 - 已安装 OADP Operator。
- 您已配置了 DPA CR。
流程
使用以下方法之一在 DPA spec 中配置
loadAffinity对象:
5.10.1.13. 配置 Velero 负载关联性 复制链接链接已复制到粘贴板!
对于每个 OADP 部署,有一个 Velero pod,其主要目的是调度 Velero 工作负载。要调度 Velero pod,您可以在 DataProtectionApplication (DPA) 自定义资源 (CR) spec 中使用 velero.podConfig.nodeSelector 和 velero.loadAffinity 对象。
使用 podConfig.nodeSelector 对象将 Velero pod 分配给特定的节点。您还可以为 pod 级别关联性和反关联性配置 velero.loadAffinity 对象。
OpenShift 调度程序应用规则并执行 Velero pod 部署调度。
先决条件
-
您必须以具有
cluster-admin权限的用户身份登录。 - 已安装 OADP Operator。
- 您已配置了 DPA CR。
流程
在 DPA spec 中配置
velero.podConfig.nodeSelector和velero.loadAffinity对象,如下例所示:velero.podConfig.nodeSelector对象配置:Copy to Clipboard Copied! Toggle word wrap Toggle overflow velero.loadAffinity对象配置:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.10.1.14. 覆盖 DPA 中的 imagePullPolicy 设置 复制链接链接已复制到粘贴板!
在 OADP 1.4.0 或更早版本中,Operator 会将 Velero 和节点代理 pod 的 imagePullPolicy 字段设置为 Always。
在 OADP 1.4.1 或更高版本中,Operator 首先检查每个镜像是否有 sha256 或 sha512 摘要,并相应地设置 imagePullPolicy 字段:
-
如果镜像有摘要,Operator 会将
imagePullPolicy设置为IfNotPresent。 -
如果镜像没有摘要,Operator 会将
imagePullPolicy设置为Always。
您还可以使用 Data Protection Application (DPA)中的 spec.imagePullPolicy 字段覆盖 imagePullPolicy 字段。
先决条件
- 已安装 OADP Operator。
流程
在 DPA 中配置
spec.imagePullPolicy字段,如下例所示:数据保护应用程序示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定
imagePullPolicy的值。在本例中,imagePullPolicy字段设置为Never。
5.10.1.14.1. 在 DataProtectionApplication CR 中启用 CSI 复制链接链接已复制到粘贴板!
您可以在 DataProtectionApplication 自定义资源(CR)中启用 Container Storage Interface(CSI)来备份持久性卷,以使用 CSI 快照备份持久性卷。
先决条件
- 云供应商必须支持 CSI 快照。
流程
编辑
DataProtectionApplicationCR,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 添加
csi默认插件。
5.10.1.14.2. 在 DataProtectionApplication 中禁用节点代理 复制链接链接已复制到粘贴板!
如果您没有在备份中使用 Restic、Kopia 或 DataMover,您可以在 DataProtectionApplication 自定义资源(CR)中禁用 nodeAgent 字段。在禁用 nodeAgent 前,请确保 OADP Operator 闲置且没有运行任何备份。
流程
您可以设置一个作业来启用和禁用 DataProtectionApplication CR 中的 nodeAgent 字段。如需更多信息,请参阅"使用作业在 pod 中运行任务"。
5.11. 使用 MCG 配置 OADP 复制链接链接已复制到粘贴板!
5.11.1. 为使用多云对象网关的数据保护配置 OpenShift API 复制链接链接已复制到粘贴板!
Multicloud Object Gateway (MCG) 是 OpenShift Data Foundation 的一个组件,您可以在 DataProtectionApplication 自定义资源 (CR) 中将其配置为备份位置。您可以通过安装 OADP Operator,使用 MCG 安装 OpenShift API for Data Protection (OADP)。Operator 安装 Velero 1.16。
从 OADP 1.0.4 开始,所有 OADP 1.0.z 版本只能用作 Migration Toolkit for Containers Operator 的依赖项,且不能作为独立 Operator 提供。
您可以为备份位置创建一个 Secret CR,并安装数据保护应用程序。如需了解更多详细信息,请参阅安装 OADP Operator。
要在受限网络环境中安装 OADP Operator,您必须首先禁用默认的 OperatorHub 源并镜像 Operator 目录。详情请参阅在断开连接的环境中使用 Operator Lifecycle Manager。
5.11.1.1. 检索多云对象网关凭证 复制链接链接已复制到粘贴板!
您需要获取 Multicloud Object Gateway (MCG) 存储桶凭证创建一个 Secret 自定义资源 (CR) 用于 OpenShift API for Data Protection (OADP)。
虽然 MCG Operator 已被弃用,但 MCG 插件仍可用于 OpenShift Data Foundation。要下载插件,请访问下载 Red Hat OpenShift Data Foundation,并为您的操作系统下载适当的 MCG 插件。
先决条件
- 请根据相关的 Red Hat OpenShift Data Foundation 部署指南部署 OpenShift Data Foundation。
流程
- 创建一个 MCG 存储桶。如需更多信息,请参阅管理混合和多资源。
-
通过在 bucket 资源上运行
oc describe命令,获取 S3 端点、AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY和存储桶名称。 创建
credentials-velero文件:cat << EOF > ./credentials-velero [default] aws_access_key_id=<AWS_ACCESS_KEY_ID> aws_secret_access_key=<AWS_SECRET_ACCESS_KEY> EOF
$ cat << EOF > ./credentials-velero [default] aws_access_key_id=<AWS_ACCESS_KEY_ID> aws_secret_access_key=<AWS_SECRET_ACCESS_KEY> EOFCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在安装数据保护应用程序时,您可以使用
credentials-velero文件创建Secret对象。
5.11.1.2. 关于备份和恢复位置及其 secret 复制链接链接已复制到粘贴板!
您可以在 DataProtectionApplication 自定义资源(CR)中指定备份和快照位置及其 secret。
5.11.1.2.1. 备份位置 复制链接链接已复制到粘贴板!
您可以将以下 AWS S3 兼容对象存储解决方案之一指定为备份位置:
- 多云对象网关 (MCG)
- Red Hat Container Storage
- Ceph RADOS 网关;也称为 Ceph 对象网关
- Red Hat OpenShift Data Foundation
- MinIO
Velero 将 OpenShift Container Platform 资源、Kubernetes 对象和内部镜像备份为对象存储上的存档文件。
5.11.1.2.2. 快照位置 复制链接链接已复制到粘贴板!
如果使用云供应商的原生快照 API 备份持久性卷,您必须将云供应商指定为快照位置。
如果使用 Container Storage Interface(CSI)快照,则不需要指定快照位置,因为您要创建一个 VolumeSnapshotClass CR 来注册 CSI 驱动程序。
如果您使用文件系统备份 (FSB),则不需要指定快照位置,因为 FSB 在对象存储上备份文件系统。
5.11.1.2.3. Secrets 复制链接链接已复制到粘贴板!
如果备份和快照位置使用相同的凭证,或者不需要快照位置,请创建一个默认 Secret。
如果备份和恢复位置使用不同的凭证,您可以创建两个 secret 对象:
-
您在
DataProtectionApplicationCR 中指定的备份位置的自定义Secret。 -
快照位置的默认
Secret,在DataProtectionApplicationCR 中没有引用。
数据保护应用程序需要一个默认的 Secret。否则,安装将失败。
如果您不想在安装过程中指定备份或快照位置,您可以使用空 credentials-velero 文件创建默认 Secret。
5.11.1.2.4. 创建默认 Secret 复制链接链接已复制到粘贴板!
如果您的备份和快照位置使用相同的凭证,或者不需要快照位置,则创建一个默认 Secret。
Secret 的默认名称为 cloud-credentials。
DataProtectionApplication 自定义资源(CR)需要一个默认的 Secret。否则,安装将失败。如果没有指定备份位置 Secret 的名称,则会使用默认名称。
如果您不想在安装过程中使用备份位置凭证,您可以使用空 credentials-velero 文件创建带有默认名称的 Secret。
先决条件
- 您的对象存储和云存储(若有)必须使用相同的凭证。
- 您必须为 Velero 配置对象存储。
流程
为您的云供应商为备份存储位置创建一个
credentials-velero文件。请参见以下示例:
[default] aws_access_key_id=<AWS_ACCESS_KEY_ID> aws_secret_access_key=<AWS_SECRET_ACCESS_KEY>
[default] aws_access_key_id=<AWS_ACCESS_KEY_ID> aws_secret_access_key=<AWS_SECRET_ACCESS_KEY>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用默认名称创建
Secret自定义资源 (CR):oc create secret generic cloud-credentials -n openshift-adp --from-file cloud=credentials-velero
$ oc create secret generic cloud-credentials -n openshift-adp --from-file cloud=credentials-veleroCopy to Clipboard Copied! Toggle word wrap Toggle overflow
在安装 Data Protection Application 时,secret 会在 DataProtectionApplication CR 的 spec.backupLocations.credential 块中引用。
5.11.1.2.5. 为不同凭证创建 secret 复制链接链接已复制到粘贴板!
如果您的备份和恢复位置使用不同的凭证,您必须创建两个 Secret 对象:
-
具有自定义名称的备份位置
Secret。自定义名称在DataProtectionApplication自定义资源(CR)的spec.backupLocations块中指定。 -
带有默认名称
cloud-credentials的快照位置Secret。此Secret不在DataProtectionApplicationCR 中指定。
流程
-
为您的云供应商为快照位置创建一个
credentials-velero文件。 使用默认名称为快照位置创建
Secret:oc create secret generic cloud-credentials -n openshift-adp --from-file cloud=credentials-velero
$ oc create secret generic cloud-credentials -n openshift-adp --from-file cloud=credentials-veleroCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
为您的对象存储创建一个用于备份位置的
credentials-velero文件。 使用自定义名称为备份位置创建
Secret:oc create secret generic <custom_secret> -n openshift-adp --from-file cloud=credentials-velero
$ oc create secret generic <custom_secret> -n openshift-adp --from-file cloud=credentials-veleroCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将带有自定义名称的
Secret添加到DataProtectionApplicationCR 中,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.11.1.3. 配置数据保护应用程序 复制链接链接已复制到粘贴板!
您可以通过设置 Velero 资源分配或启用自签名 CA 证书来配置数据保护应用程序。
5.11.1.3.1. 设置 Velero CPU 和内存分配 复制链接链接已复制到粘贴板!
您可以通过编辑 DataProtectionApplication 自定义资源(CR)清单来为 Velero pod 设置 CPU 和内存分配。
先决条件
- 您必须安装了 OpenShift API for Data Protection(OADP)Operator。
流程
编辑
DataProtectionApplicationCR 清单的spec.configuration.velero.podConfig.ResourceAllocations块中的值,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意Kopia 是 OADP 1.3 及之后的版本中的一个选项。您可以使用 Kopia 进行文件系统备份,Kopia 是 Data Mover 的唯一选择,并带有内置数据 Mover。
和 Restic 相比,Kopia 需要更多资源,您可能需要相应地调整 CPU 和内存要求。
使用 nodeSelector 字段选择哪些节点可以运行节点代理。nodeSelector 字段是节点选择限制的最简单的形式。任何指定的标签都需要与每个节点上的标签匹配。
如需了解更多详细信息,请参阅配置节点代理和节点标签。
5.11.1.3.2. 启用自签名 CA 证书 复制链接链接已复制到粘贴板!
您必须通过编辑 DataProtectionApplication 自定义资源(CR)清单来为对象存储启用自签名 CA 证书,以防止由未知颁发机构签名的证书。
先决条件
- 您必须安装了 OpenShift API for Data Protection(OADP)Operator。
流程
编辑
DataProtectionApplicationCR 清单的spec.backupLocations.velero.objectStorage.caCert参数和spec.backupLocations.velero.config参数:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.11.1.3.2.1. 使用带有用于 velero 部署的 velero 命令的 CA 证书 复制链接链接已复制到粘贴板!
如果您望使用 Velero CLI 而又不想在您的系统中安装它,可以为它创建一个别名。
先决条件
-
您必须使用具有
cluster-admin角色的用户登录到 OpenShift Container Platform 集群。 已安装 OpenShift CLI (
oc)。要使用别名的 Velero 命令,请运行以下命令:
alias velero='oc -n openshift-adp exec deployment/velero -c velero -it -- ./velero'
$ alias velero='oc -n openshift-adp exec deployment/velero -c velero -it -- ./velero'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令检查别名是否正常工作:
Example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要使用这个命令来使用 CA 证书,您可以运行以下命令在 Velero 部署中添加证书:
CA_CERT=$(oc -n openshift-adp get dataprotectionapplications.oadp.openshift.io <dpa-name> -o jsonpath='{.spec.backupLocations[0].velero.objectStorage.caCert}') [[ -n $CA_CERT ]] && echo "$CA_CERT" | base64 -d | oc exec -n openshift-adp -i deploy/velero -c velero -- bash -c "cat > /tmp/your-cacert.txt" || echo "DPA BSL has no caCert"$ CA_CERT=$(oc -n openshift-adp get dataprotectionapplications.oadp.openshift.io <dpa-name> -o jsonpath='{.spec.backupLocations[0].velero.objectStorage.caCert}') $ [[ -n $CA_CERT ]] && echo "$CA_CERT" | base64 -d | oc exec -n openshift-adp -i deploy/velero -c velero -- bash -c "cat > /tmp/your-cacert.txt" || echo "DPA BSL has no caCert"Copy to Clipboard Copied! Toggle word wrap Toggle overflow velero describe backup <backup_name> --details --cacert /tmp/<your_cacert>.txt
$ velero describe backup <backup_name> --details --cacert /tmp/<your_cacert>.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要获取备份日志,请运行以下命令:
velero backup logs <backup_name> --cacert /tmp/<your_cacert.txt>
$ velero backup logs <backup_name> --cacert /tmp/<your_cacert.txt>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以使用这些日志来查看无法备份的资源的失败和警告。
-
如果 Velero pod 重启,
/tmp/your-cacert.txt文件会消失,您需要通过重新运行上一步中的命令来重新创建/tmp/your-cacert.txt文件。 您可以运行以下命令来检查
/tmp/your-cacert.txt文件是否存在(在存储它的文件位置中):oc exec -n openshift-adp -i deploy/velero -c velero -- bash -c "ls /tmp/your-cacert.txt"
$ oc exec -n openshift-adp -i deploy/velero -c velero -- bash -c "ls /tmp/your-cacert.txt" /tmp/your-cacert.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow
在以后的 OpenShift API for Data Protection (OADP) 发行版本中,我们计划将证书挂载到 Velero pod,以便不需要这一步。
5.11.1.4. 安装数据保护应用程序 复制链接链接已复制到粘贴板!
您可以通过创建 DataProtectionApplication API 的实例来安装数据保护应用程序(DPA)。
先决条件
- 您必须安装 OADP Operator。
- 您必须将对象存储配置为备份位置。
- 如果使用快照来备份 PV,云供应商必须支持原生快照 API 或 Container Storage Interface(CSI)快照。
-
如果备份和快照位置使用相同的凭证,您必须创建带有默认名称
cloud-credentials的Secret。 如果备份和快照位置使用不同的凭证,您必须创建两个
Secret:-
带有备份位置的自定义名称的
secret。您可以将此Secret添加到DataProtectionApplicationCR 中。 -
带有快照位置的另一个自定义名称的
Secret。您可以将此Secret添加到DataProtectionApplicationCR 中。
注意如果您不想在安装过程中指定备份或快照位置,您可以使用空
credentials-velero文件创建默认Secret。如果没有默认Secret,安装将失败。-
带有备份位置的自定义名称的
流程
- 点 Operators → Installed Operators 并选择 OADP Operator。
- 在 Provided APIs 下,点 DataProtectionApplication 框中的 Create 实例。
点 YAML View 并更新
DataProtectionApplication清单的参数:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- OADP 的默认命名空间是
openshift-adp。命名空间是一个变量,可配置。 - 2
- 需要与您的存储位置对应的对象存储插件。对于所有 S3 供应商,所需的插件都是
aws。对于 Azure 和 Google Cloud 对象存储,需要azure或gcp插件。 - 3
openshift插件是必需的。- 4
- 指定在超时发生前等待多个 Velero 资源的分钟,如 Velero CRD 可用、volumeSnapshot 删除和备份存储库可用。默认值为 10m。
- 5
- 将管理请求路由到服务器的管理代理。
- 6
- 如果要启用
nodeAgent并执行文件系统备份,则将此值设置为true。 - 7
- 输入
kopia或restic作为您的上传者。您不能在安装后更改选择。对于 Built-in DataMover,您必须使用 Kopia。nodeAgent部署守护进程集,这意味着nodeAgentpod 在每个工作节点上运行。您可以通过在BackupCR 中添加spec.defaultVolumesToFsBackup: true来配置文件系统备份。 - 8
- 指定 Kopia 或 Restic 可用的节点。默认情况下,Kopia 或 Restic 在所有节点上运行。
- 9
- 按照对象存储服务器文档的命名约定,指定地区。
- 10
- 指定 S3 端点的 URL。
- 11
- 指定您创建的
Secret对象的名称。如果没有指定这个值,则使用默认值cloud-credentials。如果您指定了自定义名称,则使用自定义名称进行备份位置。 - 12
- 指定存储桶作为备份存储位置。如果存储桶不是 Velero 备份的专用存储桶,您必须指定一个前缀。
- 13
- 如果存储桶用于多个目的,请为 Velero 备份指定一个前缀,如
velero。
- 点 Create。
验证
运行以下命令,查看 OpenShift API for Data Protection (OADP) 资源来验证安装:
oc get all -n openshift-adp
$ oc get all -n openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证
DataProtectionApplication(DPA) 是否已协调:oc get dpa dpa-sample -n openshift-adp -o jsonpath='{.status}'$ oc get dpa dpa-sample -n openshift-adp -o jsonpath='{.status}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
{"conditions":[{"lastTransitionTime":"2023-10-27T01:23:57Z","message":"Reconcile complete","reason":"Complete","status":"True","type":"Reconciled"}]}{"conditions":[{"lastTransitionTime":"2023-10-27T01:23:57Z","message":"Reconcile complete","reason":"Complete","status":"True","type":"Reconciled"}]}Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
验证
type被设置为Reconciled。 运行以下命令,验证备份存储位置并确认
PHASE为Available:oc get backupstoragelocations.velero.io -n openshift-adp
$ oc get backupstoragelocations.velero.io -n openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME PHASE LAST VALIDATED AGE DEFAULT dpa-sample-1 Available 1s 3d16h true
NAME PHASE LAST VALIDATED AGE DEFAULT dpa-sample-1 Available 1s 3d16h trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.11.1.5. 使用客户端 burst 和 QPS 设置配置 DPA 复制链接链接已复制到粘贴板!
burst 设置决定在应用限制前可以发送到 velero 服务器的请求数量。达到 burst 限制后,查询每秒 (QPS) 设置决定了每秒可以发送多少个额外请求。
您可以使用 burst 和 QPS 值配置数据保护应用程序 (DPA) 来设置 velero 服务器的 burst 和 QPS 值。您可以使用 DPA 的 dpa.configuration.velero.client-burst 和 dpa.configuration.velero.client-qps 字段来设置 burst 和 QPS 值。
先决条件
- 已安装 OADP Operator。
5.11.1.6. 配置节点代理和节点标签 复制链接链接已复制到粘贴板!
Data Protection Application (DPA) 使用 nodeSelector 字段来选择哪些节点可以运行节点代理。nodeSelector 字段是推荐的节点选择约束形式。
流程
通过添加自定义标签,在您选择的任何节点上运行节点代理:
oc label node/<node_name> node-role.kubernetes.io/nodeAgent=""
$ oc label node/<node_name> node-role.kubernetes.io/nodeAgent=""Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意任何指定的标签都需要与每个节点上的标签匹配。
在
DPA.spec.configuration.nodeAgent.podConfig.nodeSelector字段中使用相同的自定义标签,用于标记节点。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下示例是
nodeSelector的反模式,除非标签'node-role.kubernetes.io/infra: ""'和'node-role.kubernetes.io/worker: ""'都位于节点上,否则无法工作:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.11.1.7. 配置节点代理负载关联性 复制链接链接已复制到粘贴板!
您可以使用 DataProtectionApplication (DPA) 自定义资源 (CR) 的 spec.podConfig.nodeSelector 对象将节点代理 pod 调度到特定的节点上。
请参阅以下示例,您可以在其中将节点代理 pod 调度到带有标签 label.io/role: cpu-1 和 other-label.io/other-role: cpu-2 的节点上。
您可以使用 DPA spec 中的 nodeagent.loadAffinity 对象对节点代理 pod 调度添加更多限制。
先决条件
-
您必须以具有
cluster-admin权限的用户身份登录。 - 已安装 OADP Operator。
- 您已配置了 DPA CR。
流程
配置 DPA spec
nodegent.loadAffinity对象,如下例所示。在示例中,您可以确保节点代理 pod 仅调度到具有标签
label.io/role: cpu-1的节点上,标签label.io/hostname与node1或node2匹配。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.11.1.8. 节点代理负载均衡指南 复制链接链接已复制到粘贴板!
使用以下准则在 DataProtectionApplication (DPA) 自定义资源 (CR) 中配置节点代理 loadAffinity 对象。
-
使用
spec.nodeagent.podConfig.nodeSelector对象进行简单节点匹配。 -
对于更复杂的场景,使用没有
podConfig.nodeSelector对象的loadAffinity.nodeSelector对象。 -
您可以使用
podConfig.nodeSelector和loadAffinity.nodeSelector对象,但loadAffinity对象必须与podConfig对象相比相等或更严格。在这种情况下,podConfig.nodeSelector标签必须是loadAffinity.nodeSelector对象中使用的标签的子集。 -
如果您在 DPA 中配置了
podConfig.nodeSelector和loadAffinity.nodeSelector对象,则无法使用matchExpressions和matchLabels字段。 请参见以下示例在 DPA 中配置
podConfig.nodeSelector和loadAffinity.nodeSelector对象。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.11.1.9. 配置节点代理负载并发 复制链接链接已复制到粘贴板!
您可以控制在集群中的每个节点上可以同时运行的最大节点代理操作数量。
您可以使用 Data Protection Application (DPA) 的以下字段之一配置它:
-
globalConfig:定义跨所有节点中的节点代理的默认并发限制。 -
perNodeConfig: 根据nodeSelector标签指定特定节点的不同并发限制。这为其中某些节点可能具有不同的作用或角色的环境提供了灵活性。
先决条件
-
您必须以具有
cluster-admin权限的用户身份登录。
流程
如果要对特定节点使用负载并发性,请在这些节点中添加标签:
oc label node/<node_name> label.io/instance-type='large'
$ oc label node/<node_name> label.io/instance-type='large'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为您的 DPA 实例配置负载并发字段:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.11.1.10. 以非 root 和非特权用户配置节点代理 复制链接链接已复制到粘贴板!
要增强节点代理安全性,您可以使用 DataProtectionApplication (DPA) 自定义资源 (CR) 中的 spec.configuration.velero.disableFsBackup 设置将 OADP Operator 节点代理 daemonset 配置为以非 root 用户身份运行。
通过将 spec.configuration.velero.disableFsBackup 设置为 true,节点代理安全上下文将 root 文件系统设置为只读,并将 privileged 标志设置为 false。
将 spec.configuration.velero.disableFsBackup 设置为 true 可增强节点代理安全性,方法是删除特权容器并强制实施只读根文件系统。
但是,它还使用 Kopia 禁用文件系统备份 (FSB)。如果您的工作负载依赖 FSB 备份不支持原生快照的卷,您应该评估 disableFsBackup 配置是否适合您的用例。
先决条件
- 已安装 OADP Operator。
流程
在 DPA 中配置
disableFsBackup字段,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令,验证节点代理安全上下文是否被设置为以非 root 身份运行,并且 root 文件系统是
readOnly:oc get daemonset node-agent -o yaml
$ oc get daemonset node-agent -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例如下:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.11.1.11. 配置存储库维护 复制链接链接已复制到粘贴板!
OADP 存储库维护是一个后台作业,您可以独立于节点代理 pod 配置它。这意味着,您可以将存储库维护 pod 调度到节点代理正在运行或没有运行的节点上。
只有在使用 Kopia 作为备份存储库时,您只能在 DataProtectionApplication (DPA)自定义资源(CR)中使用存储库维护作业关联性配置。
您可以选择在全局级别上配置负载关联性,会影响所有存储库。或者,您可以为每个存储库配置负载关联性。您还可以使用全局和每个存储库配置的组合。
先决条件
-
您必须以具有
cluster-admin权限的用户身份登录。 - 已安装 OADP Operator。
- 您已配置了 DPA CR。
流程
使用以下方法之一在 DPA spec 中配置
loadAffinity对象:
5.11.1.12. 配置 Velero 负载关联性 复制链接链接已复制到粘贴板!
对于每个 OADP 部署,有一个 Velero pod,其主要目的是调度 Velero 工作负载。要调度 Velero pod,您可以在 DataProtectionApplication (DPA) 自定义资源 (CR) spec 中使用 velero.podConfig.nodeSelector 和 velero.loadAffinity 对象。
使用 podConfig.nodeSelector 对象将 Velero pod 分配给特定的节点。您还可以为 pod 级别关联性和反关联性配置 velero.loadAffinity 对象。
OpenShift 调度程序应用规则并执行 Velero pod 部署调度。
先决条件
-
您必须以具有
cluster-admin权限的用户身份登录。 - 已安装 OADP Operator。
- 您已配置了 DPA CR。
流程
在 DPA spec 中配置
velero.podConfig.nodeSelector和velero.loadAffinity对象,如下例所示:velero.podConfig.nodeSelector对象配置:Copy to Clipboard Copied! Toggle word wrap Toggle overflow velero.loadAffinity对象配置:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.11.1.13. 覆盖 DPA 中的 imagePullPolicy 设置 复制链接链接已复制到粘贴板!
在 OADP 1.4.0 或更早版本中,Operator 会将 Velero 和节点代理 pod 的 imagePullPolicy 字段设置为 Always。
在 OADP 1.4.1 或更高版本中,Operator 首先检查每个镜像是否有 sha256 或 sha512 摘要,并相应地设置 imagePullPolicy 字段:
-
如果镜像有摘要,Operator 会将
imagePullPolicy设置为IfNotPresent。 -
如果镜像没有摘要,Operator 会将
imagePullPolicy设置为Always。
您还可以使用 Data Protection Application (DPA)中的 spec.imagePullPolicy 字段覆盖 imagePullPolicy 字段。
先决条件
- 已安装 OADP Operator。
流程
在 DPA 中配置
spec.imagePullPolicy字段,如下例所示:数据保护应用程序示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定
imagePullPolicy的值。在本例中,imagePullPolicy字段设置为Never。
5.11.1.13.1. 在 DataProtectionApplication CR 中启用 CSI 复制链接链接已复制到粘贴板!
您可以在 DataProtectionApplication 自定义资源(CR)中启用 Container Storage Interface(CSI)来备份持久性卷,以使用 CSI 快照备份持久性卷。
先决条件
- 云供应商必须支持 CSI 快照。
流程
编辑
DataProtectionApplicationCR,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 添加
csi默认插件。
5.11.1.13.2. 在 DataProtectionApplication 中禁用节点代理 复制链接链接已复制到粘贴板!
如果您没有在备份中使用 Restic、Kopia 或 DataMover,您可以在 DataProtectionApplication 自定义资源(CR)中禁用 nodeAgent 字段。在禁用 nodeAgent 前,请确保 OADP Operator 闲置且没有运行任何备份。
流程
您可以设置一个作业来启用和禁用 DataProtectionApplication CR 中的 nodeAgent 字段。如需更多信息,请参阅"使用作业在 pod 中运行任务"。
5.12. 使用 ODF 配置 OADP 复制链接链接已复制到粘贴板!
您可以通过安装 OADP Operator 并配置备份位置和快照位置,在 OpenShift Data Foundation 中安装 OpenShift API for Data Protection (OADP)。然后,您要安装数据保护应用程序。
从 OADP 1.0.4 开始,所有 OADP 1.0.z 版本只能用作 Migration Toolkit for Containers Operator 的依赖项,且不能作为独立 Operator 提供。
您可以将 Multicloud 对象网关 或任何 AWS S3 兼容对象存储配置为备份位置。
您可以为备份位置创建一个 Secret CR,并安装数据保护应用程序。如需了解更多详细信息,请参阅安装 OADP Operator。
要在受限网络环境中安装 OADP Operator,您必须首先禁用默认的 OperatorHub 源并镜像 Operator 目录。详情请参阅在断开连接的环境中使用 Operator Lifecycle Manager。
5.12.1.1. 关于备份和恢复位置及其 secret 复制链接链接已复制到粘贴板!
您可以在 DataProtectionApplication 自定义资源(CR)中指定备份和快照位置及其 secret。
5.12.1.1.1. 备份位置 复制链接链接已复制到粘贴板!
您可以将以下 AWS S3 兼容对象存储解决方案之一指定为备份位置:
- 多云对象网关 (MCG)
- Red Hat Container Storage
- Ceph RADOS 网关;也称为 Ceph 对象网关
- Red Hat OpenShift Data Foundation
- MinIO
Velero 将 OpenShift Container Platform 资源、Kubernetes 对象和内部镜像备份为对象存储上的存档文件。
5.12.1.1.2. 快照位置 复制链接链接已复制到粘贴板!
如果使用云供应商的原生快照 API 备份持久性卷,您必须将云供应商指定为快照位置。
如果使用 Container Storage Interface(CSI)快照,则不需要指定快照位置,因为您要创建一个 VolumeSnapshotClass CR 来注册 CSI 驱动程序。
如果您使用文件系统备份 (FSB),则不需要指定快照位置,因为 FSB 在对象存储上备份文件系统。
5.12.1.1.3. Secrets 复制链接链接已复制到粘贴板!
如果备份和快照位置使用相同的凭证,或者不需要快照位置,请创建一个默认 Secret。
如果备份和恢复位置使用不同的凭证,您可以创建两个 secret 对象:
-
您在
DataProtectionApplicationCR 中指定的备份位置的自定义Secret。 -
快照位置的默认
Secret,在DataProtectionApplicationCR 中没有引用。
数据保护应用程序需要一个默认的 Secret。否则,安装将失败。
如果您不想在安装过程中指定备份或快照位置,您可以使用空 credentials-velero 文件创建默认 Secret。
5.12.1.1.4. 创建默认 Secret 复制链接链接已复制到粘贴板!
如果您的备份和快照位置使用相同的凭证,或者不需要快照位置,则创建一个默认 Secret。
Secret 的默认名称为 cloud-credentials,除非备份存储供应商有一个默认插件,如 aws、azure 或 gcp。在这种情况下,默认名称是在特定于供应商的 OADP 安装过程中指定。
DataProtectionApplication 自定义资源(CR)需要一个默认的 Secret。否则,安装将失败。如果没有指定备份位置 Secret 的名称,则会使用默认名称。
如果您不想在安装过程中使用备份位置凭证,您可以使用空 credentials-velero 文件创建带有默认名称的 Secret。
先决条件
- 您的对象存储和云存储(若有)必须使用相同的凭证。
- 您必须为 Velero 配置对象存储。
流程
为您的云供应商为备份存储位置创建一个
credentials-velero文件。请参见以下示例:
[default] aws_access_key_id=<AWS_ACCESS_KEY_ID> aws_secret_access_key=<AWS_SECRET_ACCESS_KEY>
[default] aws_access_key_id=<AWS_ACCESS_KEY_ID> aws_secret_access_key=<AWS_SECRET_ACCESS_KEY>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用默认名称创建
Secret自定义资源 (CR):oc create secret generic cloud-credentials -n openshift-adp --from-file cloud=credentials-velero
$ oc create secret generic cloud-credentials -n openshift-adp --from-file cloud=credentials-veleroCopy to Clipboard Copied! Toggle word wrap Toggle overflow
在安装 Data Protection Application 时,secret 会在 DataProtectionApplication CR 的 spec.backupLocations.credential 块中引用。
5.12.1.1.5. 为不同凭证创建 secret 复制链接链接已复制到粘贴板!
如果您的备份和恢复位置使用不同的凭证,您必须创建两个 Secret 对象:
-
具有自定义名称的备份位置
Secret。自定义名称在DataProtectionApplication自定义资源(CR)的spec.backupLocations块中指定。 -
带有默认名称
cloud-credentials的快照位置Secret。此Secret不在DataProtectionApplicationCR 中指定。
流程
-
为您的云供应商为快照位置创建一个
credentials-velero文件。 使用默认名称为快照位置创建
Secret:oc create secret generic cloud-credentials -n openshift-adp --from-file cloud=credentials-velero
$ oc create secret generic cloud-credentials -n openshift-adp --from-file cloud=credentials-veleroCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
为您的对象存储创建一个用于备份位置的
credentials-velero文件。 使用自定义名称为备份位置创建
Secret:oc create secret generic <custom_secret> -n openshift-adp --from-file cloud=credentials-velero
$ oc create secret generic <custom_secret> -n openshift-adp --from-file cloud=credentials-veleroCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将带有自定义名称的
Secret添加到DataProtectionApplicationCR 中,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 具有自定义名称的备份位置
Secret。
5.12.1.2. 配置数据保护应用程序 复制链接链接已复制到粘贴板!
您可以通过设置 Velero 资源分配或启用自签名 CA 证书来配置数据保护应用程序。
5.12.1.2.1. 设置 Velero CPU 和内存分配 复制链接链接已复制到粘贴板!
您可以通过编辑 DataProtectionApplication 自定义资源(CR)清单来为 Velero pod 设置 CPU 和内存分配。
先决条件
- 您必须安装了 OpenShift API for Data Protection(OADP)Operator。
流程
编辑
DataProtectionApplicationCR 清单的spec.configuration.velero.podConfig.ResourceAllocations块中的值,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意Kopia 是 OADP 1.3 及之后的版本中的一个选项。您可以使用 Kopia 进行文件系统备份,Kopia 是 Data Mover 的唯一选择,并带有内置数据 Mover。
和 Restic 相比,Kopia 需要更多资源,您可能需要相应地调整 CPU 和内存要求。
使用 nodeSelector 字段选择哪些节点可以运行节点代理。nodeSelector 字段是节点选择限制的最简单的形式。任何指定的标签都需要与每个节点上的标签匹配。
如需了解更多详细信息,请参阅配置节点代理和节点标签。
5.12.1.2.1.1. 根据收集的数据调整 Ceph CPU 和内存要求 复制链接链接已复制到粘贴板!
以下建议基于在扩展和性能实验室中观察到的性能。更改与 Red Hat OpenShift Data Foundation (ODF) 相关。如果使用 ODF,请参阅相关的调优指南来了解官方的建议。
5.12.1.2.1.1.1. 配置的 CPU 和内存要求 复制链接链接已复制到粘贴板!
备份和恢复操作需要大量 CephFS PersistentVolume (PV)。为了避免 Ceph MDS pod 重启并带有 out-of-memory (OOM) 错误,建议以下配置:
| 配置类型 | Request(请求) | 最大限制 |
|---|---|---|
| CPU | 请求改为 3 | 最大限制为 3 |
| 内存 | 请求改为 8 Gi | 最大限制为 128 Gi |
5.12.1.2.2. 启用自签名 CA 证书 复制链接链接已复制到粘贴板!
您必须通过编辑 DataProtectionApplication 自定义资源(CR)清单来为对象存储启用自签名 CA 证书,以防止由未知颁发机构签名的证书。
先决条件
- 您必须安装了 OpenShift API for Data Protection(OADP)Operator。
流程
编辑
DataProtectionApplicationCR 清单的spec.backupLocations.velero.objectStorage.caCert参数和spec.backupLocations.velero.config参数:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.12.1.2.2.1. 使用带有用于 velero 部署的 velero 命令的 CA 证书 复制链接链接已复制到粘贴板!
如果您望使用 Velero CLI 而又不想在您的系统中安装它,可以为它创建一个别名。
先决条件
-
您必须使用具有
cluster-admin角色的用户登录到 OpenShift Container Platform 集群。 已安装 OpenShift CLI (
oc)。要使用别名的 Velero 命令,请运行以下命令:
alias velero='oc -n openshift-adp exec deployment/velero -c velero -it -- ./velero'
$ alias velero='oc -n openshift-adp exec deployment/velero -c velero -it -- ./velero'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令检查别名是否正常工作:
Example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要使用这个命令来使用 CA 证书,您可以运行以下命令在 Velero 部署中添加证书:
CA_CERT=$(oc -n openshift-adp get dataprotectionapplications.oadp.openshift.io <dpa-name> -o jsonpath='{.spec.backupLocations[0].velero.objectStorage.caCert}') [[ -n $CA_CERT ]] && echo "$CA_CERT" | base64 -d | oc exec -n openshift-adp -i deploy/velero -c velero -- bash -c "cat > /tmp/your-cacert.txt" || echo "DPA BSL has no caCert"$ CA_CERT=$(oc -n openshift-adp get dataprotectionapplications.oadp.openshift.io <dpa-name> -o jsonpath='{.spec.backupLocations[0].velero.objectStorage.caCert}') $ [[ -n $CA_CERT ]] && echo "$CA_CERT" | base64 -d | oc exec -n openshift-adp -i deploy/velero -c velero -- bash -c "cat > /tmp/your-cacert.txt" || echo "DPA BSL has no caCert"Copy to Clipboard Copied! Toggle word wrap Toggle overflow velero describe backup <backup_name> --details --cacert /tmp/<your_cacert>.txt
$ velero describe backup <backup_name> --details --cacert /tmp/<your_cacert>.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要获取备份日志,请运行以下命令:
velero backup logs <backup_name> --cacert /tmp/<your_cacert.txt>
$ velero backup logs <backup_name> --cacert /tmp/<your_cacert.txt>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以使用这些日志来查看无法备份的资源的失败和警告。
-
如果 Velero pod 重启,
/tmp/your-cacert.txt文件会消失,您需要通过重新运行上一步中的命令来重新创建/tmp/your-cacert.txt文件。 您可以运行以下命令来检查
/tmp/your-cacert.txt文件是否存在(在存储它的文件位置中):oc exec -n openshift-adp -i deploy/velero -c velero -- bash -c "ls /tmp/your-cacert.txt"
$ oc exec -n openshift-adp -i deploy/velero -c velero -- bash -c "ls /tmp/your-cacert.txt" /tmp/your-cacert.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow
在以后的 OpenShift API for Data Protection (OADP) 发行版本中,我们计划将证书挂载到 Velero pod,以便不需要这一步。
5.12.1.3. 安装数据保护应用程序 复制链接链接已复制到粘贴板!
您可以通过创建 DataProtectionApplication API 的实例来安装数据保护应用程序(DPA)。
先决条件
- 您必须安装 OADP Operator。
- 您必须将对象存储配置为备份位置。
- 如果使用快照来备份 PV,云供应商必须支持原生快照 API 或 Container Storage Interface(CSI)快照。
-
如果备份和快照位置使用相同的凭证,您必须创建带有默认名称
cloud-credentials的Secret。 如果备份和快照位置使用不同的凭证,您必须创建两个
Secret:-
带有备份位置的自定义名称的
secret。您可以将此Secret添加到DataProtectionApplicationCR 中。 -
带有快照位置的另一个自定义名称的
Secret。您可以将此Secret添加到DataProtectionApplicationCR 中。
注意如果您不想在安装过程中指定备份或快照位置,您可以使用空
credentials-velero文件创建默认Secret。如果没有默认Secret,安装将失败。-
带有备份位置的自定义名称的
流程
- 点 Operators → Installed Operators 并选择 OADP Operator。
- 在 Provided APIs 下,点 DataProtectionApplication 框中的 Create 实例。
点 YAML View 并更新
DataProtectionApplication清单的参数:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- OADP 的默认命名空间是
openshift-adp。命名空间是一个变量,可配置。 - 2
- 需要与您的存储位置对应的对象存储插件。对于所有 S3 供应商,所需的插件都是
aws。对于 Azure 和 Google Cloud 对象存储,需要azure或gcp插件。 - 3
- 可选:
kubevirt插件用于 OpenShift Virtualization。 - 4
- 5
openshift插件是必需的。- 6
- 指定在超时发生前等待多个 Velero 资源的分钟,如 Velero CRD 可用、volumeSnapshot 删除和备份存储库可用。默认值为 10m。
- 7
- 将管理请求路由到服务器的管理代理。
- 8
- 如果要启用
nodeAgent并执行文件系统备份,则将此值设置为true。 - 9
- 输入
kopia或restic作为您的上传者。您不能在安装后更改选择。对于 Built-in DataMover,您必须使用 Kopia。nodeAgent部署守护进程集,这意味着nodeAgentpod 在每个工作节点上运行。您可以通过在BackupCR 中添加spec.defaultVolumesToFsBackup: true来配置文件系统备份。 - 10
- 指定 Kopia 或 Restic 可用的节点。默认情况下,Kopia 或 Restic 在所有节点上运行。
- 11
- 指定备份供应商。
- 12
- 如果备份供应商使用一个默认插件,为
Secret指定正确的默认名称,如cloud-credentials-gcp。如果指定了一个自定义名称,则使用自定义名称用于备份位置。如果没有指定Secret名称,则使用默认名称。 - 13
- 指定存储桶作为备份存储位置。如果存储桶不是 Velero 备份的专用存储桶,您必须指定一个前缀。
- 14
- 如果存储桶用于多个目的,请为 Velero 备份指定一个前缀,如
velero。
- 点 Create。
验证
运行以下命令,查看 OpenShift API for Data Protection (OADP) 资源来验证安装:
oc get all -n openshift-adp
$ oc get all -n openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证
DataProtectionApplication(DPA) 是否已协调:oc get dpa dpa-sample -n openshift-adp -o jsonpath='{.status}'$ oc get dpa dpa-sample -n openshift-adp -o jsonpath='{.status}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
{"conditions":[{"lastTransitionTime":"2023-10-27T01:23:57Z","message":"Reconcile complete","reason":"Complete","status":"True","type":"Reconciled"}]}{"conditions":[{"lastTransitionTime":"2023-10-27T01:23:57Z","message":"Reconcile complete","reason":"Complete","status":"True","type":"Reconciled"}]}Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
验证
type被设置为Reconciled。 运行以下命令,验证备份存储位置并确认
PHASE为Available:oc get backupstoragelocations.velero.io -n openshift-adp
$ oc get backupstoragelocations.velero.io -n openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME PHASE LAST VALIDATED AGE DEFAULT dpa-sample-1 Available 1s 3d16h true
NAME PHASE LAST VALIDATED AGE DEFAULT dpa-sample-1 Available 1s 3d16h trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.12.1.4. 使用客户端 burst 和 QPS 设置配置 DPA 复制链接链接已复制到粘贴板!
burst 设置决定在应用限制前可以发送到 velero 服务器的请求数量。达到 burst 限制后,查询每秒 (QPS) 设置决定了每秒可以发送多少个额外请求。
您可以使用 burst 和 QPS 值配置数据保护应用程序 (DPA) 来设置 velero 服务器的 burst 和 QPS 值。您可以使用 DPA 的 dpa.configuration.velero.client-burst 和 dpa.configuration.velero.client-qps 字段来设置 burst 和 QPS 值。
先决条件
- 已安装 OADP Operator。
5.12.1.5. 配置节点代理和节点标签 复制链接链接已复制到粘贴板!
Data Protection Application (DPA) 使用 nodeSelector 字段来选择哪些节点可以运行节点代理。nodeSelector 字段是推荐的节点选择约束形式。
流程
通过添加自定义标签,在您选择的任何节点上运行节点代理:
oc label node/<node_name> node-role.kubernetes.io/nodeAgent=""
$ oc label node/<node_name> node-role.kubernetes.io/nodeAgent=""Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意任何指定的标签都需要与每个节点上的标签匹配。
在
DPA.spec.configuration.nodeAgent.podConfig.nodeSelector字段中使用相同的自定义标签,用于标记节点。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下示例是
nodeSelector的反模式,除非标签'node-role.kubernetes.io/infra: ""'和'node-role.kubernetes.io/worker: ""'都位于节点上,否则无法工作:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.12.1.6. 配置节点代理负载关联性 复制链接链接已复制到粘贴板!
您可以使用 DataProtectionApplication (DPA) 自定义资源 (CR) 的 spec.podConfig.nodeSelector 对象将节点代理 pod 调度到特定的节点上。
请参阅以下示例,您可以在其中将节点代理 pod 调度到带有标签 label.io/role: cpu-1 和 other-label.io/other-role: cpu-2 的节点上。
您可以使用 DPA spec 中的 nodeagent.loadAffinity 对象对节点代理 pod 调度添加更多限制。
先决条件
-
您必须以具有
cluster-admin权限的用户身份登录。 - 已安装 OADP Operator。
- 您已配置了 DPA CR。
流程
配置 DPA spec
nodegent.loadAffinity对象,如下例所示。在示例中,您可以确保节点代理 pod 仅调度到具有标签
label.io/role: cpu-1的节点上,标签label.io/hostname与node1或node2匹配。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.12.1.7. 节点代理负载均衡指南 复制链接链接已复制到粘贴板!
使用以下准则在 DataProtectionApplication (DPA) 自定义资源 (CR) 中配置节点代理 loadAffinity 对象。
-
使用
spec.nodeagent.podConfig.nodeSelector对象进行简单节点匹配。 -
对于更复杂的场景,使用没有
podConfig.nodeSelector对象的loadAffinity.nodeSelector对象。 -
您可以使用
podConfig.nodeSelector和loadAffinity.nodeSelector对象,但loadAffinity对象必须与podConfig对象相比相等或更严格。在这种情况下,podConfig.nodeSelector标签必须是loadAffinity.nodeSelector对象中使用的标签的子集。 -
如果您在 DPA 中配置了
podConfig.nodeSelector和loadAffinity.nodeSelector对象,则无法使用matchExpressions和matchLabels字段。 请参见以下示例在 DPA 中配置
podConfig.nodeSelector和loadAffinity.nodeSelector对象。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.12.1.8. 配置节点代理负载并发 复制链接链接已复制到粘贴板!
您可以控制在集群中的每个节点上可以同时运行的最大节点代理操作数量。
您可以使用 Data Protection Application (DPA) 的以下字段之一配置它:
-
globalConfig:定义跨所有节点中的节点代理的默认并发限制。 -
perNodeConfig: 根据nodeSelector标签指定特定节点的不同并发限制。这为其中某些节点可能具有不同的作用或角色的环境提供了灵活性。
先决条件
-
您必须以具有
cluster-admin权限的用户身份登录。
流程
如果要对特定节点使用负载并发性,请在这些节点中添加标签:
oc label node/<node_name> label.io/instance-type='large'
$ oc label node/<node_name> label.io/instance-type='large'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为您的 DPA 实例配置负载并发字段:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.12.1.9. 以非 root 和非特权用户配置节点代理 复制链接链接已复制到粘贴板!
要增强节点代理安全性,您可以使用 DataProtectionApplication (DPA) 自定义资源 (CR) 中的 spec.configuration.velero.disableFsBackup 设置将 OADP Operator 节点代理 daemonset 配置为以非 root 用户身份运行。
通过将 spec.configuration.velero.disableFsBackup 设置为 true,节点代理安全上下文将 root 文件系统设置为只读,并将 privileged 标志设置为 false。
将 spec.configuration.velero.disableFsBackup 设置为 true 可增强节点代理安全性,方法是删除特权容器并强制实施只读根文件系统。
但是,它还使用 Kopia 禁用文件系统备份 (FSB)。如果您的工作负载依赖 FSB 备份不支持原生快照的卷,您应该评估 disableFsBackup 配置是否适合您的用例。
先决条件
- 已安装 OADP Operator。
流程
在 DPA 中配置
disableFsBackup字段,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令,验证节点代理安全上下文是否被设置为以非 root 身份运行,并且 root 文件系统是
readOnly:oc get daemonset node-agent -o yaml
$ oc get daemonset node-agent -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例如下:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.12.1.10. 配置存储库维护 复制链接链接已复制到粘贴板!
OADP 存储库维护是一个后台作业,您可以独立于节点代理 pod 配置它。这意味着,您可以将存储库维护 pod 调度到节点代理正在运行或没有运行的节点上。
只有在使用 Kopia 作为备份存储库时,您只能在 DataProtectionApplication (DPA)自定义资源(CR)中使用存储库维护作业关联性配置。
您可以选择在全局级别上配置负载关联性,会影响所有存储库。或者,您可以为每个存储库配置负载关联性。您还可以使用全局和每个存储库配置的组合。
先决条件
-
您必须以具有
cluster-admin权限的用户身份登录。 - 已安装 OADP Operator。
- 您已配置了 DPA CR。
流程
使用以下方法之一在 DPA spec 中配置
loadAffinity对象:
5.12.1.11. 配置 Velero 负载关联性 复制链接链接已复制到粘贴板!
对于每个 OADP 部署,有一个 Velero pod,其主要目的是调度 Velero 工作负载。要调度 Velero pod,您可以在 DataProtectionApplication (DPA) 自定义资源 (CR) spec 中使用 velero.podConfig.nodeSelector 和 velero.loadAffinity 对象。
使用 podConfig.nodeSelector 对象将 Velero pod 分配给特定的节点。您还可以为 pod 级别关联性和反关联性配置 velero.loadAffinity 对象。
OpenShift 调度程序应用规则并执行 Velero pod 部署调度。
先决条件
-
您必须以具有
cluster-admin权限的用户身份登录。 - 已安装 OADP Operator。
- 您已配置了 DPA CR。
流程
在 DPA spec 中配置
velero.podConfig.nodeSelector和velero.loadAffinity对象,如下例所示:velero.podConfig.nodeSelector对象配置:Copy to Clipboard Copied! Toggle word wrap Toggle overflow velero.loadAffinity对象配置:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.12.1.12. 覆盖 DPA 中的 imagePullPolicy 设置 复制链接链接已复制到粘贴板!
在 OADP 1.4.0 或更早版本中,Operator 会将 Velero 和节点代理 pod 的 imagePullPolicy 字段设置为 Always。
在 OADP 1.4.1 或更高版本中,Operator 首先检查每个镜像是否有 sha256 或 sha512 摘要,并相应地设置 imagePullPolicy 字段:
-
如果镜像有摘要,Operator 会将
imagePullPolicy设置为IfNotPresent。 -
如果镜像没有摘要,Operator 会将
imagePullPolicy设置为Always。
您还可以使用 Data Protection Application (DPA)中的 spec.imagePullPolicy 字段覆盖 imagePullPolicy 字段。
先决条件
- 已安装 OADP Operator。
流程
在 DPA 中配置
spec.imagePullPolicy字段,如下例所示:数据保护应用程序示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定
imagePullPolicy的值。在本例中,imagePullPolicy字段设置为Never。
如果您在 OpenShift Data Foundation 上将集群存储用于 Multicloud 对象网关 (MCG) 存储桶 backupStorageLocation,请使用 OpenShift Web 控制台创建一个对象 Bucket 声明 (OBC)。
未能配置对象 Bucket 声明 (OBC) 可能会导致备份不可用。
除非另有指定,"NooBaa" 指的是提供轻量级对象存储的开源项目,而 "Multicloud Object Gateway (MCG) " 是指 NooBaa 的红帽发行版本。
如需有关 MCG 的更多信息,请参阅使用应用程序访问多云对象网关。
流程
- 使用 OpenShift Web 控制台创建对象 Bucket 声明 (OBC),如使用 OpenShift Web 控制台创建对象 Bucket 声明中所述。
5.12.1.12.2. 在 DataProtectionApplication CR 中启用 CSI 复制链接链接已复制到粘贴板!
您可以在 DataProtectionApplication 自定义资源(CR)中启用 Container Storage Interface(CSI)来备份持久性卷,以使用 CSI 快照备份持久性卷。
先决条件
- 云供应商必须支持 CSI 快照。
流程
编辑
DataProtectionApplicationCR,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 添加
csi默认插件。
5.12.1.12.3. 在 DataProtectionApplication 中禁用节点代理 复制链接链接已复制到粘贴板!
如果您没有在备份中使用 Restic、Kopia 或 DataMover,您可以在 DataProtectionApplication 自定义资源(CR)中禁用 nodeAgent 字段。在禁用 nodeAgent 前,请确保 OADP Operator 闲置且没有运行任何备份。
流程
您可以设置一个作业来启用和禁用 DataProtectionApplication CR 中的 nodeAgent 字段。如需更多信息,请参阅"使用作业在 pod 中运行任务"。
5.13. 使用 OpenShift Virtualization 配置 OADP 复制链接链接已复制到粘贴板!
5.13.1. 为 OpenShift Virtualization 的数据保护配置 OpenShift API 复制链接链接已复制到粘贴板!
您可以通过安装 OADP Operator 并配置备份位置,使用 OpenShift Virtualization 安装 OpenShift API for Data Protection (OADP)。然后,您可以安装数据保护应用程序。
使用 OpenShift API for Data Protection 来备份和恢复虚拟机。
OpenShift API for Data Protection with OpenShift Virtualization 支持以下备份和恢复存储选项:
- 容器存储接口 (CSI) 备份
- 使用 DataMover 进行容器存储接口 (CSI) 备份
排除以下存储选项:
- 文件系统备份和恢复
- 卷快照备份和恢复
如需更多信息,请参阅使用文件系统备份备份应用程序: Kopia 或 Restic。
要在受限网络环境中安装 OADP Operator,您必须首先禁用默认的 OperatorHub 源并镜像 Operator 目录。详情请参阅在断开连接的环境中使用 Operator Lifecycle Manager。
5.13.1.1. 使用 OpenShift Virtualization 安装和配置 OADP 复制链接链接已复制到粘贴板!
作为集群管理员,您可以通过安装 OADP Operator 来安装 OADP。
OADP Operator 的最新版本安装 Velero 1.16。
先决条件
-
使用具有
cluster-admin角色的用户访问集群。
流程
- 根据您的存储供应商说明安装 OADP Operator。
-
使用
kubevirt和openshiftOADP 插件安装数据保护应用程序(DPA)。 通过创建
Backup自定义资源(CR) 来备份虚拟机。警告红帽支持仅限于以下选项:
- CSI 备份
- 使用 DataMover 的 CSI 备份。
您可以通过创建一个 Restore CR来恢复 Backup CR。
5.13.1.2. 安装数据保护应用程序 复制链接链接已复制到粘贴板!
您可以通过创建 DataProtectionApplication API 的实例来安装数据保护应用程序(DPA)。
先决条件
- 您必须安装 OADP Operator。
- 您必须将对象存储配置为备份位置。
- 如果使用快照来备份 PV,云供应商必须支持原生快照 API 或 Container Storage Interface(CSI)快照。
如果备份和快照位置使用相同的凭证,您必须创建带有默认名称
cloud-credentials的Secret。注意如果您不想在安装过程中指定备份或快照位置,您可以使用空
credentials-velero文件创建默认Secret。如果没有默认Secret,安装将失败。
流程
- 点 Operators → Installed Operators 并选择 OADP Operator。
- 在 Provided APIs 下,点 DataProtectionApplication 框中的 Create 实例。
点 YAML View 并更新
DataProtectionApplication清单的参数:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- OADP 的默认命名空间是
openshift-adp。命名空间是一个变量,可配置。 - 2
- OpenShift Virtualization 需要
kubevirt插件。 - 3
- 为备份供应商指定插件,如
gcp(如果存在)。 - 4
- 5
openshift插件是必需的。- 6
- 指定在超时发生前等待多个 Velero 资源的分钟,如 Velero CRD 可用、volumeSnapshot 删除和备份存储库可用。默认值为 10m。
- 7
- 将管理请求路由到服务器的管理代理。
- 8
- 如果要启用
nodeAgent并执行文件系统备份,则将此值设置为true。 - 9
- 输入
kopia作为您的上传程序,以使用 Built-in DataMover。nodeAgent部署守护进程集,这意味着nodeAgentpod 在每个工作节点上运行。您可以通过在BackupCR 中添加spec.defaultVolumesToFsBackup: true来配置文件系统备份。 - 10
- 指定 Kopia 可用的节点。默认情况下,Kopia 在所有节点上运行。
- 11
- 指定备份供应商。
- 12
- 如果备份供应商使用一个默认插件,为
Secret指定正确的默认名称,如cloud-credentials-gcp。如果指定了一个自定义名称,则使用自定义名称用于备份位置。如果没有指定Secret名称,则使用默认名称。 - 13
- 指定存储桶作为备份存储位置。如果存储桶不是 Velero 备份的专用存储桶,您必须指定一个前缀。
- 14
- 如果存储桶用于多个目的,请为 Velero 备份指定一个前缀,如
velero。
- 点 Create。
验证
运行以下命令,查看 OpenShift API for Data Protection (OADP) 资源来验证安装:
oc get all -n openshift-adp
$ oc get all -n openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证
DataProtectionApplication(DPA) 是否已协调:oc get dpa dpa-sample -n openshift-adp -o jsonpath='{.status}'$ oc get dpa dpa-sample -n openshift-adp -o jsonpath='{.status}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
{"conditions":[{"lastTransitionTime":"2023-10-27T01:23:57Z","message":"Reconcile complete","reason":"Complete","status":"True","type":"Reconciled"}]}{"conditions":[{"lastTransitionTime":"2023-10-27T01:23:57Z","message":"Reconcile complete","reason":"Complete","status":"True","type":"Reconciled"}]}Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
验证
type被设置为Reconciled。 运行以下命令,验证备份存储位置并确认
PHASE为Available:oc get backupstoragelocations.velero.io -n openshift-adp
$ oc get backupstoragelocations.velero.io -n openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME PHASE LAST VALIDATED AGE DEFAULT dpa-sample-1 Available 1s 3d16h true
NAME PHASE LAST VALIDATED AGE DEFAULT dpa-sample-1 Available 1s 3d16h trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
如果您在虚拟机重启后马上运行 Microsoft Windows 虚拟机(VM)备份,备份可能会失败,并显示 PartiallyFailed 错误。这是因为,在虚拟机启动后,Microsoft Windows Volume Shadow Copy Service (VSS)和客户机代理(GA)服务未就绪。VSS 和 GA 服务未就绪会导致备份失败。在这种情况下,在虚拟机启动后几分钟后再重试备份。
5.13.1.3. 备份单个虚拟机 复制链接链接已复制到粘贴板!
如果您的命名空间具有多个虚拟机(VM),并且只想备份其中之一,您可以使用标签选择器过滤备份中需要包含的虚拟机。您可以使用 app: vmname 标签过滤虚拟机。
先决条件
- 已安装 OADP Operator。
- 在命名空间中运行了多个虚拟机。
-
您已在
DataProtectionApplication(DPA) 自定义资源(CR)中添加了kubevirt插件。 -
您已在
DataProtectionApplicationCR 和BackupStorageLocation中配置了BackupStorageLocationCR。
流程
配置
BackupCR,如下例所示:BackupCR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要创建
BackupCR,请运行以下命令:oc apply -f <backup_cr_file_name>
$ oc apply -f <backup_cr_file_name>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定
BackupCR 文件的名称。
5.13.1.4. 恢复单个虚拟机 复制链接链接已复制到粘贴板!
使用 Backup 自定义资源(CR)中的标签选择器备份单个虚拟机(VM)后,您可以创建一个 Restore CR 并将其指向备份。此恢复操作会恢复单个虚拟机。
先决条件
- 已安装 OADP Operator。
- 已使用标签选择器备份单个虚拟机。
流程
配置
RestoreCR,如下例所示:RestoreCR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定单个虚拟机的备份名称。
要恢复单个虚拟机,请运行以下命令:
oc apply -f <restore_cr_file_name>
$ oc apply -f <restore_cr_file_name>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定
RestoreCR 文件的名称。
注意在恢复一个虚拟机的备份时,您可能会注意到为恢复分配的 Ceph 存储容量高于预期。只有在
kubevirt恢复过程中,且虚拟机的卷类型是block时才会出现这个问题。使用
rbd sparsify工具在目标卷上回收空间。如需了解更多详细信息,请参阅目标卷上的回收空间。
5.13.1.5. 从多个虚拟机的备份中恢复单个虚拟机 复制链接链接已复制到粘贴板!
如果您有包含多个虚拟机(VM)的备份,且只想恢复一个虚拟机,您可以使用 Restore CR 中的 LabelSelectors 部分来选择要恢复的虚拟机。为确保附加到虚拟机的持久性卷声明(PVC)已被正确恢复,恢复的虚拟机不会处于 Provisioning 状态,请使用 app: <vm_name> 和 kubevirt.io/created-by 标签。要匹配 kubevirt.io/created-by 标签,请使用虚拟机的 DataVolume 的 UID。
先决条件
- 已安装 OADP Operator。
- 您已标记了需要备份的虚拟机。
- 您有多个虚拟机的备份。
流程
在备份多个虚拟机前,运行以下命令确保虚拟机已标记:
oc label vm <vm_name> app=<vm_name> -n openshift-adp
$ oc label vm <vm_name> app=<vm_name> -n openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
RestoreCR 中配置标签选择器,如下例所示:RestoreCR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要恢复虚拟机,请运行以下命令:
oc apply -f <restore_cr_file_name>
$ oc apply -f <restore_cr_file_name>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定
RestoreCR 文件的名称。
5.13.1.6. 使用客户端 burst 和 QPS 设置配置 DPA 复制链接链接已复制到粘贴板!
burst 设置决定在应用限制前可以发送到 velero 服务器的请求数量。达到 burst 限制后,查询每秒 (QPS) 设置决定了每秒可以发送多少个额外请求。
您可以使用 burst 和 QPS 值配置数据保护应用程序 (DPA) 来设置 velero 服务器的 burst 和 QPS 值。您可以使用 DPA 的 dpa.configuration.velero.client-burst 和 dpa.configuration.velero.client-qps 字段来设置 burst 和 QPS 值。
先决条件
- 已安装 OADP Operator。
5.13.1.7. 以非 root 和非特权用户配置节点代理 复制链接链接已复制到粘贴板!
要增强节点代理安全性,您可以使用 DataProtectionApplication (DPA) 自定义资源 (CR) 中的 spec.configuration.velero.disableFsBackup 设置将 OADP Operator 节点代理 daemonset 配置为以非 root 用户身份运行。
通过将 spec.configuration.velero.disableFsBackup 设置为 true,节点代理安全上下文将 root 文件系统设置为只读,并将 privileged 标志设置为 false。
将 spec.configuration.velero.disableFsBackup 设置为 true 可增强节点代理安全性,方法是删除特权容器并强制实施只读根文件系统。
但是,它还使用 Kopia 禁用文件系统备份 (FSB)。如果您的工作负载依赖 FSB 备份不支持原生快照的卷,您应该评估 disableFsBackup 配置是否适合您的用例。
先决条件
- 已安装 OADP Operator。
流程
在 DPA 中配置
disableFsBackup字段,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令,验证节点代理安全上下文是否被设置为以非 root 身份运行,并且 root 文件系统是
readOnly:oc get daemonset node-agent -o yaml
$ oc get daemonset node-agent -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例如下:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.13.1.8. 配置节点代理和节点标签 复制链接链接已复制到粘贴板!
Data Protection Application (DPA) 使用 nodeSelector 字段来选择哪些节点可以运行节点代理。nodeSelector 字段是推荐的节点选择约束形式。
流程
通过添加自定义标签,在您选择的任何节点上运行节点代理:
oc label node/<node_name> node-role.kubernetes.io/nodeAgent=""
$ oc label node/<node_name> node-role.kubernetes.io/nodeAgent=""Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意任何指定的标签都需要与每个节点上的标签匹配。
在
DPA.spec.configuration.nodeAgent.podConfig.nodeSelector字段中使用相同的自定义标签,用于标记节点。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下示例是
nodeSelector的反模式,除非标签'node-role.kubernetes.io/infra: ""'和'node-role.kubernetes.io/worker: ""'都位于节点上,否则无法工作:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.13.1.9. 配置节点代理负载关联性 复制链接链接已复制到粘贴板!
您可以使用 DataProtectionApplication (DPA) 自定义资源 (CR) 的 spec.podConfig.nodeSelector 对象将节点代理 pod 调度到特定的节点上。
请参阅以下示例,您可以在其中将节点代理 pod 调度到带有标签 label.io/role: cpu-1 和 other-label.io/other-role: cpu-2 的节点上。
您可以使用 DPA spec 中的 nodeagent.loadAffinity 对象对节点代理 pod 调度添加更多限制。
先决条件
-
您必须以具有
cluster-admin权限的用户身份登录。 - 已安装 OADP Operator。
- 您已配置了 DPA CR。
流程
配置 DPA spec
nodegent.loadAffinity对象,如下例所示。在示例中,您可以确保节点代理 pod 仅调度到具有标签
label.io/role: cpu-1的节点上,标签label.io/hostname与node1或node2匹配。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.13.1.10. 节点代理负载均衡指南 复制链接链接已复制到粘贴板!
使用以下准则在 DataProtectionApplication (DPA) 自定义资源 (CR) 中配置节点代理 loadAffinity 对象。
-
使用
spec.nodeagent.podConfig.nodeSelector对象进行简单节点匹配。 -
对于更复杂的场景,使用没有
podConfig.nodeSelector对象的loadAffinity.nodeSelector对象。 -
您可以使用
podConfig.nodeSelector和loadAffinity.nodeSelector对象,但loadAffinity对象必须与podConfig对象相比相等或更严格。在这种情况下,podConfig.nodeSelector标签必须是loadAffinity.nodeSelector对象中使用的标签的子集。 -
如果您在 DPA 中配置了
podConfig.nodeSelector和loadAffinity.nodeSelector对象,则无法使用matchExpressions和matchLabels字段。 请参见以下示例在 DPA 中配置
podConfig.nodeSelector和loadAffinity.nodeSelector对象。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.13.1.11. 配置节点代理负载并发 复制链接链接已复制到粘贴板!
您可以控制在集群中的每个节点上可以同时运行的最大节点代理操作数量。
您可以使用 Data Protection Application (DPA) 的以下字段之一配置它:
-
globalConfig:定义跨所有节点中的节点代理的默认并发限制。 -
perNodeConfig: 根据nodeSelector标签指定特定节点的不同并发限制。这为其中某些节点可能具有不同的作用或角色的环境提供了灵活性。
先决条件
-
您必须以具有
cluster-admin权限的用户身份登录。
流程
如果要对特定节点使用负载并发性,请在这些节点中添加标签:
oc label node/<node_name> label.io/instance-type='large'
$ oc label node/<node_name> label.io/instance-type='large'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为您的 DPA 实例配置负载并发字段:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.13.1.12. 配置存储库维护 复制链接链接已复制到粘贴板!
OADP 存储库维护是一个后台作业,您可以独立于节点代理 pod 配置它。这意味着,您可以将存储库维护 pod 调度到节点代理正在运行或没有运行的节点上。
只有在使用 Kopia 作为备份存储库时,您只能在 DataProtectionApplication (DPA)自定义资源(CR)中使用存储库维护作业关联性配置。
您可以选择在全局级别上配置负载关联性,会影响所有存储库。或者,您可以为每个存储库配置负载关联性。您还可以使用全局和每个存储库配置的组合。
先决条件
-
您必须以具有
cluster-admin权限的用户身份登录。 - 已安装 OADP Operator。
- 您已配置了 DPA CR。
流程
使用以下方法之一在 DPA spec 中配置
loadAffinity对象:
5.13.1.13. 配置 Velero 负载关联性 复制链接链接已复制到粘贴板!
对于每个 OADP 部署,有一个 Velero pod,其主要目的是调度 Velero 工作负载。要调度 Velero pod,您可以在 DataProtectionApplication (DPA) 自定义资源 (CR) spec 中使用 velero.podConfig.nodeSelector 和 velero.loadAffinity 对象。
使用 podConfig.nodeSelector 对象将 Velero pod 分配给特定的节点。您还可以为 pod 级别关联性和反关联性配置 velero.loadAffinity 对象。
OpenShift 调度程序应用规则并执行 Velero pod 部署调度。
先决条件
-
您必须以具有
cluster-admin权限的用户身份登录。 - 已安装 OADP Operator。
- 您已配置了 DPA CR。
流程
在 DPA spec 中配置
velero.podConfig.nodeSelector和velero.loadAffinity对象,如下例所示:velero.podConfig.nodeSelector对象配置:Copy to Clipboard Copied! Toggle word wrap Toggle overflow velero.loadAffinity对象配置:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.13.1.14. 覆盖 DPA 中的 imagePullPolicy 设置 复制链接链接已复制到粘贴板!
在 OADP 1.4.0 或更早版本中,Operator 会将 Velero 和节点代理 pod 的 imagePullPolicy 字段设置为 Always。
在 OADP 1.4.1 或更高版本中,Operator 首先检查每个镜像是否有 sha256 或 sha512 摘要,并相应地设置 imagePullPolicy 字段:
-
如果镜像有摘要,Operator 会将
imagePullPolicy设置为IfNotPresent。 -
如果镜像没有摘要,Operator 会将
imagePullPolicy设置为Always。
您还可以使用 Data Protection Application (DPA)中的 spec.imagePullPolicy 字段覆盖 imagePullPolicy 字段。
先决条件
- 已安装 OADP Operator。
流程
在 DPA 中配置
spec.imagePullPolicy字段,如下例所示:数据保护应用程序示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定
imagePullPolicy的值。在本例中,imagePullPolicy字段设置为Never。
5.13.1.15. 关于增量备份支持 复制链接链接已复制到粘贴板!
OADP 支持对容器化和 OpenShift Virtualization 工作负载进行块和文件系统持久性卷的增量备份。下表总结了对文件系统备份 (FSB)、Container Storage Interface (CSI) 和 CSI Data Mover 的支持:
| 卷模式 | FSB - Restic | FSB - Kopia | CSI | CSI Data Mover |
|---|---|---|---|---|
| Filesystem | S [1], I [2] | S [1], I [2] | S [1] | S [1], I [2] |
| Block | N [3] | N [3] | S [1] | S [1], I [2] |
| 卷模式 | FSB - Restic | FSB - Kopia | CSI | CSI Data Mover |
|---|---|---|---|---|
| Filesystem | N [3] | N [3] | S [1] | S [1], I [2] |
| Block | N [3] | N [3] | S [1] | S [1], I [2] |
- 支持的备份
- 支持的增量备份
- 不支持
CSI Data Mover 备份使用 Kopia,无论 uploaderType 是什么。
红帽只支持 OADP 版本 1.3.0 及更新的版本,以及 OpenShift Virtualization 版本 4.14 及更新的版本。
在 1.3.0 前 OADP 版本不支持备份和恢复 OpenShift Virtualization。
5.14. 使用多个备份存储位置配置 OADP 复制链接链接已复制到粘贴板!
5.14.1. 为带有多个备份存储位置的数据保护(OADP)配置 OpenShift API 复制链接链接已复制到粘贴板!
您可以在数据保护应用程序(DPA)中配置一个或多个备份存储位置(BSL)。在创建备份时,您还可以选择要将备份存储到的位置。使用这个配置,您可以使用以下方法存储备份:
- 到不同的区域
- 到不同的存储供应商
OADP 支持配置多个凭证来配置多个 BSL,以便您可以指定与任何 BSL 搭配使用的凭证。
5.14.1.1. 使用多个 BSL 配置 DPA 复制链接链接已复制到粘贴板!
您可以使用多个 BackupStorageLocation (BSL) CR 配置 DataProtectionApplication (DPA) 自定义资源 (CR),并指定云供应商提供的凭证。
例如,在配置了以下两个 BSLs 时:
- 在 DPA 中配置了一个 BSL,并将它设置为默认的 BSL。
-
使用
BackupStorageLocationCR 独立创建另一个 BSL。
因为您已通过 DPA 创建 BSL 作为默认值,您无法再次设置独立创建的 BSL 作为默认值。这意味着,在任何给定时间,您只能将一个 BSL 设置为默认的 BSL。
先决条件
- 您必须安装 OADP Operator。
- 您必须使用云供应商提供的凭证创建 secret。
流程
使用多个
BackupStorageLocationCR 配置DataProtectionApplicationCR。请参见以下示例:DPA 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 指定要在备份 CR 中使用的 BSL。请参见以下示例。
备份 CR 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.14.1.2. 两个 BSLs 的 OADP 用例 复制链接链接已复制到粘贴板!
在这种情况下,您可以使用两个云凭证配置有两个存储位置的 DPA。您可以使用默认 BSL 备份带有数据库的应用程序。OADP 将备份资源存储在默认的 BSL 中。然后,您可以使用第二个 BSL 再次备份应用程序。
先决条件
- 您必须安装 OADP Operator。
- 您必须配置两个备份存储位置:AWS S3 和 Multicloud Object Gateway (MCG)。
- 您必须具有一个应用程序,其数据库部署在 Red Hat OpenShift 集群中。
流程
运行以下命令,使用默认名称为 AWS S3 存储供应商创建第一个
Secret:oc create secret generic cloud-credentials -n openshift-adp --from-file cloud=<aws_credentials_file_name>
$ oc create secret generic cloud-credentials -n openshift-adp --from-file cloud=<aws_credentials_file_name>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定 AWS S3 的云凭证文件的名称。
运行以下命令,使用自定义名称为 MCG 创建第二个
Secret:oc create secret generic mcg-secret -n openshift-adp --from-file cloud=<MCG_credentials_file_name>
$ oc create secret generic mcg-secret -n openshift-adp --from-file cloud=<MCG_credentials_file_name>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定 MCG 的云凭据文件的名称。记录
mcg-secret自定义 secret 的名称。
使用两个 BSLs 配置 DPA,如下例所示。
DPA 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建 DPA:
oc create -f <dpa_file_name>
$ oc create -f <dpa_file_name>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定您配置的 DPA 的文件名。
运行以下命令验证 DPA 是否已协调:
oc get dpa -o yaml
$ oc get dpa -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令验证 BSLs 是否可用:
oc get bsl
$ oc get bslCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME PHASE LAST VALIDATED AGE DEFAULT aws Available 5s 3m28s true mcg Available 5s 3m28s
NAME PHASE LAST VALIDATED AGE DEFAULT aws Available 5s 3m28s true mcg Available 5s 3m28sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用默认 BSL 创建备份 CR。
注意在以下示例中,在 backup CR 中没有指定
storageLocation字段。备份 CR 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定集群中安装的应用程序的命名空间。
运行以下命令来创建备份:
oc apply -f <backup_file_name>
$ oc apply -f <backup_file_name>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定备份 CR 文件的名称。
运行以下命令,验证使用默认 BSL 的备份是否完成:
oc get backups.velero.io <backup_name> -o yaml
$ oc get backups.velero.io <backup_name> -o yaml1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定备份的名称。
使用 MCG 作为 BSL 创建备份 CR。在以下示例中,请注意,在创建备份 CR 时指定了第二个
storageLocation值。备份
CR示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建第二个备份:
oc apply -f <backup_file_name>
$ oc apply -f <backup_file_name>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定备份 CR 文件的名称。
运行以下命令,验证备份是否以 MCG 用户身份完成:
oc get backups.velero.io <backup_name> -o yaml
$ oc get backups.velero.io <backup_name> -o yaml1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定备份的名称。
5.15. 使用多个卷快照位置配置 OADP 复制链接链接已复制到粘贴板!
5.15.1. 使用多个卷快照位置为数据保护(OADP)配置 OpenShift API 复制链接链接已复制到粘贴板!
您可以配置一个或多个卷快照位置(VSL),将快照存储在不同的云供应商区域中。
5.15.1.1. 使用多个 VSL 配置 DPA 复制链接链接已复制到粘贴板!
您可以使用多个 VSL 配置 DPA,并指定云供应商提供的凭证。确保在与持久性卷相同的区域中配置快照位置。请参见以下示例。
DPA 示例
5.16. 卸载 OADP 复制链接链接已复制到粘贴板!
5.16.1. 为数据保护卸载 OpenShift API 复制链接链接已复制到粘贴板!
您可以通过删除 OADP Operator 来卸载 OpenShift API for Data Protection(OADP)。详情请参阅从集群中删除 Operator。
5.17. OADP 备份 复制链接链接已复制到粘贴板!
5.17.1. 备份应用程序 复制链接链接已复制到粘贴板!
频繁备份可能会消耗备份存储位置的存储。如果使用非本地备份,请检查备份、保留时间以及持久性卷(PV)的数据量的频率,如 S3 存储桶。因为所有生成的备份在过期前都会保留,因此还会检查调度的 TTL(time to live)设置。
您可以通过创建一个 Backup 自定义资源 (CR) 来备份应用程序。如需更多信息,请参阅创建备份 CR。以下是 Backup CR 的不同备份类型:
-
BackupCR 为 Kubernetes 资源和 S3 对象存储上的内部镜像创建备份文件。 - 如果您使用 Velero 的快照功能备份存储在持久性卷中的数据,则只有快照相关信息会与 Openshift 对象数据一起存储在 S3 存储桶中。
-
如果您的云供应商有原生快照 API 或支持 CSI 快照,则
BackupCR 通过创建快照来备份持久性卷 (PV)。有关使用 CSI 快照的更多信息,请参阅使用 CSI 快照备份持久性卷。
如果底层存储或备份存储桶是同一集群的一部分,则当出现灾难时数据可能会丢失。
有关 CSI 卷快照的更多信息,请参阅 CSI 卷快照。
- 如果您的云供应商不支持快照,或者应用程序位于 NFS 数据卷中,您可以使用 Kopia 或 Restic 创建备份。请参阅使用文件系统备份备份应用程序:Kopia 或 Restic。
…/.snapshot: read-only file system 错误
…/.snapshot 目录是一个快照复制目录,由多个 NFS 服务器使用。该目录默认具有只读访问权限,因此 Velero 无法恢复到这个目录中。
不要向 Velero 提供对 .snapshot 目录的写入权限,并禁用客户端对这个目录的访问。
OpenShift API for Data Protection (OADP) 不支持对由其他软件创建的卷快照进行备份。
5.17.1.1. 在运行备份和恢复前预览资源 复制链接链接已复制到粘贴板!
OADP 根据类型、命名空间或标签备份应用程序资源。这意味着您可以在备份完成后查看资源。同样,您可以在恢复操作完成后根据命名空间、持久性卷(PV)或标签查看恢复的对象。要提前预览资源,您可以空运行备份和恢复操作。
先决条件
- 已安装 OADP Operator。
流程
要在运行实际备份前预览备份中包含的资源,请运行以下命令:
velero backup create <backup-name> --snapshot-volumes false
$ velero backup create <backup-name> --snapshot-volumes false1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
--snapshot-volumes 参数的值指定为false。
要了解有关备份资源的更多详细信息,请运行以下命令:
velero describe backup <backup_name> --details
$ velero describe backup <backup_name> --details1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定备份的名称。
要在运行实际恢复前预览恢复中包含的资源,请运行以下命令:
velero restore create --from-backup <backup-name>
$ velero restore create --from-backup <backup-name>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定为查看备份资源而创建的备份名称。
重要velero restore create命令在集群中创建恢复资源。在查看资源后,您必须删除作为恢复的一部分创建的资源。要了解有关恢复资源的更多详细信息,请运行以下命令:
velero describe restore <restore_name> --details
$ velero describe restore <restore_name> --details1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定恢复的名称。
您可以创建备份 hook,以便在备份操作之前或之后运行命令。请参阅创建备份 hook。
您可以通过创建一个 Schedule CR 而不是 Backup CR 来调度备份。请参阅使用 Schedule CR 调度备份。
5.17.1.2. 已知问题 复制链接链接已复制到粘贴板!
OpenShift Container Platform 4.19 强制执行一个 pod 安全准入 (PSA) 策略,该策略可能会在 Restic 恢复过程中阻止 pod 的就绪度。
这个问题已在 OADP 1.1.6 和 OADP 1.2.2 版本中解决,因此建议用户升级到这些版本。
如需更多信息,请参阅因为更改 PSA 策略,在 OCP 4.15 上进行 Restic 恢复部分失败。
5.17.2. 创建备份 CR 复制链接链接已复制到粘贴板!
您可以通过创建 Backup 自定义资源(CR)来备份 Kubernetes 资源、内部镜像和持久性卷(PV)。
先决条件
- 您必须安装用于数据保护(OADP)Operator 的 OpenShift API。
-
DataProtectionApplicationCR 必须处于Ready状态。 备份位置先决条件:
- 您必须为 Velero 配置 S3 对象存储。
-
您必须在
DataProtectionApplicationCR 中配置了一个备份位置。
快照位置先决条件:
- 您的云供应商必须具有原生快照 API 或支持 Container Storage Interface(CSI)快照。
-
对于 CSI 快照,您必须创建一个
VolumeSnapshotClassCR 来注册 CSI 驱动程序。 -
您必须在
DataProtectionApplicationCR 中配置了一个卷位置。
流程
输入以下命令来检索
backupStorageLocationsCR:oc get backupstoragelocations.velero.io -n openshift-adp
$ oc get backupstoragelocations.velero.io -n openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAMESPACE NAME PHASE LAST VALIDATED AGE DEFAULT openshift-adp velero-sample-1 Available 11s 31m
NAMESPACE NAME PHASE LAST VALIDATED AGE DEFAULT openshift-adp velero-sample-1 Available 11s 31mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个
BackupCR,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证
BackupCR 的状态是否为Completed:oc get backups.velero.io -n openshift-adp <backup> -o jsonpath='{.status.phase}'$ oc get backups.velero.io -n openshift-adp <backup> -o jsonpath='{.status.phase}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.17.3. 使用 CSI 快照备份持久性卷 复制链接链接已复制到粘贴板!
在创建 Backup CR 前,您可以编辑云存储的 VolumeSnapshotClass 自定义资源(CR) 来使用 Container Storage Interface (CSI) 快照备份持久性卷,请参阅 CSI 卷快照。
如需更多信息,请参阅创建备份 CR。
5.17.3.1. 使用 CSI 快照备份持久性卷 复制链接链接已复制到粘贴板!
先决条件
- 云供应商必须支持 CSI 快照。
-
您必须在
DataProtectionApplicationCR 中启用 CSI。
流程
将
metadata.labels.velero.io/csi-volumesnapshot-class: "true"键值对添加到VolumeSnapshotClassCR:配置文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
后续步骤
-
现在,您可以创建一个
BackupCR。
5.17.4. 使用文件系统备份对应用程序进行备份:Kopia 或 Restic 复制链接链接已复制到粘贴板!
您可以使用 OADP 从卷的文件系统备份和恢复附加到 pod 的 Kubernetes 卷。这个过程称为文件系统备份 (FSB) 或 Pod 卷备份 (PVB)。它通过使用来自开源备份工具 Restic 或 Kopia 的模块来完成。
如果您的云供应商不支持快照,或者应用程序位于 NFS 数据卷中,您可以使用 FSB 创建备份。
FSB 与 OADP 集成提供了一种解决方案,用于备份和恢复几乎任何类型的 Kubernetes 卷。这个集成是 OADP 的一个额外功能,不是现有功能的替代品。
您可以通过编辑 Backup 备份自定义资源 (CR) 来使用 Kopia 或 Restic 对 Kubernetes 资源、内部镜像和持久性卷备份。
您不需要在 DataProtectionApplication CR 中指定快照位置。
在 OADP 版本 1.3 及更高版本中,您可以使用 Kopia 或 Restic 备份应用程序。
对于 Built-in DataMover,您必须使用 Kopia。
在 OADP 版本 1.2 及更早版本中,您只能使用 Restic 备份应用程序。
FSB 不支持对 hostPath 卷进行备份。如需更多信息,请参阅 FSB 限制。
…/.snapshot: read-only file system 错误
…/.snapshot 目录是一个快照复制目录,由多个 NFS 服务器使用。该目录默认具有只读访问权限,因此 Velero 无法恢复到这个目录中。
不要向 Velero 提供对 .snapshot 目录的写入权限,并禁用客户端对这个目录的访问。
5.17.4.1. 使用文件系统备份(File System Backup)备份应用程序 复制链接链接已复制到粘贴板!
先决条件
- 您必须安装用于数据保护(OADP)Operator 的 OpenShift API。
-
您不能通过将
DataProtectionApplicationCR 中的spec.configuration.nodeAgent.enabletofalse来禁用默认的nodeAgent安装。 -
您必须在
DataProtectionApplicationCR 中将spec.configuration.nodeAgent.uploaderType设置为kopia或restic来选择 Kopia 或 Restic 作为 uploader。 -
DataProtectionApplicationCR 必须处于Ready状态。
流程
创建
BackupCR,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 在 OADP 版本 1.2 及更高版本中,在
spec块中添加defaultVolumesToFsBackup: true设置。在 OADP 版本 1.1 中,添加defaultVolumesToRestic: true。
5.17.5. 创建备份 hook 复制链接链接已复制到粘贴板!
在执行备份时,可以根据正在备份的 pod,指定在 pod 内要执行的一个或多个命令。
可将命令配置为在任何自定义操作处理(Pre hook)或所有自定义操作完成后执行,且由自定义操作指定的任何其他项目都已备份(Post hook)。
您可以通过编辑备份自定义资源(CR)来创建 Backup hook 以在 pod 中运行的容器中运行命令。
流程
在
BackupCR 的spec.hooks块中添加 hook,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 可选:您可以指定 hook 应用的命名空间。如果没有指定这个值,则 hook 适用于所有命名空间。
- 2
- 可选:您可以指定 hook 不应用到的命名空间。
- 3
- 目前,pod 是唯一可以应用 hook 的支持的资源。
- 4
- 可选:您可以指定 hook 不应用到的资源。
- 5
- 可选:此 hook 仅适用于与标签匹配的对象。如果没有指定这个值,则 hook 适用于所有对象。
- 6
- 备份前要运行的 hook 数组。
- 7
- 可选:如果没有指定容器,该命令将在 pod 的第一个容器中运行。
- 8
- 这是添加
init容器的入口点。 - 9
- 错误处理允许的值是
Fail和Continue。默认值为Fail。 - 10
- 可选:等待命令运行的时间。默认值为
30s。 - 11
- 此块定义了在备份后运行的一组 hook,其参数与 pre-backup hook 相同。
5.17.6. 使用 Schedule CR 调度备份 复制链接链接已复制到粘贴板!
调度操作允许您在特定时间创建由 Cron 表达式指定的数据的备份。
您可以通过创建 Schedule 自定义资源(CR)而不是 Backup CR 来调度备份。
在您的备份调度中留有足够的时间,以便在创建另一个备份前完成了当前的备份。
例如,如果对一个命名空间进行备份通常需要 10 分钟才能完成,则调度的备份频率不应该超过每 15 分钟一次。
先决条件
- 您必须安装用于数据保护(OADP)Operator 的 OpenShift API。
-
DataProtectionApplicationCR 必须处于Ready状态。
流程
检索
backupStorageLocationsCR:oc get backupStorageLocations -n openshift-adp
$ oc get backupStorageLocations -n openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAMESPACE NAME PHASE LAST VALIDATED AGE DEFAULT openshift-adp velero-sample-1 Available 11s 31m
NAMESPACE NAME PHASE LAST VALIDATED AGE DEFAULT openshift-adp velero-sample-1 Available 11s 31mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个
ScheduleCR,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 1
- 调度备份的
cron表达式,例如0 7 * * *代表在每天 7:00 执行备份。注意要以特定间隔调度备份,以以下格式输入
<duration_in_minutes>:schedule: "*/10 * * * *"
schedule: "*/10 * * * *"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在引号 (
" ") 之间输入分钟值。 - 2
- 要备份的命名空间数组。
- 3
backupStorageLocationsCR 的名称。- 4
- 可选:在 OADP 版本 1.2 及更高版本中,在使用 Restic 进行卷备份时,将
defaultVolumesToFsBackup: true键值对添加到您的配置中。在 OADP 版本 1.1 中,在使用 Restic 备份卷时添加defaultVolumesToRestic: true键值对。
验证
在调度的备份运行后验证
ScheduleCR 的状态是否为Completed:oc get schedule -n openshift-adp <schedule> -o jsonpath='{.status.phase}'$ oc get schedule -n openshift-adp <schedule> -o jsonpath='{.status.phase}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.17.7. 删除备份 复制链接链接已复制到粘贴板!
您可以通过创建 DeleteBackupRequest 自定义资源 (CR) 或运行 velero backup delete 来删除备份(在以下介绍)。
根据备份的方法,卷备份工件会在不同的时间删除:
- Restic:在删除备份后,工件会在下一个完整的维护周期中删除。
- Container Storage Interface (CSI):当删除备份时,工件会被立即删除。
- Kopia:在删除备份后,工件会在 Kopia 存储库的三个完整维护周期后删除。
5.17.7.1. 通过创建 DeleteBackupRequest CR 来删除备份 复制链接链接已复制到粘贴板!
您可以通过创建一个 DeleteBackupRequest 自定义资源 (CR) 来删除备份。
先决条件
- 您已运行应用程序的备份。
流程
创建
DeleteBackupRequestCR 清单文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定备份的名称。
应用
DeleteBackupRequestCR 以删除备份:oc apply -f <deletebackuprequest_cr_filename>
$ oc apply -f <deletebackuprequest_cr_filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.17.7.2. 使用 Velero CLI 删除备份 复制链接链接已复制到粘贴板!
您可以使用 Velero CLI 删除备份。
先决条件
- 您已运行应用程序的备份。
- 下载 Velero CLI,并可以访问集群中的 Velero 二进制文件。
流程
要删除备份,请运行以下 Velero 命令:
velero backup delete <backup_name> -n openshift-adp
$ velero backup delete <backup_name> -n openshift-adp1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定备份的名称。
5.17.7.3. 关于 Kopia 仓库维护 复制链接链接已复制到粘贴板!
有两种 Kopia 存储库维护类型:
- 快速维护
- 每小时运行一次,以保持索引 Blob (n) 数量较低。大量索引对 Kopia 操作的性能会造成负面影响。
- 在没有确定存在同一元数据的另一个副本的情况下,请勿从仓库中删除任何元数据。
- 完整维护
- 每 24 小时运行一次,以对不再需要仓库内容进行垃圾回收处理。
-
snapshot-gc是一个完整的维护任务,它会找到所有无法从快照清单访问的文件和目录列表,并将其标记为已删除。 - 完整维护操作有较高的资源成不,因为它需要扫描集群中所有活跃的快照中的所有目录。
5.17.7.3.1. OADP 中的 Kopia 维护 复制链接链接已复制到粘贴板!
repo-maintain-job 作业是在安装 OADP 的命名空间中执行的,如下例所示:
pod/repo-maintain-job-173...2527-2nbls 0/1 Completed 0 168m pod/repo-maintain-job-173....536-fl9tm 0/1 Completed 0 108m pod/repo-maintain-job-173...2545-55ggx 0/1 Completed 0 48m
pod/repo-maintain-job-173...2527-2nbls 0/1 Completed 0 168m
pod/repo-maintain-job-173....536-fl9tm 0/1 Completed 0 108m
pod/repo-maintain-job-173...2545-55ggx 0/1 Completed 0 48m
您可以检查 repo-maintain-job 的日志,以了解清理以及在备份对象存储中删除工件的更多详情。当需要进行下一个完整维护时,您可以在 repo-maintain-job 中看到一个相关的信息,如下例所示:
not due for full maintenance cycle until 2024-00-00 18:29:4
not due for full maintenance cycle until 2024-00-00 18:29:4
将对象从备份对象存储中删除需要已成功执行了三个完整维护周期。这意味着,要删除备份对象存储中的所有工件,最多需要 72 小时。
5.17.7.4. 删除备份仓库 复制链接链接已复制到粘贴板!
在删除备份后,当 Kopia 仓库维护周期删除了相关工件后,备份不再被任何元数据或清单对象引用。然后,您可以删除 backuprepository 自定义资源 (CR) 来完成备份删除过程。
先决条件
- 您已删除应用程序的备份。
- 在备份被删除后,您最多等待 72 小时。在此期间 Kopia 可以运行仓库维护周期。
流程
要获取备份的备份仓库 CR 的名称,请运行以下命令:
oc get backuprepositories.velero.io -n openshift-adp
$ oc get backuprepositories.velero.io -n openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要删除备份仓库 CR,请运行以下命令:
oc delete backuprepository <backup_repository_name> -n openshift-adp
$ oc delete backuprepository <backup_repository_name> -n openshift-adp1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定上一步中备份仓库的名称。
5.17.8. 关于 Kopia 复制链接链接已复制到粘贴板!
Kopia 是一个快速安全的开源备份和恢复工具,可让您创建数据的加密快照,并将快照保存到您选择的远程或云存储中。
Kopia 支持网络和本地存储位置,以及许多云或远程存储位置,包括:
- Amazon S3 以及与 S3 兼容的任何云存储
- Azure Blob Storage
- Google Cloud Storage 平台
Kopia 对快照使用可内容访问的存储:
- 快照始终是以增量方式进行的;已包含在之前快照中的数据不会重新上传到存储库。仅当文件被修改时,文件才会再次上传到存储库。
- 存储的数据会被去除重复数据;如果存在同一文件的多个副本,则仅存储其中一个文件。
- 如果文件被移动或重命名,Kopia 可以识别它们具有相同的内容,且不会重新上传它们。
5.17.8.1. OADP 与 Kopia 集成 复制链接链接已复制到粘贴板!
除了 Restic 外,OADP 1.3 还支持 Kopia 作为 pod 卷备份的备份机制。您需要在安装时通过在 DataProtectionApplication 自定义资源(CR) 中设置 uploaderType 字段来选择其中一个。可能的值为 restic 或 kopia。如果没有指定 uploaderType,OADP 1.3 默认为使用 Kopia 作为备份机制。数据会从一个统一的存储库中读取或写入。
不支持使用 Kopia 客户端修改 Kopia 备份存储库,并可能会影响 Kopia 备份的完整性。OADP 不支持直接连接到 Kopia 存储库,且只能以最佳方式提供支持。
以下示例显示了配置了使用 Kopia 的 DataProtectionApplication CR:
5.18. OADP 恢复 复制链接链接已复制到粘贴板!
5.18.1. 恢复应用程序 复制链接链接已复制到粘贴板!
您可以通过创建一个 Restore 自定义资源 (CR) 来恢复应用程序备份。请参阅创建 Restore CR。
您可以通过编辑 Restore CR 创建恢复 hook,以便在 pod 中的容器中运行命令。请参阅创建恢复 hook。
5.18.1.1. 在运行备份和恢复前预览资源 复制链接链接已复制到粘贴板!
OADP 根据类型、命名空间或标签备份应用程序资源。这意味着您可以在备份完成后查看资源。同样,您可以在恢复操作完成后根据命名空间、持久性卷(PV)或标签查看恢复的对象。要提前预览资源,您可以空运行备份和恢复操作。
先决条件
- 已安装 OADP Operator。
流程
要在运行实际备份前预览备份中包含的资源,请运行以下命令:
velero backup create <backup-name> --snapshot-volumes false
$ velero backup create <backup-name> --snapshot-volumes false1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
--snapshot-volumes 参数的值指定为false。
要了解有关备份资源的更多详细信息,请运行以下命令:
velero describe backup <backup_name> --details
$ velero describe backup <backup_name> --details1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定备份的名称。
要在运行实际恢复前预览恢复中包含的资源,请运行以下命令:
velero restore create --from-backup <backup-name>
$ velero restore create --from-backup <backup-name>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定为查看备份资源而创建的备份名称。
重要velero restore create命令在集群中创建恢复资源。在查看资源后,您必须删除作为恢复的一部分创建的资源。要了解有关恢复资源的更多详细信息,请运行以下命令:
velero describe restore <restore_name> --details
$ velero describe restore <restore_name> --details1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定恢复的名称。
5.18.1.2. 创建恢复 CR 复制链接链接已复制到粘贴板!
您可以通过创建一个 Restore CR 来恢复 Backup 自定义资源(CR)。
当您恢复使用 azurefile-csi 存储类的有状态应用程序时,恢复操作会保留在 Finalizing 阶段。
先决条件
- 您必须安装用于数据保护(OADP)Operator 的 OpenShift API。
-
DataProtectionApplicationCR 必须处于Ready状态。 -
您必须具有 Velero
BackupCR。 - 持久性卷 (PV) 容量必须与备份时请求的大小匹配。如果需要,调整请求的大小。
流程
创建一个
RestoreCR,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令验证
RestoreCR 的状态是否为Completed:oc get restores.velero.io -n openshift-adp <restore> -o jsonpath='{.status.phase}'$ oc get restores.velero.io -n openshift-adp <restore> -o jsonpath='{.status.phase}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令验证备份资源是否已恢复:
oc get all -n <namespace>
$ oc get all -n <namespace>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 备份的命名空间。
如果您使用卷恢复
DeploymentConfig,或使用 post-restore hook,请输入以下命令运行dc-post-restore.shcleanup 脚本:bash dc-restic-post-restore.sh -> dc-post-restore.sh
$ bash dc-restic-post-restore.sh -> dc-post-restore.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意在恢复过程中,OADP Velero 插件会缩减
DeploymentConfig对象,并将 pod 恢复为独立 pod。这是为了防止集群在恢复时立即删除恢复的DeploymentConfigpod,并允许 restore 和 post-restore hook 在恢复的 pod 上完成其操作。下面显示的清理脚本会删除这些断开连接的 pod,并将任何DeploymentConfig对象扩展至适当的副本数。dc-restic-post-restore.sh → dc-post-restore.shcleanup 脚本Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.18.1.3. 创建恢复 hook 复制链接链接已复制到粘贴板!
您可以通过编辑 Restore 自定义资源 (CR)创建恢复 hook,以便在 pod 中的容器中运行命令。
您可以创建两种类型的恢复 hook:
inithook 将 init 容器添加到 pod,以便在应用程序容器启动前执行设置任务。如果您恢复 Restic 备份,则会在恢复 hook init 容器前添加
restic-waitinit 容器。-
exechook 在恢复的 pod 的容器中运行命令或脚本。
流程
在
RestoreCR 的spec.hooks块中添加 hook,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 可选: hook 应用的命名空间数组。如果没有指定这个值,则 hook 适用于所有命名空间。
- 2
- 目前,pod 是唯一可以应用 hook 的支持的资源。
- 3
- 可选:此 hook 仅适用于与标签选择器匹配的对象。
- 4
- 可选:超时指定 Velero 等待
initContainers完成的最大时间长度。 - 5
- 可选:如果没有指定容器,该命令将在 pod 的第一个容器中运行。
- 6
- 这是正在添加的 init 容器的入口点。
- 7
- 可选:等待容器就绪的时间。这应该足够长,以便容器可以启动,在相同容器中的任何以前的 hook 可以完成。如果没有设置,恢复过程会无限期等待。
- 8
- 可选:等待命令运行的时间。默认值为
30s。 - 9
- 错误处理的允许值为
Fail和Continue:-
Continue: 只记录命令失败。 -
Fail: 任何 pod 中的任何容器中没有更多恢复 hook 运行。RestoreCR 的状态将是PartiallyFailed。
-
在文件系统备份(FSB)恢复操作中,引用 ImageStream 的 Deployment 资源没有被正确恢复。恢复运行 FSB 的 pod,postHook 会被提前终止。
这是因为在恢复操作中,OpenShift 控制器使用更新的 ImageStreamTag 哈希更新 Deployment 资源中的 spec.template.spec.containers[0].image 字段。更新会触发新 pod 的推出,终止 velero 运行 FSB 和后恢复 hook 的 pod。有关镜像流触发器的更多信息,请参阅"镜像流更改的触发更新"。
这个行为的临时解决方案分为两个步骤:
首先,执行排除
Deployment资源的恢复,例如:velero restore create <RESTORE_NAME> \ --from-backup <BACKUP_NAME> \ --exclude-resources=deployment.apps
$ velero restore create <RESTORE_NAME> \ --from-backup <BACKUP_NAME> \ --exclude-resources=deployment.appsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 第一次恢复成功后,通过包含这些资源来执行第二次恢复,例如:
velero restore create <RESTORE_NAME> \ --from-backup <BACKUP_NAME> \ --include-resources=deployment.apps
$ velero restore create <RESTORE_NAME> \ --from-backup <BACKUP_NAME> \ --include-resources=deployment.appsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.19. OADP 自助服务 复制链接链接已复制到粘贴板!
5.19.1. OADP 自助服务 复制链接链接已复制到粘贴板!
OpenShift API for Data Protection (OADP) 1.5.0 引入了一个名为 OADP Self-Service 的新功能,使命名空间管理员用户在 OpenShift Container Platform 上备份和恢复应用程序。
5.19.1.1. 关于 OADP 自助服务 复制链接链接已复制到粘贴板!
从 OADP 1.5.0 开始,您不需要 cluster-admin 角色来执行备份和恢复操作。您可以将 OADP 与命名空间 admin 角色一起使用。命名空间 admin 角色仅对该用户分配到的命名空间具有管理员访问权限。
您只能在集群管理员安装 OADP Operator 并提供所需权限后使用 Self-Service 功能。
OADP 自助服务功能为没有 cluster-admin 特权的用户提供安全自助服务数据保护功能,同时保持正确的访问控制。
OADP 集群管理员创建具有命名空间 admin 角色的用户,并为用户提供必要的基于角色的访问控制(RBAC),以执行 OADP Self-Service 操作。由于与 cluster-admin 角色相比,此用户具有有限的访问权限,因此此用户被称为命名空间 admin 用户。
作为命名空间 admin 用户,您可以备份和恢复集群中授权命名空间中部署的应用程序。
OADP 自助服务提供以下优点:
作为集群管理员:
- 您可以为命名空间 admin 用户允许命名空间范围的备份和恢复操作。这意味着,命名空间 admin 用户无法访问它们没有授权的命名空间。
-
您可以通过
DataProtectionApplication配置和策略,保持管理员对非管理员用户操作的控制。
作为命名空间 admin 用户:
- 您可以为授权命名空间创建备份和恢复自定义资源。
- 您可以在授权命名空间中创建专用备份存储位置。
- 您可以安全地访问备份日志和状态信息。
5.19.1.2. 命名空间范围的备份和恢复意味着什么 复制链接链接已复制到粘贴板!
OADP 自助服务可确保命名空间管理员用户只能在其授权命名空间中运行。例如,如果您无法以命名空间 admin 用户身份访问命名空间,则无法备份该命名空间。
命名空间 admin 用户无法访问其他用户的备份和恢复数据。
集群管理员通过自定义资源(CR)强制实施访问控制,以安全地管理备份和恢复操作。
另外,集群管理员可以控制 CR 中允许的选项,使用 DataProtectionApplication (DPA) CR 中的 spec 强制限制添加安全性的某些操作。
命名空间 admin 用户可以执行以下自助服务操作:
- 创建和管理其授权命名空间的备份。
- 将数据恢复到其授权命名空间。
- 配置自己的备份存储位置。
- 检查备份和恢复状态。
- 请求检索相关日志。
5.19.1.3. OADP 自助服务自定义资源 复制链接链接已复制到粘贴板!
OADP Self-Service 功能有以下新的自定义资源(CR),为命名空间 admin 用户执行备份和恢复操作:
| CR | 描述 |
|
| 控制和编排自助服务操作。 |
|
| 管理命名空间范围的备份操作。 |
|
| 管理命名空间范围的恢复操作。 |
|
| 定义特定于用户的备份存储位置。 |
|
| 管理命名空间范围的下载请求操作。 |
5.19.1.4. OADP 自助服务如何工作 复制链接链接已复制到粘贴板!
下图显示了 OADP 自助服务如何在高级别上工作。图中描述了以下工作流:
-
命名空间 admin 用户创建一个
NonAdminBackup(NAB) 自定义资源 (CR) 请求。 -
NonAdminController(NAC) CR 接收 NAB CR 请求。 - NAC 验证请求并更新有关请求的 NAB CR。
-
NAC 创建
Velero备份对象。 -
NAC 监控
Velero备份对象,并将状态放回 NAB CR。
图 5.1. OADP 自助服务如何工作
5.19.1.5. OADP 自助服务先决条件 复制链接链接已复制到粘贴板!
在开始使用 OADP Self-Service 作为命名空间 admin 用户前,请确定您满足以下先决条件:
-
集群管理员已将 OADP
DataProtectionApplication(DPA) CR 配置为启用自助服务。 集群管理员已完成以下任务:
-
创建命名空间
admin用户帐户。 -
为命名空间
admin用户创建一个命名空间。 - 为命名空间 admin 用户分配适当的特权。这样可确保命名空间 admin 用户在其分配的命名空间中访问并执行备份和恢复操作。
-
创建命名空间
-
另外,集群管理员可以为命名空间
admin用户创建NonAdminBackupStorageLocation(NABSL) CR。
5.19.1.6. OADP Self-Service 命名空间权限 复制链接链接已复制到粘贴板!
作为集群管理员,确保为命名空间中的以下对象列表分配了命名空间 admin 用户的编辑器角色。这些对象可确保命名空间 admin 用户可以在其命名空间中执行备份和恢复操作。
-
nonadminbackups.oadp.openshift.io -
nonadminbackupstoragelocations.oadp.openshift.io -
nonadminrestores.oadp.openshift.io -
nonadmindownloadrequests.oadp.openshift.io
如需有关命名空间 admin 角色的更多详细信息,请参阅 Default cluster roles。
集群管理员也可以定义自己的规格,以便用户可以具有类似于 project 或命名空间 admin 角色的权限。
5.19.1.6.1. 备份操作的 RBAC YAML 示例 复制链接链接已复制到粘贴板!
请参阅以下基于角色的访问控制 (RBAC) YAML 文件示例,其中包含命名空间 admin 用户的命名空间权限,以执行备份操作。
RBAC 清单示例
5.19.1.7. OADP 自助服务限制 复制链接链接已复制到粘贴板!
OADP Self-Service 不支持以下功能:
- 不支持跨集群备份和恢复,或不支持迁移。集群管理员支持这些 OADP 操作。
-
命名空间
admin用户无法创建VolumeSnapshotLocation(VSL) CR。集群管理员在命名空间admin用户的DataProtectionApplication(DPA) CR 中创建和配置 VSL。 -
命名空间
admin用户不支持ResourceModifiersCR 和卷策略。 命名空间
admin用户可以使用NonAdminDownloadRequestCR 请求备份或恢复日志,只有在用户使用NonAdminBackupStorageLocationCR 创建了备份或恢复时。如果使用集群范围的默认备份存储位置创建备份或恢复 CR,命名空间
admin用户无法请求备份或恢复日志。为确保安全备份和恢复,OADP Self-Service 会自动排除以下 CR 正在备份或恢复:
-
NonAdminBackup -
NonAdminRestore -
NonAdminBackupStorageLocation -
SecurityContextConstraints -
ClusterRole -
ClusterRoleBinding -
CustomResourceDefinition -
PriorityClasses -
VirtualMachineClusterInstanceTypes -
VirtualMachineClusterPreferences
-
5.19.1.8. OADP 自助服务备份和恢复阶段 复制链接链接已复制到粘贴板!
NonAdminBackup (NAB) 自定义资源 (CR)和 NonAdminRestore (NAR) CR 的 status.phase 字段提供 CR 的当前状态概述。查看下表中 NAB 和 NAR 阶段的值。
CR 的阶段仅会向前进行。当阶段过渡到下一阶段后,它无法恢复到以前的阶段。
| value | 描述 |
|
| NAC 接受 NAB 或 NAR CR 的创建请求,但它尚未由 NAC 验证。 |
|
|
NAC CR 使 NAB 或 NAR CR 无效,因为 NAB 或 NAR CR 中无效的
命名空间 admin 用户可以更新 NAB 或 NAR |
|
|
NAB 或 NAR CR 由 NAC 验证,并创建了 |
|
|
NAB 或 NAR CR 标记为删除。NAC 删除对应的 |
5.19.1.9. 关于 NonAdminBackupStorageLocation CR 复制链接链接已复制到粘贴板!
命名空间管理员可以创建 NonAdminBackupStorageLocation (NABSL) 自定义资源 (CR) 来存储备份数据。
为确保 NABSL CR 被安全创建和使用,请使用集群管理员控制。集群管理员管理 NABSL CR 以遵守公司策略和合规性要求。
您可以使用以下工作流之一创建 NABSL CR:
-
管理员创建工作流 :在这个工作流中,集群管理员会为命名空间 admin 用户创建 NABSL CR。然后,命名空间 admin 用户在
NonAdminBackupCR 中引用 NABSL。 管理员批准工作流 :集群管理员必须通过将
nonAdmin.requireApprovalForBSL字段设置为true,在 DPA 中显式启用此 opt-in 功能。集群管理员批准过程按如下方式工作:-
命名空间 admin 用户创建一个 NABSL CR。由于管理员已在 DPA 中强制执行批准过程,所以它会触发在
openshift-adp命名空间中创建NonAdminBackupStorageLocationRequestCR。 集群管理员检查请求,并批准或拒绝请求。
-
如果批准,在
openshift-adp命名空间中创建VeleroBackupStorageLocation(BSL),并更新 NABSL CR 状态以反映批准。 - 如果被拒绝,则更新了 NABSL CR 的状态,以反映拒绝。
-
如果批准,在
-
集群管理员也可以撤销之前批准的 NABSL CR。
approve字段设置为pending或reject。这会导致删除VeleroBSL,命名空间 admin 用户会收到拒绝通知。
-
命名空间 admin 用户创建一个 NABSL CR。由于管理员已在 DPA 中强制执行批准过程,所以它会触发在
-
自动批准工作流 :在这个工作流中,集群管理员不会通过将 DPA 中的
nonAdmin.requireApprovalForBSL字段设置为false来强制对 NABSL CR 的批准过程。此字段的默认值为false。不设置这个字段会导致 NABSL 自动批准。因此,命名空间 admin 用户可以从其授权命名空间创建 NABSL CR。
为了安全起见,请使用管理员创建或管理员批准工作流。自动批准工作流的安全性较低,因为它不需要管理员审核。
5.19.2. OADP 自助服务集群管理员用例 复制链接链接已复制到粘贴板!
作为集群管理员,您可以在以下情况下使用 Self-Service 功能:
- 启用或禁用 OADP 自助服务。
- 批准或拒绝 NABSL 自定义资源(CR)。
-
在
DataProtectionApplication(DPA) CR 中强制模板策略。
5.19.2.1. 启用和禁用 OADP 自助服务 复制链接链接已复制到粘贴板!
您必须是集群管理员才能启用 OADP Self-Service 功能。您可以使用 DataProtectionApplication (DPA) 自定义资源 (CR) 的 spec.nonAdmin.enable 部分来启用和禁用 Self-Service 功能。
启用 Self-Service 功能会在 OADP Operator 命名空间中安装 NonAdminController (NAC) CR。
您只能在集群中安装一个 NonAdminController (NAC) CR 实例。如果安装多个 NAC CR 实例,您会收到以下错误:
错误示例
message: only a single instance of Non-Admin Controller can be installed across the entire cluster. Non-Admin controller is already configured and installed in openshift-adp namespace.
message: only a single instance of Non-Admin Controller can be installed across the entire cluster. Non-Admin controller is already configured and installed in openshift-adp namespace.
先决条件
-
使用
cluster-admin角色登录到集群。 - 已安装 OADP Operator。
- 您已配置了 DPA。
流程
要启用 OADP Self-Service,请编辑 DPA CR 来配置
nonAdmin.enable部分。请参见以下示例配置:DataProtectionApplicationCR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要验证
NonAdminController(NAC) pod 是否在 OADP 命名空间中运行,请运行以下命令:oc get pod -n openshift-adp -l control-plane=non-admin-controller
$ oc get pod -n openshift-adp -l control-plane=non-admin-controllerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE non-admin-controller-5d....f5-p..9p 1/1 Running 0 99m
NAME READY STATUS RESTARTS AGE non-admin-controller-5d....f5-p..9p 1/1 Running 0 99mCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.19.2.2. 启用 NonAdminBackupStorageLocation 管理员批准工作流 复制链接链接已复制到粘贴板!
NonAdminBackupStorageLocation (NABSL) 自定义资源 (CR) 管理员批准工作流是一个可选择的(opt-in)功能。作为集群管理员,您必须通过将 nonAdmin.requireApprovalForBSL 字段设置为 true 来显式启用 DataProtectionApplication (DPA) CR 中的功能。
您还需要将 DPA CR 中的 noDefaultBackupLocation 字段设置为 true。此设置表示,在 DPA CR 中没有配置默认备份存储位置,命名空间 admin 用户可以创建一个 NABSL CR,并发送用于批准的 CR 请求。
先决条件
-
使用
cluster-admin角色登录到集群。 - 已安装 OADP Operator。
-
您已在
DataProtectionApplicationCR 中启用了 OADP Self-Service。
5.19.2.3. 批准 NonAdminBackupStorageLocation 请求 复制链接链接已复制到粘贴板!
作为集群管理员,若要批准 NonAdminBackupStorageLocation (NABSL) CR 请求,您可以编辑 NonAdminBackupStorageLocationRequest CR,并将 approvalDecision 字段设置为 批准。
先决条件
-
使用
cluster-admin角色登录到集群。 - 已安装 OADP Operator。
-
您已在
DataProtectionApplication(DPA) CR 中启用了 OADP Self-Service。 - 您已在 DPA 中启用了 NABSL CR 批准工作流。
流程
要查看队列中用于管理员批准的 NABSL CR 请求,请运行以下命令:
oc -n openshift-adp get NonAdminBackupStorageLocationRequests
$ oc -n openshift-adp get NonAdminBackupStorageLocationRequestsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME REQUEST-PHASE REQUEST-NAMESPACE REQUEST-NAME AGE non-admin-bsl-test-.....175 Approved non-admin-bsl-test incorrect-bucket-nabsl 4m57s non-admin-bsl-test-.....196 Approved non-admin-bsl-test perfect-nabsl 5m26s non-admin-bsl-test-s....e1a Rejected non-admin-bsl-test suspicious-sample 2m56s non-admin-bsl-test-.....5e0 Pending non-admin-bsl-test waitingapproval-nabsl 4m20s
NAME REQUEST-PHASE REQUEST-NAMESPACE REQUEST-NAME AGE non-admin-bsl-test-.....175 Approved non-admin-bsl-test incorrect-bucket-nabsl 4m57s non-admin-bsl-test-.....196 Approved non-admin-bsl-test perfect-nabsl 5m26s non-admin-bsl-test-s....e1a Rejected non-admin-bsl-test suspicious-sample 2m56s non-admin-bsl-test-.....5e0 Pending non-admin-bsl-test waitingapproval-nabsl 4m20sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要批准 NABSL CR 请求,请运行以下命令将
approvalDecision字段设置为approve:oc patch nabslrequest <nabsl_name> -n openshift-adp --type=merge -p '{"spec": {"approvalDecision": "approve"}}'$ oc patch nabslrequest <nabsl_name> -n openshift-adp --type=merge -p '{"spec": {"approvalDecision": "approve"}}'1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定
NonAdminBackupStorageLocationRequestCR 的名称。
验证
运行以下命令验证 Velero 备份存储位置是否已创建并处于
Available阶段 :oc get velero.io.backupstoragelocation
$ oc get velero.io.backupstoragelocationCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME PHASE LAST VALIDATED AGE DEFAULT test-nac-test-bsl-cd...930 Available 62s 62s
NAME PHASE LAST VALIDATED AGE DEFAULT test-nac-test-bsl-cd...930 Available 62s 62sCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.19.2.4. 拒绝 NonAdminBackupStorageLocation 请求 复制链接链接已复制到粘贴板!
作为集群管理员,若要拒绝 NonAdminBackupStorageLocation (NABSL) 自定义资源 (CR) 请求,您可以编辑 NonAdminBackupStorageLocationRequest CR,并将 approvalDecision 字段设置为 reject。
先决条件
-
使用
cluster-admin角色登录到集群。 - 已安装 OADP Operator。
-
您已在
DataProtectionApplication(DPA) CR 中启用了 OADP Self-Service。 - 您已在 DPA 中启用了 NABSL CR 批准工作流。
流程
要查看队列中用于管理员批准的 NABSL CR 请求,请运行以下命令:
oc -n openshift-adp get NonAdminBackupStorageLocationRequests
$ oc -n openshift-adp get NonAdminBackupStorageLocationRequestsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要拒绝 NABSL CR 请求,请运行以下命令将
approvalDecision字段设置为reject:oc patch nabslrequest <nabsl_name> -n openshift-adp --type=merge -p '{"spec": {"approvalDecision": "reject"}}'$ oc patch nabslrequest <nabsl_name> -n openshift-adp --type=merge -p '{"spec": {"approvalDecision": "reject"}}'1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定
NonAdminBackupStorageLocationRequestCR 的名称。
5.19.2.5. OADP 自助服务管理员 DPA spec 强制 复制链接链接已复制到粘贴板!
作为集群管理员,您可以在 DataProtectionApplication (DPA) spec 模板中强制实施策略。spec 强制适用于 Self-Service 自定义资源 (CR),如 NonAdminBackup、NonAdminRestore 和 NonAdminBackupStorageLocation。
集群管理员可以使用 DataProtectionApplication (DPA) CR 中的以下字段强制实施公司或合规策略:
enforceBSLSpec-
要在
NonAdminBackupStorageLocationCR 上强制执行策略。 enforceBackupSpec-
要在
NonAdminBackupCR 上强制执行策略。 enforceRestoreSpec-
要在
NonAdminRestoreCR 上强制执行策略。
通过使用强制字段,管理员可以确保命名空间 admin 用户创建的 NABSL、NAB 和 NAR CR 符合管理员定义的策略。
5.19.2.6. NABSL 的自助服务管理员规格强制 复制链接链接已复制到粘贴板!
作为集群管理员,您可以为 NonAdminBackupStorageLocation (NABSL) 自定义资源 (CR) 强制以下字段:
-
objectStorage -
credential -
config -
accessMode -
validationFrequency
例如,如果要强制命名空间 admin 用户使用特定的存储桶,您可以设置 DataProtectionApplication (DPA) CR,如下所示:
DataProtectionApplication CR 示例
当命名空间 admin 用户创建 NABSL 时,他们必须遵循 DPA 中设置的模板。否则,NABSL CR 上的 status.phase 字段设置为 BackingOff,NABSL 无法创建。
5.19.2.7. NAB 的自助服务管理员规格实施 复制链接链接已复制到粘贴板!
作为集群管理员,您可以为 NonAdminBackup (NAB) CR 强制以下字段:
-
csiSnapshotTimeout -
itemOperationTimeout -
resourcePolicy -
includedResources -
excludedResources -
orderedResources -
includeClusterResources -
excludedClusterScopedResources -
excludedNamespaceScopedResources -
includedNamespaceScopedResources -
labelSelector -
orLabelSelectors -
snapshotVolumes -
ttl -
snapshotMoveData -
uploaderConfig.parallelFilesUpload
如果要为命名空间 admin 用户强制执行 ttl 值和 Data Mover 备份,您可以设置 DataProtectionApplication (DPA) CR,如下例所示:
DataProtectionApplication CR 示例
当命名空间 admin 用户创建 NAB CR 时,他们必须遵循 DPA 中设置的模板。否则,NAB CR 上的 status.phase 字段设置为 BackingOff,NAB CR 无法创建。
5.19.2.8. NAR 的自助服务管理员规格实施 复制链接链接已复制到粘贴板!
作为集群管理员,您可以为 NonAdminRestore (NAR) 自定义资源 (CR) 强制以下字段:
-
itemOperationTimeout -
uploaderConfig -
includedResources -
excludedResources -
restoreStatus -
includeClusterResources -
labelSelector -
orLabelSelectors -
restorePVs -
preserveNodePorts
5.19.3. OADP 自助服务命名空间管理用例 复制链接链接已复制到粘贴板!
作为命名空间 admin 用户,您可以在以下情况下使用 Self-Service 功能:
- 在授权命名空间中创建备份存储位置。
-
创建
NonAdminBackup(NAB)自定义资源 (CR)。 -
创建
NonAdminRestore(NAR) CR。 - 查看 NAB 和 NAR 日志。
5.19.3.1. 创建 NonAdminBackupStorageLocation CR 复制链接链接已复制到粘贴板!
您可以在授权命名空间中创建 NonAdminBackupStorageLocation (NABSL) 自定义资源 (CR)。集群管理员批准 NABSL CR 请求后,您可以使用 NonAdminBackup CR spec 中的 NABSL CR。
先决条件
- 以命名空间 admin 用户身份登录集群。
- 集群管理员已安装了 OADP Operator。
-
集群管理员已将
DataProtectionApplication(DPA) CR 配置为启用 OADP Self-Service。 - 集群管理员已为您创建了一个命名空间,并有权从该命名空间操作。
流程
使用您的云供应商的云凭证文件内容创建
SecretCR。运行以下命令:oc create secret generic cloud-credentials -n test-nac-ns --from-file <cloud_key_name>=<cloud_credentials_file>
$ oc create secret generic cloud-credentials -n test-nac-ns --from-file <cloud_key_name>=<cloud_credentials_file>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 在本例中,
Secret名称是cloud-credentials,授权命名空间名称为test-nac-ns。将<cloud_key_name>和<cloud_credentials_file>替换为您的云密钥名称和云凭证文件名。
要创建
NonAdminBackupStorageLocationCR,请使用以下配置创建一个 YAML 清单文件:NonAdminBackupStorageLocationCR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要应用 NABSL CR 配置,请运行以下命令:
oc apply -f <nabsl_cr_filename>
$ oc apply -f <nabsl_cr_filename>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<nabsl_cr_filename>替换为包含 NABSL CR 配置的文件名。
验证
要验证 NABSL CR 是否在
New阶段,且待处理的管理员批准,请运行以下命令:oc get nabsl test-nabsl -o yaml
$ oc get nabsl test-nabsl -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 集群管理员批准
NonAdminBackupStorageLocationRequestCR 请求后,通过运行以下命令验证 NABSL CR 是否已成功创建:oc get nabsl test-nabsl -o yaml
$ oc get nabsl test-nabsl -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.19.3.2. 创建 NonAdminBackup CR 复制链接链接已复制到粘贴板!
作为命名空间 admin 用户,您可以创建一个 NonAdminBackup (NAB) 自定义资源 (CR) 来从授权命名空间中备份应用程序。NAB 是一个 OpenShift Container Platform CR,可以安全地创建 Velero 备份对象。Velero 备份对象将状态报告回 NAB CR,该 CR 最终会更新 status.phase 字段。
创建 NAB CR 后,CR 会经历以下阶段:
-
CR 的初始阶段是
New。 -
CR 创建请求进入
NonAdminController(NAC) 以进行协调和验证。 -
在成功验证并创建
Velero备份对象后,NAB CR 的status.phase字段会更新至下一个阶段,即Created。
在创建 NAB CR 时,请查看以下重要点:
-
NonAdminBackupCR 安全地创建Velero备份对象,以便其他命名空间管理员用户无法访问 CR。 - 作为命名空间 admin 用户,您只能在 NAB CR 中指定授权命名空间。当您指定没有授权使用的命名空间时,您会收到一个错误。
先决条件
- 以命名空间 admin 用户身份登录集群。
- 集群管理员已安装了 OADP Operator。
-
集群管理员已将
DataProtectionApplication(DPA) CR 配置为启用 OADP Self-Service。 - 集群管理员已为您创建了一个命名空间,并有权从该命名空间操作。
-
可选:您可以创建并使用
NonAdminBackupStorageLocation(NABSL) CR 来存储备份数据。如果不使用 NABSL CR,则备份将存储在 DPA 中配置的默认备份存储位置。
流程
要创建
NonAdminBackupCR,请使用以下配置创建一个 YAML 清单文件:NonAdminBackupCR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要应用 NAB CR 配置,请运行以下命令:
oc apply -f <nab_cr_filename>
$ oc apply -f <nab_cr_filename>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定包含 NAB CR 配置的文件名。
验证
要验证 NAB CR 是否已成功创建,请运行以下命令:
oc get nab test-nab -o yaml
$ oc get nab test-nab -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 在
Velero备份对象上设置NonAdminControllerCR 的命名空间名称来备份。 - 2
- NAC 已协调并验证 NAB CR,并创建了
Velero备份对象。 - 3
fileSystemPodVolumeBackups字段指示使用 FSB 备份的卷数量。- 4
- NAB CR 处于
Created阶段。 - 5
- 此字段表示备份对象的队列位置。过程中可以有多个备份,每个备份对象被分配一个队列位置。备份完成后,队列位置设置为
0。 - 6
- NAC 创建
Velero备份对象,并为nacuuid字段设置值。 - 7
- 关联的
Velero备份对象的名称。 - 8
Velero备份对象的状态。- 9
Velero备份对象处于Completed阶段,备份成功。
5.19.3.3. 创建 NonAdminRestore CR 复制链接链接已复制到粘贴板!
作为命名空间 admin 用户,若要恢复备份,您可以创建一个 NonAdminRestore (NAR) 自定义资源 (CR)。备份恢复到授权的命名空间。
先决条件
- 以命名空间 admin 用户身份登录集群。
- 集群管理员已安装了 OADP Operator。
-
集群管理员已将
DataProtectionApplication(DPA) CR 配置为启用 OADP Self-Service。 - 集群管理员已为您创建了一个命名空间,并有权从该命名空间操作。
-
您可以通过创建一个
NonAdminBackup(NAB) CR 来备份应用程序。
流程
要创建
NonAdminRestoreCR,请使用以下配置创建一个 YAML 清单文件:NonAdminRestoreCR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要应用 NAR CR 配置,请运行以下命令:
oc apply -f <nar_cr_filename>
$ oc apply -f <nar_cr_filename>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<nar_cr_filename>替换为包含 NAR CR 配置的文件名。
验证
要验证 NAR CR 是否已成功创建,请运行以下命令:
oc get nar test-nar -o yaml
$ oc get nar test-nar -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.19.3.4. 关于 NonAdminDownloadRequest CR 复制链接链接已复制到粘贴板!
作为命名空间 admin 用户,您可以使用 NonAdminDownloadRequest (NADR) 自定义资源 (CR) 访问备份和恢复的详细信息,以进行故障排除。
此 CR 提供的信息与集群管理员使用 velero backup describe --details 命令可以访问的相同。
验证 NADR CR 请求后,会生成一个安全下载 URL 以访问请求的信息。
您可以下载以下 NADR 资源:
| 资源类型 | 描述 | 等同于 |
|
| 备份中包含的资源列表 |
|
|
| 备份的文件内容 | 备份详情的一部分 |
|
| 来自备份操作的日志 |
|
|
| 有关卷快照的信息 |
|
|
| 有关备份过程中执行的项目操作的信息 |
|
|
| 来自恢复操作的日志 |
|
|
| 恢复的详细结果 |
|
5.19.3.5. 查看 NAB 和 NAR 日志 复制链接链接已复制到粘贴板!
作为命名空间 admin 用户,您可以通过创建 NonAdminDownloadRequest (NADR) CR 来查看 NonAdminBackup (NAB) 和 NonAdminRestore (NAR) 自定义资源 (CR) 的日志。
只有在使用 NonAdminBackupStorageLocation (NABSL) CR 作为备份的备份存储位置时,才能查看 NAB 日志。
先决条件
- 以命名空间 admin 用户身份登录集群。
- 集群管理员已安装了 OADP Operator。
-
集群管理员已将
DataProtectionApplication(DPA) CR 配置为启用 OADP Self-Service。 - 集群管理员已为您创建了一个命名空间,并有权从该命名空间操作。
- 您可以通过创建一个 NAB CR 来备份应用程序。
- 您已通过创建一个 NAR CR 来恢复应用程序。
流程
要查看 NAB CR 日志,请创建一个
NonAdminDownloadRequestCR,并指定 NAB CR 名称,如下例所示:NonAdminDownloadRequestCR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证 NADR CR 是否已处理。
oc get nadr test-nadr-backup -o yaml
$ oc get nadr test-nadr-backup -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
使用
status.downloadURLURL 下载和分析备份信息。 要查看 NAR CR 日志,请创建一个
NonAdminDownloadRequestCR,并指定 NAR CR 名称,如下例所示:NonAdminDownloadRequestCR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证 NADR CR 是否已处理。
oc get nadr test-nadr-restore -o yaml
$ oc get nadr test-nadr-restore -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
使用
status.downloadURLURL 下载和分析恢复信息。
5.19.4. OADP 自助服务故障排除 复制链接链接已复制到粘贴板!
在使用 OADP Self-Service 时,您可以使用以下部分排除常见错误。
请考虑以下命名空间 admin 备份的场景:
-
您已在两个不同的命名空间中创建了两个
NonAdminBackupStorageLocations(NABLs) 自定义资源 (CR),例如,namespace-1中的nabsl-1和namespace-2中的nabsl-2。 -
您需要对
namespace-1进行备份,并在NonAdminBackup(NAB) CR 中使用nabsl-2。
在这种情况下,在创建 NAB CR 后会出现以下错误:
NonAdminBackupStorageLocation not found in the namespace: NonAdminBackupStorageLocation.oadp.openshift.io
NonAdminBackupStorageLocation not found in the namespace: NonAdminBackupStorageLocation.oadp.openshift.io
造成错误的原因是 NABSL CR 不属于您要备份的命名空间。
错误
解决方案
使用属于您要备份的同一命名空间的 NABSL。
在这种情况下,您必须在 NAB CR 中使用 nabsl-1 来备份 namespace-1。
5.19.4.2. NonAdminBackupStorageLocation 无法设置为默认 复制链接链接已复制到粘贴板!
作为非管理员用户,如果您在授权命名空间中创建了 NonAdminBackupStorageLocation (NABSL) 自定义资源 (CR),则无法将 NABSL CR 设置为默认备份存储位置。
在这种情况下,NABSL CR 无法验证,NonAdminController (NAC) 会显示错误消息。
NABSL 错误示例
解决方案
要成功验证并协调 NABSL CR,请确保在 NABSL CR 中的 default 字段设置为 false。
5.20. OADP 和 ROSA 复制链接链接已复制到粘贴板!
5.20.1. 使用 OADP 在 ROSA 集群上备份应用程序 复制链接链接已复制到粘贴板!
您可以使用 OpenShift API for Data Protection (OADP)与 Red Hat OpenShift Service on AWS (ROSA) 集群来备份和恢复应用程序数据。
ROSA 是一个完全管理的一站式应用平台,允许您通过构建和部署应用程序来为客户提供价值。
ROSA 提供与各种 Amazon Web Services(AWS)计算、数据库、分析、机器学习、网络、移动和其他服务无缝集成,以加快为您的客户构建和交付不同体验。
您可以直接从 AWS 帐户订阅该服务。
创建集群后,您可以使用 OpenShift Container Platform Web 控制台或 Red Hat OpenShift Cluster Manager 来运行集群。您还可以在 OpenShift API 和命令行界面 (CLI) 工具中使用 ROSA。
有关 ROSA 安装的更多信息,请参阅在 AWS (ROSA)上安装 Red Hat OpenShift Service。
在为数据保护(OADP)安装 OpenShift API 前,您必须为 OADP 设置角色和策略凭证,以便它可以使用 Amazon Web Services API。
这个过程在以下两个阶段执行:
- 准备 AWS 凭证
- 安装 OADP Operator 并为其提供 IAM 角色
5.20.1.1. 为 OADP 准备 AWS 凭证 复制链接链接已复制到粘贴板!
必须准备 Amazon Web Services 帐户,并配置为接受 OpenShift API for Data Protection (OADP) 安装。
流程
运行以下命令来创建以下环境变量:
重要更改集群名称来匹配您的集群,并确保以管理员身份登录到集群。在继续操作前,确保所有字段被正常输出。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
my-cluster替换为您的集群名称。
在 AWS 帐户中,创建一个 IAM 策略以允许访问 AWS S3:
运行以下命令,检查策略是否存在:
POLICY_ARN=$(aws iam list-policies --query "Policies[?PolicyName=='RosaOadpVer1'].{ARN:Arn}" --output text)$ POLICY_ARN=$(aws iam list-policies --query "Policies[?PolicyName=='RosaOadpVer1'].{ARN:Arn}" --output text)1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
RosaOadp替换为您的策略名称。
输入以下命令来创建策略 JSON 文件,然后创建策略:
注意如果没有找到策略 ARN,命令会创建策略。如果策略 ARN 已存在,则
if语句会有意跳过策略创建。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
SCRATCH是为环境变量创建的临时目录的名称。
运行以下命令来查看策略 ARN:
echo ${POLICY_ARN}$ echo ${POLICY_ARN}Copy to Clipboard Copied! Toggle word wrap Toggle overflow
为集群创建 IAM 角色信任策略:
运行以下命令来创建信任策略文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建角色:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来查看角色 ARN:
echo ${ROLE_ARN}$ echo ${ROLE_ARN}Copy to Clipboard Copied! Toggle word wrap Toggle overflow
运行以下命令,将 IAM 策略附加到 IAM 角色:
aws iam attach-role-policy --role-name "${ROLE_NAME}" \ --policy-arn ${POLICY_ARN}$ aws iam attach-role-policy --role-name "${ROLE_NAME}" \ --policy-arn ${POLICY_ARN}Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.20.1.2. 安装 OADP Operator 并提供 IAM 角色 复制链接链接已复制到粘贴板!
AWS 安全令牌服务 (AWS STS) 是一个全局 Web 服务,它为 IAM 或联邦用户提供简短凭证。使用 STS 的 OpenShift Container Platform 是推荐的凭证模式。本文档论述了如何在使用 AWS STS 的集群中安装 OpenShift API for Data Protection (OADP)。
不支持 Restic。
在备份不支持 Container Storage Interface (CSI)快照的文件系统时,支持使用 Kopia 文件系统备份(FSB)。
文件系统示例包括:
- Amazon Elastic File System (EFS)
- 网络文件系统 (NFS)
-
emptyDir卷 - 本地卷
对于备份卷,使用 AWS STS 的 OADP on ROSA 仅支持原生快照和 Container Storage Interface (CSI) 快照。Data Mover 备份被支持,但可能会比原生快照慢。
在使用 STS 验证的 Amazon ROSA 集群中,不支持在不同的 AWS 区域中恢复备份数据。
先决条件
-
具有所需访问和令牌的 OpenShift Container Platform 集群。具体步骤请查看为 OADP 准备 AWS 凭证。如果您计划使用两个不同的集群来备份和恢复,您必须为每个集群准备 AWS 凭证,包括
ROLE_ARN。
流程
输入以下命令,从 AWS 令牌文件创建 OpenShift Container Platform secret:
创建凭证文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<aws_region>替换为用于 STS 端点的 AWS 区域。
为 OADP 创建命名空间:
oc create namespace openshift-adp
$ oc create namespace openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 OpenShift Container Platform secret:
oc -n openshift-adp create secret generic cloud-credentials \ --from-file=${SCRATCH}/credentials$ oc -n openshift-adp create secret generic cloud-credentials \ --from-file=${SCRATCH}/credentialsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意在 OpenShift Container Platform 版本 4.15 及更新的版本中,OADP Operator 通过 Operator Lifecycle Manager (OLM) 和 Cloud Credentials Operator (CCO) 支持新的标准化 STS 工作流。在此工作流中,您不需要创建上述 secret,您需要在使用 OpenShift Container Platform Web 控制台安装 OLM 管理的 Operator 时提供角色 ARN,请参阅使用 Web 控制台从 OperatorHub 安装。
前面的 secret 由 CCO 自动创建。
安装 OADP Operator:
- 在 OpenShift Container Platform Web 控制台中,浏览 Operators → OperatorHub。
- 搜索 OADP Operator。
- 在 role_ARN 字段中,粘贴之前创建的 role_arn,再点 Install。
输入以下命令,使用 AWS 凭证创建 AWS 云存储:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令检查应用程序的存储默认存储类:
oc get pvc -n <namespace>
$ oc get pvc -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE applog Bound pvc-351791ae-b6ab-4e8b-88a4-30f73caf5ef8 1Gi RWO gp3-csi 4d19h mysql Bound pvc-16b8e009-a20a-4379-accc-bc81fedd0621 1Gi RWO gp3-csi 4d19h
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE applog Bound pvc-351791ae-b6ab-4e8b-88a4-30f73caf5ef8 1Gi RWO gp3-csi 4d19h mysql Bound pvc-16b8e009-a20a-4379-accc-bc81fedd0621 1Gi RWO gp3-csi 4d19hCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来获取存储类:
oc get storageclass
$ oc get storageclassCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE gp2 kubernetes.io/aws-ebs Delete WaitForFirstConsumer true 4d21h gp2-csi ebs.csi.aws.com Delete WaitForFirstConsumer true 4d21h gp3 ebs.csi.aws.com Delete WaitForFirstConsumer true 4d21h gp3-csi (default) ebs.csi.aws.com Delete WaitForFirstConsumer true 4d21h
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE gp2 kubernetes.io/aws-ebs Delete WaitForFirstConsumer true 4d21h gp2-csi ebs.csi.aws.com Delete WaitForFirstConsumer true 4d21h gp3 ebs.csi.aws.com Delete WaitForFirstConsumer true 4d21h gp3-csi (default) ebs.csi.aws.com Delete WaitForFirstConsumer true 4d21hCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意以下存储类可以正常工作:
- gp3-csi
- gp2-csi
- gp3
- gp2
如果要备份的应用程序或应用程序都使用带有 Container Storage Interface (CSI) 的持久性卷 (PV),建议在 OADP DPA 配置中包含 CSI 插件。
创建
DataProtectionApplication资源,以配置存储备份和卷快照的存储的连接:如果您只使用 CSI 卷,请输入以下命令部署数据保护应用程序:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果使用 CSI 或非 CSI 卷,请输入以下命令来部署数据保护应用程序:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 现在,您可以备份和恢复 OpenShift Container Platform 应用程序,如 备份应用程序 中所述。
此配置中的 restic 的 enable 参数设置为 false,因为 OADP 不支持 ROSA 环境中的 Restic。
如果使用 OADP 1.2,请替换此配置:
nodeAgent: enable: false uploaderType: restic
nodeAgent:
enable: false
uploaderType: restic
使用以下配置:
restic: enable: false
restic:
enable: false
如果要使用两个不同的集群来备份和恢复,则两个集群必须在云存储 CR 和 OADP DataProtectionApplication 配置中具有相同的 AWS S3 存储名称。
5.20.1.3. 更新 OADP Operator 订阅中 IAM 角色 ARN 复制链接链接已复制到粘贴板!
当在 ROSA 安全令牌服务(STS)集群中安装 OADP Operator 时,如果您提供了不正确的 IAM 角色 Amazon Resource Name (ARN),openshift-adp-controller pod 会出错。生成的凭证请求包含错误的 IAM 角色 ARN。要使用正确的 IAM 角色 ARN 更新凭证请求对象,您可以编辑 OADP Operator 订阅并使用正确的值修补 IAM 角色 ARN。通过编辑 OADP Operator 订阅,您不必卸载和重新安装 OADP 来更新 IAM 角色 ARN。
先决条件
- 您有一个带有所需访问和令牌的 Red Hat OpenShift Service on AWS STS 集群。
- 您已在 ROSA STS 集群中安装了 OADP。
流程
要验证 OADP 订阅是否有错误的 IAM 角色 ARN 环境变量设置,请运行以下命令:
oc get sub -o yaml redhat-oadp-operator
$ oc get sub -o yaml redhat-oadp-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 订阅示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 验证您要更新的
ROLEARN的值。
运行以下命令,使用正确的角色 ARN 更新订阅的
ROLEARN字段:oc patch subscription redhat-oadp-operator -p '{"spec": {"config": {"env": [{"name": "ROLEARN", "value": "<role_arn>"}]}}}' --type='merge'$ oc patch subscription redhat-oadp-operator -p '{"spec": {"config": {"env": [{"name": "ROLEARN", "value": "<role_arn>"}]}}}' --type='merge'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<role_arn>-
指定要更新的 IAM 角色 ARN。例如,
arn:aws:iam::160…..6956:role/oadprosa…..8wlf。
运行以下命令,验证
secret对象是否使用正确的角色 ARN 值更新:oc get secret cloud-credentials -o jsonpath='{.data.credentials}' | base64 -d$ oc get secret cloud-credentials -o jsonpath='{.data.credentials}' | base64 -dCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
[default] sts_regional_endpoints = regional role_arn = arn:aws:iam::160.....6956:role/oadprosa.....8wlf web_identity_token_file = /var/run/secrets/openshift/serviceaccount/token
[default] sts_regional_endpoints = regional role_arn = arn:aws:iam::160.....6956:role/oadprosa.....8wlf web_identity_token_file = /var/run/secrets/openshift/serviceaccount/tokenCopy to Clipboard Copied! Toggle word wrap Toggle overflow 配置
DataProtectionApplication自定义资源 (CR) 清单文件,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定
CloudStorageCR。
运行以下命令来创建
DataProtectionApplicationCR:oc create -f <dpa_manifest_file>
$ oc create -f <dpa_manifest_file>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证
DataProtectionApplicationCR 是否已协调,status是否已设置为"True":oc get dpa -n openshift-adp -o yaml
$ oc get dpa -n openshift-adp -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow DataProtectionApplication示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证
BackupStorageLocationCR 是否为可用状态:oc get backupstoragelocations.velero.io -n openshift-adp
$ oc get backupstoragelocations.velero.io -n openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow BackupStorageLocation示例NAME PHASE LAST VALIDATED AGE DEFAULT ts-dpa-1 Available 3s 6s true
NAME PHASE LAST VALIDATED AGE DEFAULT ts-dpa-1 Available 3s 6s trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.20.1.4. 示例:使用可选清理在 OADP ROSA STS 上备份工作负载 复制链接链接已复制到粘贴板!
5.20.1.4.1. 使用 OADP 和 OpenShift Container Platform 执行备份 复制链接链接已复制到粘贴板!
以下示例 hello-world 应用没有附加持久性卷 (PV)。在 OpenShift Container Platform 中使用 OpenShift API for Data Protection (OADP) 执行备份。
数据保护应用程序 (DPA) 配置都将正常工作。
运行以下命令,创建一个工作负载来备份:
oc create namespace hello-world
$ oc create namespace hello-worldCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc new-app -n hello-world --image=docker.io/openshift/hello-openshift
$ oc new-app -n hello-world --image=docker.io/openshift/hello-openshiftCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来公开路由:
oc expose service/hello-openshift -n hello-world
$ oc expose service/hello-openshift -n hello-worldCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令检查应用程序是否正常工作:
curl `oc get route/hello-openshift -n hello-world -o jsonpath='{.spec.host}'`$ curl `oc get route/hello-openshift -n hello-world -o jsonpath='{.spec.host}'`Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Hello OpenShift!
Hello OpenShift!Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来备份工作负载:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 等待备份完成,然后运行以下命令:
watch "oc -n openshift-adp get backup hello-world -o json | jq .status"
$ watch "oc -n openshift-adp get backup hello-world -o json | jq .status"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来删除 demo 工作负载:
oc delete ns hello-world
$ oc delete ns hello-worldCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,从备份中恢复工作负载:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令等待 Restore 完成:
watch "oc -n openshift-adp get restore hello-world -o json | jq .status"
$ watch "oc -n openshift-adp get restore hello-world -o json | jq .status"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令检查工作负载是否已恢复:
oc -n hello-world get pods
$ oc -n hello-world get podsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE hello-openshift-9f885f7c6-kdjpj 1/1 Running 0 90s
NAME READY STATUS RESTARTS AGE hello-openshift-9f885f7c6-kdjpj 1/1 Running 0 90sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来检查 JSONPath:
curl `oc get route/hello-openshift -n hello-world -o jsonpath='{.spec.host}'`$ curl `oc get route/hello-openshift -n hello-world -o jsonpath='{.spec.host}'`Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Hello OpenShift!
Hello OpenShift!Copy to Clipboard Copied! Toggle word wrap Toggle overflow
有关故障排除提示,请参阅故障排除文档。
5.20.1.4.2. 使用 OADP 和 ROSA STS 的备份后清理集群 复制链接链接已复制到粘贴板!
如果您需要卸载 OpenShift API for Data Protection (OADP) Operator 以及本例中的备份和 S3 存储桶,请按照以下步骤操作。
流程
运行以下命令来删除工作负载:
oc delete ns hello-world
$ oc delete ns hello-worldCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来删除数据保护应用程序 (DPA):
oc -n openshift-adp delete dpa ${CLUSTER_NAME}-dpa$ oc -n openshift-adp delete dpa ${CLUSTER_NAME}-dpaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来删除云存储:
oc -n openshift-adp delete cloudstorage ${CLUSTER_NAME}-oadp$ oc -n openshift-adp delete cloudstorage ${CLUSTER_NAME}-oadpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 警告如果这个命令挂起,您可能需要通过运行以下命令来删除终结器:
oc -n openshift-adp patch cloudstorage ${CLUSTER_NAME}-oadp -p '{"metadata":{"finalizers":null}}' --type=merge$ oc -n openshift-adp patch cloudstorage ${CLUSTER_NAME}-oadp -p '{"metadata":{"finalizers":null}}' --type=mergeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果不再需要 Operator,请运行以下命令删除它:
oc -n openshift-adp delete subscription oadp-operator
$ oc -n openshift-adp delete subscription oadp-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 从 Operator 中删除命名空间:
oc delete ns openshift-adp
$ oc delete ns openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果不再需要备份和恢复资源,请运行以下命令从集群中删除它们:
oc delete backups.velero.io hello-world
$ oc delete backups.velero.io hello-worldCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要删除 AWS S3 中的备份、恢复和远程对象,请运行以下命令:
velero backup delete hello-world
$ velero backup delete hello-worldCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您不再需要自定义资源定义 (CRD),请运行以下命令从集群中删除它们:
for CRD in `oc get crds | grep velero | awk '{print $1}'`; do oc delete crd $CRD; done$ for CRD in `oc get crds | grep velero | awk '{print $1}'`; do oc delete crd $CRD; doneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来删除 AWS S3 存储桶:
aws s3 rm s3://${CLUSTER_NAME}-oadp --recursive$ aws s3 rm s3://${CLUSTER_NAME}-oadp --recursiveCopy to Clipboard Copied! Toggle word wrap Toggle overflow aws s3api delete-bucket --bucket ${CLUSTER_NAME}-oadp$ aws s3api delete-bucket --bucket ${CLUSTER_NAME}-oadpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,将策略从角色分离:
aws iam detach-role-policy --role-name "${ROLE_NAME}" --policy-arn "${POLICY_ARN}"$ aws iam detach-role-policy --role-name "${ROLE_NAME}" --policy-arn "${POLICY_ARN}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来删除角色:
aws iam delete-role --role-name "${ROLE_NAME}"$ aws iam delete-role --role-name "${ROLE_NAME}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.21. OADP 和 AWS STS 复制链接链接已复制到粘贴板!
5.21.1. 使用 OADP 在 AWS STS 上备份应用程序 复制链接链接已复制到粘贴板!
您可以通过安装 OADP Operator,使用 Amazon Web Services (AWS) 安装 OpenShift API for Data Protection (OADP)。Operator 安装 Velero 1.16。
从 OADP 1.0.4 开始,所有 OADP 1.0.z 版本只能用作 Migration Toolkit for Containers Operator 的依赖项,且不能作为独立 Operator 提供。
您可以为 Velero 配置 AWS,创建一个默认 Secret,然后安装数据保护应用程序。如需了解更多详细信息,请参阅安装 OADP Operator。
要在受限网络环境中安装 OADP Operator,您必须首先禁用默认的 OperatorHub 源并镜像 Operator 目录。详情请参阅在断开连接的环境中使用 Operator Lifecycle Manager。
您可以手动在 AWS 安全令牌服务 (AWS STS) 集群上安装 OADP。Amazon AWS 将 AWS STS 作为 Web 服务提供,可让您为用户请求临时的、带有有限权限的凭证。您可以使用 STS 通过 API 调用、AWS 控制台或 AWS 命令行界面(CLI)为可信用户提供临时访问资源。
在为数据保护(OADP)安装 OpenShift API 前,您必须为 OADP 设置角色和策略凭证,以便它可以使用 Amazon Web Services API。
这个过程在以下两个阶段执行:
- 准备 AWS 凭证。
- 安装 OADP Operator,并为它提供一个 IAM 角色。
5.21.1.1. 为 OADP 准备 AWS STS 凭证 复制链接链接已复制到粘贴板!
必须准备 Amazon Web Services 帐户,并配置为接受 OpenShift API for Data Protection (OADP) 安装。使用以下步骤准备 AWS 凭证。
流程
运行以下命令来定义
cluster_name环境变量:export CLUSTER_NAME= <AWS_cluster_name>
$ export CLUSTER_NAME= <AWS_cluster_name>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 变量可以设置为任何值。
运行以下命令,获取
cluster的详情,如AWS_ACCOUNT_ID, OIDC_ENDPOINT:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,创建一个临时目录来存储所有文件:
export SCRATCH="/tmp/${CLUSTER_NAME}/oadp"$ export SCRATCH="/tmp/${CLUSTER_NAME}/oadp" mkdir -p ${SCRATCH}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令显示所有收集的详细信息:
echo "Cluster ID: ${AWS_CLUSTER_ID}, Region: ${REGION}, OIDC Endpoint:$ echo "Cluster ID: ${AWS_CLUSTER_ID}, Region: ${REGION}, OIDC Endpoint: ${OIDC_ENDPOINT}, AWS Account ID: ${AWS_ACCOUNT_ID}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 AWS 帐户中,创建一个 IAM 策略以允许访问 AWS S3:
运行以下命令,检查策略是否存在:
export POLICY_NAME="OadpVer1"
$ export POLICY_NAME="OadpVer1"1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 变量可以设置为任何值。
POLICY_ARN=$(aws iam list-policies --query "Policies[?PolicyName=='$POLICY_NAME'].{ARN:Arn}" --output text)$ POLICY_ARN=$(aws iam list-policies --query "Policies[?PolicyName=='$POLICY_NAME'].{ARN:Arn}" --output text)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令来创建策略 JSON 文件,然后创建策略:
注意如果没有找到策略 ARN,命令会创建策略。如果策略 ARN 已存在,则
if语句会有意跳过策略创建。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
SCRATCH是为存储文件创建的临时目录的名称。
运行以下命令来查看策略 ARN:
echo ${POLICY_ARN}$ echo ${POLICY_ARN}Copy to Clipboard Copied! Toggle word wrap Toggle overflow
为集群创建 IAM 角色信任策略:
运行以下命令来创建信任策略文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,为集群创建 IAM 角色信任策略:
ROLE_ARN=$(aws iam create-role --role-name \ "${ROLE_NAME}" \ --assume-role-policy-document file://${SCRATCH}/trust-policy.json \ --tags Key=cluster_id,Value=${AWS_CLUSTER_ID} Key=openshift_version,Value=${CLUSTER_VERSION} Key=operator_namespace,Value=openshift-adp Key=operator_name,Value=oadp --query Role.Arn --output text)$ ROLE_ARN=$(aws iam create-role --role-name \ "${ROLE_NAME}" \ --assume-role-policy-document file://${SCRATCH}/trust-policy.json \ --tags Key=cluster_id,Value=${AWS_CLUSTER_ID} Key=openshift_version,Value=${CLUSTER_VERSION} Key=operator_namespace,Value=openshift-adp Key=operator_name,Value=oadp --query Role.Arn --output text)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来查看角色 ARN:
echo ${ROLE_ARN}$ echo ${ROLE_ARN}Copy to Clipboard Copied! Toggle word wrap Toggle overflow
运行以下命令,将 IAM 策略附加到 IAM 角色:
aws iam attach-role-policy --role-name "${ROLE_NAME}" --policy-arn ${POLICY_ARN}$ aws iam attach-role-policy --role-name "${ROLE_NAME}" --policy-arn ${POLICY_ARN}Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.21.1.1.1. 设置 Velero CPU 和内存分配 复制链接链接已复制到粘贴板!
您可以通过编辑 DataProtectionApplication 自定义资源(CR)清单来为 Velero pod 设置 CPU 和内存分配。
先决条件
- 您必须安装了 OpenShift API for Data Protection(OADP)Operator。
流程
编辑
DataProtectionApplicationCR 清单的spec.configuration.velero.podConfig.ResourceAllocations块中的值,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意Kopia 是 OADP 1.3 及之后的版本中的一个选项。您可以使用 Kopia 进行文件系统备份,Kopia 是 Data Mover 的唯一选择,并带有内置数据 Mover。
和 Restic 相比,Kopia 需要更多资源,您可能需要相应地调整 CPU 和内存要求。
5.21.1.2. 安装 OADP Operator 并提供 IAM 角色 复制链接链接已复制到粘贴板!
AWS 安全令牌服务 (AWS STS) 是一个全局 Web 服务,它为 IAM 或联邦用户提供简短凭证。本文档论述了如何在 AWS STS 集群中手动安装 OpenShift API for Data Protection (OADP)。
不支持 Restic。
在备份不支持 Container Storage Interface (CSI)快照的文件系统时,支持使用 Kopia 文件系统备份(FSB)。
文件系统示例包括:
- Amazon Elastic File System (EFS)
- 网络文件系统 (NFS)
-
emptyDir卷 - 本地卷
对于备份卷,使用 STS 的 OADP on ROSA 仅支持原生快照和 Container Storage Interface (CSI) 快照。Data Mover 备份被支持,但可能会比原生快照慢。
在使用 STS 验证的 AWS 集群中,不支持在不同的 AWS 区域中恢复备份数据。
先决条件
-
具有所需访问权限和令牌的 OpenShift Container Platform AWS STS 集群。具体步骤请查看为 OADP 准备 AWS 凭证。如果您计划使用两个不同的集群来备份和恢复,您必须为每个集群准备 AWS 凭证,包括
ROLE_ARN。
流程
输入以下命令,从 AWS 令牌文件创建 OpenShift Container Platform secret:
创建凭证文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<aws_region>替换为用于 STS 端点的 AWS 区域。
为 OADP 创建命名空间:
oc create namespace openshift-adp
$ oc create namespace openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 OpenShift Container Platform secret:
oc -n openshift-adp create secret generic cloud-credentials \ --from-file=${SCRATCH}/credentials$ oc -n openshift-adp create secret generic cloud-credentials \ --from-file=${SCRATCH}/credentialsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意在 OpenShift Container Platform 版本 4.14 及更新的版本中,OADP Operator 通过 Operator Lifecycle Manager (OLM) 和 Cloud Credentials Operator (CCO)支持新的标准化 STS 工作流。在此工作流中,您不需要创建上述 secret,您需要在使用 OpenShift Container Platform Web 控制台安装 OLM 管理的 Operator 时提供角色 ARN,请参阅使用 Web 控制台从 OperatorHub 安装。
前面的 secret 由 CCO 自动创建。
安装 OADP Operator:
- 在 OpenShift Container Platform Web 控制台中,浏览 Operators → OperatorHub。
- 搜索 OADP Operator。
- 在 role_ARN 字段中,粘贴之前创建的 role_arn,再点 Install。
输入以下命令,使用 AWS 凭证创建 AWS 云存储:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令检查应用程序的存储默认存储类:
oc get pvc -n <namespace>
$ oc get pvc -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE applog Bound pvc-351791ae-b6ab-4e8b-88a4-30f73caf5ef8 1Gi RWO gp3-csi 4d19h mysql Bound pvc-16b8e009-a20a-4379-accc-bc81fedd0621 1Gi RWO gp3-csi 4d19h
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE applog Bound pvc-351791ae-b6ab-4e8b-88a4-30f73caf5ef8 1Gi RWO gp3-csi 4d19h mysql Bound pvc-16b8e009-a20a-4379-accc-bc81fedd0621 1Gi RWO gp3-csi 4d19hCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来获取存储类:
oc get storageclass
$ oc get storageclassCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE gp2 kubernetes.io/aws-ebs Delete WaitForFirstConsumer true 4d21h gp2-csi ebs.csi.aws.com Delete WaitForFirstConsumer true 4d21h gp3 ebs.csi.aws.com Delete WaitForFirstConsumer true 4d21h gp3-csi (default) ebs.csi.aws.com Delete WaitForFirstConsumer true 4d21h
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE gp2 kubernetes.io/aws-ebs Delete WaitForFirstConsumer true 4d21h gp2-csi ebs.csi.aws.com Delete WaitForFirstConsumer true 4d21h gp3 ebs.csi.aws.com Delete WaitForFirstConsumer true 4d21h gp3-csi (default) ebs.csi.aws.com Delete WaitForFirstConsumer true 4d21hCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意以下存储类可以正常工作:
- gp3-csi
- gp2-csi
- gp3
- gp2
如果要备份的应用程序或应用程序都使用带有 Container Storage Interface (CSI) 的持久性卷 (PV),建议在 OADP DPA 配置中包含 CSI 插件。
创建
DataProtectionApplication资源,以配置存储备份和卷快照的存储的连接:如果您只使用 CSI 卷,请输入以下命令部署数据保护应用程序:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果使用 CSI 或非 CSI 卷,请输入以下命令来部署数据保护应用程序:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 现在,您可以备份和恢复 OpenShift Container Platform 应用程序,如 备份应用程序 中所述。
如果使用 OADP 1.2,请替换此配置:
nodeAgent: enable: false uploaderType: restic
nodeAgent:
enable: false
uploaderType: restic
使用以下配置:
restic: enable: false
restic:
enable: false
如果要使用两个不同的集群来备份和恢复,则两个集群必须在云存储 CR 和 OADP DataProtectionApplication 配置中具有相同的 AWS S3 存储名称。
5.21.1.3. 备份 OADP AWS STS 上的工作负载,可以使用可选的清理 复制链接链接已复制到粘贴板!
5.21.1.3.1. 使用 OADP 和 AWS STS 执行备份 复制链接链接已复制到粘贴板!
以下示例 hello-world 应用没有附加持久性卷 (PV)。使用 OpenShift API 对 Amazon Web Services (AWS STS) 的数据保护 (OADP) 执行备份。
数据保护应用程序 (DPA) 配置都将正常工作。
运行以下命令,创建一个工作负载来备份:
oc create namespace hello-world
$ oc create namespace hello-worldCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc new-app -n hello-world --image=docker.io/openshift/hello-openshift
$ oc new-app -n hello-world --image=docker.io/openshift/hello-openshiftCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来公开路由:
oc expose service/hello-openshift -n hello-world
$ oc expose service/hello-openshift -n hello-worldCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令检查应用程序是否正常工作:
curl `oc get route/hello-openshift -n hello-world -o jsonpath='{.spec.host}'`$ curl `oc get route/hello-openshift -n hello-world -o jsonpath='{.spec.host}'`Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Hello OpenShift!
Hello OpenShift!Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来备份工作负载:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 等待备份完成,然后运行以下命令:
watch "oc -n openshift-adp get backup hello-world -o json | jq .status"
$ watch "oc -n openshift-adp get backup hello-world -o json | jq .status"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来删除 demo 工作负载:
oc delete ns hello-world
$ oc delete ns hello-worldCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,从备份中恢复工作负载:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令等待 Restore 完成:
watch "oc -n openshift-adp get restore hello-world -o json | jq .status"
$ watch "oc -n openshift-adp get restore hello-world -o json | jq .status"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令检查工作负载是否已恢复:
oc -n hello-world get pods
$ oc -n hello-world get podsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE hello-openshift-9f885f7c6-kdjpj 1/1 Running 0 90s
NAME READY STATUS RESTARTS AGE hello-openshift-9f885f7c6-kdjpj 1/1 Running 0 90sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来检查 JSONPath:
curl `oc get route/hello-openshift -n hello-world -o jsonpath='{.spec.host}'`$ curl `oc get route/hello-openshift -n hello-world -o jsonpath='{.spec.host}'`Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Hello OpenShift!
Hello OpenShift!Copy to Clipboard Copied! Toggle word wrap Toggle overflow
有关故障排除提示的信息,请参阅 OADP 团队的 故障排除文档。
5.21.1.3.2. 在使用 OADP 和 AWS STS 备份后清理集群 复制链接链接已复制到粘贴板!
如果您需要卸载 OpenShift API for Data Protection (OADP) Operator 以及本例中的备份和 S3 存储桶,请按照以下步骤操作。
流程
运行以下命令来删除工作负载:
oc delete ns hello-world
$ oc delete ns hello-worldCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来删除数据保护应用程序 (DPA):
oc -n openshift-adp delete dpa ${CLUSTER_NAME}-dpa$ oc -n openshift-adp delete dpa ${CLUSTER_NAME}-dpaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来删除云存储:
oc -n openshift-adp delete cloudstorage ${CLUSTER_NAME}-oadp$ oc -n openshift-adp delete cloudstorage ${CLUSTER_NAME}-oadpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要如果这个命令挂起,您可能需要通过运行以下命令来删除终结器:
oc -n openshift-adp patch cloudstorage ${CLUSTER_NAME}-oadp -p '{"metadata":{"finalizers":null}}' --type=merge$ oc -n openshift-adp patch cloudstorage ${CLUSTER_NAME}-oadp -p '{"metadata":{"finalizers":null}}' --type=mergeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果不再需要 Operator,请运行以下命令删除它:
oc -n openshift-adp delete subscription oadp-operator
$ oc -n openshift-adp delete subscription oadp-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,从 Operator 中删除命名空间:
oc delete ns openshift-adp
$ oc delete ns openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果不再需要备份和恢复资源,请运行以下命令从集群中删除它们:
oc delete backups.velero.io hello-world
$ oc delete backups.velero.io hello-worldCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要删除 AWS S3 中的备份、恢复和远程对象,请运行以下命令:
velero backup delete hello-world
$ velero backup delete hello-worldCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您不再需要自定义资源定义 (CRD),请运行以下命令从集群中删除它们:
for CRD in `oc get crds | grep velero | awk '{print $1}'`; do oc delete crd $CRD; done$ for CRD in `oc get crds | grep velero | awk '{print $1}'`; do oc delete crd $CRD; doneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来删除 AWS S3 存储桶:
aws s3 rm s3://${CLUSTER_NAME}-oadp --recursive$ aws s3 rm s3://${CLUSTER_NAME}-oadp --recursiveCopy to Clipboard Copied! Toggle word wrap Toggle overflow aws s3api delete-bucket --bucket ${CLUSTER_NAME}-oadp$ aws s3api delete-bucket --bucket ${CLUSTER_NAME}-oadpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,将策略从角色分离:
aws iam detach-role-policy --role-name "${ROLE_NAME}" --policy-arn "${POLICY_ARN}"$ aws iam detach-role-policy --role-name "${ROLE_NAME}" --policy-arn "${POLICY_ARN}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来删除角色:
aws iam delete-role --role-name "${ROLE_NAME}"$ aws iam delete-role --role-name "${ROLE_NAME}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.22. OADP 和 3scale 复制链接链接已复制到粘贴板!
5.22.1. 使用 OADP 备份和恢复 3scale API 管理 复制链接链接已复制到粘贴板!
使用 Red Hat 3scale API Management,您可以为内部或外部用户管理 API。您可以在内部、云端、托管服务或根据您的要求任意组合部署 3scale 组件。
使用 OpenShift API for Data Protection (OADP),您可以通过备份应用程序资源、持久性卷和配置来保护 3scale API 管理部署。
您可以使用 OpenShift API for Data Protection (OADP) Operator 来备份和恢复 3scale API 管理 on-cluster 存储数据库,而不影响正在运行的服务
您可以配置 OADP,以使用 3scale API 管理执行以下操作:
- 按照备份 3scale API Management中的步骤创建 3scale 组件的备份。
- 请按照恢复 3scale API Management中的步骤来恢复 3scale operator 和部署的组件。
5.22.2. 使用 OADP 备份 3scale API 管理 复制链接链接已复制到粘贴板!
您可以通过备份 3scale operator 和 MySQL 和 Redis 等数据库来备份 Red Hat 3scale API 管理组件。
先决条件
- 已安装并配置了 Red Hat 3scale API Management。如需更多信息,请参阅Installing 3scale API Management on OpenShift 和 Red Hat 3scale API Management。
5.22.2.1. 创建数据保护应用程序 复制链接链接已复制到粘贴板!
您可以为 Red Hat 3scale API Management 创建数据保护应用程序 (DPA) 自定义资源 (CR)。
流程
使用以下配置创建 YAML 文件:
dpa.yaml文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建 DPA CR:
oc create -f dpa.yaml
$ oc create -f dpa.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.22.2.2. 备份 3scale API 管理 operator、secret 和 APIManager 复制链接链接已复制到粘贴板!
您可以备份 Red Hat 3scale API Management operator 资源,以及 Secret 和 APIManager 自定义资源 (CR)。
先决条件
- 您创建了数据保护应用程序 (DPA)。
流程
通过创建带有以下配置的 YAML 文件来备份 3scale operator CR,如
operatorgroup,namespaces, 和subscriptions。backup.yaml文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意您还可以备份和恢复
ReplicationController、Deployment和Pod对象,以确保所有手动设置环境都已备份和恢复。这不会影响恢复流。运行以下命令来创建备份 CR:
oc create -f backup.yaml
$ oc create -f backup.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
backup.velero.io/operator-install-backup created
backup.velero.io/operator-install-backup createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 通过使用以下配置创建 YAML 文件来备份
SecretCR:backup-secret.yaml文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 备份中的
metadata.name参数的值与恢复Secret时使用的metadata.backupName参数的值相同。
运行以下命令来创建
Secret备份 CR:oc create -f backup-secret.yaml
$ oc create -f backup-secret.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
backup.velero.io/operator-resources-secrets created
backup.velero.io/operator-resources-secrets createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 通过创建带有以下配置的 YAML 文件来备份 APIManager CR:
backup-apimanager.yaml 文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 备份中的
metadata.name参数的值与恢复 APIManager 时使用的metadata.backupName参数的值相同。
运行以下命令来创建 APIManager CR:
oc create -f backup-apimanager.yaml
$ oc create -f backup-apimanager.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
backup.velero.io/operator-resources-apim created
backup.velero.io/operator-resources-apim createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.22.2.3. 备份 MySQL 数据库 复制链接链接已复制到粘贴板!
您可以通过创建并附加持久性卷声明 (PVC) 来备份 MySQL 数据库,以便在指定路径中包含转储的数据。
先决条件
- 您已备份了 Red Hat 3scale API Management operator。
流程
使用以下配置创建 YAML 文件来添加额外 PVC:
ts_pvc.yaml文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建额外 PVC:
oc create -f ts_pvc.yml
$ oc create -f ts_pvc.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 通过编辑
system-mysql部署以使用 MySQL 转储,将 PVC 附加到系统数据库 pod:oc edit deployment system-mysql -n threescale
$ oc edit deployment system-mysql -n threescaleCopy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 包含转储数据的 PVC。
使用以下配置创建 YAML 文件以备份 MySQL 数据库:
mysql.yaml文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令备份 MySQL 数据库:
oc create -f mysql.yaml
$ oc create -f mysql.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
backup.velero.io/mysql-backup created
backup.velero.io/mysql-backup createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令验证 MySQL 备份是否已完成:
oc get backups.velero.io mysql-backup -o yaml
$ oc get backups.velero.io mysql-backup -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.22.2.4. 备份后端 Redis 数据库 复制链接链接已复制到粘贴板!
您可以通过添加所需的注解并使用 includedResources 参数列出哪些资源来备份 Redis 数据库。
先决条件
- 备份 Red Hat 3scale API Management Operator。
- 您备份了 MySQL 数据库。
- 在执行备份前,Redis 队列已排空。
流程
运行以下命令,编辑
backend-redis部署上的注解:oc edit deployment backend-redis -n threescale
$ oc edit deployment backend-redis -n threescaleCopy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下配置创建 YAML 文件以备份 Redis 数据库:
redis-backup.yaml文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 备份中的
metadata.name参数的值与恢复 Redis 数据库时使用的metadata.backupName参数的值相同。
运行以下命令备份 Redis 数据库:
oc create -f redis-backup.yaml
$ oc create -f redis-backup.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
backup.velero.io/redis-backup created
backup.velero.io/redis-backup createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令验证 Redis 备份是否已完成:
oc get backups.velero.io redis-backup -o yaml
$ oc get backups.velero.io redis-backup -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.22.3. 使用 OADP 恢复 3scale API 管理 复制链接链接已复制到粘贴板!
您可以通过恢复备份的 3scale operator 资源来恢复 Red Hat 3scale API Management 组件。您还可以恢复 MySQL 和 Redis 等数据库。
恢复数据后,您可以扩展 3scale 操作器和部署。
先决条件
- 已安装并配置了 Red Hat 3scale API Management。如需更多信息,请参阅Installing 3scale API Management on OpenShift 和 Red Hat 3scale API Management。
- 您备份了 3scale 操作器和数据库,如 MySQL 和 Redis。
- 确保您在从备份的同一集群中恢复 3scale。
- 如果要在不同的集群中恢复 3scale,请确保原始备份集群和您要恢复 Operator 的集群使用相同的自定义域。
您可以按照以下流程恢复 Red Hat 3scale API Management operator 资源,以及 Secret 和 APIManager 自定义资源 (CR)。
先决条件
- 备份 3scale Operator。
- 您备份了 MySQL 和 Redis 数据库。
您可以在备份的同一集群中恢复数据库。
如果要将 Operator 恢复到您备份的不同集群,请在目标集群上安装和配置 OADP,并在目标集群中启用
nodeAgent。确保 OADP 配置与源集群中的相同。
流程
运行以下命令,删除 3scale operator 自定义资源定义 (CRD) 和
threescale命名空间:oc delete project threescale
$ oc delete project threescaleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
"threescale" project deleted successfully
"threescale" project deleted successfullyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下配置创建 YAML 文件,以恢复 3scale Operator:
restore.yaml文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 恢复 3scale Operator 的备份
运行以下命令来恢复 3scale Operator:
oc create -f restore.yaml
$ oc create -f restore.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
restore.velerio.io/operator-installation-restore created
restore.velerio.io/operator-installation-restore createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令手动创建
s3-credentialsSecret对象:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令缩减 3scale Operator:
oc scale deployment threescale-operator-controller-manager-v2 --replicas=0 -n threescale
$ oc scale deployment threescale-operator-controller-manager-v2 --replicas=0 -n threescaleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
deployment.apps/threescale-operator-controller-manager-v2 scaled
deployment.apps/threescale-operator-controller-manager-v2 scaledCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下配置创建 YAML 文件,以恢复
Secret:restore-secret.yaml文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 恢复
Secret备份。
运行以下命令来恢复
Secret:oc create -f restore-secrets.yaml
$ oc create -f restore-secrets.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
restore.velerio.io/operator-resources-secrets created
restore.velerio.io/operator-resources-secrets createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下配置创建 YAML 文件以恢复 APIManager:
restore-apimanager.yaml文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来恢复 APIManager:
oc create -f restore-apimanager.yaml
$ oc create -f restore-apimanager.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
restore.velerio.io/operator-resources-apim created
restore.velerio.io/operator-resources-apim createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令扩展 3scale Operator:
oc scale deployment threescale-operator-controller-manager-v2 --replicas=1 -n threescale
$ oc scale deployment threescale-operator-controller-manager-v2 --replicas=1 -n threescaleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
deployment.apps/threescale-operator-controller-manager-v2 scaled
deployment.apps/threescale-operator-controller-manager-v2 scaledCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.22.3.2. 恢复 MySQL 数据库 复制链接链接已复制到粘贴板!
恢复 MySQL 数据库重新创建以下资源:
-
Pod、ReplicationController和Deployment对象。 - 其他持久性卷(PV)和关联的持久性卷声明(PVC)。
-
example-claimPVC 包含的 MySQL 转储。
不要删除与数据库关联的默认 PV 和 PVC。如果这样做,您的备份会被删除。
先决条件
-
您恢复了
Secret和 APIManager 自定义资源 (CR)。
流程
运行以下命令缩减 Red Hat 3scale API Management Operator:
oc scale deployment threescale-operator-controller-manager-v2 --replicas=0 -n threescale
$ oc scale deployment threescale-operator-controller-manager-v2 --replicas=0 -n threescaleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
deployment.apps/threescale-operator-controller-manager-v2 scaled
deployment.apps/threescale-operator-controller-manager-v2 scaledCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建以下脚本以缩减 3scale Operator:
vi ./scaledowndeployment.sh
$ vi ./scaledowndeployment.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow 脚本示例:
for deployment in apicast-production apicast-staging backend-cron backend-listener backend-redis backend-worker system-app system-memcache system-mysql system-redis system-searchd system-sidekiq zync zync-database zync-que; do oc scale deployment/$deployment --replicas=0 -n threescale donefor deployment in apicast-production apicast-staging backend-cron backend-listener backend-redis backend-worker system-app system-memcache system-mysql system-redis system-searchd system-sidekiq zync zync-database zync-que; do oc scale deployment/$deployment --replicas=0 -n threescale doneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令缩减所有部署 3scale 组件:
./scaledowndeployment.sh
$ ./scaledowndeployment.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来删除
system-mysqlDeployment对象:oc delete deployment system-mysql -n threescale
$ oc delete deployment system-mysql -n threescaleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Warning: apps.openshift.io/v1 deployment is deprecated in v4.14+, unavailable in v4.10000+ deployment.apps.openshift.io "system-mysql" deleted
Warning: apps.openshift.io/v1 deployment is deprecated in v4.14+, unavailable in v4.10000+ deployment.apps.openshift.io "system-mysql" deletedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建以下 YAML 文件以恢复 MySQL 数据库:
restore-mysql.yaml文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来恢复 MySQL 数据库:
oc create -f restore-mysql.yaml
$ oc create -f restore-mysql.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
restore.velerio.io/restore-mysql created
restore.velerio.io/restore-mysql createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令验证
PodVolumeRestore恢复是否已完成:oc get podvolumerestores.velero.io -n openshift-adp
$ oc get podvolumerestores.velero.io -n openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME NAMESPACE POD UPLOADER TYPE VOLUME STATUS TOTALBYTES BYTESDONE AGE restore-mysql-rbzvm threescale system-mysql-2-kjkhl kopia mysql-storage Completed 771879108 771879108 40m restore-mysql-z7x7l threescale system-mysql-2-kjkhl kopia example-claim Completed 380415 380415 40m
NAME NAMESPACE POD UPLOADER TYPE VOLUME STATUS TOTALBYTES BYTESDONE AGE restore-mysql-rbzvm threescale system-mysql-2-kjkhl kopia mysql-storage Completed 771879108 771879108 40m restore-mysql-z7x7l threescale system-mysql-2-kjkhl kopia example-claim Completed 380415 380415 40mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令验证额外的 PVC 是否已恢复:
oc get pvc -n threescale
$ oc get pvc -n threescaleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.22.3.3. 恢复后端 Redis 数据库 复制链接链接已复制到粘贴板!
您可以通过删除部署并指定您不想恢复的资源来恢复后端 Redis 数据库。
先决条件
-
您恢复了 Red Hat 3scale API Management operator 资源、
Secret和 APIManager 自定义资源。 - 您恢复了 MySQL 数据库。
流程
运行以下命令来删除
backend-redis部署:oc delete deployment backend-redis -n threescale
$ oc delete deployment backend-redis -n threescaleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Warning: apps.openshift.io/v1 deployment is deprecated in v4.14+, unavailable in v4.10000+ deployment.apps.openshift.io "backend-redis" deleted
Warning: apps.openshift.io/v1 deployment is deprecated in v4.14+, unavailable in v4.10000+ deployment.apps.openshift.io "backend-redis" deletedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下配置创建 YAML 文件,以恢复 Redis 数据库:
restore-backend.yaml文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 恢复 Redis 备份。
运行以下命令来恢复 Redis 数据库:
oc create -f restore-backend.yaml
$ oc create -f restore-backend.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
restore.velerio.io/restore-backend created
restore.velerio.io/restore-backend createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令验证
PodVolumeRestore恢复是否已完成:oc get podvolumerestores.velero.io -n openshift-adp
$ oc get podvolumerestores.velero.io -n openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
NAME NAMESPACE POD UPLOADER TYPE VOLUME STATUS TOTALBYTES BYTESDONE AGE restore-backend-jmrwx threescale backend-redis-1-bsfmv kopia backend-redis-storage Completed 76123 76123 21m
NAME NAMESPACE POD UPLOADER TYPE VOLUME STATUS TOTALBYTES BYTESDONE AGE restore-backend-jmrwx threescale backend-redis-1-bsfmv kopia backend-redis-storage Completed 76123 76123 21mCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.22.3.4. 扩展 3scale API 管理 operator 和部署 复制链接链接已复制到粘贴板!
您可以扩展 Red Hat 3scale API Management operator 以及手动缩减的任何部署。几分钟后,3scale 安装应完全正常工作,其状态应与备份的状态匹配。
先决条件
-
您恢复了 3scale operator 资源,以及
Secret和 APIManager 自定义资源 (CR)。 - 您恢复了 MySQL 和后端 Redis 数据库。
-
确保没有扩展部署,或者没有额外的 pod 运行。一些
system-mysql或backend-redispod 在恢复后从部署分离,可以在恢复成功后删除。
流程
运行以下命令扩展 3scale Operator:
oc scale deployment threescale-operator-controller-manager-v2 --replicas=1 -n threescale
$ oc scale deployment threescale-operator-controller-manager-v2 --replicas=1 -n threescaleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
deployment.apps/threescale-operator-controller-manager-v2 scaled
deployment.apps/threescale-operator-controller-manager-v2 scaledCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,确保 3scale pod 正在运行以验证 3scale Operator 是否已部署:
oc get pods -n threescale
$ oc get pods -n threescaleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE threescale-operator-controller-manager-v2-79546bd8c-b4qbh 1/1 Running 0 2m5s
NAME READY STATUS RESTARTS AGE threescale-operator-controller-manager-v2-79546bd8c-b4qbh 1/1 Running 0 2m5sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建以下脚本以扩展部署:
vi ./scaledeployment.sh
$ vi ./scaledeployment.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow 脚本文件示例:
for deployment in apicast-production apicast-staging backend-cron backend-listener backend-redis backend-worker system-app system-memcache system-mysql system-redis system-searchd system-sidekiq zync zync-database zync-que; do oc scale deployment/$deployment --replicas=1 -n threescale donefor deployment in apicast-production apicast-staging backend-cron backend-listener backend-redis backend-worker system-app system-memcache system-mysql system-redis system-searchd system-sidekiq zync zync-database zync-que; do oc scale deployment/$deployment --replicas=1 -n threescale doneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来扩展部署:
./scaledeployment.sh
$ ./scaledeployment.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,获取
3scale-admin路由以登录到 3scale UI:oc get routes -n threescale
$ oc get routes -n threescaleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在本例中,
3scale-admin.apps.custom-cluster-name.openshift.com是 3scale-admin URL。- 以管理员身份,使用此输出中的 URL 登录 3scale operator。您可以验证数据在进行备份时可用。
5.23. OADP Data Mover 复制链接链接已复制到粘贴板!
5.23.1. 关于 OADP Data Mover 复制链接链接已复制到粘贴板!
OpenShift API for Data Protection (OADP) 包含一个内置 Data Mover,您可以使用它来将 Container Storage Interface (CSI) 卷快照移到远程对象存储。如果发生故障、意外删除或损坏,内置的 Data Mover 可让您从远程对象存储中恢复有状态的应用程序。它使用 Kopia 作为上传程序机制来读取快照数据并写入统一存储库。
OADP 支持以下 CSI 快照:
- Red Hat OpenShift Data Foundation
- 使用支持 Kubernetes 卷快照 API 的 Container Storage Interface(CSI)驱动程序的任何其他云存储供应商
5.23.1.1. Data Mover 支持 复制链接链接已复制到粘贴板!
OADP 内置 Data Mover(在 OADP 1.3 中作为技术预览引进)现在完全支持容器化和虚拟机工作负载。
支持
OADP 1.3 生成的 Data Mover 备份可以使用 OADP 1.3、1.4 及更新的版本恢复。这被支持。
不支持
使用 Data Mover 功能进行 OADP 1.1 或 OADP 1.2 的备份无法使用 OADP 1.3 及之后的版本恢复。因此,它不被支持。
OADP 1.1 和 OADP 1.2 不再被支持。OADP 1.1 或 OADP 1.2 中的 DataMover 功能是一个技术预览,永远不会被支持。OADP 1.1 或 OADP 1.2 所做的 dataMover 备份无法在 OADP 的后续版本上恢复。
5.23.1.2. 启用内置 Data Mover 复制链接链接已复制到粘贴板!
要启用内置 Data Mover,您必须在 DataProtectionApplication 自定义资源 (CR) 中包含 CSI 插件并启用节点代理。节点代理是一个 Kubernetes daemonset,用于托管数据移动模块。这包括 Data Mover 控制器、上传程序和存储库。
DataProtectionApplication 清单示例
5.23.1.3. 内置数据管理控制器和自定义资源定义 (CRD) 复制链接链接已复制到粘贴板!
内置的 Data Mover 功能引入了三个新的 API 对象,被定义为 CRD,用于管理备份和恢复:
-
DataDownload: 代表卷快照的数据下载。CSI 插件为每个要恢复的卷创建一个DataDownload对象。DataDownloadCR 包含有关目标卷的信息、指定的 Data Mover、当前数据下载的进度、指定的备份存储库以及进程完成后当前数据下载的结果。 -
DataUpload:代表卷快照的数据上传。CSI 插件为每个 CSI 快照创建一个DataUpload对象。DataUploadCR 包含有关指定快照的信息、指定的 Data Mover、指定的备份存储库、当前数据上传的进度,以及进程完成后当前数据上传的结果。 -
BackupRepository: 代表和管理备份存储库的生命周期。当请求第一个 CSI 快照备份或恢复命名空间时,OADP 会为每个命名空间创建一个备份存储库。
5.23.1.4. 关于增量备份支持 复制链接链接已复制到粘贴板!
OADP 支持对容器化和 OpenShift Virtualization 工作负载进行块和文件系统持久性卷的增量备份。下表总结了对文件系统备份 (FSB)、Container Storage Interface (CSI) 和 CSI Data Mover 的支持:
| 卷模式 | FSB - Restic | FSB - Kopia | CSI | CSI Data Mover |
|---|---|---|---|---|
| Filesystem | S [1], I [2] | S [1], I [2] | S [1] | S [1], I [2] |
| Block | N [3] | N [3] | S [1] | S [1], I [2] |
| 卷模式 | FSB - Restic | FSB - Kopia | CSI | CSI Data Mover |
|---|---|---|---|---|
| Filesystem | N [3] | N [3] | S [1] | S [1], I [2] |
| Block | N [3] | N [3] | S [1] | S [1], I [2] |
- 支持的备份
- 支持的增量备份
- 不支持
CSI Data Mover 备份使用 Kopia,无论 uploaderType 是什么。
5.23.2. 备份和恢复 CSI 快照数据移动 复制链接链接已复制到粘贴板!
您可以使用 OADP 1.3 Data Mover 备份和恢复持久性卷。
5.23.2.1. 使用 CSI 快照备份持久性卷 复制链接链接已复制到粘贴板!
您可以使用 OADP Data Mover 将 Container Storage Interface (CSI) 卷快照备份到远程对象存储。
先决条件
-
您可以使用
cluster-admin角色访问集群。 - 已安装 OADP Operator。
-
您已在
DataProtectionApplication自定义资源(CR) 中包含了 CSI 插件并启用了节点代理。 - 您有一个应用程序,其持久性卷在单独的命名空间中运行。
-
您已将
metadata.labels.velero.io/csi-volumesnapshot-class: "true"键值对添加到VolumeSnapshotClassCR。
流程
为
Backup对象创建一个 YAML 文件,如下例所示:BackupCR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果您使用 XFS 文件系统格式化卷,且卷的使用量已为 100%,则备份会失败,并显示
no space left on device错误。例如:Error: relabel failed /var/lib/kubelet/pods/3ac..34/volumes/ \ kubernetes.io~csi/pvc-684..12c/mount: lsetxattr /var/lib/kubelet/ \ pods/3ac..34/volumes/kubernetes.io~csi/pvc-68..2c/mount/data-xfs-103: \ no space left on device
Error: relabel failed /var/lib/kubelet/pods/3ac..34/volumes/ \ kubernetes.io~csi/pvc-684..12c/mount: lsetxattr /var/lib/kubelet/ \ pods/3ac..34/volumes/kubernetes.io~csi/pvc-68..2c/mount/data-xfs-103: \ no space left on deviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在这种情况下,请考虑调整卷大小或使用不同的文件系统类型(例如
ext4),以便备份可以成功完成。应用清单:
oc create -f backup.yaml
$ oc create -f backup.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在快照创建完成后会创建一个
DataUploadCR。
验证
通过监控
DataUploadCR 的status.phase字段来验证快照数据是否已成功传送到远程对象存储。可能的值为In Progress、Completed、Failed或Canceled。对象存储在DataProtectionApplicationCR 的backupLocations小节中配置。运行以下命令获取所有
DataUpload对象的列表:oc get datauploads -A
$ oc get datauploads -ACopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAMESPACE NAME STATUS STARTED BYTES DONE TOTAL BYTES STORAGE LOCATION AGE NODE openshift-adp backup-test-1-sw76b Completed 9m47s 108104082 108104082 dpa-sample-1 9m47s ip-10-0-150-57.us-west-2.compute.internal openshift-adp mongo-block-7dtpf Completed 14m 1073741824 1073741824 dpa-sample-1 14m ip-10-0-150-57.us-west-2.compute.internal
NAMESPACE NAME STATUS STARTED BYTES DONE TOTAL BYTES STORAGE LOCATION AGE NODE openshift-adp backup-test-1-sw76b Completed 9m47s 108104082 108104082 dpa-sample-1 9m47s ip-10-0-150-57.us-west-2.compute.internal openshift-adp mongo-block-7dtpf Completed 14m 1073741824 1073741824 dpa-sample-1 14m ip-10-0-150-57.us-west-2.compute.internalCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,检查特定
DataUpload对象的status.phase字段的值:oc get datauploads <dataupload_name> -o yaml
$ oc get datauploads <dataupload_name> -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 代表快照数据成功传输到远程对象存储。
5.23.2.2. 恢复 CSI 卷快照 复制链接链接已复制到粘贴板!
您可以通过创建一个 Restore CR 来恢复卷快照。
您不能使用 OAPD 1.3 内置数据 Mover 从 OADP 1.2 恢复 Volsync 备份。在升级到 OADP 1.3 之前,建议使用 Restic 对所有工作负载进行文件系统备份。
先决条件
-
您可以使用
cluster-admin角色访问集群。 -
您有一个 OADP
BackupCR,可从中恢复数据。
流程
为
RestoreCR 创建 YAML 文件,如下例所示:RestoreCR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用清单:
oc create -f restore.yaml
$ oc create -f restore.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 恢复启动时会创建一个
DataDownloadCR。
验证
您可以通过检查
DataDownloadCR 的status.phase字段来监控恢复过程的状态。可能的值为In Progress、Completed、Failed或Canceled。要获取所有
DataDownload对象的列表,请运行以下命令:oc get datadownloads -A
$ oc get datadownloads -ACopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAMESPACE NAME STATUS STARTED BYTES DONE TOTAL BYTES STORAGE LOCATION AGE NODE openshift-adp restore-test-1-sk7lg Completed 7m11s 108104082 108104082 dpa-sample-1 7m11s ip-10-0-150-57.us-west-2.compute.internal
NAMESPACE NAME STATUS STARTED BYTES DONE TOTAL BYTES STORAGE LOCATION AGE NODE openshift-adp restore-test-1-sk7lg Completed 7m11s 108104082 108104082 dpa-sample-1 7m11s ip-10-0-150-57.us-west-2.compute.internalCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令检查特定
DataDownload对象的status.phase字段的值:oc get datadownloads <datadownload_name> -o yaml
$ oc get datadownloads <datadownload_name> -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 表示 CSI 快照数据已被成功恢复。
5.23.2.3. 删除 OADP 1.3 的策略 复制链接链接已复制到粘贴板!
删除策略决定了从系统中删除数据的规则,指定根据保留周期、数据敏感度和合规要求等因素如何进行删除。它有效地管理数据删除,同时满足法规并保留宝贵的信息。
5.23.2.3.1. 删除 OADP 1.3 的策略指南 复制链接链接已复制到粘贴板!
查看 OADP 1.3 的以下删除策略指南:
-
在 OADP 1.3.x 中,当使用任何类型的备份和恢复方法时,您可以在
VolumeSnapshotClass自定义资源(CR)中将deletionPolicy字段设置为Retain或Delete。
5.23.3. 为 Data Mover 配置备份和恢复 PVC 复制链接链接已复制到粘贴板!
备份 PVC 是一个中间持久性卷声明 (PVC),用于在数据移动备份操作过程中存储数据。对于某些存储类,比如 CephFS,从快照创建一个只读卷会导致更快的数据 Mover 备份。
您可以使用 DataProtectionApplication (DPA) 的 nodeAgent.backupPVC 部分创建一个 readonly 备份 PVC,并将 readOnly 访问模式设置为 true。
您可以使用 DPA 的 nodeAgent.backupPVC 部分中的以下字段来配置备份 PVC。
-
storageClass:用于备份 PVC 的存储类的名称。 -
readOnly:指示备份 PVC 是否应挂载为只读。将此字段设置为true还需要将spcNoRelabeling字段设置为true。 -
spcNoRelabeling:如果设为true,则禁用自动重新标记卷。只有在readOnly为true时,您才可以将此字段设置为true。当readOnly标志为true时,无法对卷的 SELinux 重新标记。这会导致 Data Mover 备份失败。因此,当您将readOnly访问模式用于 CephFS 存储类时,您必须禁用重新标记。
5.23.3.1. 为 Data Mover 备份配置备份 PVC 复制链接链接已复制到粘贴板!
使用 DataProtectionApplication (DPA) 对象的 nodeAgent.backupPVC 部分为存储类配置备份持久性卷声明 (PVC)。
先决条件
- 已安装 OADP Operator。
流程
在 DPA 中配置
nodeAgent.backupPVC部分,如下例所示:数据保护应用程序示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下配置创建
Backup自定义资源:备份示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 对于 Data Mover 备份,设置为
true。
验证
运行以下命令,验证备份 PVC 是否已创建为只读 (
ROX):示例命令
oc get pvc -n openshift-adp -w
$ oc get pvc -n openshift-adp -wCopy to Clipboard Copied! Toggle word wrap Toggle overflow test-backup1-l..d Bound pvc-1298.....22f8 2Gi ROX standard-csi <unset> 37s test-backup1-l..d Bound pvc-1298....022f8 2Gi ROX standard-csi <unset> 37s
test-backup1-l..d Bound pvc-1298.....22f8 2Gi ROX standard-csi <unset> 37s test-backup1-l..d Bound pvc-1298....022f8 2Gi ROX standard-csi <unset> 37sCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.23.3.2. 为 Data Mover 恢复配置 restorePVC 复制链接链接已复制到粘贴板!
restorePVC 是一个中间 PVC,用于在 Data Mover restore 操作过程中写入数据。
您可以使用 ignoreDelayBinding 字段在 DataProtectionApplication (DPA) 对象中配置 restorePVC。将 ignoreDelayBinding 字段设置为 true 允许恢复操作忽略 WaitForFirstConsumer 绑定模式。然后,数据移动恢复操作会创建恢复 pod,并将关联的卷置备到任意节点。
ignoreDelayBinding 设置在并行进行多个卷恢复时非常有用。将 ignoreDelayBinding 字段设置为 true 时,恢复 pod 可以平均分布到所有节点。
先决条件
- 已安装 OADP Operator。
- 您已创建了应用程序的 Data Mover 备份。
5.23.4. 覆盖 Kopia 哈希、加密和分割算法 复制链接链接已复制到粘贴板!
您可以使用 Data Protection Application (DPA) 中的特定环境变量覆盖 Kopia 哈希、加密和分割程序算法的默认值。
5.23.4.1. 配置 DPA 以覆盖 Kopia 哈希、加密和分割算法 复制链接链接已复制到粘贴板!
您可以使用 OpenShift API for Data Protection (OADP) 选项来覆盖哈希、加密和分割器的默认 Kopia 算法以提高 Kopia 性能或比较性能指标。您可以在 DPA 的 spec.configuration.velero.podConfig.env 部分中设置以下环境变量:
-
KOPIA_HASHING_ALGORITHM -
KOPIA_ENCRYPTION_ALGORITHM -
KOPIA_SPLITTER_ALGORITHM
先决条件
- 已安装 OADP Operator。
- 已使用云供应商提供的凭证创建 secret。
数据保护应用程序(DPA)中用于分割、哈希和加密的 Kopia 算法的配置仅在初始 Kopia 存储库创建过程中应用,之后无法更改。
要使用不同的 Kopia 算法,请确保对象存储不包含任何备份的以前的 Kopia 存储库。在 Backup Storage Location (BSL) 中配置新的对象存储,或者在 BSL 配置中为对象存储指定唯一的前缀。
5.23.4.2. 覆盖 Kopia 哈希、加密和分割算法的用例 复制链接链接已复制到粘贴板!
用例示例演示了使用 Kopia 环境变量控制哈希、加密和分割器以进行应用程序的备份。您可以将备份存储在 AWS S3 存储桶中。然后,您可以通过连接到 Kopia 存储库来验证环境变量。
先决条件
- 已安装 OADP Operator。
- 您有一个 AWS S3 存储桶,配置为备份存储位置。
- 已使用云供应商提供的凭证创建 secret。
- 已安装 Kopia 客户端。
- 您有一个应用程序,其持久性卷在单独的命名空间中运行。
流程
配置 Data Protection Application (DPA),如下例所示:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建 DPA:
oc create -f <dpa_file_name>
$ oc create -f <dpa_file_name>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定您配置的 DPA 的文件名。
运行以下命令验证 DPA 是否已协调:
oc get dpa -o yaml
$ oc get dpa -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建备份 CR,如下例所示:
备份 CR 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定集群中安装的应用程序的命名空间。
运行以下命令来创建备份:
oc apply -f <backup_file_name>
$ oc apply -f <backup_file_name>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定备份 CR 文件的名称。
运行以下命令验证备份是否已完成:
oc get backups.velero.io <backup_name> -o yaml
$ oc get backups.velero.io <backup_name> -o yaml1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定备份的名称。
验证
运行以下命令连接到 Kopia 存储库:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果您使用 AWS S3 以外的存储供应商,则需要在命令中添加
--endpoint(存储桶端点 URL 参数)。运行以下命令,验证 Kopia 使用 DPA 中配置的环境变量进行备份:
kopia repository status
$ kopia repository statusCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.23.4.3. 基准测试 Kopia 哈希、加密和拆分算法 复制链接链接已复制到粘贴板!
您可以运行 Kopia 命令以对哈希、加密和拆分算法进行基准测试。根据基准测试结果,您可以为工作负载选择最合适的算法。在此过程中,您将从集群中的 pod 运行 Kopia 基准测试命令。基准测试结果可能会因 CPU 速度、可用 RAM、磁盘速度、当前 I/O 负载等因素而异。
先决条件
- 已安装 OADP Operator。
- 您有一个应用程序,其持久性卷在单独的命名空间中运行。
- 已使用 Container Storage Interface (CSI) 快照运行应用程序的备份。
数据保护应用程序(DPA)中用于分割、哈希和加密的 Kopia 算法的配置仅在初始 Kopia 存储库创建过程中应用,之后无法更改。
要使用不同的 Kopia 算法,请确保对象存储不包含任何备份的以前的 Kopia 存储库。在 Backup Storage Location (BSL) 中配置新的对象存储,或者在 BSL 配置中为对象存储指定唯一的前缀。
流程
配置
must-gatherpod,如下例所示。确保为 OADP 版本 1.3 及之后的版本使用oadp-mustgather镜像。pod 配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意Kopia 客户端包括在
oadp-mustgather镜像中。运行以下命令来创建 pod:
oc apply -f <pod_config_file_name>
$ oc apply -f <pod_config_file_name>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定 pod 配置的 YAML 文件的名称。
验证 Pod 上的安全性上下文约束 (SCC) 是否为
anyuid,以便 Kopia 能够连接到存储库。oc describe pod/oadp-mustgather-pod | grep scc
$ oc describe pod/oadp-mustgather-pod | grep sccCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
openshift.io/scc: anyuid
openshift.io/scc: anyuidCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,通过 SSH 连接到 pod:
oc -n openshift-adp rsh pod/oadp-mustgather-pod
$ oc -n openshift-adp rsh pod/oadp-mustgather-podCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令连接到 Kopia 存储库:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意这是一个示例命令。命令可能会根据对象存储提供程序而有所不同。
要对哈希算法进行基准测试,请运行以下命令:
kopia benchmark hashing
sh-5.1# kopia benchmark hashingCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要对加密算法进行基准测试,请运行以下命令:
kopia benchmark encryption
sh-5.1# kopia benchmark encryptionCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要对 splitter 算法进行基准测试,请运行以下命令:
kopia benchmark splitter
sh-5.1# kopia benchmark splitterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.24. 与 OADP 一起使用的 API 复制链接链接已复制到粘贴板!
您可以在 OADP 中使用以下 API:
- Velero API
- Velero API 文档由 Velero 维护,而不是由红帽维护。如需更多信息,请参阅 API 类型 (Velero 文档)。
- OADP API
以下是 OADP API:
-
DataProtectionApplicationSpec -
BackupLocation -
SnapshotLocation -
ApplicationConfig -
VeleroConfig -
CustomPlugin -
ResticConfig -
PodConfig -
功能 DataMover如需更多信息,请参阅 OADP Operator (Go 文档)。
-
5.24.1. DataProtectionApplicationSpec type 复制链接链接已复制到粘贴板!
以下是 DataProtectionApplicationSpec OADP API:
| 属性 | 类型 | 描述 |
|---|---|---|
|
|
定义用于 | |
|
|
定义 | |
|
| map [ UnsupportedImageKey ] string |
可用于覆盖为开发而部署的依赖镜像。选项是 |
|
| 用于将注解添加到 Operator 部署的 pod。 | |
|
| 定义 Pod 的 DNS 的配置。 | |
|
|
定义除了由 | |
|
| *bool | 用于指定是否要部署 registry 以启用镜像的备份和恢复。 |
|
| 用于定义数据保护应用服务器配置。 | |
|
|
* | 定义 DPA 的配置以启用技术预览功能。 |
5.24.2. BackupLocation 类型 复制链接链接已复制到粘贴板!
以下是 BackupLocation OADP API:
| 属性 | 类型 | 描述 |
|---|---|---|
|
| 存储卷快照的位置,如备份存储位置所述。 | |
|
| 在某些云存储供应商处自动创建存储桶,用作备份存储位置。 |
bucket 参数只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
5.24.3. SnapshotLocation 类型 复制链接链接已复制到粘贴板!
以下是 SnapshotLocation OADP API:
| 属性 | 类型 | 描述 |
|---|---|---|
|
| 用于存储卷快照的位置,如卷快照位置。 |
5.24.4. ApplicationConfig 类型 复制链接链接已复制到粘贴板!
以下是 ApplicationConfig OADP API:
| 属性 | 类型 | 描述 |
|---|---|---|
|
| 定义 Velero 服务器配置。 | |
|
| 定义 Restic 服务器配置。 |
5.24.5. VeleroConfig 类型 复制链接链接已复制到粘贴板!
以下是 VeleroConfig OADP API:
| 属性 | 类型 | 描述 |
|---|---|---|
|
| [] string | 定义为 Velero 实例启用的功能列表。 |
|
| [] string |
可以安装以下类型的默认 Velero 插件: |
|
| 用于安装自定义 Velero 插件。 | |
|
|
代表一个配置映射,它在定义与 | |
|
|
要在没有默认备份存储位置的情况下安装 Velero,您必须设置 | |
|
|
定义 | |
|
|
Velero 服务器日志级别(在最精细的日志中使用 |
5.24.6. CustomPlugin 类型 复制链接链接已复制到粘贴板!
以下是 CustomPlugin OADP API:
5.24.7. ResticConfig 类型 复制链接链接已复制到粘贴板!
以下是 ResticConfig OADP API:
| 属性 | 类型 | 描述 |
|---|---|---|
|
| *bool |
如果设置为 |
|
| []int64 |
定义要应用到 |
|
|
定义 Restic 超时的用户提供的持续时间字符串。默认值为 | |
|
|
定义 |
5.24.8. PodConfig 类型 复制链接链接已复制到粘贴板!
以下是 PodConfig OADP API:
| 属性 | 类型 | 描述 |
|---|---|---|
|
|
定义要提供给 | |
|
|
定义要应用到 Velero 部署或 Restic | |
|
|
为一个 | |
|
| 要添加到 pod 的标签。 |
5.24.9. 功能类型 复制链接链接已复制到粘贴板!
以下是 OADP API 的功能 :
| 属性 | 类型 | 描述 |
|---|---|---|
|
| 定义 Data Mover 的配置。 |
5.24.10. DataMover 类型 复制链接链接已复制到粘贴板!
以下是 DataMover OADP API:
| 属性 | 类型 | 描述 |
|---|---|---|
|
|
如果设置为 | |
|
|
Data Mover 用户提供的 Restic | |
|
|
要完成 |
5.25. 高级 OADP 特性和功能 复制链接链接已复制到粘贴板!
本文档提供有关 OpenShift API for Data Protection (OADP) 的高级功能。
5.25.1. 在同一集群中使用不同的 Kubernetes API 版本 复制链接链接已复制到粘贴板!
5.25.1.1. 列出集群中的 Kubernetes API 组版本 复制链接链接已复制到粘贴板!
源集群可能会提供多个 API 版本,其中的一个版本是首选的 API 版本。例如,带有名为 Example 的 API 的源集群可能包括在 example.com/v1 和 example.com/v1beta2 API 组中。
如果您使用 Velero 备份和恢复这样的源集群,Velero 仅备份了使用 Kubernetes API 首选版本的该资源的版本。
要返回上例,如果 example.com/v1 是首选的 API,则 Velero 只备份使用 example.com/v1 的资源的版本。另外,目标集群需要 example.com/v1 在它的一组可用 API 资源中注册,以便 Velero 恢复目标集群上的资源。
因此,您需要在目标集群上生成 Kubernetes API 组版本列表,以确保在一组可用的 API 资源中注册了首选的 API 版本。
流程
- 输入以下命令:
oc api-resources
$ oc api-resources
5.25.1.2. 关于启用 API 组版本 复制链接链接已复制到粘贴板!
默认情况下,Velero 只备份使用 Kubernetes API 的首选版本的资源。但是,Velero 还包括一个启用 API 组版本功能,它解决了这个限制。当在源集群中启用时,这个功能会使 Velero 备份集群中支持的所有 Kubernetes API 组版本,而不只是首选集群。当版本存储在备份 .tar 文件中被保存后,可以在目标集群上恢复它们。
例如,带有名为 Example 的 API 的源集群可能包括在 example.com/v1 和 example.com/v1beta2 API 组中,example.com/v1 是首选 API。
如果没有启用 Enable API Group Versions 功能,Velero 仅备份 Example 的首选 API 组版本,即 example.com/v1。启用该功能后,Velero 还会备份 example.com/v1beta2。
当目标集群上启用了“启用 API 组版本”功能时,Velero 根据 API 组版本优先级顺序选择恢复的版本。
启用 API 组版本仍处于测试阶段。
Velero 使用以下算法为 API 版本分配优先级,并将 1 作为最高优先级:
- destination 集群的首选版本
- source_ cluster 的首选版本
- 带有最高 Kubernetes 版本优先级的通用非首选支持版本
5.25.1.3. 使用启用 API 组版本 复制链接链接已复制到粘贴板!
您可以使用 Velero 的启用 API 组版本功能来备份集群中支持的所有 Kubernetes API 组版本,而不只是首选版本。
启用 API 组版本仍处于测试阶段。
流程
-
配置
EnableAPIGroupVersions功能标记:
5.25.2. 从一个集群中备份数据,并将其恢复到另一个集群 复制链接链接已复制到粘贴板!
5.25.2.1. 关于从一个集群中备份数据,并在另一个集群中恢复数据 复制链接链接已复制到粘贴板!
OpenShift API for Data Protection (OADP) 旨在在同一 OpenShift Container Platform 集群中备份和恢复应用程序数据。MTC (Migration Toolkit for Containers) 旨在将容器(包括应用程序数据)从一个 OpenShift Container Platform 集群迁移到另一个集群。
您可以使用 OADP 从一个 OpenShift Container Platform 集群中备份应用程序数据,并在另一个集群中恢复它。但是,这样做比使用 MTC 或使用 OADP 在同一集群中备份和恢复更为复杂。
要成功使用 OADP 从一个集群备份数据并将其恢复到另一个集群,除了使用 OADP 备份和恢复数据需要的先决条件和步骤外,还需要考虑以下因素:
- Operator
- 使用 Velero
- UID 和 GID 范围
5.25.2.1.1. Operator 复制链接链接已复制到粘贴板!
您必须从应用程序的备份中排除 Operator,以便成功备份和恢复。
5.25.2.1.2. 使用 Velero 复制链接链接已复制到粘贴板!
Velero (基于 OADP 构建)不支持在云供应商间原生迁移持久性卷快照。要在云平台之间迁移卷快照数据,您需要启用 Velero Restic 文件系统备份选项,该选项会在文件系统级别备份卷内容,或使用 OADP Data Mover 进行 CSI 快照。
在 OADP 1.1 及更早版本中,Velero Restic 文件系统备份选项被称为 restic。在 OADP 1.2 及更高版本中,Velero Restic 文件系统备份选项称为 file-system-backup。
- 您还必须使用 Velero 的 文件系统备份 在 AWS 区域或 Microsoft Azure 区域之间迁移数据。
- Velero 不支持将数据恢复到比源集群 更早的 Kubernetes 版本的集群。
- 在理论上,可以将工作负载迁移到比源更新的 Kubernetes 版本,但您必须考虑每个自定义资源的集群间 API 组的兼容性。如果 Kubernetes 版本升级会破坏内核或原生 API 组的兼容性,您必须首先更新受影响的自定义资源。
5.25.2.2. 关于确定要备份的 pod 卷 复制链接链接已复制到粘贴板!
在使用文件系统备份(FSB)启动备份操作前,您必须指定包含要备份的卷的 pod。Velero 将此过程称为"发现"适当的 pod 卷。
Velero 支持两种确定 pod 卷的方法。使用 opt-in 或 opt-out 方法,来允许 Velero 决定 FSB、卷快照或数据 Mover 备份。
- opt-in 方法 :使用 opt-in 方法时,卷默认使用快照或数据进行备份。FSB 用于由注解 opted-in 的特定卷。
- opt-out 方法 :使用 opt-out 方法时,卷默认使用 FSB 备份。Snapshots 或 Data Mover 用于由注解 opted-out 的特定卷。
5.25.2.2.1. 限制: 复制链接链接已复制到粘贴板!
-
FSB 不支持备份和恢复
hostpath卷。但是 FSB 支持备份和恢复本地卷。 - Velero 对它创建的所有备份存储库使用静态通用加密密钥。这个静态密钥意味着可以访问备份存储的任何人也可以解密您的备份数据。务必要限制对备份存储的访问。
对于 PVC,每个增量备份链都会在 pod 重新调度之间维护。
对于不是 PVC 的 pod 卷,如
emptyDir卷,如果一个 pod 被删除或重新创建(例如,通过ReplicaSet或一个部署),则这些卷的下一次备份将是完整备份,而不是增量备份。假设 pod 卷的生命周期由其 pod 定义。- 虽然备份数据可能会以递增方式保存,备份大型文件(如数据库)可能需要很长时间。这是因为 FSB 使用 deduplication 来查找需要备份的区别。
- FSB 通过访问运行该 pod 的节点的文件系统来读取和写入卷中的数据。因此,FSB 只能备份从 pod 挂载的卷,而不直接从 PVC 进行挂载。有些 Velero 用户通过运行一个 staging pod (如 BusyBox 或 Alpine 容器)来解决这个限制,以便在执行 Velero 备份前挂载这些 PVC 和 PV 对。
-
FSB 要求将卷挂载到
<hostPath>/<pod UID>下,<hostPath>可以被配置。有些 Kubernetes 系统(如 vCluster)不会在<pod UID>子目录下挂载卷,VFB 无法按预期工作。
5.25.2.2.2. 使用 opt-in 方法备份 pod 卷 复制链接链接已复制到粘贴板!
您可以使用 opt-in 方法来指定需要由文件系统备份(FSB)备份哪些卷。您可以使用 backup.velero.io/backup-volumes 命令进行此操作。
流程
在每个包含您要备份的一个或多个卷的 pod 中,输入以下命令:
oc -n <your_pod_namespace> annotate pod/<your_pod_name> \ backup.velero.io/backup-volumes=<your_volume_name_1>, \ <your_volume_name_2>>,...,<your_volume_name_n>
$ oc -n <your_pod_namespace> annotate pod/<your_pod_name> \ backup.velero.io/backup-volumes=<your_volume_name_1>, \ <your_volume_name_2>>,...,<your_volume_name_n>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<your_volume_name_x>- 指定 pod 规格中 xth 卷的名称。
5.25.2.2.3. 使用 opt-out 方法备份 pod 卷 复制链接链接已复制到粘贴板!
使用 opt-out 方法时,所有 pod 卷都使用文件系统备份(FSB)备份,但有一些例外:
- 挂载默认服务帐户令牌、secret 和配置映射的卷。
-
hostPath卷
您可以使用 opt-out 方法指定不要备份的卷。您可以使用 backup.velero.io/backup-volumes-excludes 命令进行此操作。
流程
在包含您不想备份的一个或多个卷的 pod 中,运行以下命令:
oc -n <your_pod_namespace> annotate pod/<your_pod_name> \ backup.velero.io/backup-volumes-excludes=<your_volume_name_1>, \ <your_volume_name_2>>,...,<your_volume_name_n>
$ oc -n <your_pod_namespace> annotate pod/<your_pod_name> \ backup.velero.io/backup-volumes-excludes=<your_volume_name_1>, \ <your_volume_name_2>>,...,<your_volume_name_n>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<your_volume_name_x>- 指定 pod 规格中 xth 卷的名称。
您可以使用 --default-volumes-to-fs-backup 标志运行 velero install 命令,为所有 Velero 备份启用此行为。
5.25.2.3. UID 和 GID 范围 复制链接链接已复制到粘贴板!
如果您从一个集群备份数据并将其恢复到另一个集群,则可能会出现 UID (用户 ID)和 GID (组 ID)范围的问题。下面的部分解释了这些潜在问题和缓解措施:
- 问题概述
- 命名空间 UID 和 GID 范围可能会因目标集群而异。OADP 不会备份和恢复 OpenShift UID 范围元数据。如果备份的应用程序需要特定的 UID,请确保范围是可用的。如需有关 OpenShift 的 UID 和 GID 范围的更多信息,请参阅 OpenShift 和 UID 的指南。
- 问题详细描述
当您使用
oc create namespace在 OpenShift Container Platform 中创建命名空间时,OpenShift Container Platform 会为命名空间分配一个唯一用户 ID (UID) 范围,即 Supplemental Group (GID)范围和唯一的 SELinux MCS 标签。此信息存储在集群的metadata.annotations字段中。此信息是安全性上下文约束(SCC)注解的一部分,它由以下组件组成:-
openshift.io/sa.scc.mcs -
openshift.io/sa.scc.supplemental-groups -
openshift.io/sa.scc.uid-range
-
当使用 OADP 恢复命名空间时,它会自动使用 metadata.annotations 中的信息,而无需为目标集群重置它。因此,如果满足以下条件,工作负载可能无法访问备份的数据:
- 存在一个带有其他 SCC 注解的现有命名空间,例如在另一个集群中。在这种情况下,OADP 在备份过程中使用现有命名空间,而不是您要恢复的命名空间。
备份过程中使用了标签选择器,但执行工作负载的命名空间没有标签。在这种情况下,OADP 不会备份命名空间,而是在恢复过程中创建一个新的命名空间,该命名空间不包含备份命名空间的注解。这会导致为命名空间分配一个新的 UID 范围。
如果 OpenShift Container Platform 根据从持久性卷数据备份时更改的命名空间注解为 pod 为
securityContextUID,则可能会出现问题。- 容器 UID 不再与文件所有者的 UID 匹配。
发生错误,因为 OpenShift Container Platform 没有修改目标集群的 UID 范围,以匹配备份集群的数据。因此,备份集群与目标集群的 UID 不同,这意味着应用程序无法向目标集群读取或写入数据。
- 缓解方案
- 您可以使用以下一个或多个缓解方案来解决 UID 和 GID 范围问题:
简单的缓解方案:
-
如果您在
BackupCR 中使用标签选择器过滤要包含在备份中的对象,请确保将此标签选择器添加到包含工作区的命名空间中。 - 在尝试恢复具有相同名称的命名空间前,请删除目标集群上任何已存在的命名空间版本。
-
如果您在
高级缓解方案:
- 迁移后,通过在 OpenShift 命名空间中解决重叠的 UID 范围来修复 UID 范围。第 1 步是可选的。
有关 OpenShift Container Platform 中 UID 和 GID 范围的详细讨论,重点放在一个集群中备份数据并在另一个集群中恢复数据时出现问题,请参阅 OpenShift 和 UID 的指南。
5.25.2.4. 从一个集群中备份数据,并将其恢复到另一个集群 复制链接链接已复制到粘贴板!
通常,您可以从一个 OpenShift Container Platform 集群备份数据,并以与将数据备份并恢复到同一集群的方式在另一个 OpenShift Container Platform 集群上恢复数据。但是,从一个 OpenShift Container Platform 集群备份数据时,会有一些额外的前提条件和不同之处,并在另一个集群中恢复它。
先决条件
- 在您的平台上备份和恢复的所有相关先决条件(如 AWS、Microsoft Azure、Google Cloud 等),特别是数据保护应用程序(DPA)的先决条件,请参阅本指南的相关部分。
流程
在为您的平台提供的流程中添加以下内容:
- 确保备份存储位置 (BSL) 和卷快照位置具有相同的名称和路径,以将资源恢复到另一个集群。
- 在集群间共享相同的对象存储位置凭证。
- 为获得最佳结果,请使用 OADP 在目标集群中创建命名空间。
如果您使用 Velero
file-system-backup选项,请运行以下命令启用--default-volumes-to-fs-backup标志以便在备份过程中使用:velero backup create <backup_name> --default-volumes-to-fs-backup <any_other_options>
$ velero backup create <backup_name> --default-volumes-to-fs-backup <any_other_options>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意在 OADP 1.2 及更高版本中,Velero Restic 选项名为
file-system-backup。
在恢复 CSI 备份前,请编辑 VolumeSnapshotClass 自定义资源 (CR),并将 snapshot.storage.kubernetes.io/is-default-class 参数设置为 false。否则,会因为对于相同的驱动,目标集群的 VolumeSnapshotClass 中有相同的值而导致恢复部分失败。
5.25.3. OADP 存储类映射 复制链接链接已复制到粘贴板!
5.25.3.1. 存储类映射 复制链接链接已复制到粘贴板!
存储类映射允许您定义规则或策略,指定应将哪些存储类应用到不同类型的数据。此功能根据访问频率、数据重要性和成本注意事项自动确定存储类的过程。它通过确保数据存储在最合适的存储类中用于其特征和使用模式来优化存储效率和经济性。
您可以使用 change-storage-class-config 字段更改数据对象的存储类,这可让您通过在不同存储层之间移动数据(如从标准到归档存储)来优化成本和性能,例如,根据您的需要和访问模式来优化成本和性能。
5.25.3.1.1. 使用 MTC 的存储类映射 复制链接链接已复制到粘贴板!
您可以使用 MTC 将容器(包括应用程序数据)从一个 OpenShift Container Platform 集群迁移到另一个集群以及存储类映射和转换。您可以在同一个集群中迁移持久性卷(PV)的存储类来转换它。要做到这一点,您必须在 MTC web 控制台中创建并运行迁移计划。
5.25.3.1.2. 使用 OADP 映射存储类 复制链接链接已复制到粘贴板!
您可以在 Velero 插件 v1.1.0 及之后的版本中使用 OpenShift API 进行数据保护 (OADP),在恢复过程中更改持久性卷 (PV) 的存储类,方法是在 Velero 命名空间中的配置映射中配置存储类映射。
要使用 OADP 部署 ConfigMap,请使用 change-storage-class-config 字段。您必须根据您的云供应商更改存储类映射。
流程
运行以下命令来更改存储类映射:
cat change-storageclass.yaml
$ cat change-storageclass.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 Velero 命名空间中创建配置映射,如下例所示:
Example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令保存存储类映射首选项:
oc create -f change-storage-class-config
$ oc create -f change-storage-class-configCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.26. OADP 故障排除 复制链接链接已复制到粘贴板!
5.26.1. 故障排除 复制链接链接已复制到粘贴板!
您可以使用以下方法排除 OADP 问题:
- 您可以使用 OpenShift CLI 工具或 Velero CLI 工具调试 Velero 自定义资源(CR)。Velero CLI 工具提供更详细的日志和信息。
- 调试 Velero 或 Restic pod 崩溃,这是因为缺少内存或 CPU 导致的。参阅因为缺少内存或 CPU 导致 pod 崩溃。
- 根据恢复使用 admission webhook 的 Velero 备份的临时解决方案的内容对 Velero 和 admission webhook 进行故障排除。
- 检查 OADP 安装问题, OADP Operator 问题, backup 和 restore CR 问题, 和 Restic 问题.
- 使用可用的 OADP 超时 来减少错误、重试或失败。
-
运行
DataProtectionTest(DPT) 自定义资源来验证备份存储桶配置,并检查 PVC 的 CSI 快照就绪状态。 -
使用
must-gather工具收集日志和 CR 信息。 - 通过 OADP 监控来监控和分析工作负载性能。
5.26.2. Velero CLI 工具 复制链接链接已复制到粘贴板!
您可以使用以下选项获取 velero CLI 工具:
-
下载
veleroCLI 工具 -
访问集群中的 Velero 部署中的
velero二进制文件
5.26.2.1. 下载 Velero CLI 工具 复制链接链接已复制到粘贴板!
您可以按照 Velero 文档页面中的说明下载并安装 Velero CLI 工具。该页包括以下选项的说明:
- 使用 Homebrew 的 macOS
- GitHub
- 使用 Chocolatey 的 Windows
先决条件
- 您可以访问启用了 DNS 和容器网络的 Kubernetes 集群 v1.16 或更高版本。
-
您已在本地安装了
kubectl。
流程
- 打开浏览器,进入到在 Velero 网站上的"安装 CLI"。
- 按照 macOS、GitHub 或 Windows 的适当流程。
- 下载适用于 OADP 和 OpenShift Container Platform 版本的 Velero 版本。
| OADP 版本 | Velero 版本 | OpenShift Container Platform 版本 |
|---|---|---|
| 1.3.0 | {velero-1.12} | 4.12-4.15 |
| 1.3.1 | {velero-1.12} | 4.12-4.15 |
| 1.3.2 | {velero-1.12} | 4.12-4.15 |
| 1.3.3 | {velero-1.12} | 4.12-4.15 |
| 1.3.4 | {velero-1.12} | 4.12-4.15 |
| 1.3.5 | {velero-1.12} | 4.12-4.15 |
| 1.4.0 | {velero-1.14} | 4.14-4.18 |
| 1.4.1 | {velero-1.14} | 4.14-4.18 |
| 1.4.2 | {velero-1.14} | 4.14-4.18 |
| 1.4.3 | {velero-1.14} | 4.14-4.18 |
| 1.5.0 | {velero-1.16} | 4.19 |
5.26.2.2. 访问集群中的 Velero 部署中的 Velero 二进制文件 复制链接链接已复制到粘贴板!
您可以使用 shell 命令访问集群中的 Velero 部署中的 Velero 二进制文件。
先决条件
-
您的
DataProtectionApplication自定义资源的状态为Reconcile complete。
流程
使用以下命令设置所需的别名:
alias velero='oc -n openshift-adp exec deployment/velero -c velero -it -- ./velero'
$ alias velero='oc -n openshift-adp exec deployment/velero -c velero -it -- ./velero'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.26.2.3. 使用 OpenShift CLI 工具调试 Velero 资源 复制链接链接已复制到粘贴板!
您可以使用 OpenShift CLI 工具检查 Velero 自定义资源(CR)和 Velero pod 日志来调试失败的备份或恢复。
流程
使用以下
oc describe命令,检索与Backup或RestoreCR 关联的警告和错误概述:oc describe <velero_cr> <cr_name>
$ oc describe <velero_cr> <cr_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下
oc logs命令检索Veleropod 日志:oc logs pod/<velero>
$ oc logs pod/<velero>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
DataProtectionApplication资源中指定 Velero 日志级别,如下例所示。注意这个选项可从 OADP 1.0.3 开始。
Velero 日志级别文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可用的
logLevel值如下:-
trace -
debug -
info -
warning -
错误 -
fatal panic对于大多数日志,使用
infologLevel值。
5.26.2.4. 使用 Velero CLI 工具调试 Velero 资源 复制链接链接已复制到粘贴板!
您可以调试 Backup 和 Restore 自定义资源(CR)并使用 Velero CLI 工具检索日志。Velero CLI 工具比 OpenShift CLI 工具提供更详细的信息。
流程
使用
oc exec命令运行 Velero CLI 命令:oc -n openshift-adp exec deployment/velero -c velero -- ./velero \ <backup_restore_cr> <command> <cr_name>
$ oc -n openshift-adp exec deployment/velero -c velero -- ./velero \ <backup_restore_cr> <command> <cr_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc exec命令示例oc -n openshift-adp exec deployment/velero -c velero -- ./velero \ backup describe 0e44ae00-5dc3-11eb-9ca8-df7e5254778b-2d8ql
$ oc -n openshift-adp exec deployment/velero -c velero -- ./velero \ backup describe 0e44ae00-5dc3-11eb-9ca8-df7e5254778b-2d8qlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下
velero --help选项列出所有 Velero CLI 命令:oc -n openshift-adp exec deployment/velero -c velero -- ./velero \ --help
$ oc -n openshift-adp exec deployment/velero -c velero -- ./velero \ --helpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下
velero logs命令检索Backup或RestoreCR 的日志:oc -n openshift-adp exec deployment/velero -c velero -- ./velero \ <backup_restore_cr> logs <cr_name>
$ oc -n openshift-adp exec deployment/velero -c velero -- ./velero \ <backup_restore_cr> logs <cr_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow velero logs命令示例oc -n openshift-adp exec deployment/velero -c velero -- ./velero \ restore logs ccc7c2d0-6017-11eb-afab-85d0007f5a19-x4lbf
$ oc -n openshift-adp exec deployment/velero -c velero -- ./velero \ restore logs ccc7c2d0-6017-11eb-afab-85d0007f5a19-x4lbfCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下
velero describe命令检索与Backup或RestoreCR 关联的警告和错误概述:oc -n openshift-adp exec deployment/velero -c velero -- ./velero \ <backup_restore_cr> describe <cr_name>
$ oc -n openshift-adp exec deployment/velero -c velero -- ./velero \ <backup_restore_cr> describe <cr_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow velero describe命令示例oc -n openshift-adp exec deployment/velero -c velero -- ./velero \ backup describe 0e44ae00-5dc3-11eb-9ca8-df7e5254778b-2d8ql
$ oc -n openshift-adp exec deployment/velero -c velero -- ./velero \ backup describe 0e44ae00-5dc3-11eb-9ca8-df7e5254778b-2d8qlCopy to Clipboard Copied! Toggle word wrap Toggle overflow velero describe请求的输出中会显示以下类型的恢复错误和警告:-
Velero: 与 Velero 本身操作相关的信息列表,例如:与连接到云相关的信息,读取备份文件等 -
集群:与备份和恢复集群范围的资源相关的消息列表 命名空间:与备份或恢复存储在命名空间中资源相关的消息列表这些类别中的一个或多个错误会导致
Restore操作接收PartiallyFailed而不是Completed状态。警告不会造成完成状态的更改。对这些恢复错误考虑以下内容:
-
对于特定于资源的错误,即
Cluster和Namespaces错误,restore describe --details输出包含了一个资源列表,其中包含 Velero 恢复的所有资源。对于具有此类错误的任何资源,请检查资源是否实际位于集群中。 如果存在
Velero错误,但没有特定于资源的错误,在describe命令的输出中没有完成恢复,且没有恢复工作负载中的实际问题。在这种情况下,请仔细验证部署后应用程序。例如,如果输出包含
PodVolumeRestore或节点代理相关的错误,请检查PodVolumeRestores和DataDownloads的状态。如果其中任何失败或仍在运行,则卷数据可能已被完全恢复。
5.26.3. 因内存不足或 CPU 造成 pod 崩溃或重启 复制链接链接已复制到粘贴板!
如果 Velero 或 Restic pod 因为缺少内存或 CPU 而导致崩溃,您可以为其中任何一个资源设置特定的资源请求。资源请求字段的值必须遵循与 Kubernetes 资源要求相同的格式。
如果您没有指定 configuration.velero.podConfig.resourceAllocations 或 configuration.restic.podConfig.resourceAllocations,请参阅 Velero 或 Restic pod 的以下默认 resources 规格配置:
requests: cpu: 500m memory: 128Mi
requests:
cpu: 500m
memory: 128Mi
5.26.3.1. 为 Velero pod 设置资源请求 复制链接链接已复制到粘贴板!
您可以使用 oadp_v1alpha1_dpa.yaml 文件中的 configuration.velero.podConfig.resourceAllocations 规格字段为 Velero pod 设置特定的资源请求。
流程
在 YAML 文件中设置
cpu和memory资源请求:Velero 文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 列出的
resourceAllocations用于平均使用。
5.26.3.2. 为 Restic pod 设置资源请求 复制链接链接已复制到粘贴板!
您可以使用 configuration.restic.podConfig.resourceAllocations specification 字段为 Restic pod 设置特定的资源请求。
在 OADP 1.5.0 中,configuration.restic.podConfig.resourceAllocations specification 字段从 Data Protection Application (DPA) 中删除。使用 nodeAgent 部分,将 uploaderType 字段设置为 Kopia 而不是 Restic。
流程
在 YAML 文件中设置
cpu和memory资源请求:Restic 文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 列出的
resourceAllocations用于平均使用。
5.26.3.3. 为节点Agent pod 设置资源请求 复制链接链接已复制到粘贴板!
您可以使用 configuration.nodeAgent.podConfig.resourceAllocations 规格字段为 nodeAgent pod 设置特定的资源请求。
在 OADP 1.5.0 中,configuration.restic.podConfig.resourceAllocations specification 字段从 Data Protection Application (DPA) 中删除。使用 nodeAgent 部分,将 uploaderType 字段设置为 Kopia 而不是 Restic。
流程
在 YAML 文件中设置
cpu和memory资源请求:nodeAgent.yaml文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建 DPA CR:
oc create -f nodeAgent.yaml
$ oc create -f nodeAgent.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
使用以下命令验证
nodeAgentpod 是否正在运行:oc get pods
$ oc get podsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过描述其中一个
nodeAgentpod 来检查资源请求:oc describe pod node-agent-hbj9l | grep -C 5 Requests
$ oc describe pod node-agent-hbj9l | grep -C 5 RequestsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.26.4. 为使用准入 webhook 的 Velero 备份恢复临时解决方案 复制链接链接已复制到粘贴板!
Velero 在恢复过程中解决准入 Webhook 问题的能力有限。如果您的工作负载带有准入 webhook,您可能需要使用额外的 Velero 插件或更改如何恢复工作负载。
通常,带有准入 Webhook 的工作负载需要您首先创建特定类型的资源。如果您的工作负载具有子资源,因为准入 webhook 通常阻止子资源,则会出现这种情况。
例如,创建或恢复顶层对象,如 service.serving.knative.dev 通常会自动创建子资源。如果您首先这样做,则不需要使用 Velero 创建和恢复这些资源。这可避免由 Velero 可使用的准入 Webhook 阻断子资源的问题。
Velero 插件作为单独的进程启动。当 Velero 操作完成后,无论是否成功,它们都会退出。接收到 received EOF, stopping recv loop 消息表示插件操作已完成。这并不意味着发生了错误。
5.26.4.1. 恢复 Knative 资源 复制链接链接已复制到粘贴板!
您可能会遇到使用 Velero 备份使用准入 webhook 的 Knative 资源的问题。
在备份和恢复使用准入 webhook 的 Knative 资源时,您可以通过恢复顶层 Service 资源来避免这个问题。
流程
使用以下命令恢复顶层
service.serving.knavtive.dev Service资源:velero restore <restore_name> \ --from-backup=<backup_name> --include-resources \ service.serving.knavtive.dev
$ velero restore <restore_name> \ --from-backup=<backup_name> --include-resources \ service.serving.knavtive.devCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.26.4.2. 恢复 IBM AppConnect 资源 复制链接链接已复制到粘贴板!
如果您使用 Velero 恢复具有准入 webhook 的 IBM® AppConnect 资源时遇到问题,您可以在此过程中运行检查。
流程
输入/运行以下命令,检查集群中是否有
kind: MutatingWebhookConfiguration的变异准入插件:oc get mutatingwebhookconfigurations
$ oc get mutatingwebhookconfigurationsCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
检查每个
kind: MutatingWebhookConfiguration的 YAML 文件,以确保其没有规则块创建存在问题的对象。如需更多信息,请参阅官方 Kubernetes 文档。 -
检查在备份时使用的
type: Configuration.appconnect.ibm.com/v1beta1中的spec.version被已安装的 Operator 支持。
5.26.4.3. 避免 Velero 插件 panic 错误 复制链接链接已复制到粘贴板!
缺少 secret 可能会导致 Velero 插件在镜像流备份过程中出现 panic 错误。
当备份和 Backup Storage Location (BSL) 在 Data Protection Application (DPA) 之外进行管理时,OADP 控制器不会创建相关的 oadp-<bsl_name>-<bsl_provider>-registry-secret 参数。
在备份操作过程中,OpenShift Velero 插件在 镜像流 备份上出现 panic,并显示以下错误:
024-02-27T10:46:50.028951744Z time="2024-02-27T10:46:50Z" level=error msg="Error backing up item" backup=openshift-adp/<backup name> error="error executing custom action (groupResource=imagestreams.image.openshift.io, namespace=<BSL Name>, name=postgres): rpc error: code = Aborted desc = plugin panicked: runtime error: index out of range with length 1, stack trace: goroutine 94…
024-02-27T10:46:50.028951744Z time="2024-02-27T10:46:50Z" level=error msg="Error backing up item"
backup=openshift-adp/<backup name> error="error executing custom action (groupResource=imagestreams.image.openshift.io,
namespace=<BSL Name>, name=postgres): rpc error: code = Aborted desc = plugin panicked:
runtime error: index out of range with length 1, stack trace: goroutine 94…
使用以下临时解决方案来避免 Velero 插件 panic 错误。
流程
运行以下命令,使用相关标签标记自定义 BSL:
oc label backupstoragelocations.velero.io <bsl_name> app.kubernetes.io/component=bsl
$ oc label backupstoragelocations.velero.io <bsl_name> app.kubernetes.io/component=bslCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在标记 BSL 后,等待 DPA 协调。
注意您可以通过对 DPA 本身进行任何更改来强制进行协调。
验证
在协调了 DPA 后,使用以下命令确认已创建了参数,并且正确的 registry 数据已填充到其中:
oc -n openshift-adp get secret/oadp-<bsl_name>-<bsl_provider>-registry-secret -o json | jq -r '.data'
$ oc -n openshift-adp get secret/oadp-<bsl_name>-<bsl_provider>-registry-secret -o json | jq -r '.data'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.26.4.4. OpenShift ADP Controller 分段错误临时解决方案 复制链接链接已复制到粘贴板!
如果您在同时启用了 cloudstorage 和 restic 的情况下配置 Data Protection Application (DPA),openshift-adp-controller-manager pod 会无限期重复崩溃和重启过程,直到 pod 出现一个崩溃循环分段错误为止。
在配置一个 DPA 时,定义 velero 或 cloudstorage。否则,openshift-adp-controller-manager pod 可能会因为以下设置而失败,并显示 crash loop 分段错误:
-
如果您同时定义了
velero和cloudstorage,openshift-adp-controller-manager会失败。 -
如果
velero和cloudstorage都没有定义,openshift-adp-controller-manager会失败。
有关此问题的更多信息,请参阅 OADP-1054。
5.26.5. OADP 安装问题 复制链接链接已复制到粘贴板!
在安装 Data Protection Application (DPA) 时,您可能会遇到使用无效目录或不正确的凭证导致的问题。
5.26.5.1. 解决备份存储中的无效目录 复制链接链接已复制到粘贴板!
对象存储包含不是 Velero 目录的顶级目录。Velero pod 日志显示以下错误信息:
Backup storage contains invalid top-level directories.
Backup storage contains invalid top-level directories.
流程
-
如果对象存储不适用于 Velero,则必须通过设置
DataProtectionApplication清单中的spec.backupLocations.velero.objectStorage.prefix参数为存储桶指定一个前缀。
5.26.5.2. 解决不正确的 AWS 凭证 复制链接链接已复制到粘贴板!
如果用于创建 Secret 对象的 credentials-velero 文件被错误地格式化,则可能会出现多个错误,包括以下示例:
oadp-aws-registrypod 日志显示以下出错信息:`InvalidAccessKeyId: The AWS Access Key Id you provided does not exist in our records.`
`InvalidAccessKeyId: The AWS Access Key Id you provided does not exist in our records.`Copy to Clipboard Copied! Toggle word wrap Toggle overflow Veleropod 日志显示以下错误信息:NoCredentialProviders: no valid providers in chain.
NoCredentialProviders: no valid providers in chain.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
流程
确保
credentials-velero文件已正确格式化,如下例所示:credentials-velero文件示例[default] aws_access_key_id=AKIAIOSFODNN7EXAMPLE aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
[default]1 aws_access_key_id=AKIAIOSFODNN7EXAMPLE2 aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEYCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.26.6. OADP Operator 问题 复制链接链接已复制到粘贴板!
OpenShift API for Data Protection (OADP) Operator 可能会遇到它无法解决的问题。
5.26.6.1. 解决 OADP Operator 的静默失败 复制链接链接已复制到粘贴板!
OADP Operator 的 S3 存储桶可能为空,但在运行 oc get po -n <oadp_operator_namespace> 命令时,您会看到 Operator 的状态变为 Running。
在这种情况下,Operator 被认为有静默地失败,因为它错误地报告它正在运行。这个问题是因为云凭证提供的权限不足。
要解决这个问题,检索备份存储位置列表 (BSL),并检查每个 BSL 的清单是否有凭证问题。
流程
使用 OpenShift 或 Velero 命令行界面(CLI)检索 BSLs 列表:
使用 OpenShift CLI (
oc) 检索 BSLs 列表:oc get backupstoragelocations.velero.io -A
$ oc get backupstoragelocations.velero.io -ACopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
veleroCLI 检索 BSLs 列表:velero backup-location get -n <oadp_operator_namespace>
$ velero backup-location get -n <oadp_operator_namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用上一步中的 BSLs 列表,并运行以下命令来检查每个 BSL 的清单中的错误:
oc get backupstoragelocations.velero.io -n <namespace> -o yaml
$ oc get backupstoragelocations.velero.io -n <namespace> -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 结果示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.26.7. OADP 超时 复制链接链接已复制到粘贴板!
通过扩展超时,可以允许复杂的或资源密集型的进程在没有预先终止的情况下成功完成。此配置可减少错误、重试或失败。
确保您在扩展超时设置时符合正常的逻辑,,以便不会因为设置的超时时间太长导致隐藏了底层存在的问题。考虑并监控满足进程需求和整体系统性能的适当超时值。
以下 OADP 超时演示了如何和何时实现这些参数的说明:
5.26.7.1. 实施 restic 超时 复制链接链接已复制到粘贴板!
spec.configuration.nodeAgent.timeout 参数定义 Restic 超时。默认值为 1h。
在以下情况下,使用 nodeAgent 部分中的 Restic timeout 参数:
- 对总 PV 数据使用量大于 500GB 的 Restic 备份。
如果备份超时并显示以下错误:
level=error msg="Error backing up item" backup=velero/monitoring error="timed out waiting for all PodVolumeBackups to complete"
level=error msg="Error backing up item" backup=velero/monitoring error="timed out waiting for all PodVolumeBackups to complete"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
流程
编辑
DataProtectionApplication自定义资源(CR)清单的spec.configuration.nodeAgent.timeout块中的值,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.26.7.2. 实施 velero 资源超时 复制链接链接已复制到粘贴板!
resourceTimeout 定义在超时发生前等待 Velero 资源的时间,如等待 Velero 自定义资源定义 (CRD)可用、volumeSnapshot 删除和存储库可用。默认值为 10m。
在以下情况下使用 resourceTimeout :
对总 PV 数据使用量大于 1TB 的备份。当在将备份标记为完成前,Velero 尝试清理或删除 Container Storage Interface (CSI)快照时使用此参数作为超时值。
- 这个清理过程的一个子任务会尝试修补 VSC,此超时可用于该任务。
- 要创建或确保一个备份存储库已准备好用于 Restic 或 Kopia 的基于文件系统的备份。
- 在从备份中恢复自定义资源 (CR) 或资源前,检查集群中的 Velero CRD 是否可用。
流程
编辑
DataProtectionApplicationCR 清单的spec.configuration.velero.resourceTimeout块中的值,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.26.7.2.1. 实施 velero 默认项目操作超时 复制链接链接已复制到粘贴板!
defaultItemOperationTimeout 设置定义在超时前在异步 BackupItemActions 和 RestoreItemActions 上等待的时长。默认值为 1h。
在以下情况下使用 defaultItemOperationTimeout :
- 只有 Data Mover 1.2.x。
- 要指定一个特定备份或恢复应等待异步操作完成的时间长度。在 OADP 功能上下文中,这个值用于涉及 Container Storage Interface (CSI) Data Mover 功能的异步操作。
-
当使用
defaultItemOperationTimeout在 Data Protection Application (DPA) 中定义defaultItemOperationTimeout时,它适用于备份和恢复操作。您可以使用itemOperationTimeout来只定义这些 CR 的备份过程或恢复过程,如以下 "Item operation timeout - restore" 和 "Item operation timeout - backup" 部分所述。
流程
编辑
DataProtectionApplicationCR 清单的spec.configuration.velero.defaultItemOperationTimeout块中的值,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.26.7.3. 实施 Data Mover 超时 复制链接链接已复制到粘贴板!
timeout 是一个用户提供的、完成 VolumeSnapshotBackup 和 VolumeSnapshotRestore 的超时值。默认值为 10m。
在以下情况下使用 Data Mover timeout :
-
如果创建
VolumeSnapshotBackups(VSBs) 和VolumeSnapshotRestores(VSR),则会在 10 分钟后超时。 -
对于总 PV 数据使用量超过 500GB 的大型环境。设置
1h的超时时间。 -
使用
VolumeSnapshotMover(VSM) 插件。 - 只适用于 OADP 1.1.x。
流程
编辑
DataProtectionApplicationCR 清单的spec.features.dataMover.timeout块中的值,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.26.7.4. 实现 CSI 快照超时 复制链接链接已复制到粘贴板!
CSISnapshotTimeout 指定,在创建过程返回超时错误前,需要等待 CSI VolumeSnapshot 状态变为 ReadyToUse 的时间。默认值为 10m。
在以下情况下使用 CSISnapshotTimeout :
- 使用 CSI 插件。
- 对于非常大型的存储卷,进行快照的时间可能会超过 10 分钟。如果在日志中出现超时信息,请调整此超时设置。
通常,不需要调整 CSISnapshotTimeout,因为默认设置已考虑到大型存储卷的情况。
流程
编辑
BackupCR 清单的spec.csiSnapshotTimeout块中的值,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.26.7.5. 实施项目操作超时 - 恢复 复制链接链接已复制到粘贴板!
ItemOperationTimeout 设置用于指定等待 RestoreItemAction 操作的时间。默认值为 1h。
在以下情况下,使用 restore ItemOperationTimeout :
- 只有 Data Mover 1.2.x。
-
对于 Data Mover,上传到
BackupStorageLocation或从其中下载。如果在达到超时时没有完成恢复操作,它将标记为失败。如果因为存储卷太大出现超时并导致数据 Data Mover 操作失败,则可能需要增加这个超时设置。
流程
编辑
RestoreCR 清单的Restore.spec.itemOperationTimeout块中的值,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.26.7.6. 实施项目操作超时 - 备份 复制链接链接已复制到粘贴板!
ItemOperationTimeout 设置指定用于等待异步 BackupItemAction 操作的时间。默认值为 1h。
在以下情况下,使用 backup ItemOperationTimeout :
- 只有 Data Mover 1.2.x。
-
对于 Data Mover,上传到
BackupStorageLocation或从其中下载。如果在达到超时时没有完成备份操作,它将标记为失败。如果因为存储卷太大出现超时并导致数据 Data Mover 操作失败,则可能需要增加这个超时设置。
流程
编辑
BackupCR 清单的Backup.spec.itemOperationTimeout块中的值,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.26.8. 备份和恢复 CR 问题 复制链接链接已复制到粘贴板!
您可能会遇到以下 Backup 和 Restore 自定义资源 (CR) 的常见问题。
- 备份 CR 无法检索卷
- 备份 CR 状态在进行中
-
备份 CR 状态处于
PartiallyFailedphase/state/etc
5.26.8.1. 备份 CR 无法检索卷的故障排除问题 复制链接链接已复制到粘贴板!
如果持久性卷 (PV) 和快照位置位于不同的区域,则 Backup 自定义资源 (CR) 会显示以下错误信息:
错误示例
InvalidVolume.NotFound: The volume ‘vol-xxxx’ does not exist.
InvalidVolume.NotFound: The volume ‘vol-xxxx’ does not exist.
流程
-
编辑
DataProtectionApplication清单中的spec.snapshotLocations.velero.config.region键的值,使快照位置位于与 PV 相同的区域。 -
创建新的
BackupCR。
5.26.8.2. 对备份 CR 状态一直处于进行中状态的故障进行排除 复制链接链接已复制到粘贴板!
如果备份中断,则无法恢复,Backup 客户资源 (CR) 的状态一直处于 InProgress 阶段,且无法完成。
流程
运行以下命令,检索
BackupCR 的详情:oc -n {namespace} exec deployment/velero -c velero -- ./velero \ backup describe <backup>$ oc -n {namespace} exec deployment/velero -c velero -- ./velero \ backup describe <backup>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来删除
BackupCR:oc delete backups.velero.io <backup> -n openshift-adp
$ oc delete backups.velero.io <backup> -n openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您不需要清理备份位置,因为正在进行的
BackupCR 没有上传文件到对象存储。-
创建新的
BackupCR。 运行以下命令查看 Velero 备份详情:
velero backup describe <backup_name> --details
$ velero backup describe <backup_name> --detailsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.26.8.3. 对备份 CR 状态部分失败的故障进行排除 复制链接链接已复制到粘贴板!
在没有 Restic 使用时一个 Backup CR 的状态保留在 PartiallyFailed 阶段,且没有完成。从属 PVC 的快照没有创建。
如果基于 CSI 快照类创建的备份缺少标签,CSI 快照插件将无法创建快照。因此,Velero pod 会记录类似以下消息的错误:
time="2023-02-17T16:33:13Z" level=error msg="Error backing up item" backup=openshift-adp/user1-backup-check5 error="error executing custom action (groupResource=persistentvolumeclaims, namespace=busy1, name=pvc1-user1): rpc error: code = Unknown desc = failed to get volumesnapshotclass for storageclass ocs-storagecluster-ceph-rbd: failed to get volumesnapshotclass for provisioner openshift-storage.rbd.csi.ceph.com, ensure that the desired volumesnapshot class has the velero.io/csi-volumesnapshot-class label" logSource="/remote-source/velero/app/pkg/backup/backup.go:417" name=busybox-79799557b5-vprq
time="2023-02-17T16:33:13Z" level=error msg="Error backing up item" backup=openshift-adp/user1-backup-check5 error="error executing custom action (groupResource=persistentvolumeclaims, namespace=busy1, name=pvc1-user1): rpc error: code = Unknown desc = failed to get volumesnapshotclass for storageclass ocs-storagecluster-ceph-rbd: failed to get volumesnapshotclass for provisioner openshift-storage.rbd.csi.ceph.com, ensure that the desired volumesnapshot class has the velero.io/csi-volumesnapshot-class label" logSource="/remote-source/velero/app/pkg/backup/backup.go:417" name=busybox-79799557b5-vprq
流程
运行以下命令来删除
BackupCR:oc delete backups.velero.io <backup> -n openshift-adp
$ oc delete backups.velero.io <backup> -n openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
如果需要,清理
BackupStorageLocation资源中保存的数据以释放空间。 运行以下命令,将
velero.io/csi-volumesnapshot-class=true标签应用到VolumeSnapshotClass对象:oc label volumesnapshotclass/<snapclass_name> velero.io/csi-volumesnapshot-class=true
$ oc label volumesnapshotclass/<snapclass_name> velero.io/csi-volumesnapshot-class=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
创建新的
BackupCR。
5.26.9. Restic 问题 复制链接链接已复制到粘贴板!
在使用 Restic 备份应用程序时,您可能会遇到这些问题。
-
启用了
root_squashesource/parameter 的 NFS 数据卷的 Restic 权限错误 -
在存储桶被清空后,无法重新创建 Restic
BackupCR - 因为 pod 安全准入 (PSA) 策略有改变,Restic 恢复在 OpenShift Container Platform 4.14 上部分失败
5.26.9.1. NFS 数据卷的 Restic 权限错误故障排除 复制链接链接已复制到粘贴板!
如果您的 NFS 数据卷启用了 root_squash 参数,Restic 映射设置为 nfsnobody 值,且没有创建备份的权限,Restic 的 pod 日志会显示以下错误信息:
错误示例
controller=pod-volume-backup error="fork/exec/usr/bin/restic: permission denied".
controller=pod-volume-backup error="fork/exec/usr/bin/restic: permission denied".
您可以通过为 Restic 创建补充组并将组 ID 添加到 DataProtectionApplication 清单中来解决这个问题。
流程
-
在 NFS 数据卷中为
Restic创建补充组。 -
在 NFS 目录上设置
setgid位,以便继承组所有权。 将
spec.configuration.nodeAgent.supplementalGroups参数和组 ID 添加到DataProtectionApplication清单中,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定补充组 ID。
-
等待
Resticpod 重启,以便应用更改。
5.26.9.2. 对在存储桶被禁止后无法重新创建 Restic Backup CR 的故障进行排除 复制链接链接已复制到粘贴板!
如果 Restic 目录从对象存储中删除,Velero 不会从 ResticRepository 清单重新创建或更新 Restic 仓库。如需更多信息,请参阅 Velero issue 4421。
如果您为命名空间创建 Restic Backup CR,请清空对象存储的存储桶,然后为同一命名空间重新创建 Backup CR,重新创建的 Backup CR 会失败。在本例中,velero pod 日志显示以下错误信息:
+ .sample 错误
stderr=Fatal: unable to open config file: Stat: The specified key does not exist.\nIs there a repository at the following location?
stderr=Fatal: unable to open config file: Stat: The specified key does not exist.\nIs there a repository at the following location?
流程
运行以下命令,从命名空间中删除相关的 Restic 存储库:
oc delete resticrepository openshift-adp <name_of_the_restic_repository>
$ oc delete resticrepository openshift-adp <name_of_the_restic_repository>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在以下错误日志中,
mysql-persistent是有问题的 Restic 存储库。存储库的名称会出现在其说明中。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
OpenShift Container Platform 4.14 强制执行一个 pod 安全准入 (PSA) 策略,该策略可能会在 Restic 恢复过程中阻止 pod 的就绪度。
如果创建 Pod 时找不到 SecurityContextConstraints (SCC) 资源,并且 pod 上的 PSA 策略没有设置为满足所需的标准,则 Pod 准入将被拒绝。
造成这个问题的原因是 Velero 资源恢复的顺序。
错误示例
流程
在 DPA 自定义资源 (CR) 中,检查或设置 Velero 服务器上的
restore-resource-priorities字段,以确保在资源列表的pod之前列出securitycontextconstraints:oc get dpa -o yaml
$ oc get dpa -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow DPA CR 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 如果您有一个现有的恢复资源优先级列表,请确保将现有列表与完整列表合并。
- 确保应用程序 pod 的安全标准一致(如为部署修复 PodSecurity Admission 警告 中所述)以防止部署警告。如果应用程序与安全标准不一致,无论 SCC 是什么,都可能会出现错误。
这个解决方案是临时的,永久解决方案正在讨论中。
5.26.10. OADP Data 包含测试 复制链接链接已复制到粘贴板!
DataProtectionTest (DPT) 是一个自定义资源 (CR),它提供验证 OADP 配置的框架。DPT CR 检查并报告以下参数信息:
- 将备份上传到对象存储的性能。
- 持久性卷声明的 CSI 快照就绪度。
- 存储桶配置,如加密和版本控制。
在 DPT CR 中使用此信息,您可以确保正确配置并正确配置您的数据保护环境,并根据设置配置执行。
5.26.10.1. OADP DataProtectionTest CR 规格字段 复制链接链接已复制到粘贴板!
您可以在 DataProtectionTest (DPT) 自定义资源 (CR) 中配置以下规格字段。
| 字段 | 类型 | 描述 |
|---|---|---|
|
| string |
在 |
|
| object |
|
|
| object | 配置,以运行到对象存储的上传速度测试。 |
|
| list | 持久性卷声明列表,对它们进行快照来验证快照的就绪度。 |
|
| 布尔值 |
即使状态为 |
|
| 布尔值 |
如果设置为 |
5.26.10.2. OADP DataProtectionTest CR 状态字段 复制链接链接已复制到粘贴板!
您可以使用以下 status 字段查看 DataProtectionTest (DPT) 自定义资源 (CR) 的状态:
| 字段 | 类型 | 描述 |
|---|---|---|
|
| string |
DPT CR 的当前阶段。值是 |
|
| timestamp | DPT CR 最后一次运行时的时间戳。 |
|
| object | 上传速度测试的结果。 |
|
| object | 有关存储桶加密和版本控制的信息。 |
|
| list | 每个持久性卷声明的快照测试结果。 |
|
| string |
快照聚合的传递/失败摘要。例如, |
|
| string | AWS S3 兼容存储桶供应商。例如,AWS、MinIO、Ceph。 |
|
| string | 如果 DPT CR 失败,错误消息。 |
5.26.10.3. 使用 DataProtectionTest 自定义资源 复制链接链接已复制到粘贴板!
您可以配置 DataProtectionTest (DPT) 自定义资源 (CR),然后运行 DPT CR 来验证 Container Storage Initiative (CSI) 快照就绪,并将性能上传到存储桶。
先决条件
-
已以具有
cluster-admin角色的用户身份登录到 OpenShift Container Platform 集群。 -
已安装 OpenShift CLI(
oc)。 - 已安装 OADP Operator。
-
您已创建了
DataProtectionApplication(DPA) CR。 - 您已配置了备份存储位置 (BSL) 来存储备份。
- 您有一个应用程序,并在单独的命名空间中运行持久性卷声明 (PVC)。
流程
为 DPT CR 创建清单文件,如下例所示:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建 DPT CR:
oc create -f <dpt_file_name>
$ oc create -f <dpt_file_name>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定 DPT 清单的文件名。
验证
运行以下命令,验证 DPT CR 的阶段是否为
Complete:oc get dpt dpt-sample
$ oc get dpt dpt-sampleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例如下:
NAME PHASE LASTTESTED UPLOADSPEED(MBPS) ENCRYPTION VERSIONING SNAPSHOTS AGE dpt-sample Complete 17m 546 AES256 Enabled 2/2 passed 17m
NAME PHASE LASTTESTED UPLOADSPEED(MBPS) ENCRYPTION VERSIONING SNAPSHOTS AGE dpt-sample Complete 17m 546 AES256 Enabled 2/2 passed 17mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证 CSI 快照是否已就绪,数据上传测试是否成功:
oc get dpt dpt-sample -o yaml
$ oc get dpt dpt-sample -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例如下:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.26.10.4. 通过配置备份存储位置规格来运行数据保护测试 复制链接链接已复制到粘贴板!
您可以通过指定备份存储位置 (BSL) 规格而不是 BSL 名称来配置 DataProtectionTest (DPT) 自定义资源( CR)。然后,运行 DPT CR 来验证 Container Storage Initiative (CSI) 快照就绪,数据上传性能到存储桶。
先决条件
-
已以具有
cluster-admin角色的用户身份登录到 OpenShift Container Platform 集群。 -
已安装 OpenShift CLI(
oc)。 - 已安装 OADP Operator。
-
您已创建了
DataProtectionApplication(DPA) CR。 - 您已配置存储桶来存储备份。
-
您已创建了
Secret对象来访问存储桶存储。 - 您有一个应用程序,并在单独的命名空间中运行持久性卷声明 (PVC)。
流程
为 DPT CR 创建清单文件,如下例所示:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建 DPT CR:
oc create -f <dpt_file_name>
$ oc create -f <dpt_file_name>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定 DPT 清单的文件名。
验证
运行以下命令,验证 DPT CR 的阶段是否为
Complete:oc get dpt dpt-sample
$ oc get dpt dpt-sampleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例如下:
NAME PHASE LASTTESTED UPLOADSPEED(MBPS) ENCRYPTION VERSIONING SNAPSHOTS AGE dpt-sample Complete 17m 546 AES256 Enabled 2/2 passed 17m
NAME PHASE LASTTESTED UPLOADSPEED(MBPS) ENCRYPTION VERSIONING SNAPSHOTS AGE dpt-sample Complete 17m 546 AES256 Enabled 2/2 passed 17mCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.26.10.5. 在 Azure 对象存储上运行数据保护测试 复制链接链接已复制到粘贴板!
如果您在 Azure 对象存储上使用 OADP,则需要将 Azure STORAGE_ACCOUNT_ID 指定为 secret 对象的一部分。使用以下步骤在 Azure 集群上运行 DataProtectionTest (DPT) 自定义资源 (CR)。
先决条件
-
您已以具有
cluster-admin角色的用户身份登录到 Azure 集群。 -
已安装 OpenShift CLI(
oc)。 - 已安装 OADP Operator。
- 您已配置存储桶来存储备份。
- 您有一个应用程序,并在单独的命名空间中运行持久性卷声明 (PVC)。
流程
将
Storage Blob Data Contributor角色添加到 AzurestorageAccount对象,以避免 DPT 运行失败。运行以下命令:az role assignment create \ --assignee "$AZURE_CLIENT_ID" \ --role "Storage Blob Data Contributor" \ --scope "/subscriptions/$AZURE_SUBSCRIPTION_ID/resourceGroups/$AZURE_RESOURCE_GROUP/providers/Microsoft.Storage/storageAccounts/$AZURE_STORAGE_ACCOUNT_ID"
$ az role assignment create \ --assignee "$AZURE_CLIENT_ID" \ --role "Storage Blob Data Contributor" \ --scope "/subscriptions/$AZURE_SUBSCRIPTION_ID/resourceGroups/$AZURE_RESOURCE_GROUP/providers/Microsoft.Storage/storageAccounts/$AZURE_STORAGE_ACCOUNT_ID"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在终端中,导出 Azure 参数,并使用参数创建一个 secret 凭证文件,如下例所示。
要在 Azure 上运行 DPT CR,您需要在 secret 凭证文件中指定
STORAGE_ACCOUNT_ID参数。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
SecretCR,如下例所示:oc create secret generic cloud-credentials-azure -n openshift-adp --from-file cloud=<credentials_file_path>
$ oc create secret generic cloud-credentials-azure -n openshift-adp --from-file cloud=<credentials_file_path>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下示例中显示的配置创建
DataProtectionApplication(DPA) CR:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定
Secret对象的名称。在本例中,名称是cloud-credentials-azure。
通过指定备份存储位置的名称 (BSL)、
VolumeSnapshotClass对象和持久性卷声明详情来创建 DPT CR,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 运行 DPT CR 以验证快照是否就绪。
5.26.10.6. 对 DataProtectionTest 自定义资源进行故障排除 复制链接链接已复制到粘贴板!
在运行 DataProtectionTest (DPT) 自定义资源 (CR) 时,请使用下表来排除常见问题。
| 错误 | 原因 | 解决方案 |
|---|---|---|
|
DPT 处于 | 存储桶凭证或存储桶访问失败 |
检查 |
| 上传测试失败 |
不正确的 |
检查 |
| 快照测试失败 | CSI 快照控制器配置不正确 |
检查 |
| 未填充存储桶加密或版本 | 云供应商限制 | 并非所有对象存储供应商都会一致公开这些字段。 |
5.26.11. 使用 must-gather 工具 复制链接链接已复制到粘贴板!
您可以使用 must-gather 工具收集有关 OADP 自定义资源的日志和信息。must-gather 数据必须附加到所有客户案例。
must-gather 工具是一个容器,它不会一直运行。must-gather 命令会调用该工具并会运行几分钟。
5.26.11.1. 使用 must-gather 工具 复制链接链接已复制到粘贴板!
您可以使用以下选项运行 must-gather 工具。要使用一个选项,请在 must-gather 命令中添加与该选项对应的标记。
- 默认配置
-
此配置会为安装 OADP Operator 的所有命名空间收集 pod 日志、OADP 和
Velero自定义资源 (CR) 信息。 - Timeout(超时)
-
如果有许多
BackupCR 失败,则数据收集需要很长时间。您可以通过设置超时值来提高性能。 - 不安全的 TLS 连接
-
如果使用自定义 CA 证书,请使用带有不安全 TLS 连接的
must-gather工具。
must-gather 工具使用收集的信息生成 Markdown 输出文件。Markdown 文件位于集群目录中。
如需有关支持的标记的更多信息,请在 must-gather 工具中使用 help 标记,如下例所示:
oc adm must-gather --image=registry.redhat.io/oadp/oadp-mustgather-rhel9:v1.5 -- /usr/bin/gather -h
$ oc adm must-gather --image=registry.redhat.io/oadp/oadp-mustgather-rhel9:v1.5 -- /usr/bin/gather -h
先决条件
-
已以具有
cluster-admin角色的用户身份登录到 OpenShift Container Platform 集群。 -
已安装 OpenShift CLI(
oc)。
流程
-
进入存储
must-gather数据的目录。 为以下数据收集选项之一运行
oc adm must-gather命令:要使用
must-gather工具的默认配置,请运行以下命令:oc adm must-gather --image=registry.redhat.io/oadp/oadp-mustgather-rhel9:v1.5
$ oc adm must-gather --image=registry.redhat.io/oadp/oadp-mustgather-rhel9:v1.5Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要将 timeout 标志与
must-gather工具一起使用,请运行以下命令:oc adm must-gather --image=registry.redhat.io/oadp/oadp-mustgather-rhel9:v1.5 -- /usr/bin/gather --request-timeout 1m
$ oc adm must-gather --image=registry.redhat.io/oadp/oadp-mustgather-rhel9:v1.5 -- /usr/bin/gather --request-timeout 1m1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 在本例中,超时为 1 分钟。
要将不安全的 TLS 连接标记与
must-gather工具一起使用,请运行以下命令:oc adm must-gather --image=registry.redhat.io/oadp/oadp-mustgather-rhel9:v1.5 -- /usr/bin/gather --skip-tls
$ oc adm must-gather --image=registry.redhat.io/oadp/oadp-mustgather-rhel9:v1.5 -- /usr/bin/gather --skip-tlsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要将不安全的 TLS 连接和
must-gather工具的超时标记结合使用,请运行以下命令:oc adm must-gather --image=registry.redhat.io/oadp/oadp-mustgather-rhel9:v1.5 -- /usr/bin/gather --request-timeout 15s --skip-tls
$ oc adm must-gather --image=registry.redhat.io/oadp/oadp-mustgather-rhel9:v1.5 -- /usr/bin/gather --request-timeout 15s --skip-tls1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 在本例中,超时为 15 秒。默认情况下,
--skip-tls标志值为false。将值设为true以允许不安全的 TLS 连接。
验证
-
验证 Markdown 输出文件是否在以下位置生成:
must-gather.local.89…054550/registry.redhat.io/oadp-mustgather-rhel9:v1.5-sha256-0…84/clusters/a4…86/oadp-must-gather-summary.md 通过在 Markdown 预览中打开文件来查看 Markdown 文件中的
must-gather数据。如需示例输出,请参考以下镜像:您可以将此输出文件上传到红帽客户门户网站中的支持问题单中。图 5.2. must-gather 工具的 markdown 输出示例
5.26.12. OADP 监控 复制链接链接已复制到粘贴板!
通过使用 OpenShift Container Platform 监控堆栈,用户和管理员可以有效地执行以下任务:
- 监控和管理集群
- 分析用户应用程序的工作负载性能
- 监控集群中运行的服务
- 当事件发生时接收警报
5.26.12.1. OADP 监控设置 复制链接链接已复制到粘贴板!
OADP Operator 利用 OpenShift Monitoring Stack 提供的 OpenShift User Workload Monitoring 从 Velero 服务端点检索指标。监控堆栈允许使用 OpenShift Metrics 查询前端创建用户定义的 Alerting Rules 或查询指标。
启用 User Workload Monitoring 后,可以配置和使用任何与 Prometheus 兼容的第三方 UI (如 Grafana)来视觉化 Velero 指标。
监控指标需要为用户定义的项目启用监控,并创建一个 ServiceMonitor 资源,以便从位于 openshift-adp 命名空间中的已启用的 OADP 服务端点中提取这些指标。
OADP 对 Prometheus 指标的支持以尽力提供,且不被支持。
有关设置监控堆栈的更多信息,请参阅配置用户工作负载监控。
先决条件
-
可以使用具有
cluster-admin权限的账户访问 OpenShift Container Platform 集群。 - 您已创建了集群监控配置映射。
流程
使用以下命令编辑
openshift-monitoring命名空间中的cluster-monitoring-configConfigMap对象:oc edit configmap cluster-monitoring-config -n openshift-monitoring
$ oc edit configmap cluster-monitoring-config -n openshift-monitoringCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令在
data部分的config.yaml字段中添加或启用enableUserWorkload选项:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 添加这个选项或设置为
true
等待一段较短时间,检查以下组件是否在
openshift-user-workload-monitoring命名空间中运行来验证用户工作负载监控设置:oc get pods -n openshift-user-workload-monitoring
$ oc get pods -n openshift-user-workload-monitoringCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证
openshift-user-workload-monitoring中是否存在user-workload-monitoring-configConfigMap。如果存在,请跳过这个过程中的剩余步骤。oc get configmap user-workload-monitoring-config -n openshift-user-workload-monitoring
$ oc get configmap user-workload-monitoring-config -n openshift-user-workload-monitoringCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Error from server (NotFound): configmaps "user-workload-monitoring-config" not found
Error from server (NotFound): configmaps "user-workload-monitoring-config" not foundCopy to Clipboard Copied! Toggle word wrap Toggle overflow 为 User Workload Monitoring 创建一个
user-workload-monitoring-configConfigMap对象,并将它保存为2_configure_user_workload_monitoring.yaml文件:输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令应用
2_configure_user_workload_monitoring.yaml文件:oc apply -f 2_configure_user_workload_monitoring.yaml
$ oc apply -f 2_configure_user_workload_monitoring.yaml configmap/user-workload-monitoring-config createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.26.12.2. 创建 OADP 服务监控器 复制链接链接已复制到粘贴板!
OADP 提供了一个 openshift-adp-velero-metrics-svc 服务,它会在配置 Data Protection Application (DPA) 时创建。用户工作负载监控服务监控器需要指向定义的服务。要获取有关该服务的详细信息,请完成以下步骤。
流程
确保
openshift-adp-velero-metrics-svc服务存在。它应包含app.kubernetes.io/name=velero标签,该标签用作ServiceMonitor对象的选择器。oc get svc -n openshift-adp -l app.kubernetes.io/name=velero
$ oc get svc -n openshift-adp -l app.kubernetes.io/name=veleroCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE openshift-adp-velero-metrics-svc ClusterIP 172.30.38.244 <none> 8085/TCP 1h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE openshift-adp-velero-metrics-svc ClusterIP 172.30.38.244 <none> 8085/TCP 1hCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个与现有 service 标签匹配的
ServiceMonitorYAML 文件,并将文件保存为3_create_oadp_service_monitor.yaml。服务监控器在openshift-adp命名空间中创建,其中openshift-adp-velero-metrics-svc服务所在的位置。ServiceMonitor对象示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
3_create_oadp_service_monitor.yaml文件:oc apply -f 3_create_oadp_service_monitor.yaml
$ oc apply -f 3_create_oadp_service_monitor.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
servicemonitor.monitoring.coreos.com/oadp-service-monitor created
servicemonitor.monitoring.coreos.com/oadp-service-monitor createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
使用 OpenShift Container Platform Web 控制台的 Administrator 视角确认新服务监控器处于 Up 状态:等待几分钟,使服务监控器到达 Up 状态。
- 进入到 Observe → Targets 页面。
-
确保没有选择 Filter,或选择了 User source,并在
Text搜索字段中输入openshift-adp。 验证服务监控器的 Status 的状态是否为 Up。
图 5.3. OADP 指标目标
5.26.12.3. 创建警报规则 复制链接链接已复制到粘贴板!
OpenShift Container Platform 监控堆栈使用 Alerting Rules 接收配置的警报。要为 OADP 项目创建 Alerting 规则,请使用用户工作负载监控提取的其中一个指标。
流程
使用示例
OADPBackupFailing警报创建一个PrometheusRuleYAML 文件,并将其保存为4_create_oadp_alert_rule.yaml:OADPBackupFailing警报示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在本例中,Alert 在以下情况下显示:
- 在过去 2 小时中,新的失败的备份数量大于 0,相同的状态至少持续了 5 分钟。
-
如果第一次增加的时间小于 5 分钟,则 Alert 将处于
Pending状态,之后它将进入Firing状态。
应用
4_create_oadp_alert_rule.yaml文件,该文件在openshift-adp命名空间中创建PrometheusRule对象:oc apply -f 4_create_oadp_alert_rule.yaml
$ oc apply -f 4_create_oadp_alert_rule.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
prometheusrule.monitoring.coreos.com/sample-oadp-alert created
prometheusrule.monitoring.coreos.com/sample-oadp-alert createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在触发 Alert 后,您可以使用以下方法查看它:
- 在 Developer 视角中,选择 Observe 菜单。
在 Observe → Alerting 菜单下的 Administrator 视角中,在 Filter 框中选择 User。否则,默认只会显示 Platform Alerts。
图 5.4. OADP 备份失败警报
5.26.12.4. 可用指标列表 复制链接链接已复制到粘贴板!
请参阅下表,了解由 OADP 提供的 Velero 指标参数以及它们的类型:
| 指标名称 | 描述 | 类型 |
|---|---|---|
|
| 备份的大小,以字节为单位 | 量表 |
|
| 当前存在的备份数量 | 量表 |
|
| 试图备份的总数 | 计数 |
|
| 成功备份的总数 | 计数 |
|
| 部分失败的备份总数 | 计数 |
|
| 失败备份的总数 | 计数 |
|
| 验证失败的备份总数 | 计数 |
|
| 完成备份所需的时间,以秒为单位 | Histogram |
|
|
指标 | 计数 |
|
|
指标 | 计数 |
|
|
指标 | 计数 |
|
| 试图备份删除的总数 | 计数 |
|
| 成功删除备份的总数 | 计数 |
|
| 删除失败的备份总数 | 计数 |
|
| 备份最后一次运行成功的时间,Unix 时间戳(以秒为单位) | 量表 |
|
| 备份的项目总数 | 量表 |
|
| 备份过程中遇到的错误总数 | 量表 |
|
| 警告备份的总数 | 计数 |
|
| 备份的最后状态。1 代表成功,0 代表失败 | 量表 |
|
| 当前存在的恢复数量 | 量表 |
|
| 尝试恢复的总数 | 计数 |
|
| 恢复失败验证的总数 | 计数 |
|
| 成功恢复的总数 | 计数 |
|
| 恢复部分失败的总数 | 计数 |
|
| 恢复的失败总数 | 计数 |
|
| 尝试的卷快照总数 | 计数 |
|
| 成功卷快照的总数 | 计数 |
|
| 失败的卷快照总数 | 计数 |
|
| CSI 试图卷快照的总数 | 计数 |
|
| CSI 成功卷快照总数 | 计数 |
|
| CSI 失败卷快照的总数 | 计数 |
5.26.12.5. 使用 Observe UI 查看指标 复制链接链接已复制到粘贴板!
您可以从 Administrator 或 Developer 视角查看 OpenShift Container Platform Web 控制台中的指标,该视角必须有权访问 openshift-adp 项目。
流程
进入到 Observe → Metrics 页面:
如果使用 Developer 视角,请按照以下步骤执行:
- 选择 Custom query,或者点 Show PromQL 链接。
- 输入查询并点 Enter。
如果使用 Administrator 视角,请在文本字段中输入表达式,然后选择 Run Queries。
图 5.5. OADP 指标查询
第 6 章 control plane 备份和恢复 复制链接链接已复制到粘贴板!
6.1. 备份 etcd 复制链接链接已复制到粘贴板!
etcd 是 OpenShift Container Platform 的以”键-值”形式进行的存储,它会保留所有资源对象的状态。
定期备份集群的 etcd 数据,并在 OpenShift Container Platform 环境以外的安全位置保存备份数据。不要在第一个证书轮转完成前(安装后的 24 小时内)进行 etcd 备份,否则备份将包含过期的证书。另外,建议您在非高峰期使用 etcd 备份,因为 etcd 快照有较高的 I/O 成本。
在更新集群之前,请务必进行 etcd 备份。在更新前进行备份非常重要,因为在恢复集群时,您必须使用从同一 z-stream 发行版本中获取的 etcd 备份。例如,OpenShift Container Platform 4.17.5 集群必须使用在 4.17.5 中进行的 etcd 备份。
通过在 control plane 主机上执行一次备份脚本来备份集群的 etcd 数据。不要为每个 control plane 主机进行备份。
在进行了 etcd 备份后,就可以恢复到一个以前的集群状态。
6.1.1. 备份 etcd 数据 复制链接链接已复制到粘贴板!
按照以下步骤,通过创建 etcd 快照并备份静态 pod 的资源来备份 etcd 数据。这个备份可以被保存,并在以后需要时使用它来恢复 etcd 数据。
只保存单一 control plane 主机的备份。不要从集群中的每个 control plane 主机进行备份。
先决条件
-
您可以使用具有
cluster-admin角色的用户访问集群。 您已检查是否启用了集群范围代理。
提示您可以通过查看
oc get proxy cluster -o yaml的输出来检查代理是否已启用。如果httpProxy、httpsProxy和noProxy字段设置了值,则会启用代理。
流程
以 root 用户身份为 control plane 节点启动一个 debug 会话:
oc debug --as-root node/<node_name>
$ oc debug --as-root node/<node_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 debug shell 中将根目录改为
/host:chroot /host
sh-4.4# chroot /hostCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果启用了集群范围代理,请运行以下命令导出
NO_PROXY、HTTP_PROXY和HTTPS_PROXY环境变量:export HTTP_PROXY=http://<your_proxy.example.com>:8080
$ export HTTP_PROXY=http://<your_proxy.example.com>:8080Copy to Clipboard Copied! Toggle word wrap Toggle overflow export HTTPS_PROXY=https://<your_proxy.example.com>:8080
$ export HTTPS_PROXY=https://<your_proxy.example.com>:8080Copy to Clipboard Copied! Toggle word wrap Toggle overflow export NO_PROXY=<example.com>
$ export NO_PROXY=<example.com>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 debug shell 中运行
cluster-backup.sh脚本,并传递保存备份的位置。提示cluster-backup.sh脚本作为 etcd Cluster Operator 的一个组件被维护,它是etcdctl snapshot save命令的包装程序(wrapper)。/usr/local/bin/cluster-backup.sh /home/core/assets/backup
sh-4.4# /usr/local/bin/cluster-backup.sh /home/core/assets/backupCopy to Clipboard Copied! Toggle word wrap Toggle overflow 脚本输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在这个示例中,在 control plane 主机上的
/home/core/assets/backup/目录中创建了两个文件:-
snapshot_<datetimestamp>.db:这个文件是 etcd 快照。cluster-backup.sh脚本确认其有效。 static_kuberesources_<datetimestamp>.tar.gz:此文件包含静态 pod 的资源。如果启用了 etcd 加密,它也包含 etcd 快照的加密密钥。注意如果启用了 etcd 加密,建议出于安全考虑,将第二个文件与 etcd 快照分开保存。但是,需要这个文件才能从 etcd 快照中进行恢复。
请记住,etcd 仅对值进行加密,而不对键进行加密。这意味着资源类型、命名空间和对象名称是不加密的。
-
6.1.3. 创建自动的 etcd 备份 复制链接链接已复制到粘贴板!
etcd 的自动备份功能支持重复备份和单一备份。重复备份会创建一个 cron 作业,该作业在每次作业触发时都启动一次备份。
自动 etcd 备份是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
按照以下步骤为 etcd 启用自动备份。
在集群中启用 TechPreviewNoUpgrade 功能集可防止次版本更新。TechPreviewNoUpgrade 功能集无法被禁用。不要在生产环境集群中启用此功能。
先决条件
-
您可以使用具有
cluster-admin角色的用户访问集群。 -
您可以访问 OpenShift CLI(
oc)。
流程
使用以下内容创建名为
enable-tech-preview-no-upgrade.yaml的FeatureGate自定义资源 (CR) 文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用 CR 并启用自动备份:
oc apply -f enable-tech-preview-no-upgrade.yaml
$ oc apply -f enable-tech-preview-no-upgrade.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 启用相关的 API 需要一些时间。运行以下命令,验证自定义资源定义 (CRD) 的创建:
oc get crd | grep backup
$ oc get crd | grep backupCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
backups.config.openshift.io 2023-10-25T13:32:43Z etcdbackups.operator.openshift.io 2023-10-25T13:32:04Z
backups.config.openshift.io 2023-10-25T13:32:43Z etcdbackups.operator.openshift.io 2023-10-25T13:32:04ZCopy to Clipboard Copied! Toggle word wrap Toggle overflow
6.1.3.1. 创建单个自动 etcd 备份 复制链接链接已复制到粘贴板!
按照以下步骤,通过创建并应用自定义资源 (CR) 来创建单个 etcd 备份。
先决条件
-
您可以使用具有
cluster-admin角色的用户访问集群。 -
您可以访问 OpenShift CLI(
oc)。
流程
如果动态置备的存储可用,请完成以下步骤以创建单个自动 etcd 备份:
创建名为
etcd-backup-pvc.yaml的持久性卷声明 (PVC),其内容如下:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- PVC 可用的存储量。根据您的要求调整这个值。
运行以下命令来应用 PVC:
oc apply -f etcd-backup-pvc.yaml
$ oc apply -f etcd-backup-pvc.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令验证 PVC 的创建:
oc get pvc
$ oc get pvcCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE etcd-backup-pvc Bound 51s
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE etcd-backup-pvc Bound 51sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意动态 PVC 处于
Pending状态,直到它们被挂载为止。创建名为
etcd-single-backup.yaml的 CR 文件,其内容如下:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 保存备份的 PVC 名称。根据您的环境调整这个值。
应用 CR 以启动单个备份:
oc apply -f etcd-single-backup.yaml
$ oc apply -f etcd-single-backup.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
如果动态置备的存储不可用,请完成以下步骤来创建单个自动 etcd 备份:
创建名为
etcd-backup-local-storage.yaml的StorageClassCR 文件,其内容如下:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来应用
StorageClassCR:oc apply -f etcd-backup-local-storage.yaml
$ oc apply -f etcd-backup-local-storage.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建名为
etcd-backup-pv-fs.yaml的 PV,其内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令验证 PV 的创建:
oc get pv
$ oc get pvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE etcd-backup-pv-fs 100Gi RWO Retain Available etcd-backup-local-storage 10s
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE etcd-backup-pv-fs 100Gi RWO Retain Available etcd-backup-local-storage 10sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建名为
etcd-backup-pvc.yaml的 PVC,其内容如下:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- PVC 可用的存储量。根据您的要求调整这个值。
运行以下命令来应用 PVC:
oc apply -f etcd-backup-pvc.yaml
$ oc apply -f etcd-backup-pvc.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建名为
etcd-single-backup.yaml的 CR 文件,其内容如下:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将备份保存到的持久性卷声明 (PVC) 的名称。根据您的环境调整这个值。
应用 CR 以启动单个备份:
oc apply -f etcd-single-backup.yaml
$ oc apply -f etcd-single-backup.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
6.1.3.2. 创建重复自动化 etcd 备份 复制链接链接已复制到粘贴板!
按照以下步骤创建自动重复备份 etcd。
如果可能,使用动态置备的存储将创建的 etcd 备份数据保存在安全的外部位置。如果动态置备的存储不可用,请考虑将备份数据存储在 NFS 共享上,以便更易访问备份恢复。
先决条件
-
您可以使用具有
cluster-admin角色的用户访问集群。 -
您可以访问 OpenShift CLI(
oc)。
流程
如果动态置备的存储可用,请完成以下步骤来创建自动重复备份:
创建名为
etcd-backup-pvc.yaml的持久性卷声明 (PVC),其内容如下:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- PVC 可用的存储量。根据您的要求调整这个值。
注意每个供应商都需要更改
accessModes和storageClassName密钥:Expand 供应商 accessModes值storageClassNamevalue带有
versioned-installer-efc_operator-ci配置集的 AWS- ReadWriteManyefs-scGoogle Cloud
- ReadWriteManyfilestore-csiMicrosoft Azure
- ReadWriteManyazurefile-csi运行以下命令来应用 PVC:
oc apply -f etcd-backup-pvc.yaml
$ oc apply -f etcd-backup-pvc.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令验证 PVC 的创建:
oc get pvc
$ oc get pvcCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE etcd-backup-pvc Bound 51s
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE etcd-backup-pvc Bound 51sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意动态 PVC 处于
Pending状态,直到它们被挂载为止。
如果动态置备的存储不可用,请完成以下步骤来创建本地存储 PVC:
警告如果您删除或丢失对包含存储备份数据的节点的访问,可能会丢失数据。
创建名为
etcd-backup-local-storage.yaml的StorageClassCR 文件,其内容如下:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来应用
StorageClassCR:oc apply -f etcd-backup-local-storage.yaml
$ oc apply -f etcd-backup-local-storage.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 从应用的
StorageClass中创建一个名为etcd-backup-pv-fs.yaml的 PV,其内容类似以下示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 提示运行以下命令来列出可用的节点:
oc get nodes
$ oc get nodesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令验证 PV 的创建:
oc get pv
$ oc get pvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE etcd-backup-pv-fs 100Gi RWX Delete Available etcd-backup-local-storage 10s
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE etcd-backup-pv-fs 100Gi RWX Delete Available etcd-backup-local-storage 10sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建名为
etcd-backup-pvc.yaml的 PVC,其内容如下:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- PVC 可用的存储量。根据您的要求调整这个值。
运行以下命令来应用 PVC:
oc apply -f etcd-backup-pvc.yaml
$ oc apply -f etcd-backup-pvc.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
创建名为
etcd-recurring-backups.yaml的自定义资源定义 (CRD) 文件。创建的 CRD 的内容定义自动备份的调度和保留类型。对于带有 15 个保留备份的
RetentionNumber的默认保留类型,请使用类似以下示例的内容:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 用于重复备份的
CronTab调度。根据您的需要调整这个值。
要使用基于最大备份数的保留,请在
etcd键中添加以下键值对:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 警告已知问题会导致保留备份的数量大于配置的值。
要根据备份的文件大小保留,请使用:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 以 GB 为单位保留备份的最大文件大小。根据您的需要调整这个值。如果未指定,则默认为 10 GB。
警告已知问题会导致保留备份的最大大小超过配置的值 10 GB。
运行以下命令,创建 CRD 定义的 cron 作业:
oc create -f etcd-recurring-backup.yaml
$ oc create -f etcd-recurring-backup.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要查找创建的 cron 任务,请运行以下命令:
oc get cronjob -n openshift-etcd
$ oc get cronjob -n openshift-etcdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
6.2. 替换不健康的 etcd 成员 复制链接链接已复制到粘贴板!
本文档描述了替换一个不健康 etcd 成员的过程。
此过程取决于 etcd 成员不健康的原因,如机器没有运行,或节点未就绪,或 etcd pod 处于 crashlooping 状态。
如果您丢失了大多数 control plane 主机,请按照灾难恢复流程恢复到以前的一个集群状态,而不是这个过程。
如果 control plane 证书在被替换的成员中无效,则必须遵循从已过期 control plane 证书中恢复的步骤,而不是此过程。
如果 control plane 节点丢失并且创建了一个新节点,etcd 集群 Operator 将处理生成新 TLS 证书并将节点添加为 etcd 成员。
6.2.1. 先决条件 复制链接链接已复制到粘贴板!
- 在替换不健康的 etcd 成员,需要进行 etcd 备份。
6.2.2. 找出一个不健康的 etcd 成员 复制链接链接已复制到粘贴板!
您可以识别集群是否有不健康的 etcd 成员。
先决条件
-
您可以使用具有
cluster-admin角色的用户访问集群。 - 已进行 etcd 备份。如需更多信息,请参阅"恢复 etcd 数据"。
流程
使用以下命令检查
EtcdMembersAvailable状态条件的状态:oc get etcd -o=jsonpath='{range .items[0].status.conditions[?(@.type=="EtcdMembersAvailable")]}{.message}{"\n"}{end}'$ oc get etcd -o=jsonpath='{range .items[0].status.conditions[?(@.type=="EtcdMembersAvailable")]}{.message}{"\n"}{end}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 查看输出:
2 of 3 members are available, ip-10-0-131-183.ec2.internal is unhealthy
2 of 3 members are available, ip-10-0-131-183.ec2.internal is unhealthyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 这个示例输出显示
ip-10-0-131-183.ec2.internaletcd 成员不健康。
6.2.3. 确定不健康的 etcd 成员的状态 复制链接链接已复制到粘贴板!
替换不健康 etcd 成员的步骤取决于 etcd 的以下状态:
- 机器没有运行或者该节点未就绪
- etcd pod 处于 crashlooping 状态
此流程决定了 etcd 成员处于哪个状态。这可让您了解替换不健康的 etcd 成员要遵循的步骤。
如果您知道机器没有运行或节点未就绪,但它们应该很快返回健康状态,那么您就不需要执行替换 etcd 成员的流程。当机器或节点返回一个健康状态时,etcd cluster Operator 将自动同步。
先决条件
-
您可以使用具有
cluster-admin角色的用户访问集群。 - 您已找到不健康的 etcd 成员。
流程
检查 机器是否没有运行:
oc get machines -A -ojsonpath='{range .items[*]}{@.status.nodeRef.name}{"\t"}{@.status.providerStatus.instanceState}{"\n"}' | grep -v running$ oc get machines -A -ojsonpath='{range .items[*]}{@.status.nodeRef.name}{"\t"}{@.status.providerStatus.instanceState}{"\n"}' | grep -v runningCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
ip-10-0-131-183.ec2.internal stopped
ip-10-0-131-183.ec2.internal stopped1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 此输出列出了节点以及节点机器的状态。如果状态不是
running,则代表机器没有运行。
如果机器没有运行,按照替换机器没有运行或节点没有就绪的非健康 etcd 成员过程进行操作。
确定 节点是否未就绪。
如果以下任何一种情况是正确的,则代表节点没有就绪。
如果机器正在运行,检查节点是否不可访问:
oc get nodes -o jsonpath='{range .items[*]}{"\n"}{.metadata.name}{"\t"}{range .spec.taints[*]}{.key}{" "}' | grep unreachable$ oc get nodes -o jsonpath='{range .items[*]}{"\n"}{.metadata.name}{"\t"}{range .spec.taints[*]}{.key}{" "}' | grep unreachableCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
ip-10-0-131-183.ec2.internal node-role.kubernetes.io/master node.kubernetes.io/unreachable node.kubernetes.io/unreachable
ip-10-0-131-183.ec2.internal node-role.kubernetes.io/master node.kubernetes.io/unreachable node.kubernetes.io/unreachable1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 如果节点带有
unreachable污点,则节点没有就绪。
如果该节点仍然可访问,则检查该节点是否列为
NotReady:oc get nodes -l node-role.kubernetes.io/master | grep "NotReady"
$ oc get nodes -l node-role.kubernetes.io/master | grep "NotReady"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
ip-10-0-131-183.ec2.internal NotReady master 122m v1.32.3
ip-10-0-131-183.ec2.internal NotReady master 122m v1.32.31 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 如果节点列表为
NotReady,则 该节点没有就绪。
如果节点没有就绪,按照替换机器没有运行或节点没有就绪的 etcd 成员的步骤进行操作。
确定 etcd Pod 是否处于 crashlooping 状态。
如果机器正在运行并且节点已就绪,请检查 etcd pod 是否处于 crashlooping 状态。
验证所有 control plane 节点都列为
Ready:oc get nodes -l node-role.kubernetes.io/master
$ oc get nodes -l node-role.kubernetes.io/masterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME STATUS ROLES AGE VERSION ip-10-0-131-183.ec2.internal Ready master 6h13m v1.32.3 ip-10-0-164-97.ec2.internal Ready master 6h13m v1.32.3 ip-10-0-154-204.ec2.internal Ready master 6h13m v1.32.3
NAME STATUS ROLES AGE VERSION ip-10-0-131-183.ec2.internal Ready master 6h13m v1.32.3 ip-10-0-164-97.ec2.internal Ready master 6h13m v1.32.3 ip-10-0-154-204.ec2.internal Ready master 6h13m v1.32.3Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查 etcd pod 的状态是否为
Error或CrashLoopBackOff:oc -n openshift-etcd get pods -l k8s-app=etcd
$ oc -n openshift-etcd get pods -l k8s-app=etcdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
etcd-ip-10-0-131-183.ec2.internal 2/3 Error 7 6h9m etcd-ip-10-0-164-97.ec2.internal 3/3 Running 0 6h6m etcd-ip-10-0-154-204.ec2.internal 3/3 Running 0 6h6m
etcd-ip-10-0-131-183.ec2.internal 2/3 Error 7 6h9m1 etcd-ip-10-0-164-97.ec2.internal 3/3 Running 0 6h6m etcd-ip-10-0-154-204.ec2.internal 3/3 Running 0 6h6mCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 由于此 pod 的状态是
Error,因此 etcd pod 为 crashlooping 状态。
如果 etcd pod 为 crashlooping 状态,请按照替换 etcd pod 处于 crashlooping 状态的不健康的 etcd 成员的步骤进行操作。
6.2.4. 替换不健康的 etcd 成员 复制链接链接已复制到粘贴板!
根据不健康的 etcd 成员的状态,使用以下一个流程:
6.2.4.1. 替换机器没有运行或节点未就绪的不健康 etcd 成员 复制链接链接已复制到粘贴板!
此流程详细介绍了替换因机器没有运行或节点未就绪造成不健康的 etcd 成员的步骤。
如果您的集群使用 control plane 机器集,请参阅"为 etcd 恢复 control plane 机器集"中的"恢复降级的 etcd Operator"。
先决条件
- 您已找出不健康的 etcd 成员。
您已确认机器没有运行,或者该节点未就绪。
重要您必须等待其他 control plane 节点关闭。control plane 节点必须保持关闭状态,直到替换完不健康的 etcd 成员为止。
-
您可以使用具有
cluster-admin角色的用户访问集群。 已进行 etcd 备份。
重要在执行此步骤前,进行 etcd 备份,以便在遇到任何问题时可以恢复集群。
流程
删除不健康的成员。
选择一个不在受影响节点上的 pod:
在一个终端中使用
cluster-admin用户连接到集群,运行以下命令:oc -n openshift-etcd get pods -l k8s-app=etcd
$ oc -n openshift-etcd get pods -l k8s-app=etcdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
etcd-ip-10-0-131-183.ec2.internal 3/3 Running 0 123m etcd-ip-10-0-164-97.ec2.internal 3/3 Running 0 123m etcd-ip-10-0-154-204.ec2.internal 3/3 Running 0 124m
etcd-ip-10-0-131-183.ec2.internal 3/3 Running 0 123m etcd-ip-10-0-164-97.ec2.internal 3/3 Running 0 123m etcd-ip-10-0-154-204.ec2.internal 3/3 Running 0 124mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 连接到正在运行的 etcd 容器,传递没有在受影响节点上的 pod 的名称:
在一个终端中使用
cluster-admin用户连接到集群,运行以下命令:oc rsh -n openshift-etcd etcd-ip-10-0-154-204.ec2.internal
$ oc rsh -n openshift-etcd etcd-ip-10-0-154-204.ec2.internalCopy to Clipboard Copied! Toggle word wrap Toggle overflow 查看成员列表:
etcdctl member list -w table
sh-4.2# etcdctl member list -w tableCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 记录不健康的 etcd 成员的 ID 和名称,因为稍后需要这些值。
$ etcdctl endpoint health命令将列出已删除的成员,直到完成替换过程并添加了新成员。通过向
etcdctl member remove命令提供 ID 来删除不健康的 etcd 成员 :etcdctl member remove 6fc1e7c9db35841d
sh-4.2# etcdctl member remove 6fc1e7c9db35841dCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Member 6fc1e7c9db35841d removed from cluster ead669ce1fbfb346
Member 6fc1e7c9db35841d removed from cluster ead669ce1fbfb346Copy to Clipboard Copied! Toggle word wrap Toggle overflow 再次查看成员列表,并确认成员已被删除:
etcdctl member list -w table
sh-4.2# etcdctl member list -w tableCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 现在您可以退出节点 shell。
输入以下命令关闭仲裁保护:
oc patch etcd/cluster --type=merge -p '{"spec": {"unsupportedConfigOverrides": {"useUnsupportedUnsafeNonHANonProductionUnstableEtcd": true}}}'$ oc patch etcd/cluster --type=merge -p '{"spec": {"unsupportedConfigOverrides": {"useUnsupportedUnsafeNonHANonProductionUnstableEtcd": true}}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此命令可确保您可以成功重新创建机密并推出静态 pod。
重要关闭仲裁保护后,在剩余的 etcd 实例进行重启以使配置改变生效期间,集群可能无法访问。
注意在只使用两个成员运行时,etcd 将无法容忍任何成员失败。重启剩余的成员会破坏仲裁,并导致集群出现停机问题。由于可能导致停机的配置更改,仲裁保护可以防止 etcd 重启,因此必须禁用它才能完成这个过程。
运行以下命令来删除受影响的节点:
oc delete node <node_name>
$ oc delete node <node_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例命令
oc delete node ip-10-0-131-183.ec2.internal
$ oc delete node ip-10-0-131-183.ec2.internalCopy to Clipboard Copied! Toggle word wrap Toggle overflow 删除已删除的不健康 etcd 成员的旧 secret。
列出已删除的不健康 etcd 成员的 secret。
oc get secrets -n openshift-etcd | grep ip-10-0-131-183.ec2.internal
$ oc get secrets -n openshift-etcd | grep ip-10-0-131-183.ec2.internal1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 传递您之前在这个过程中记录的不健康 etcd 成员的名称。
有一个对等的、服务和指标的 secret,如以下输出所示:
输出示例
etcd-peer-ip-10-0-131-183.ec2.internal kubernetes.io/tls 2 47m etcd-serving-ip-10-0-131-183.ec2.internal kubernetes.io/tls 2 47m etcd-serving-metrics-ip-10-0-131-183.ec2.internal kubernetes.io/tls 2 47m
etcd-peer-ip-10-0-131-183.ec2.internal kubernetes.io/tls 2 47m etcd-serving-ip-10-0-131-183.ec2.internal kubernetes.io/tls 2 47m etcd-serving-metrics-ip-10-0-131-183.ec2.internal kubernetes.io/tls 2 47mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 删除已删除的不健康 etcd 成员的 secret。
删除 peer(对等)secret:
oc delete secret -n openshift-etcd etcd-peer-ip-10-0-131-183.ec2.internal
$ oc delete secret -n openshift-etcd etcd-peer-ip-10-0-131-183.ec2.internalCopy to Clipboard Copied! Toggle word wrap Toggle overflow 删除 serving secret:
oc delete secret -n openshift-etcd etcd-serving-ip-10-0-131-183.ec2.internal
$ oc delete secret -n openshift-etcd etcd-serving-ip-10-0-131-183.ec2.internalCopy to Clipboard Copied! Toggle word wrap Toggle overflow 删除 metrics secret:
oc delete secret -n openshift-etcd etcd-serving-metrics-ip-10-0-131-183.ec2.internal
$ oc delete secret -n openshift-etcd etcd-serving-metrics-ip-10-0-131-183.ec2.internalCopy to Clipboard Copied! Toggle word wrap Toggle overflow
输入以下命令检查 control plane 机器集是否存在:
oc -n openshift-machine-api get controlplanemachineset
$ oc -n openshift-machine-api get controlplanemachinesetCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 control plane 机器集存在,则删除并重新创建 control plane 机器。重新创建此机器后,会强制一个新修订版本并自动扩展 etcd。如需更多信息,请参阅"替换没有运行或节点未就绪"的不健康 etcd 成员"。
如果您正在运行安装程序置备的基础架构,或者您使用 Machine API 创建机器,请按照以下步骤执行。否则,您必须使用最初创建控制平面节点时使用的相同方法创建新的控制平面。
获取不健康成员的机器。
在一个终端中使用
cluster-admin用户连接到集群,运行以下命令:oc get machines -n openshift-machine-api -o wide
$ oc get machines -n openshift-machine-api -o wideCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 这是不健康节点的 control plane 机器
ip-10-0-131-183.ec2.internal。
删除不健康成员的机器:
oc delete machine -n openshift-machine-api clustername-8qw5l-master-0
$ oc delete machine -n openshift-machine-api clustername-8qw5l-master-01 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 为不健康的节点指定 control plane 机器的名称。
删除不健康成员机器后会自动置备新机器。
验证新机器是否已创建:
oc get machines -n openshift-machine-api -o wide
$ oc get machines -n openshift-machine-api -o wideCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 新机器
clustername-8qw5l-master-3将被创建,并当阶段从Provisioning变为Running后就可以使用。
创建新机器可能需要几分钟时间。当机器或节点返回健康状态时,etcd 集群 Operator 会自动同步。
注意验证您用于机器集的子网 ID,以确保它们最终在正确的可用区中。
如果 control plane 机器集不存在,请删除和重新创建 control plane 机器。重新创建此机器后,会强制一个新修订版本并自动扩展 etcd。
如果您正在运行安装程序置备的基础架构,或者您使用 Machine API 创建机器,请按照以下步骤执行。否则,您必须使用最初创建控制平面节点时使用的相同方法创建新的控制平面。
获取不健康成员的机器。
在一个终端中使用
cluster-admin用户连接到集群,运行以下命令:oc get machines -n openshift-machine-api -o wide
$ oc get machines -n openshift-machine-api -o wideCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 这是不健康节点的 control plane 机器
ip-10-0-131-183.ec2.internal。
将机器配置保存到文件系统中的一个文件中:
oc get machine clustername-8qw5l-master-0 \ -n openshift-machine-api \ -o yaml \ > new-master-machine.yaml$ oc get machine clustername-8qw5l-master-0 \1 -n openshift-machine-api \ -o yaml \ > new-master-machine.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 为不健康的节点指定 control plane 机器的名称。
编辑上一步中创建的
new-master-machine.yaml文件,以分配新名称并删除不必要的字段。删除整个
status部分:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
metadata.name字段更改为新名称。保留与旧机器相同的基础名称,并将结尾的号更改为下一个可用数字。在本例中,
clustername-8qw5l-master-0改为clustername-8qw5l-master-3。例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除
spec.providerID字段:providerID: aws:///us-east-1a/i-0fdb85790d76d0c3f
providerID: aws:///us-east-1a/i-0fdb85790d76d0c3fCopy to Clipboard Copied! Toggle word wrap Toggle overflow
删除不健康成员的机器:
oc delete machine -n openshift-machine-api clustername-8qw5l-master-0
$ oc delete machine -n openshift-machine-api clustername-8qw5l-master-01 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 为不健康的节点指定 control plane 机器的名称。
验证机器是否已删除:
oc get machines -n openshift-machine-api -o wide
$ oc get machines -n openshift-machine-api -o wideCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
new-master-machine.yaml文件创建新机器:oc apply -f new-master-machine.yaml
$ oc apply -f new-master-machine.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证新机器是否已创建:
oc get machines -n openshift-machine-api -o wide
$ oc get machines -n openshift-machine-api -o wideCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 新机器
clustername-8qw5l-master-3将被创建,并当阶段从Provisioning变为Running后就可以使用。
创建新机器可能需要几分钟时间。当机器或节点返回健康状态时,etcd 集群 Operator 会自动同步。
输入以下命令重新打开仲裁保护:
oc patch etcd/cluster --type=merge -p '{"spec": {"unsupportedConfigOverrides": null}}'$ oc patch etcd/cluster --type=merge -p '{"spec": {"unsupportedConfigOverrides": null}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以输入以下命令验证
unsupportedConfigOverrides部分是否已从对象中删除:oc get etcd/cluster -oyaml
$ oc get etcd/cluster -oyamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果使用单节点 OpenShift,请重启该节点。否则,您可能会在 etcd 集群 Operator 中遇到以下错误:
输出示例
EtcdCertSignerControllerDegraded: [Operation cannot be fulfilled on secrets "etcd-peer-sno-0": the object has been modified; please apply your changes to the latest version and try again, Operation cannot be fulfilled on secrets "etcd-serving-sno-0": the object has been modified; please apply your changes to the latest version and try again, Operation cannot be fulfilled on secrets "etcd-serving-metrics-sno-0": the object has been modified; please apply your changes to the latest version and try again]
EtcdCertSignerControllerDegraded: [Operation cannot be fulfilled on secrets "etcd-peer-sno-0": the object has been modified; please apply your changes to the latest version and try again, Operation cannot be fulfilled on secrets "etcd-serving-sno-0": the object has been modified; please apply your changes to the latest version and try again, Operation cannot be fulfilled on secrets "etcd-serving-metrics-sno-0": the object has been modified; please apply your changes to the latest version and try again]Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证所有 etcd pod 是否都正常运行。
在一个终端中使用
cluster-admin用户连接到集群,运行以下命令:oc -n openshift-etcd get pods -l k8s-app=etcd
$ oc -n openshift-etcd get pods -l k8s-app=etcdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
etcd-ip-10-0-133-53.ec2.internal 3/3 Running 0 7m49s etcd-ip-10-0-164-97.ec2.internal 3/3 Running 0 123m etcd-ip-10-0-154-204.ec2.internal 3/3 Running 0 124m
etcd-ip-10-0-133-53.ec2.internal 3/3 Running 0 7m49s etcd-ip-10-0-164-97.ec2.internal 3/3 Running 0 123m etcd-ip-10-0-154-204.ec2.internal 3/3 Running 0 124mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果上一命令的输出只列出两个 pod,您可以手动强制重新部署 etcd。在一个终端中使用
cluster-admin用户连接到集群,运行以下命令:oc patch etcd cluster -p='{"spec": {"forceRedeploymentReason": "recovery-'"$( date --rfc-3339=ns )"'"}}' --type=merge$ oc patch etcd cluster -p='{"spec": {"forceRedeploymentReason": "recovery-'"$( date --rfc-3339=ns )"'"}}' --type=merge1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
forceRedeploymentReason值必须是唯一的,这就是为什么附加时间戳的原因。
验证只有三个 etcd 成员。
连接到正在运行的 etcd 容器,传递没有在受影响节点上的 pod 的名称:
在一个终端中使用
cluster-admin用户连接到集群,运行以下命令:oc rsh -n openshift-etcd etcd-ip-10-0-154-204.ec2.internal
$ oc rsh -n openshift-etcd etcd-ip-10-0-154-204.ec2.internalCopy to Clipboard Copied! Toggle word wrap Toggle overflow 查看成员列表:
etcdctl member list -w table
sh-4.2# etcdctl member list -w tableCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果上一命令的输出列出了超过三个 etcd 成员,您必须删除不需要的成员。
警告确保删除正确的 etcd 成员;如果删除了正常的 etcd 成员则有可能会导致仲裁丢失。
6.2.4.2. 替换其 etcd Pod 处于 crashlooping 状态的不健康 etcd 成员 复制链接链接已复制到粘贴板!
此流程详细介绍了替换因 etcd pod 处于 crashlooping 状态造成不健康的 etcd 成员的步骤。
先决条件
- 您已找出不健康的 etcd 成员。
- 已确认 etcd pod 处于 crashlooping 状态。
-
您可以使用具有
cluster-admin角色的用户访问集群。 已进行 etcd 备份。
重要执行此流程前务必要进行 etcd 备份,以便在遇到任何问题时可以恢复集群。
流程
停止处于 crashlooping 状态的 etcd pod。
对处于 crashlooping 状态的节点进行调试。
在一个终端中使用
cluster-admin用户连接到集群,运行以下命令:oc debug node/ip-10-0-131-183.ec2.internal
$ oc debug node/ip-10-0-131-183.ec2.internal1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 使用不健康节点的名称来替换它。
将您的根目录改为
/host:chroot /host
sh-4.2# chroot /hostCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将现有 etcd pod 文件从 Kubelet 清单目录中移出:
mkdir /var/lib/etcd-backup
sh-4.2# mkdir /var/lib/etcd-backupCopy to Clipboard Copied! Toggle word wrap Toggle overflow mv /etc/kubernetes/manifests/etcd-pod.yaml /var/lib/etcd-backup/
sh-4.2# mv /etc/kubernetes/manifests/etcd-pod.yaml /var/lib/etcd-backup/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 etcd 数据目录移到不同的位置:
mv /var/lib/etcd/ /tmp
sh-4.2# mv /var/lib/etcd/ /tmpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 现在您可以退出节点 shell。
删除不健康的成员。
选择一个不在受影响节点上的 pod。
在一个终端中使用
cluster-admin用户连接到集群,运行以下命令:oc -n openshift-etcd get pods -l k8s-app=etcd
$ oc -n openshift-etcd get pods -l k8s-app=etcdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
etcd-ip-10-0-131-183.ec2.internal 2/3 Error 7 6h9m etcd-ip-10-0-164-97.ec2.internal 3/3 Running 0 6h6m etcd-ip-10-0-154-204.ec2.internal 3/3 Running 0 6h6m
etcd-ip-10-0-131-183.ec2.internal 2/3 Error 7 6h9m etcd-ip-10-0-164-97.ec2.internal 3/3 Running 0 6h6m etcd-ip-10-0-154-204.ec2.internal 3/3 Running 0 6h6mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 连接到正在运行的 etcd 容器,传递没有在受影响节点上的 pod 的名称。
在一个终端中使用
cluster-admin用户连接到集群,运行以下命令:oc rsh -n openshift-etcd etcd-ip-10-0-154-204.ec2.internal
$ oc rsh -n openshift-etcd etcd-ip-10-0-154-204.ec2.internalCopy to Clipboard Copied! Toggle word wrap Toggle overflow 查看成员列表:
etcdctl member list -w table
sh-4.2# etcdctl member list -w tableCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 记录不健康的 etcd 成员的 ID 和名称,因为稍后需要这些值。
通过向
etcdctl member remove命令提供 ID 来删除不健康的 etcd 成员 :etcdctl member remove 62bcf33650a7170a
sh-4.2# etcdctl member remove 62bcf33650a7170aCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Member 62bcf33650a7170a removed from cluster ead669ce1fbfb346
Member 62bcf33650a7170a removed from cluster ead669ce1fbfb346Copy to Clipboard Copied! Toggle word wrap Toggle overflow 再次查看成员列表,并确认成员已被删除:
etcdctl member list -w table
sh-4.2# etcdctl member list -w tableCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 现在您可以退出节点 shell。
输入以下命令关闭仲裁保护:
oc patch etcd/cluster --type=merge -p '{"spec": {"unsupportedConfigOverrides": {"useUnsupportedUnsafeNonHANonProductionUnstableEtcd": true}}}'$ oc patch etcd/cluster --type=merge -p '{"spec": {"unsupportedConfigOverrides": {"useUnsupportedUnsafeNonHANonProductionUnstableEtcd": true}}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此命令可确保您可以成功重新创建机密并推出静态 pod。
删除已删除的不健康 etcd 成员的旧 secret。
列出已删除的不健康 etcd 成员的 secret。
oc get secrets -n openshift-etcd | grep ip-10-0-131-183.ec2.internal
$ oc get secrets -n openshift-etcd | grep ip-10-0-131-183.ec2.internal1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 传递您之前在这个过程中记录的不健康 etcd 成员的名称。
有一个对等的、服务和指标的 secret,如以下输出所示:
输出示例
etcd-peer-ip-10-0-131-183.ec2.internal kubernetes.io/tls 2 47m etcd-serving-ip-10-0-131-183.ec2.internal kubernetes.io/tls 2 47m etcd-serving-metrics-ip-10-0-131-183.ec2.internal kubernetes.io/tls 2 47m
etcd-peer-ip-10-0-131-183.ec2.internal kubernetes.io/tls 2 47m etcd-serving-ip-10-0-131-183.ec2.internal kubernetes.io/tls 2 47m etcd-serving-metrics-ip-10-0-131-183.ec2.internal kubernetes.io/tls 2 47mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 删除已删除的不健康 etcd 成员的 secret。
删除 peer(对等)secret:
oc delete secret -n openshift-etcd etcd-peer-ip-10-0-131-183.ec2.internal
$ oc delete secret -n openshift-etcd etcd-peer-ip-10-0-131-183.ec2.internalCopy to Clipboard Copied! Toggle word wrap Toggle overflow 删除 serving secret:
oc delete secret -n openshift-etcd etcd-serving-ip-10-0-131-183.ec2.internal
$ oc delete secret -n openshift-etcd etcd-serving-ip-10-0-131-183.ec2.internalCopy to Clipboard Copied! Toggle word wrap Toggle overflow 删除 metrics secret:
oc delete secret -n openshift-etcd etcd-serving-metrics-ip-10-0-131-183.ec2.internal
$ oc delete secret -n openshift-etcd etcd-serving-metrics-ip-10-0-131-183.ec2.internalCopy to Clipboard Copied! Toggle word wrap Toggle overflow
强制 etcd 重新部署。
在一个终端中使用
cluster-admin用户连接到集群,运行以下命令:oc patch etcd cluster -p='{"spec": {"forceRedeploymentReason": "single-master-recovery-'"$( date --rfc-3339=ns )"'"}}' --type=merge$ oc patch etcd cluster -p='{"spec": {"forceRedeploymentReason": "single-master-recovery-'"$( date --rfc-3339=ns )"'"}}' --type=merge1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
forceRedeploymentReason值必须是唯一的,这就是为什么附加时间戳的原因。
当 etcd 集群 Operator 执行重新部署时,它会确保所有 control plane 节点都有可正常工作的 etcd pod。
输入以下命令重新打开仲裁保护:
oc patch etcd/cluster --type=merge -p '{"spec": {"unsupportedConfigOverrides": null}}'$ oc patch etcd/cluster --type=merge -p '{"spec": {"unsupportedConfigOverrides": null}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以输入以下命令验证
unsupportedConfigOverrides部分是否已从对象中删除:oc get etcd/cluster -oyaml
$ oc get etcd/cluster -oyamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果使用单节点 OpenShift,请重启该节点。否则,您可能会在 etcd 集群 Operator 中遇到以下错误:
输出示例
EtcdCertSignerControllerDegraded: [Operation cannot be fulfilled on secrets "etcd-peer-sno-0": the object has been modified; please apply your changes to the latest version and try again, Operation cannot be fulfilled on secrets "etcd-serving-sno-0": the object has been modified; please apply your changes to the latest version and try again, Operation cannot be fulfilled on secrets "etcd-serving-metrics-sno-0": the object has been modified; please apply your changes to the latest version and try again]
EtcdCertSignerControllerDegraded: [Operation cannot be fulfilled on secrets "etcd-peer-sno-0": the object has been modified; please apply your changes to the latest version and try again, Operation cannot be fulfilled on secrets "etcd-serving-sno-0": the object has been modified; please apply your changes to the latest version and try again, Operation cannot be fulfilled on secrets "etcd-serving-metrics-sno-0": the object has been modified; please apply your changes to the latest version and try again]Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
确认新成员可用且健康。
连接到正在运行的 etcd 容器。
在一个终端中使用 cluster-admin 用户连接到集群,运行以下命令:
oc rsh -n openshift-etcd etcd-ip-10-0-154-204.ec2.internal
$ oc rsh -n openshift-etcd etcd-ip-10-0-154-204.ec2.internalCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证所有成员是否健康:
etcdctl endpoint health
sh-4.2# etcdctl endpoint healthCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
https://10.0.131.183:2379 is healthy: successfully committed proposal: took = 16.671434ms https://10.0.154.204:2379 is healthy: successfully committed proposal: took = 16.698331ms https://10.0.164.97:2379 is healthy: successfully committed proposal: took = 16.621645ms
https://10.0.131.183:2379 is healthy: successfully committed proposal: took = 16.671434ms https://10.0.154.204:2379 is healthy: successfully committed proposal: took = 16.698331ms https://10.0.164.97:2379 is healthy: successfully committed proposal: took = 16.621645msCopy to Clipboard Copied! Toggle word wrap Toggle overflow
6.2.4.3. 替换机器没有运行或节点未就绪的不健康裸机 etcd 成员 复制链接链接已复制到粘贴板!
此流程详细介绍了替换因机器没有运行或节点未就绪造成不健康的裸机 etcd 成员的步骤。
如果您正在运行安装程序置备的基础架构,或者您使用 Machine API 创建机器,请按照以下步骤执行。否则,您必须使用最初创建控制平面节点时使用的相同方法创建新的控制平面。
先决条件
- 您已找出不健康的裸机 etcd 成员。
- 您已确认机器没有运行,或者该节点未就绪。
-
您可以使用具有
cluster-admin角色的用户访问集群。 已进行 etcd 备份。
重要执行此流程前务必要进行 etcd 备份,以便在遇到任何问题时可以恢复集群。
流程
验证并删除不健康的成员。
选择一个不在受影响节点上的 pod:
在一个终端中使用
cluster-admin用户连接到集群,运行以下命令:oc -n openshift-etcd get pods -l k8s-app=etcd -o wide
$ oc -n openshift-etcd get pods -l k8s-app=etcd -o wideCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
etcd-openshift-control-plane-0 5/5 Running 11 3h56m 192.168.10.9 openshift-control-plane-0 <none> <none> etcd-openshift-control-plane-1 5/5 Running 0 3h54m 192.168.10.10 openshift-control-plane-1 <none> <none> etcd-openshift-control-plane-2 5/5 Running 0 3h58m 192.168.10.11 openshift-control-plane-2 <none> <none>
etcd-openshift-control-plane-0 5/5 Running 11 3h56m 192.168.10.9 openshift-control-plane-0 <none> <none> etcd-openshift-control-plane-1 5/5 Running 0 3h54m 192.168.10.10 openshift-control-plane-1 <none> <none> etcd-openshift-control-plane-2 5/5 Running 0 3h58m 192.168.10.11 openshift-control-plane-2 <none> <none>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 连接到正在运行的 etcd 容器,传递没有在受影响节点上的 pod 的名称:
在一个终端中使用
cluster-admin用户连接到集群,运行以下命令:oc rsh -n openshift-etcd etcd-openshift-control-plane-0
$ oc rsh -n openshift-etcd etcd-openshift-control-plane-0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 查看成员列表:
etcdctl member list -w table
sh-4.2# etcdctl member list -w tableCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 记录不健康的 etcd 成员的 ID 和名称,因为稍后需要这些值。
etcdctl endpoint health命令将列出已删除的成员,直到完成替换过程并添加了新成员。通过向
etcdctl member remove命令提供 ID 来删除不健康的 etcd 成员 :警告确保删除正确的 etcd 成员;如果删除了正常的 etcd 成员则有可能会导致仲裁丢失。
etcdctl member remove 7a8197040a5126c8
sh-4.2# etcdctl member remove 7a8197040a5126c8Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Member 7a8197040a5126c8 removed from cluster b23536c33f2cdd1b
Member 7a8197040a5126c8 removed from cluster b23536c33f2cdd1bCopy to Clipboard Copied! Toggle word wrap Toggle overflow 再次查看成员列表,并确认成员已被删除:
etcdctl member list -w table
sh-4.2# etcdctl member list -w tableCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 现在您可以退出节点 shell。
重要删除成员后,在剩余的 etcd 实例重启时,集群可能无法访问。
输入以下命令关闭仲裁保护:
oc patch etcd/cluster --type=merge -p '{"spec": {"unsupportedConfigOverrides": {"useUnsupportedUnsafeNonHANonProductionUnstableEtcd": true}}}'$ oc patch etcd/cluster --type=merge -p '{"spec": {"unsupportedConfigOverrides": {"useUnsupportedUnsafeNonHANonProductionUnstableEtcd": true}}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此命令可确保您可以成功重新创建机密并推出静态 pod。
运行以下命令,删除已删除的不健康 etcd 成员的旧 secret。
列出已删除的不健康 etcd 成员的 secret。
oc get secrets -n openshift-etcd | grep openshift-control-plane-2
$ oc get secrets -n openshift-etcd | grep openshift-control-plane-2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 传递您之前在这个过程中记录的不健康 etcd 成员的名称。
有一个对等的、服务和指标的 secret,如以下输出所示:
etcd-peer-openshift-control-plane-2 kubernetes.io/tls 2 134m etcd-serving-metrics-openshift-control-plane-2 kubernetes.io/tls 2 134m etcd-serving-openshift-control-plane-2 kubernetes.io/tls 2 134m
etcd-peer-openshift-control-plane-2 kubernetes.io/tls 2 134m etcd-serving-metrics-openshift-control-plane-2 kubernetes.io/tls 2 134m etcd-serving-openshift-control-plane-2 kubernetes.io/tls 2 134mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 删除已删除的不健康 etcd 成员的 secret。
删除 peer(对等)secret:
oc delete secret etcd-peer-openshift-control-plane-2 -n openshift-etcd
$ oc delete secret etcd-peer-openshift-control-plane-2 -n openshift-etcd secret "etcd-peer-openshift-control-plane-2" deletedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 删除 serving secret:
oc delete secret etcd-serving-metrics-openshift-control-plane-2 -n openshift-etcd
$ oc delete secret etcd-serving-metrics-openshift-control-plane-2 -n openshift-etcd secret "etcd-serving-metrics-openshift-control-plane-2" deletedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 删除 metrics secret:
oc delete secret etcd-serving-openshift-control-plane-2 -n openshift-etcd
$ oc delete secret etcd-serving-openshift-control-plane-2 -n openshift-etcd secret "etcd-serving-openshift-control-plane-2" deletedCopy to Clipboard Copied! Toggle word wrap Toggle overflow
获取不健康成员的机器。
在一个终端中使用
cluster-admin用户连接到集群,运行以下命令:oc get machines -n openshift-machine-api -o wide
$ oc get machines -n openshift-machine-api -o wideCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 这是不健康节点的 control plane 机器,
examplecluster-control-plane-2。
运行以下命令,确保 Bare Metal Operator 可用:
oc get clusteroperator baremetal
$ oc get clusteroperator baremetalCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE baremetal 4.19.0 True False False 3d15h
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE baremetal 4.19.0 True False False 3d15hCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来删除旧的
BareMetalHost对象:oc delete bmh openshift-control-plane-2 -n openshift-machine-api
$ oc delete bmh openshift-control-plane-2 -n openshift-machine-apiCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
baremetalhost.metal3.io "openshift-control-plane-2" deleted
baremetalhost.metal3.io "openshift-control-plane-2" deletedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来删除不健康成员的机器:
oc delete machine -n openshift-machine-api examplecluster-control-plane-2
$ oc delete machine -n openshift-machine-api examplecluster-control-plane-2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除
BareMetalHost和Machine对象后,MachineController 会自动删除Node对象。如果删除机器因任何原因或者命令被移动而延迟而延迟而延迟,您可以通过删除机器对象终结器字段来强制删除。
重要不要通过按
Ctrl+c中断机器删除。您必须允许命令继续完成。打开一个新的终端窗口来编辑并删除 finalizer 字段。删除不健康成员机器后会自动置备新机器。
运行以下命令来编辑机器配置:
oc edit machine -n openshift-machine-api examplecluster-control-plane-2
$ oc edit machine -n openshift-machine-api examplecluster-control-plane-2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除
Machine自定义资源中的以下字段,然后保存更新的文件:finalizers: - machine.machine.openshift.io
finalizers: - machine.machine.openshift.ioCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
machine.machine.openshift.io/examplecluster-control-plane-2 edited
machine.machine.openshift.io/examplecluster-control-plane-2 editedCopy to Clipboard Copied! Toggle word wrap Toggle overflow
运行以下命令验证机器是否已删除:
oc get machines -n openshift-machine-api -o wide
$ oc get machines -n openshift-machine-api -o wideCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME PHASE TYPE REGION ZONE AGE NODE PROVIDERID STATE examplecluster-control-plane-0 Running 3h11m openshift-control-plane-0 baremetalhost:///openshift-machine-api/openshift-control-plane-0/da1ebe11-3ff2-41c5-b099-0aa41222964e externally provisioned examplecluster-control-plane-1 Running 3h11m openshift-control-plane-1 baremetalhost:///openshift-machine-api/openshift-control-plane-1/d9f9acbc-329c-475e-8d81-03b20280a3e1 externally provisioned examplecluster-compute-0 Running 165m openshift-compute-0 baremetalhost:///openshift-machine-api/openshift-compute-0/3d685b81-7410-4bb3-80ec-13a31858241f provisioned examplecluster-compute-1 Running 165m openshift-compute-1 baremetalhost:///openshift-machine-api/openshift-compute-1/0fdae6eb-2066-4241-91dc-e7ea72ab13b9 provisioned
NAME PHASE TYPE REGION ZONE AGE NODE PROVIDERID STATE examplecluster-control-plane-0 Running 3h11m openshift-control-plane-0 baremetalhost:///openshift-machine-api/openshift-control-plane-0/da1ebe11-3ff2-41c5-b099-0aa41222964e externally provisioned examplecluster-control-plane-1 Running 3h11m openshift-control-plane-1 baremetalhost:///openshift-machine-api/openshift-control-plane-1/d9f9acbc-329c-475e-8d81-03b20280a3e1 externally provisioned examplecluster-compute-0 Running 165m openshift-compute-0 baremetalhost:///openshift-machine-api/openshift-compute-0/3d685b81-7410-4bb3-80ec-13a31858241f provisioned examplecluster-compute-1 Running 165m openshift-compute-1 baremetalhost:///openshift-machine-api/openshift-compute-1/0fdae6eb-2066-4241-91dc-e7ea72ab13b9 provisionedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令验证节点是否已删除:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建新的
BareMetalHost对象和 secret,以存储 BMC 凭证:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意用户名和密码可从其他裸机主机的 secret 中找到。
bmc:address中使用的协议可以从其他 bmh 对象获取。重要如果您从现有 control plane 主机重复使用
BareMetalHost对象定义,请不要将 externalProvisioned字段保留为true。如果 OpenShift Container Platform 安装程序置备,现有 control plane
BareMetalHost对象可能会将externallyProvisioned标记设为true。检查完成后,
BareMetalHost对象会被创建并可用置备。使用可用的
BareMetalHost对象验证创建过程:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证新机器是否已创建:
oc get machines -n openshift-machine-api -o wide
$ oc get machines -n openshift-machine-api -o wideCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 新机器
clustername-8qw5l-master-3会被创建,并在阶段从Provisioning变为Running后就绪。
创建新机器需要几分钟时间。当机器或节点返回一个健康状态时,etcd cluster Operator 将自动同步。
运行以下命令验证裸机主机是否被置备,且没有报告的错误:
oc get bmh -n openshift-machine-api
$ oc get bmh -n openshift-machine-apiCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令验证新节点是否已添加并处于就绪状态:
oc get nodes
$ oc get nodesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
输入以下命令重新打开仲裁保护:
oc patch etcd/cluster --type=merge -p '{"spec": {"unsupportedConfigOverrides": null}}'$ oc patch etcd/cluster --type=merge -p '{"spec": {"unsupportedConfigOverrides": null}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以输入以下命令验证
unsupportedConfigOverrides部分是否已从对象中删除:oc get etcd/cluster -oyaml
$ oc get etcd/cluster -oyamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果使用单节点 OpenShift,请重启该节点。否则,您可能会在 etcd 集群 Operator 中遇到以下错误:
输出示例
EtcdCertSignerControllerDegraded: [Operation cannot be fulfilled on secrets "etcd-peer-sno-0": the object has been modified; please apply your changes to the latest version and try again, Operation cannot be fulfilled on secrets "etcd-serving-sno-0": the object has been modified; please apply your changes to the latest version and try again, Operation cannot be fulfilled on secrets "etcd-serving-metrics-sno-0": the object has been modified; please apply your changes to the latest version and try again]
EtcdCertSignerControllerDegraded: [Operation cannot be fulfilled on secrets "etcd-peer-sno-0": the object has been modified; please apply your changes to the latest version and try again, Operation cannot be fulfilled on secrets "etcd-serving-sno-0": the object has been modified; please apply your changes to the latest version and try again, Operation cannot be fulfilled on secrets "etcd-serving-metrics-sno-0": the object has been modified; please apply your changes to the latest version and try again]Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证所有 etcd pod 是否都正常运行。
在一个终端中使用
cluster-admin用户连接到集群,运行以下命令:oc -n openshift-etcd get pods -l k8s-app=etcd
$ oc -n openshift-etcd get pods -l k8s-app=etcdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
etcd-openshift-control-plane-0 5/5 Running 0 105m etcd-openshift-control-plane-1 5/5 Running 0 107m etcd-openshift-control-plane-2 5/5 Running 0 103m
etcd-openshift-control-plane-0 5/5 Running 0 105m etcd-openshift-control-plane-1 5/5 Running 0 107m etcd-openshift-control-plane-2 5/5 Running 0 103mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果上一命令的输出只列出两个 pod,您可以手动强制重新部署 etcd。在一个终端中使用
cluster-admin用户连接到集群,运行以下命令:oc patch etcd cluster -p='{"spec": {"forceRedeploymentReason": "recovery-'"$( date --rfc-3339=ns )"'"}}' --type=merge$ oc patch etcd cluster -p='{"spec": {"forceRedeploymentReason": "recovery-'"$( date --rfc-3339=ns )"'"}}' --type=merge1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
forceRedeploymentReason值必须是唯一的,这就是为什么附加时间戳的原因。
要验证是否有完全有三个 etcd 成员,连接到正在运行的 etcd 容器,传递没有在受影响节点上的 pod 的名称。在一个终端中使用
cluster-admin用户连接到集群,运行以下命令:oc rsh -n openshift-etcd etcd-openshift-control-plane-0
$ oc rsh -n openshift-etcd etcd-openshift-control-plane-0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 查看成员列表:
etcdctl member list -w table
sh-4.2# etcdctl member list -w tableCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果上一命令的输出列出了超过三个 etcd 成员,您必须删除不需要的成员。
运行以下命令,验证所有 etcd 成员是否健康:
etcdctl endpoint health --cluster
# etcdctl endpoint health --clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
https://192.168.10.10:2379 is healthy: successfully committed proposal: took = 8.973065ms https://192.168.10.9:2379 is healthy: successfully committed proposal: took = 11.559829ms https://192.168.10.11:2379 is healthy: successfully committed proposal: took = 11.665203ms
https://192.168.10.10:2379 is healthy: successfully committed proposal: took = 8.973065ms https://192.168.10.9:2379 is healthy: successfully committed proposal: took = 11.559829ms https://192.168.10.11:2379 is healthy: successfully committed proposal: took = 11.665203msCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证所有节点是否处于最新的修订版本:
oc get etcd -o=jsonpath='{range.items[0].status.conditions[?(@.type=="NodeInstallerProgressing")]}{.reason}{"\n"}{.message}{"\n"}'$ oc get etcd -o=jsonpath='{range.items[0].status.conditions[?(@.type=="NodeInstallerProgressing")]}{.reason}{"\n"}{.message}{"\n"}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow AllNodesAtLatestRevision
AllNodesAtLatestRevisionCopy to Clipboard Copied! Toggle word wrap Toggle overflow
6.3. 灾难恢复 复制链接链接已复制到粘贴板!
6.3.1. 关于灾难恢复 复制链接链接已复制到粘贴板!
灾难恢复文档为管理员提供了如何从 OpenShift Container Platform 集群可能出现的几个灾难情形中恢复的信息。作为管理员,您可能需要遵循以下一个或多个步骤将集群恢复为工作状态。
灾难恢复要求您至少有一个健康的 control plane 主机。
- 仲裁恢复
在已丢失了大多数 control plane 主机并导致 etcd quorum 丢失,且集群离线的情况下,可以使用这个解决方案。这个解决方案不需要 etcd 备份。
注意如果大多数 control plane 节点仍可用,且有 etcd 仲裁,则替换单个不健康的 etcd 成员。
- 恢复到一个以前的集群状态
如果您希望将集群恢复到一个以前的状态时(例如,管理员错误地删除了一些关键信息),则可以使用这个解决方案。如果您执行了 etcd 备份,您可以将集群恢复到以前的状态。
如果适用,可能还需要从过期的 control plane 证书中恢复。
警告在一个正在运行的集群中恢复到以前的集群状态是破坏性的,而不稳定的操作。这仅应作为最后的手段使用。
在执行恢复前,请参阅关于恢复集群状态以了解有关对集群的影响的更多信息。
- 从 control plane 证书已过期的情况下恢复
- 如果 control plane 证书已经过期,则可以使用这个解决方案。例如:在第一次证书轮转前(在安装后 24 小时内)关闭了集群,您的证书将不会被轮转,且会过期。可以按照以下步骤从已过期的 control plane 证书中恢复。
6.3.1.1. 测试恢复过程 复制链接链接已复制到粘贴板!
测试恢复过程非常重要,以确保您的自动化和工作负载安全处理新的集群状态。由于 etcd 仲裁的复杂性,以及 etcd Operator 会尝试自动修复,通常很难正确地使您的集群进入一个可以恢复的状态。
您必须有到集群的 SSH 访问权限。如果无法进行 SSH 访问,您的集群可能完全丢失。
先决条件
- 有到 control plane 主机的 SSH 访问权限。
-
已安装 OpenShift CLI(
oc)。
流程
使用 SSH 连接到每个非恢复节点,并运行以下命令来禁用 etcd 和
kubelet服务:运行以下命令来禁用 etcd:
sudo /usr/local/bin/disable-etcd.sh
$ sudo /usr/local/bin/disable-etcd.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来删除 etcd 的变量数据:
sudo rm -rf /var/lib/etcd
$ sudo rm -rf /var/lib/etcdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来禁用
kubelet服务:sudo systemctl disable kubelet.service
$ sudo systemctl disable kubelet.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
- 退出每个 SSH 会话。
运行以下命令,以确保您的非恢复节点处于
NOT READY状态:oc get nodes
$ oc get nodesCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 按照"恢复到以前的集群状态"中的步骤来恢复集群。
恢复集群和 API 响应后,使用 SSH 连接到每个非恢复节点并启用
kubelet服务:sudo systemctl enable kubelet.service
$ sudo systemctl enable kubelet.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 退出每个 SSH 会话。
运行以下命令,观察您的节点返回
READY状态:oc get nodes
$ oc get nodesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令验证 etcd 是否可用:
oc get pods -n openshift-etcd
$ oc get pods -n openshift-etcdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
6.3.2. 仲裁恢复 复制链接链接已复制到粘贴板!
您可以使用 quorum-restore.sh 脚本来恢复因为仲裁丢失而离线的集群中的 etcd 仲裁。当 quorum 丢失时,OpenShift Container Platform API 将变为只读。恢复仲裁后,OpenShift Container Platform API 会返回读/写模式。
6.3.2.1. 为高可用性集群恢复 etcd 仲裁 复制链接链接已复制到粘贴板!
您可以使用 quorum-restore.sh 脚本来恢复因为仲裁丢失而离线的集群中的 etcd 仲裁。当 quorum 丢失时,OpenShift Container Platform API 将变为只读。恢复仲裁后,OpenShift Container Platform API 会返回读/写模式。
您可以使用 quorum-restore.sh 脚本根据其本地数据目录立即恢复一个新的单成员 etcd 集群,并通过停用之前的集群标识符将所有其他成员标记为无效。无需预先备份就可以从 control plane 中恢复。
对于高可用性 (HA) 集群,三节点集群需要在两个主机上关闭 etcd,以避免出现集群分割的情况。在四节点和五个节点 HA 集群中,您必须关闭三个主机。仲裁只需要具有多数节点的情况。三节点 HA 集群中,仲裁最少需要两个节点。在四节点和五个节点 HA 集群中,仲裁需要的最小节点数为三。如果您从恢复主机上的备份启动新集群,其他 etcd 成员可能仍然可以组成仲裁并继续服务。
如果运行恢复的主机没有复制其中的所有数据,您可能会遇到数据丢失的情况。
仲裁恢复不应用于减少恢复过程外的节点数量。减少节点数会导致出现不受支持的集群配置。
先决条件
- 有到用来恢复仲裁的节点的 SSH 访问权限。
流程
选择一个要用作恢复主机的 control plane 主机。您可以在此主机上运行恢复操作。
运行以下命令列出正在运行的 etcd pod:
oc get pods -n openshift-etcd -l app=etcd --field-selector="status.phase==Running"
$ oc get pods -n openshift-etcd -l app=etcd --field-selector="status.phase==Running"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 选择 pod 并运行以下命令来获取其 IP 地址:
oc exec -n openshift-etcd <etcd-pod> -c etcdctl -- etcdctl endpoint status -w table
$ oc exec -n openshift-etcd <etcd-pod> -c etcdctl -- etcdctl endpoint status -w tableCopy to Clipboard Copied! Toggle word wrap Toggle overflow 记录在不是 learner,且具有最高 Raft 索引的成员的 IP 地址。
运行以下命令并记录与所选 etcd 成员的 IP 地址对应的节点名称:
oc get nodes -o jsonpath='{range .items[*]}[{.metadata.name},{.status.addresses[?(@.type=="InternalIP")].address}]{end}'$ oc get nodes -o jsonpath='{range .items[*]}[{.metadata.name},{.status.addresses[?(@.type=="InternalIP")].address}]{end}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用 SSH 连接到所选恢复节点,并运行以下命令来恢复 etcd 仲裁:
sudo -E /usr/local/bin/quorum-restore.sh
$ sudo -E /usr/local/bin/quorum-restore.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow 几分钟后,关闭的节点会自动与运行恢复脚本的节点同步。任何剩余的在线节点都会自动重新加入由
quorum-restore.sh脚本创建的新 etcd 集群。这个过程需要几分钟时间。- 退出 SSH 会话。
如果有任何节点离线,则返回三节点配置。对离线的每个节点重复此步骤,以删除并重新创建它们。重新创建机器后,会强制一个新修订版本,etcd 会自动扩展。
如果使用用户置备的裸机安装,您可以使用最初创建它时使用的相同方法重新创建 control plane 机器。如需更多信息,请参阅"在裸机上安装用户置备的集群"。
警告不要为恢复主机删除并重新创建机器。
如果您正在运行安装程序置备的基础架构,或者您使用 Machine API 创建机器,请按照以下步骤执行:
警告不要为恢复主机删除并重新创建机器。
对于安装程序置备的基础架构上的裸机安装,不会重新创建 control plane 机器。如需更多信息,请参阅"替换裸机控制平面节点"。
为其中一个离线节点获取机器。
在一个终端中使用
cluster-admin用户连接到集群,运行以下命令:oc get machines -n openshift-machine-api -o wide
$ oc get machines -n openshift-machine-api -o wideCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 这是离线节点的 control plane 机器
ip-10-0-131-183.ec2.internal。
运行以下命令来删除离线节点的机器:
oc delete machine -n openshift-machine-api clustername-8qw5l-master-0
$ oc delete machine -n openshift-machine-api clustername-8qw5l-master-01 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 为离线节点指定 control plane 机器的名称。
删除离线节点的机器后会自动置备新机器。
运行以下命令验证新机器是否已创建:
oc get machines -n openshift-machine-api -o wide
$ oc get machines -n openshift-machine-api -o wideCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 新机器
clustername-8qw5l-master-3会被创建,并在阶段从Provisioning变为Running后就绪。
创建新机器可能需要几分钟时间。当机器或节点返回健康状态时,etcd 集群 Operator 将自动同步。
- 对离线的每个节点重复这些步骤。
运行以下命令等待 control plane 恢复:
oc adm wait-for-stable-cluster
$ oc adm wait-for-stable-clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意control plane 最多可能需要 15 分钟才能恢复。
故障排除
如果推出 etcd 静态 pod 的过程没有进展,您可以通过运行以下命令来强制从 etcd 集群 Operator 重新部署:
oc patch etcd cluster -p='{"spec": {"forceRedeploymentReason": "recovery-'"$(date --rfc-3339=ns )"'"}}' --type=merge$ oc patch etcd cluster -p='{"spec": {"forceRedeploymentReason": "recovery-'"$(date --rfc-3339=ns )"'"}}' --type=mergeCopy to Clipboard Copied! Toggle word wrap Toggle overflow
6.3.3. 恢复到一个以前的集群状态 复制链接链接已复制到粘贴板!
要将集群恢复到以前的状态,您必须已通过创建快照来备份 etcd 数据。您将需要使用此快照来还原集群状态。如需更多信息,请参阅"恢复 etcd 数据"。
6.3.3.1. 关于恢复到以前的集群状态 复制链接链接已复制到粘贴板!
要将集群恢复到以前的状态,您必须已通过创建快照来备份 etcd 数据。您将需要使用此快照来还原集群状态。如需更多信息,请参阅"恢复 etcd 数据"。
您可以使用 etcd 备份将集群恢复到以前的状态。在以下情况中可以使用这个方法进行恢复:
- 集群丢失了大多数 control plane 主机(仲裁丢失)。
- 管理员删除了一些关键内容,必须恢复才能恢复集群。
在一个正在运行的集群中恢复到以前的集群状态是破坏性的,而不稳定的操作。这仅应作为最后的手段使用。
如果您可以使用 Kubernetes API 服务器检索数据,则代表 etcd 可用,且您不应该使用 etcd 备份来恢复。
恢复 etcd 实际相当于把集群返回到以前的一个状态,所有客户端都会遇到一个有冲突的、并行历史记录。这会影响 kubelet、Kubernetes 控制器管理器、持久性卷控制器和 OpenShift Container Platform Operator 等监视组件的行为,包括网络操作器。
当 etcd 中的内容与磁盘上的实际内容不匹配时,可能会导致 Operator churn,从而导致 Kubernetes API 服务器、Kubernetes 控制器管理器、Kubernetes 调度程序和 etcd 的 Operator 在磁盘上的文件与 etcd 中的内容冲突时卡住。这可能需要手动操作来解决问题。
在极端情况下,集群可能会丢失持久性卷跟踪,删除已不存在的关键工作负载,重新镜像机器,以及重写带有过期证书的 CA 捆绑包。
6.3.3.2. 将单一节点恢复到以前的集群状态 复制链接链接已复制到粘贴板!
您可以使用已保存的 etcd 备份,将单一节点恢复到以前的集群状态。
恢复集群时,必须使用同一 z-stream 发行版本中获取的 etcd 备份。例如,OpenShift Container Platform 4.19.2 集群必须使用在 4.19.2 中进行的 etcd 备份。
先决条件
-
通过一个基于证书的
kubeconfig使用具有cluster-admin角色的用户访问集群,如安装期间的情况。 - 有到 control plane 主机的 SSH 访问权限。
-
包含从同一备份中获取的 etcd 快照和静态 pod 资源的备份目录。该目录中的文件名必须采用以下格式:
snapshot_<datetimestamp>.db和static_kuberesources_<datetimestamp>.tar.gz。
流程
运行以下命令,使用 SSH 连接到单一节点,并将 etcd 备份复制到
/home/core目录中:cp <etcd_backup_directory> /home/core
$ cp <etcd_backup_directory> /home/coreCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在单一节点中运行以下命令从以前的备份中恢复集群:
sudo -E /usr/local/bin/cluster-restore.sh /home/core/<etcd_backup_directory>
$ sudo -E /usr/local/bin/cluster-restore.sh /home/core/<etcd_backup_directory>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 退出 SSH 会话。
运行以下命令监控 control plane 的恢复进度:
oc adm wait-for-stable-cluster
$ oc adm wait-for-stable-clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意control plane 最多可能需要 15 分钟才能恢复。
6.3.3.3. 为多个节点恢复到一个以前的集群状态 复制链接链接已复制到粘贴板!
您可以使用保存的 etcd 备份来恢复以前的集群状态,或恢复丢失了大多数 control plane 主机的集群。
对于高可用性 (HA) 集群,三节点集群需要在两个主机上关闭 etcd,以避免出现集群分割的情况。在四节点和五个节点 HA 集群中,您必须关闭三个主机。仲裁只需要具有多数节点的情况。三节点 HA 集群中,仲裁最少需要两个节点。在四节点和五个节点 HA 集群中,仲裁需要的最小节点数为三。如果您从恢复主机上的备份启动新集群,其他 etcd 成员可能仍然可以组成仲裁并继续服务。
如果您的集群使用 control plane 机器集,请参阅"为 etcd 恢复 control plane 机器集"中的"恢复降级的 etcd Operator"。对于单一节点上的 OpenShift Container Platform,请参阅"为单一节点提供以前的集群状态"。
恢复集群时,必须使用同一 z-stream 发行版本中获取的 etcd 备份。例如,OpenShift Container Platform 4.19.2 集群必须使用在 4.19.2 中进行的 etcd 备份。
先决条件
-
通过一个基于证书的
kubeconfig使用具有cluster-admin角色的用户访问集群,如安装期间的情况。 - 用作恢复主机的健康 control plane 主机。
- 有到 control plane 主机的 SSH 访问权限。
-
包含从同一备份中获取的 etcd 快照和静态
pod资源的备份目录。该目录中的文件名必须采用以下格式:snapshot_<datetimestamp>.db和static_kuberesources_<datetimestamp>.tar.gz。 - 节点必须能够访问或可引导。
对于非恢复 control plane 节点,不需要建立 SSH 连接或停止静态 pod。您可以逐个删除并重新创建其他非恢复 control plane 机器。
流程
- 选择一个要用作恢复主机的 control plane 主机。这是在其中运行恢复操作的主机。
建立到每个 control plane 节点(包括恢复主机)的 SSH 连接。
恢复过程启动后,
kube-apiserver将无法访问,因此您无法访问 control plane 节点。因此,建议在一个单独的终端中建立到每个control plane 主机的 SSH 连接。重要如果没有完成这个步骤,将无法访问 control plane 主机来完成恢复过程,您将无法从这个状态恢复集群。
使用 SSH 连接到每个 control plane 节点,并运行以下命令来禁用 etcd:
sudo -E /usr/local/bin/disable-etcd.sh
$ sudo -E /usr/local/bin/disable-etcd.shCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 etcd 备份目录复制复制到恢复 control plane 主机上。
此流程假设您将
backup目录(其中包含 etcd 快照和静态 pod 资源)复制到恢复 control plane 主机的/home/core/目录中。运行以下命令,使用 SSH 连接到恢复主机并从以前的备份中恢复集群:
sudo -E /usr/local/bin/cluster-restore.sh /home/core/<etcd-backup-directory>
$ sudo -E /usr/local/bin/cluster-restore.sh /home/core/<etcd-backup-directory>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 退出 SSH 会话。
API 响应后,通过运行以下命令关闭 etcd Operator 仲裁保护:
oc patch etcd/cluster --type=merge -p '{"spec": {"unsupportedConfigOverrides": {"useUnsupportedUnsafeNonHANonProductionUnstableEtcd": true}}}'$ oc patch etcd/cluster --type=merge -p '{"spec": {"unsupportedConfigOverrides": {"useUnsupportedUnsafeNonHANonProductionUnstableEtcd": true}}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令监控 control plane 的恢复进度:
oc adm wait-for-stable-cluster
$ oc adm wait-for-stable-clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意control plane 最多可能需要 15 分钟才能恢复。
恢复后,运行以下命令来启用仲裁保护:
oc patch etcd/cluster --type=merge -p '{"spec": {"unsupportedConfigOverrides": null}}'$ oc patch etcd/cluster --type=merge -p '{"spec": {"unsupportedConfigOverrides": null}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
故障排除
如果推出 etcd 静态 pod 的过程没有进展,您可以通过运行以下命令来强制从 cluster-etcd-operator 重新部署:
oc patch etcd cluster -p='{"spec": {"forceRedeploymentReason": "recovery-'"$(date --rfc-3339=ns )"'"}}' --type=merge
$ oc patch etcd cluster -p='{"spec": {"forceRedeploymentReason": "recovery-'"$(date --rfc-3339=ns )"'"}}' --type=merge
6.3.3.4. 从 etcd 备份手动恢复集群 复制链接链接已复制到粘贴板!
恢复过程在 "Restoring to a previous cluster state" 部分中介绍:
-
需要 2 个 control plane 节点的完整重新创建,这可能是使用 UPI 安装方法安装的集群的一个复杂步骤,因为 UPI 安装不会为 control plane 节点创建任何
Machine或ControlPlaneMachineset。 - 使用脚本 /usr/local/bin/cluster-restore.sh,它会启动新的单成员 etcd 集群,然后将其扩展到三个成员。
相反,这个过程:
- 不需要重新创建任何 control plane 节点。
- 直接启动一个三成员 etcd 集群。
如果集群使用 MachineSet 用于 control plane,建议使用 "Restoring to a previous cluster state" 用于简化 etcd 恢复的步骤。
恢复集群时,必须使用同一 z-stream 发行版本中获取的 etcd 备份。例如,OpenShift Container Platform 4.7.2 集群必须使用从 4.7.2 开始的 etcd 备份。
先决条件
-
使用具有
cluster-admin角色的用户访问集群,例如kubeadmin用户。 -
通过 SSH 访问所有 control plane 主机,允许主机用户成为
root用户;例如,默认的core主机用户。 -
包含之前 etcd 快照和来自同一备份的静态 pod 资源的备份目录。该目录中的文件名必须采用以下格式:
snapshot_<datetimestamp>.db和static_kuberesources_<datetimestamp>.tar.gz。
流程
使用 SSH 连接到每个 control plane 节点。
恢复过程启动后,Kubernetes API 服务器将无法访问,因此您无法访问 control plane 节点。因此,建议针对每个 control plane 主机都使用一个单独的终端来进行 SSH 连接。
重要如果没有完成这个步骤,将无法访问 control plane 主机来完成恢复过程,您将无法从这个状态恢复集群。
将 etcd 备份目录复制到每个 control plane 主机上。
此流程假设您将
backup目录(其中包含 etcd 快照和静态 pod 资源)复制到每个 control plane 主机的/home/core/assets目录中。如果尚未存在,您可能需要创建此assets文件夹。停止所有 control plane 节点上的静态 pod;一次只针对一个主机进行。
将现有 Kubernetes API Server 静态 pod 清单从 kubelet 清单目录中移出。
mkdir -p /root/manifests-backup mv /etc/kubernetes/manifests/kube-apiserver-pod.yaml /root/manifests-backup/
$ mkdir -p /root/manifests-backup $ mv /etc/kubernetes/manifests/kube-apiserver-pod.yaml /root/manifests-backup/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令验证 Kubernetes API 服务器容器是否已停止:
crictl ps | grep kube-apiserver | grep -E -v "operator|guard"
$ crictl ps | grep kube-apiserver | grep -E -v "operator|guard"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 命令输出应该为空。如果它不是空的,请等待几分钟后再重新检查。
如果 Kubernetes API 服务器容器仍在运行,使用以下命令手动终止它们:
crictl stop <container_id>
$ crictl stop <container_id>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对
kube-controller-manager-pod.yaml、kube-scheduler-pod.yaml最后为etcd-pod.yaml重复相同的步骤,。使用以下命令停止
kube-controller-managerpod:mv /etc/kubernetes/manifests/kube-controller-manager-pod.yaml /root/manifests-backup/
$ mv /etc/kubernetes/manifests/kube-controller-manager-pod.yaml /root/manifests-backup/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令检查容器是否已停止:
crictl ps | grep kube-controller-manager | grep -E -v "operator|guard"
$ crictl ps | grep kube-controller-manager | grep -E -v "operator|guard"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令停止
kube-schedulerpod:mv /etc/kubernetes/manifests/kube-scheduler-pod.yaml /root/manifests-backup/
$ mv /etc/kubernetes/manifests/kube-scheduler-pod.yaml /root/manifests-backup/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令检查容器是否已停止:
crictl ps | grep kube-scheduler | grep -E -v "operator|guard"
$ crictl ps | grep kube-scheduler | grep -E -v "operator|guard"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令停止
etcdpod:mv /etc/kubernetes/manifests/etcd-pod.yaml /root/manifests-backup/
$ mv /etc/kubernetes/manifests/etcd-pod.yaml /root/manifests-backup/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令检查容器是否已停止:
crictl ps | grep etcd | grep -E -v "operator|guard"
$ crictl ps | grep etcd | grep -E -v "operator|guard"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在每个 control plane 主机上,保存当前的
etcd数据(将它移到backup目录中):mkdir /home/core/assets/old-member-data mv /var/lib/etcd/member /home/core/assets/old-member-data
$ mkdir /home/core/assets/old-member-data $ mv /var/lib/etcd/member /home/core/assets/old-member-dataCopy to Clipboard Copied! Toggle word wrap Toggle overflow 当
etcd备份恢复无法正常工作,且etcd集群必须恢复到当前状态,则这些数据将很有用。为每个 control plane 主机找到正确的 etcd 参数。
<ETCD_NAME>的值对每个 control plane 主机都是唯一的,它等于特定 control plane 主机上的清单/etc/kubernetes/static-pod-resources/etcd-certs/configmaps/restore-etcd-pod/pod.yaml文件中的ETCD_NAME变量的值。它可以通过以下命令找到:RESTORE_ETCD_POD_YAML="/etc/kubernetes/static-pod-resources/etcd-certs/configmaps/restore-etcd-pod/pod.yaml" cat $RESTORE_ETCD_POD_YAML | \ grep -A 1 $(cat $RESTORE_ETCD_POD_YAML | grep 'export ETCD_NAME' | grep -Eo 'NODE_.+_ETCD_NAME') | \ grep -Po '(?<=value: ").+(?=")'
RESTORE_ETCD_POD_YAML="/etc/kubernetes/static-pod-resources/etcd-certs/configmaps/restore-etcd-pod/pod.yaml" cat $RESTORE_ETCD_POD_YAML | \ grep -A 1 $(cat $RESTORE_ETCD_POD_YAML | grep 'export ETCD_NAME' | grep -Eo 'NODE_.+_ETCD_NAME') | \ grep -Po '(?<=value: ").+(?=")'Copy to Clipboard Copied! Toggle word wrap Toggle overflow <UUID>的值可使用以下命令在 control plane 主机中生成:uuidgen
$ uuidgenCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意<UUID>的值必须只生成一次。在一个 control plane 主机上生成UUID后,请不要在其他主机上再次生成它。相同的UUID会在后续步骤中的所有 control plane 主机上使用。ETCD_NODE_PEER_URL的值应设置为类似以下示例:https://<IP_CURRENT_HOST>:2380
https://<IP_CURRENT_HOST>:2380Copy to Clipboard Copied! Toggle word wrap Toggle overflow 正确的 IP 可以从特定 control plane 主机的
<ETCD_NAME>中找到,使用以下命令:echo <ETCD_NAME> | \ sed -E 's/[.-]/_/g' | \ xargs -I {} grep {} /etc/kubernetes/static-pod-resources/etcd-certs/configmaps/etcd-scripts/etcd.env | \ grep "IP" | grep -Po '(?<=").+(?=")'$ echo <ETCD_NAME> | \ sed -E 's/[.-]/_/g' | \ xargs -I {} grep {} /etc/kubernetes/static-pod-resources/etcd-certs/configmaps/etcd-scripts/etcd.env | \ grep "IP" | grep -Po '(?<=").+(?=")'Copy to Clipboard Copied! Toggle word wrap Toggle overflow <ETCD_INITIAL_CLUSTER>的值应设置为如下所示,其中<ETCD_NAME_n>是每个 control plane 主机的<ETCD_NAME>。注意使用的端口必须是 2380,而不是 2379。端口 2379 用于 etcd 数据库管理,并直接在容器中的 etcd start 命令中配置。
输出示例
<ETCD_NAME_0>=<ETCD_NODE_PEER_URL_0>,<ETCD_NAME_1>=<ETCD_NODE_PEER_URL_1>,<ETCD_NAME_2>=<ETCD_NODE_PEER_URL_2>
<ETCD_NAME_0>=<ETCD_NODE_PEER_URL_0>,<ETCD_NAME_1>=<ETCD_NODE_PEER_URL_1>,<ETCD_NAME_2>=<ETCD_NODE_PEER_URL_2>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定每个 control plane 主机中的
ETCD_NODE_PEER_URL值。
<ETCD_INITIAL_CLUSTER>值在所有 control plane 主机上都是相同的。在后续步骤中,每个 control plane 主机都需要使用相同的值。
从备份中重新生成 etcd 数据库。
此类操作必须在每个 control plane 主机上执行。
使用以下命令将
etcd备份复制到/var/lib/etcd目录中:cp /home/core/assets/backup/<snapshot_yyyy-mm-dd_hhmmss>.db /var/lib/etcd
$ cp /home/core/assets/backup/<snapshot_yyyy-mm-dd_hhmmss>.db /var/lib/etcdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在继续操作前,识别正确的
etcdctl镜像。使用以下命令从 pod 清单的备份中检索镜像:jq -r '.spec.containers[]|select(.name=="etcdctl")|.image' /root/manifests-backup/etcd-pod.yaml
$ jq -r '.spec.containers[]|select(.name=="etcdctl")|.image' /root/manifests-backup/etcd-pod.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow podman run --rm -it --entrypoint="/bin/bash" -v /var/lib/etcd:/var/lib/etcd:z <image-hash>
$ podman run --rm -it --entrypoint="/bin/bash" -v /var/lib/etcd:/var/lib/etcd:z <image-hash>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查
etcdctl工具的版本是创建备份的etcd服务器的版本:etcdctl version
$ etcdctl versionCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令重新生成
etcd数据库,为当前主机使用正确的值:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意在重新生成
etcd数据库时,引号是必需的。
记录下在
added member日志中的值,例如:输出示例
2022-06-28T19:52:43Z info membership/cluster.go:421 added member {"cluster-id": "c5996b7c11c30d6b", "local-member-id": "0", "added-peer-id": "56cd73b614699e7", "added-peer-peer-urls": ["https://10.0.91.5:2380"], "added-peer-is-learner": false} 2022-06-28T19:52:43Z info membership/cluster.go:421 added member {"cluster-id": "c5996b7c11c30d6b", "local-member-id": "0", "added-peer-id": "1f63d01b31bb9a9e", "added-peer-peer-urls": ["https://10.0.90.221:2380"], "added-peer-is-learner": false} 2022-06-28T19:52:43Z info membership/cluster.go:421 added member {"cluster-id": "c5996b7c11c30d6b", "local-member-id": "0", "added-peer-id": "fdc2725b3b70127c", "added-peer-peer-urls": ["https://10.0.94.214:2380"], "added-peer-is-learner": false}2022-06-28T19:52:43Z info membership/cluster.go:421 added member {"cluster-id": "c5996b7c11c30d6b", "local-member-id": "0", "added-peer-id": "56cd73b614699e7", "added-peer-peer-urls": ["https://10.0.91.5:2380"], "added-peer-is-learner": false} 2022-06-28T19:52:43Z info membership/cluster.go:421 added member {"cluster-id": "c5996b7c11c30d6b", "local-member-id": "0", "added-peer-id": "1f63d01b31bb9a9e", "added-peer-peer-urls": ["https://10.0.90.221:2380"], "added-peer-is-learner": false} 2022-06-28T19:52:43Z info membership/cluster.go:421 added member {"cluster-id": "c5996b7c11c30d6b", "local-member-id": "0", "added-peer-id": "fdc2725b3b70127c", "added-peer-peer-urls": ["https://10.0.94.214:2380"], "added-peer-is-learner": false}Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 退出容器。
-
在其他 control plane 主机上重复这些步骤,检查
added member日志中的值对于所有 control plane 主机都是一样的。
将重新生成的
etcd数据库移到默认位置。此类操作必须在每个 control plane 主机上执行。
将重新生成的数据库(上一个
etcdctl snapshot restore命令创建的member文件夹)移到默认的 etcd 位置/var/lib/etcd:mv /var/lib/etcd/restore-<UUID>/member /var/lib/etcd
$ mv /var/lib/etcd/restore-<UUID>/member /var/lib/etcdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
/var/lib/etcd目录中恢复/var/lib/etcd/member文件夹的 SELinux 上下文:restorecon -vR /var/lib/etcd/
$ restorecon -vR /var/lib/etcd/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除剩下的文件和目录:
rm -rf /var/lib/etcd/restore-<UUID>
$ rm -rf /var/lib/etcd/restore-<UUID>Copy to Clipboard Copied! Toggle word wrap Toggle overflow rm /var/lib/etcd/<snapshot_yyyy-mm-dd_hhmmss>.db
$ rm /var/lib/etcd/<snapshot_yyyy-mm-dd_hhmmss>.dbCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要完成后,
/var/lib/etcd目录只能包含文件夹member。- 在其他 control plane 主机上重复这些步骤。
重启 etcd 集群。
- 必须在所有 control plane 主机上执行以下步骤,但一次只针对一个主机执行。
将
etcd静态 pod 清单移回到 kubelet 清单目录,以便 kubelet 启动相关的容器:mv /tmp/etcd-pod.yaml /etc/kubernetes/manifests
$ mv /tmp/etcd-pod.yaml /etc/kubernetes/manifestsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证所有
etcd容器是否已启动:crictl ps | grep etcd | grep -v operator
$ crictl ps | grep etcd | grep -v operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
38c814767ad983 f79db5a8799fd2c08960ad9ee22f784b9fbe23babe008e8a3bf68323f004c840 28 seconds ago Running etcd-health-monitor 2 fe4b9c3d6483c e1646b15207c6 9d28c15860870e85c91d0e36b45f7a6edd3da757b113ec4abb4507df88b17f06 About a minute ago Running etcd-metrics 0 fe4b9c3d6483c 08ba29b1f58a7 9d28c15860870e85c91d0e36b45f7a6edd3da757b113ec4abb4507df88b17f06 About a minute ago Running etcd 0 fe4b9c3d6483c 2ddc9eda16f53 9d28c15860870e85c91d0e36b45f7a6edd3da757b113ec4abb4507df88b17f06 About a minute ago Running etcdctl
38c814767ad983 f79db5a8799fd2c08960ad9ee22f784b9fbe23babe008e8a3bf68323f004c840 28 seconds ago Running etcd-health-monitor 2 fe4b9c3d6483c e1646b15207c6 9d28c15860870e85c91d0e36b45f7a6edd3da757b113ec4abb4507df88b17f06 About a minute ago Running etcd-metrics 0 fe4b9c3d6483c 08ba29b1f58a7 9d28c15860870e85c91d0e36b45f7a6edd3da757b113ec4abb4507df88b17f06 About a minute ago Running etcd 0 fe4b9c3d6483c 2ddc9eda16f53 9d28c15860870e85c91d0e36b45f7a6edd3da757b113ec4abb4507df88b17f06 About a minute ago Running etcdctlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果这个命令的输出为空,请等待几分钟,然后再次检查。
检查
etcd集群的状态。在任何 control plane 主机上,使用以下命令检查
etcd集群的状态:crictl exec -it $(crictl ps | grep etcdctl | awk '{print $1}') etcdctl endpoint status -w table$ crictl exec -it $(crictl ps | grep etcdctl | awk '{print $1}') etcdctl endpoint status -w tableCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
重启其他静态 pod。
必须在所有 control plane 主机上执行以下步骤,但一次只针对一个主机执行。
将 Kubernetes API Server 静态 pod 清单重新移到 kubelet 清单目录中,以便 kubelet 使用命令启动相关的容器:
mv /root/manifests-backup/kube-apiserver-pod.yaml /etc/kubernetes/manifests
$ mv /root/manifests-backup/kube-apiserver-pod.yaml /etc/kubernetes/manifestsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证所有 Kubernetes API 服务器容器是否已启动:
crictl ps | grep kube-apiserver | grep -v operator
$ crictl ps | grep kube-apiserver | grep -v operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果以下命令的输出为空,请等待几分钟,然后再次检查。
对
kube-controller-manager-pod.yaml和kube-scheduler-pod.yaml文件重复相同的步骤。使用以下命令重启所有节点中的 kubelet:
systemctl restart kubelet
$ systemctl restart kubeletCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令启动剩余的 control plane pod:
mv /root/manifests-backup/kube-* /etc/kubernetes/manifests/
$ mv /root/manifests-backup/kube-* /etc/kubernetes/manifests/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查
kube-apiserver、kube-scheduler和kube-controller-managerpod 是否已正确启动:crictl ps | grep -E 'kube-(apiserver|scheduler|controller-manager)' | grep -v -E 'operator|guard'
$ crictl ps | grep -E 'kube-(apiserver|scheduler|controller-manager)' | grep -v -E 'operator|guard'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令擦除 OVN 数据库:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.3.3.6. 恢复持久性存储状态的问题和解决方法 复制链接链接已复制到粘贴板!
如果您的 OpenShift Container Platform 集群使用任何形式的持久性存储,集群的状态通常存储在 etcd 外部。它可能是在 pod 中运行的 Elasticsearch 集群,或者在 StatefulSet 对象中运行的数据库。从 etcd 备份中恢复时,还会恢复 OpenShift Container Platform 中工作负载的状态。但是,如果 etcd 快照是旧的,其状态可能无效或过期。
持久性卷(PV)的内容绝不会属于 etcd 快照的一部分。从 etcd 快照恢复 OpenShift Container Platform 集群时,非关键工作负载可能会访问关键数据,反之亦然。
以下是生成过时状态的一些示例情况:
- MySQL 数据库在由 PV 对象支持的 pod 中运行。从 etcd 快照恢复 OpenShift Container Platform 不会使卷恢复到存储供应商上,且不会生成正在运行的 MySQL pod,尽管 pod 会重复尝试启动。您必须通过在存储供应商中恢复卷,然后编辑 PV 以指向新卷来手动恢复这个 pod。
- Pod P1 使用卷 A,它附加到节点 X。如果另一个 pod 在节点 Y 上使用相同的卷,则执行 etcd 恢复时,pod P1 可能无法正确启动,因为卷仍然被附加到节点 Y。OpenShift Container Platform 并不知道附加,且不会自动分离它。发生这种情况时,卷必须从节点 Y 手动分离,以便卷可以在节点 X 上附加,然后 pod P1 才可以启动。
- 在执行 etcd 快照后,云供应商或存储供应商凭证会被更新。这会导致任何依赖于这些凭证的 CSI 驱动程序或 Operator 无法正常工作。您可能需要手动更新这些驱动程序或 Operator 所需的凭证。
在生成 etcd 快照后,会从 OpenShift Container Platform 节点中删除或重命名设备。Local Storage Operator 会为从
/dev/disk/by-id或/dev目录中管理的每个 PV 创建符号链接。这种情况可能会导致本地 PV 引用不再存在的设备。要解决这个问题,管理员必须:
- 手动删除带有无效设备的 PV。
- 从对应节点中删除符号链接。
-
删除
LocalVolume或LocalVolumeSet对象(请参阅 Storage → Configuring persistent storage → Persistent storage → Persistent storage → Deleting the Local Storage Operator Resources)。
6.3.4. 从 control plane 证书已过期的情况下恢复 复制链接链接已复制到粘贴板!
6.3.4.1. 从 control plane 证书已过期的情况下恢复 复制链接链接已复制到粘贴板!
集群可以从过期的 control plane 证书中自动恢复。
但是,您需要手动批准待处理的 node-bootstrapper 证书签名请求(CSR)来恢复 kubelet 证书。对于用户置备的安装,您可能需要批准待处理的 kubelet 服务 CSR。
使用以下步骤批准待处理的 CSR:
流程
获取当前 CSR 列表:
oc get csr
$ oc get csrCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 查看一个 CSR 的详细信息以验证其是否有效:
oc describe csr <csr_name>
$ oc describe csr <csr_name>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<csr_name>是当前 CSR 列表中 CSR 的名称。
批准每个有效的
node-bootstrapperCSR:oc adm certificate approve <csr_name>
$ oc adm certificate approve <csr_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于用户置备的安装,请批准每个有效的 kubelet 服务 CSR:
oc adm certificate approve <csr_name>
$ oc adm certificate approve <csr_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Legal Notice
复制链接链接已复制到粘贴板!
Copyright © 2025 Red Hat
OpenShift documentation is licensed under the Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0).
Modified versions must remove all Red Hat trademarks.
Portions adapted from https://github.com/kubernetes-incubator/service-catalog/ with modifications by Red Hat.
Red Hat, Red Hat Enterprise Linux, the Red Hat logo, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation’s permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.