$ ibmcloud plugin install cos -f
您在 IBM Cloud 集群上安装用于数据保护的 OpenShift API (OADP) 运算符,以备份和恢复集群上的应用程序。您配置 IBM Cloud 对象存储 (COS) 来存储备份。
您创建 IBM Cloud 对象存储 (COS) 实例来存储 OADP 备份数据。创建 COS 实例后,配置HMAC
服务凭据。
您拥有 IBM Cloud Platform 帐户。
您已安装IBM Cloud CLI。
您已登录到 IBM Cloud。
运行以下命令安装 IBM Cloud 对象存储 (COS) 插件
$ ibmcloud plugin install cos -f
运行以下命令设置存储桶名称
$ BUCKET=<bucket_name>
运行以下命令设置存储桶区域
$ REGION=<bucket_region> (1)
1 | 指定存储桶区域,例如eu-gb 。 |
运行以下命令创建资源组
$ ibmcloud resource group-create <resource_group_name>
运行以下命令设置目标资源组
$ ibmcloud target -g <resource_group_name>
运行以下命令验证目标资源组是否已正确设置
$ ibmcloud target
API endpoint: https://cloud.ibm.com
Region:
User: test-user
Account: Test Account (fb6......e95) <-> 2...122
Resource group: Default
在示例输出中,资源组设置为Default
。
运行以下命令设置资源组名称
$ RESOURCE_GROUP=<resource_group> (1)
1 | 指定资源组名称,例如"default" 。 |
运行以下命令创建 IBM Cloud service-instance
资源
$ ibmcloud resource service-instance-create \
<service_instance_name> \(1)
<service_name> \(2)
<service_plan> \(3)
<region_name> (4)
1 | 为service-instance 资源指定名称。 |
2 | 指定服务名称。或者,您可以指定服务 ID。 |
3 | 指定您 IBM Cloud 帐户的服务计划。 |
4 | 指定区域名称。 |
$ ibmcloud resource service-instance-create test-service-instance cloud-object-storage \ (1)
standard \
global \
-d premium-global-deployment (2)
1 | 服务名称为cloud-object-storage 。 |
2 | -d 标志指定部署名称。 |
运行以下命令提取服务实例 ID
$ SERVICE_INSTANCE_ID=$(ibmcloud resource service-instance test-service-instance --output json | jq -r '.[0].id')
运行以下命令创建 COS 存储桶。
$ ibmcloud cos bucket-create \//
--bucket $BUCKET \//
--ibm-service-instance-id $SERVICE_INSTANCE_ID \//
--region $REGION
例如$BUCKET
、$SERVICE_INSTANCE_ID
和$REGION
之类的变量将被您之前设置的值替换。
运行以下命令创建HMAC
凭据。
$ ibmcloud resource service-key-create test-key Writer --instance-name test-service-instance --parameters {\"HMAC\":true}
从HMAC
凭据中提取访问密钥 ID 和秘密访问密钥,并将它们保存在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__
如果您的备份和快照位置使用相同的凭据,或者您不需要快照位置,则创建默认Secret
。
如果您不想在安装期间使用备份位置凭据,则可以使用空 |
您的对象存储和云存储(如有)必须使用相同的凭据。
您必须为 Velero 配置对象存储。
您必须以适当的格式为对象存储创建credentials-velero
文件。
创建一个使用默认名称的Secret
$ oc create secret generic cloud-credentials -n openshift-adp --from-file cloud=credentials-velero
安装数据保护应用程序时,在DataProtectionApplication
CR 的spec.backupLocations.credential
块中引用此Secret
。
如果您的备份和快照位置使用不同的凭据,则必须创建两个Secret
对象
备份位置Secret
,使用自定义名称。自定义名称在DataProtectionApplication
自定义资源 (CR) 的spec.backupLocations
块中指定。
快照位置Secret
,使用默认名称cloud-credentials
。此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:
provider: <provider>
default: true
credential:
key: cloud
name: <custom_secret> (1)
objectStorage:
bucket: <bucket_name>
prefix: <prefix>
1 | 备份位置Secret ,使用自定义名称。 |
通过创建DataProtectionApplication
API 的实例来安装数据保护应用程序 (DPA)。
您必须安装 OADP 运算符。
您必须将对象存储配置为备份位置。
如果您使用快照来备份 PV,则您的云提供商必须支持原生快照 API 或容器存储接口 (CSI) 快照。
如果备份和快照位置使用相同的凭据,则必须创建一个使用默认名称cloud-credentials
的Secret
。
如果您不想在安装过程中指定备份或快照位置,可以创建一个包含空 |
点击运算符 → 已安装的运算符,然后选择 OADP 运算符。
在提供的 API下,点击DataProtectionApplication框中的创建实例。
点击YAML 视图并更新DataProtectionApplication
清单的参数
apiVersion: oadp.openshift.io/v1alpha1
kind: DataProtectionApplication
metadata:
namespace: openshift-adp
name: <dpa_name>
spec:
configuration:
velero:
defaultPlugins:
- openshift
- aws
- csi
backupLocations:
- velero:
provider: aws (1)
default: true
objectStorage:
bucket: <bucket_name> (2)
prefix: velero
config:
insecureSkipTLSVerify: 'true'
profile: default
region: <region_name> (3)
s3ForcePathStyle: 'true'
s3Url: <s3_url> (4)
credential:
key: cloud
name: cloud-credentials (5)
1 | 当您使用 IBM Cloud 作为备份存储位置时,提供商为aws 。 |
2 | 指定 IBM Cloud 对象存储 (COS) 存储桶名称。 |
3 | 指定 COS 区域名称,例如eu-gb 。 |
4 | 指定 COS 存储桶的 S3 URL。例如,http://s3.eu-gb.cloud-object-storage.appdomain.cloud 。此处,eu-gb 是区域名称。请根据您的存储桶区域替换区域名称。 |
5 | 定义您使用来自HMAC 凭据的访问密钥和密钥访问密钥创建的密钥的名称。 |
点击创建。
通过运行以下命令查看用于数据保护的 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
通过编辑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 用于文件系统备份,对于具有内置数据移动器的 Data Mover 案例,Kopia 是您的唯一选项。 Kopia 比 Restic 更资源密集,您可能需要相应地调整 CPU 和内存需求。 |
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: ""
突发设置决定在应用限制之前可以向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。 |
您可以使用多个 BSL 配置 DPA 并指定云提供商提供的凭据。
您必须安装 OADP 运算符。
您必须使用云提供商提供的凭据创建密钥。
使用多个 BSL 配置 DPA。请参见以下示例。
apiVersion: oadp.openshift.io/v1alpha1
kind: DataProtectionApplication
#...
backupLocations:
- name: aws (1)
velero:
provider: aws
default: true (2)
objectStorage:
bucket: <bucket_name> (3)
prefix: <prefix> (4)
config:
region: <region_name> (5)
profile: "default"
credential:
key: cloud
name: cloud-credentials (6)
- name: odf (7)
velero:
provider: aws
default: false
objectStorage:
bucket: <bucket_name>
prefix: <prefix>
config:
profile: "default"
region: <region_name>
s3Url: <url> (8)
insecureSkipTLSVerify: "true"
s3ForcePathStyle: "true"
credential:
key: cloud
name: <custom_secret_name_odf> (9)
#...
1 | 为第一个 BSL 指定名称。 |
2 | 此参数表示此 BSL 是默认 BSL。如果在Backup CR 中未设置 BSL,则使用默认 BSL。您只能将一个 BSL 设置为默认值。 |
3 | 指定存储桶名称。 |
4 | 为 Velero 备份指定前缀;例如,velero 。 |
5 | 指定存储桶的 AWS 区域。 |
6 | 指定您创建的默认Secret 对象的名称。 |
7 | 为第二个 BSL 指定名称。 |
8 | 指定 S3 端点的 URL。 |
9 | 指定Secret 的正确名称;例如,custom_secret_name_odf 。如果您未指定Secret 名称,则使用默认名称。 |
指定要在备份 CR 中使用的 BSL。请参见以下示例。
apiVersion: velero.io/v1
kind: Backup
# ...
spec:
includedNamespaces:
- <namespace> (1)
storageLocation: <backup_storage_location> (2)
defaultVolumesToFsBackup: true
1 | 指定要备份的命名空间。 |
2 | 指定存储位置。 |
如果您没有使用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 中运行任务”。