$ cat << EOF > ./credentials-velero
[default]
aws_access_key_id=<AWS_ACCESS_KEY_ID>
aws_secret_access_key=<AWS_SECRET_ACCESS_KEY>
EOF
您可以通过安装 OADP 运算符来安装用于数据保护的 OpenShift API (OADP) 和多云对象网关 (MCG)。该运算符安装 Velero 1.14。
从 OADP 1.0.4 开始,所有 OADP 1.0. *z 版本只能用作容器迁移工具包运算符的依赖项,不能作为独立运算符使用。 |
您可以将 多云对象网关 配置为备份位置。MCG 是 OpenShift 数据基金会的一个组件。您可以在 DataProtectionApplication
自定义资源 (CR) 中将 MCG 配置为备份位置。
有关 Red Hat 技术预览功能的支持范围的更多信息,请参阅 技术预览功能支持范围。 |
您可以为备份位置创建一个 Secret
,然后安装数据保护应用程序。有关更多详细信息,请参阅 安装 OADP 运算符。
要在受限网络环境中安装 OADP 运算符,您必须首先禁用默认的 OperatorHub 源并镜像 Operator 目录。有关详细信息,请参阅 在断开连接的环境中使用运算符生命周期管理器。
您必须检索多云对象网关 (MCG) 凭据,这是创建用于数据保护的 OpenShift API (OADP) 的 Secret
自定义资源 (CR) 所必需的。
虽然 MCG 运算符已 弃用,但 MCG 插件仍然可用于 OpenShift 数据基金会。要下载插件,请浏览至 下载 Red Hat OpenShift 数据基金会 并下载适合您操作系统的 MCG 插件。 |
您必须使用相应的 Red Hat OpenShift 数据基金会部署指南 部署 OpenShift 数据基金会。
通过在 NooBaa
自定义资源上运行 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
安装数据保护应用程序时,您可以使用 credentials-velero
文件创建 Secret
对象。
您在 DataProtectionApplication
自定义资源 (CR) 中指定备份和快照位置及其密钥。
您可以指定与 AWS S3 兼容的对象存储作为备份位置,例如多云对象网关;Red Hat 容器存储;Ceph RADOS 网关(也称为 Ceph 对象网关);Red Hat OpenShift 数据基金会;或 MinIO。
Velero 将 OpenShift Container Platform 资源、Kubernetes 对象和内部映像作为存档文件备份到对象存储中。
如果您使用云提供商的原生快照 API 来备份持久卷,则必须将云提供商指定为快照位置。
如果您使用容器存储接口 (CSI) 快照,则无需指定快照位置,因为您将创建一个 VolumeSnapshotClass
CR 来注册 CSI 驱动程序。
如果您使用文件系统备份 (FSB),则无需指定快照位置,因为 FSB 会将文件系统备份到对象存储中。
如果备份和快照位置使用相同的凭据,或者您不需要快照位置,则创建一个默认 Secret
。
如果备份和快照位置使用不同的凭据,则创建两个密钥对象
备份位置的自定义 Secret
,您在 DataProtectionApplication
CR 中指定此位置。
快照位置的默认 Secret
,DataProtectionApplication
CR 中未引用此位置。
数据保护应用程序需要一个默认 如果您不想在安装过程中指定备份或快照位置,您可以创建一个包含空 `credentials-velero` 文件的默认 `Secret`。 |
如果您的备份和快照位置使用相同的凭据,或者您不需要快照位置,则可以创建默认的 `Secret`。
默认的 `Secret` 名称是 `cloud-credentials`。
`DataProtectionApplication` 自定义资源 (CR) 需要一个默认的 `Secret`。否则,安装将失败。如果未指定备份位置 `Secret` 的名称,则使用默认名称。 如果您不想在安装过程中使用备份位置凭据,则可以使用空 `credentials-velero` 文件创建一个具有默认名称的 `Secret`。 |
您的对象存储和云存储(如有)必须使用相同的凭据。
您必须为 Velero 配置对象存储。
您必须以正确的格式为对象存储创建一个 `credentials-velero` 文件。
创建具有默认名称的 `Secret`
$ oc create secret generic cloud-credentials -n openshift-adp --from-file cloud=credentials-velero
安装数据保护应用程序时,`Secret` 在 `DataProtectionApplication` CR 的 `spec.backupLocations.credential` 块中被引用。
如果您的备份和快照位置使用不同的凭据,则必须创建两个 `Secret` 对象。
具有自定义名称的备份位置 `Secret`。自定义名称在 `DataProtectionApplication` 自定义资源 (CR) 的 `spec.backupLocations` 块中指定。
具有默认名称 `cloud-credentials` 的快照位置 `Secret`。此 `Secret` 未在 `DataProtectionApplication` CR 中指定。
为快照位置创建一个 `credentials-velero` 文件,其格式应适合您的云提供商。
为快照位置创建一个具有默认名称的 `Secret`
$ oc create secret generic cloud-credentials -n openshift-adp --from-file cloud=credentials-velero
为备份位置创建一个 `credentials-velero` 文件,其格式应适合您的对象存储。
为备份位置创建一个具有自定义名称的 `Secret`
$ oc create secret generic <custom_secret> -n openshift-adp --from-file cloud=credentials-velero
将具有自定义名称的 `Secret` 添加到 `DataProtectionApplication` CR,如下例所示
apiVersion: oadp.openshift.io/v1alpha1
kind: DataProtectionApplication
metadata:
name: <dpa_sample>
namespace: openshift-adp
spec:
...
backupLocations:
- velero:
config:
profile: "default"
region: <region_name> (1)
s3Url: <url>
insecureSkipTLSVerify: "true"
s3ForcePathStyle: "true"
provider: aws
default: true
credential:
key: cloud
name: <custom_secret> (2)
objectStorage:
bucket: <bucket_name>
prefix: <prefix>
1 | 根据对象存储服务器文档的命名约定指定区域。 |
2 | 具有自定义名称的备份位置 `Secret`。 |
您可以通过设置 Velero 资源分配或启用自签名 CA 证书来配置数据保护应用程序。
您可以通过编辑 `DataProtectionApplication` 自定义资源 (CR) 清单来设置 `Velero` pod 的 CPU 和内存资源分配。
您必须安装 OpenShift 数据保护 API (OADP) 运算符。
编辑 `DataProtectionApplication` CR 清单中 `spec.configuration.velero.podConfig.ResourceAllocations` 块中的值,如下例所示
apiVersion: oadp.openshift.io/v1alpha1
kind: DataProtectionApplication
metadata:
name: <dpa_sample>
spec:
# ...
configuration:
velero:
podConfig:
nodeSelector: <node_selector> (1)
resourceAllocations: (2)
limits:
cpu: "1"
memory: 1024Mi
requests:
cpu: 200m
memory: 256Mi
1 | 指定要提供给 Velero podSpec 的节点选择器。 |
2 | 列出的 `resourceAllocations` 用于平均使用情况。 |
Kopia 是 OADP 1.3 及更高版本中的一个选项。您可以使用 Kopia 进行文件系统备份,对于使用内置数据移动器的“数据移动器”案例,Kopia 是您的唯一选项。 Kopia 比 Restic 更资源密集,您可能需要相应地调整 CPU 和内存需求。 |
使用 `nodeSelector` 字段选择哪些节点可以运行节点代理。`nodeSelector` 字段是推荐的节点选择约束中最简单的一种形式。指定的任何标签都必须与每个节点上的标签匹配。
更多详细信息,请参阅 配置节点代理和节点标签。
您必须通过编辑 `DataProtectionApplication` 自定义资源 (CR) 清单来启用对象存储的自签名 CA 证书,以防止出现 `certificate signed by unknown authority` 错误。
您必须安装 OpenShift 数据保护 API (OADP) 运算符。
编辑 `DataProtectionApplication` CR 清单的 `spec.backupLocations.velero.objectStorage.caCert` 参数和 `spec.backupLocations.velero.config` 参数
apiVersion: oadp.openshift.io/v1alpha1
kind: DataProtectionApplication
metadata:
name: <dpa_sample>
spec:
# ...
backupLocations:
- name: default
velero:
provider: aws
default: true
objectStorage:
bucket: <bucket>
prefix: <prefix>
caCert: <base64_encoded_cert_string> (1)
config:
insecureSkipTLSVerify: "false" (2)
# ...
1 | 指定 Base64 编码的 CA 证书字符串。 |
2 | `insecureSkipTLSVerify` 配置可以设置为 `"true"` 或 `"false"`。如果设置为 `"true"`,则禁用 SSL/TLS 安全性。如果设置为 `"false"`,则启用 SSL/TLS 安全性。 |
您可能希望通过为其创建别名来使用 Velero CLI,而无需在本地系统上安装它。
您必须以具有 `cluster-admin` 角色的用户身份登录到 OpenShift Container Platform 集群。
您必须安装 OpenShift CLI (`oc`)。
要使用别名 Velero 命令,请运行以下命令
$ alias velero='oc -n openshift-adp exec deployment/velero -c velero -it -- ./velero'
通过运行以下命令检查别名是否正常工作
$ velero version
Client:
Version: v1.12.1-OADP
Git commit: -
Server:
Version: v1.12.1-OADP
要将 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"
$ velero describe backup <backup_name> --details --cacert /tmp/<your_cacert>.txt
要获取备份日志,请运行以下命令:
$ velero backup logs <backup_name> --cacert /tmp/<your_cacert.txt>
您可以使用这些日志查看无法备份的资源的故障和警告。
如果 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"
/tmp/your-cacert.txt
在 OpenShift 数据保护 API (OADP) 的未来版本中,我们计划将证书安装到 Velero pod,以便不需要此步骤。
您可以通过创建 `DataProtectionApplication` API 的实例来安装数据保护应用程序 (DPA)。
您必须安装 OADP 运算符。
您必须将对象存储配置为备份位置。
如果您使用快照来备份 PV,您的云提供商必须支持本机快照 API 或容器存储接口 (CSI) 快照。
如果备份和快照位置使用相同的凭据,则必须创建一个具有默认名称 `cloud-credentials` 的 `Secret`。
如果备份和快照位置使用不同的凭据,则必须创建两个 `Secrets`
具有自定义名称的备份位置 `Secret`。您将此 `Secret` 添加到 `DataProtectionApplication` CR。
具有另一个自定义名称的快照位置 `Secret`。您将此 `Secret` 添加到 `DataProtectionApplication` CR。
如果您不想在安装过程中指定备份或快照位置,您可以创建一个包含空 `credentials-velero` 文件的默认 `Secret`。如果没有默认 `Secret`,安装将失败。 |
单击**运算符** → **已安装的运算符**,然后选择 OADP 运算符。
在**提供的 API** 下,单击**DataProtectionApplication** 框中的**创建实例**。
单击**YAML 视图**并更新 `DataProtectionApplication` 清单的参数
apiVersion: oadp.openshift.io/v1alpha1
kind: DataProtectionApplication
metadata:
name: <dpa_sample>
namespace: openshift-adp (1)
spec:
configuration:
velero:
defaultPlugins:
- aws (2)
- openshift (3)
resourceTimeout: 10m (4)
nodeAgent: (5)
enable: true (6)
uploaderType: kopia (7)
podConfig:
nodeSelector: <node_selector> (8)
backupLocations:
- velero:
config:
profile: "default"
region: <region_name> (9)
s3Url: <url> (10)
insecureSkipTLSVerify: "true"
s3ForcePathStyle: "true"
provider: aws
default: true
credential:
key: cloud
name: cloud-credentials (11)
objectStorage:
bucket: <bucket_name> (12)
prefix: <prefix> (13)
1 | OADP 的默认命名空间是 `openshift-adp`。命名空间是一个变量,可以配置。 |
2 | 需要一个与您的存储位置相对应的对象存储插件。对于所有 S3 提供商,所需的插件是aws 。对于 Azure 和 GCP 对象存储,需要azure 或gcp 插件。 |
3 | openshift 插件是必须的。 |
4 | 指定在超时发生之前等待多个 Velero 资源(例如 Velero CRD 可用性、卷快照删除和备份存储库可用性)的分钟数。默认为 10 分钟。 |
5 | 将管理请求路由到服务器的管理代理。 |
6 | 如果要启用nodeAgent 并执行文件系统备份,请将此值设置为true 。 |
7 | 输入kopia 或restic 作为您的上传器。安装后无法更改选择。对于内置 DataMover,您必须使用 Kopia。nodeAgent 部署了一个 DaemonSet,这意味着nodeAgent Pod 在每个工作节点上运行。您可以通过向Backup CR 添加spec.defaultVolumesToFsBackup: true 来配置文件系统备份。 |
8 | 指定 Kopia 或 Restic 可用的节点。默认情况下,Kopia 或 Restic 在所有节点上运行。 |
9 | 根据对象存储服务器文档的命名约定指定区域。 |
10 | 指定 S3 端点的 URL。 |
11 | 指定您创建的Secret 对象的名称。如果您没有指定此值,则使用默认名称cloud-credentials 。如果您指定自定义名称,则自定义名称将用于备份位置。 |
12 | 指定一个 bucket 作为备份存储位置。如果 bucket 不是 Velero 备份的专用 bucket,则必须指定一个前缀。 |
13 | 如果 bucket 用于多种用途,请指定 Velero 备份的前缀,例如velero 。 |
点击创建。
通过运行以下命令查看 OpenShift 数据保护 API (OADP) 资源来验证安装
$ oc get all -n openshift-adp
NAME READY STATUS RESTARTS AGE pod/oadp-operator-controller-manager-67d9494d47-6l8z8 2/2 Running 0 2m8s pod/node-agent-9cq4q 1/1 Running 0 94s pod/node-agent-m4lts 1/1 Running 0 94s pod/node-agent-pv4kr 1/1 Running 0 95s pod/velero-588db7f655-n842v 1/1 Running 0 95s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/oadp-operator-controller-manager-metrics-service ClusterIP 172.30.70.140 <none> 8443/TCP 2m8s service/openshift-adp-velero-metrics-svc ClusterIP 172.30.10.0 <none> 8085/TCP 8h NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE daemonset.apps/node-agent 3 3 3 3 3 <none> 96s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/oadp-operator-controller-manager 1/1 1 1 2m9s deployment.apps/velero 1/1 1 1 96s NAME DESIRED CURRENT READY AGE replicaset.apps/oadp-operator-controller-manager-67d9494d47 1 1 1 2m9s replicaset.apps/velero-588db7f655 1 1 1 96s
通过运行以下命令验证DataProtectionApplication
(DPA) 是否已协调
$ oc get dpa dpa-sample -n openshift-adp -o jsonpath='{.status}'
{"conditions":[{"lastTransitionTime":"2023-10-27T01:23:57Z","message":"Reconcile complete","reason":"Complete","status":"True","type":"Reconciled"}]}
验证type
是否设置为Reconciled
。
通过运行以下命令验证备份存储位置并确认PHASE
为Available
$ oc get backupstoragelocations.velero.io -n openshift-adp
NAME PHASE LAST VALIDATED AGE DEFAULT
dpa-sample-1 Available 1s 3d16h true
突发设置决定在应用限制之前可以向velero
服务器发送多少个请求。达到突发限制后,每秒查询数 (QPS) 设置决定每秒可以发送多少个额外请求。
您可以通过使用突发和 QPS 值配置数据保护应用程序 (DPA) 来设置velero
服务器的突发和 QPS 值。您可以使用 DPA 的dpa.configuration.velero.client-burst
和dpa.configuration.velero.client-qps
字段来设置突发和 QPS 值。
您已安装 OADP 运算符。
按照以下示例配置 DPA 中的client-burst
和client-qps
字段
apiVersion: oadp.openshift.io/v1alpha1
kind: DataProtectionApplication
metadata:
name: test-dpa
namespace: openshift-adp
spec:
backupLocations:
- name: default
velero:
config:
insecureSkipTLSVerify: "true"
profile: "default"
region: <bucket_region>
s3ForcePathStyle: "true"
s3Url: <bucket_url>
credential:
key: cloud
name: cloud-credentials
default: true
objectStorage:
bucket: <bucket_name>
prefix: velero
provider: aws
configuration:
nodeAgent:
enable: true
uploaderType: restic
velero:
client-burst: 500 (1)
client-qps: 300 (2)
defaultPlugins:
- openshift
- aws
- kubevirt
1 | 指定client-burst 值。在此示例中,client-burst 字段设置为 500。 |
2 | 指定client-qps 值。在此示例中,client-qps 字段设置为 300。 |
OADP 的 DPA 使用nodeSelector
字段来选择哪些节点可以运行节点代理。nodeSelector
字段是推荐的节点选择约束的最简单形式。
指定的任何标签都必须与每个节点上的标签匹配。
在您选择的任何节点上运行节点代理的正确方法是使用自定义标签标记节点
$ oc label node/<node_name> node-role.kubernetes.io/nodeAgent=""
在DPA.spec.configuration.nodeAgent.podConfig.nodeSelector
中使用与用于标记节点相同的自定义标签。例如
configuration:
nodeAgent:
enable: true
podConfig:
nodeSelector:
node-role.kubernetes.io/nodeAgent: ""
以下示例是nodeSelector
的反模式,除非节点上同时存在'node-role.kubernetes.io/infra: ""'
和'node-role.kubernetes.io/worker: ""'
这两个标签,否则无效
configuration:
nodeAgent:
enable: true
podConfig:
nodeSelector:
node-role.kubernetes.io/infra: ""
node-role.kubernetes.io/worker: ""
您可以在DataProtectionApplication
自定义资源 (CR) 中启用容器存储接口 (CSI),以便使用 CSI 快照备份持久卷。
云提供商必须支持 CSI 快照。
编辑DataProtectionApplication
CR,如下例所示
apiVersion: oadp.openshift.io/v1alpha1
kind: DataProtectionApplication
...
spec:
configuration:
velero:
defaultPlugins:
- openshift
- csi (1)
1 | 添加csi 默认插件。 |
如果您没有使用Restic
、Kopia
或DataMover
进行备份,则可以在DataProtectionApplication
自定义资源 (CR) 中禁用nodeAgent
字段。在禁用nodeAgent
之前,请确保 OADP 运算符处于空闲状态且未运行任何备份。
要禁用nodeAgent
,请将enable
标志设置为false
。请参见以下示例
DataProtectionApplication
CR# ...
configuration:
nodeAgent:
enable: false (1)
uploaderType: kopia
# ...
1 | 禁用节点代理。 |
要启用nodeAgent
,请将enable
标志设置为true
。请参见以下示例
DataProtectionApplication
CR# ...
configuration:
nodeAgent:
enable: true (1)
uploaderType: kopia
# ...
1 | 启用节点代理。 |
您可以设置一个作业来启用和禁用DataProtectionApplication
CR 中的nodeAgent
字段。有关更多信息,请参见“使用作业在 Pod 中运行任务”。