---
title: 备份配置
---

你可以在备份创建页面配置调度，启用加密，并指定备份的存储位置。


## 调度

选择第一个选项来执行一次性备份，或选择第二个选项来安排定期备份。选择**定期备份**后，你可以配置以下两个字段：

- **调度**：该字段支持
   - 标准 [cron 表达式](https://en.wikipedia.org/wiki/Cron)，例如 `"0 * * * *"`
   - 描述符，例如 `"@midnight"` 或 `"@every 1h30m"`
- **保留数量**：指定必须保留的备份文件数量。如果文件数量超过 `retentionCount` 设置的值，最旧的文件将被删除。默认值为 10。

| YAML 指令名称 | 描述 |
| ---------------- | ---------------- |
| `schedule` | 提供用于调度定期备份的 cron 字符串。 |
| `retentionCount` | 提供要保留的备份文件数量。 |

## 加密

rancher-backup 通过调用 kube-apiserver 来收集资源。apiserver 返回的对象会被解密，所以即使启用了[静态加密](https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/)，备份收集的加密对象也会是明文。

为避免以明文形式存储资源，你可以使用与静态加密相同的 `EncryptionConfiguration` 文件来加密备份中的特定资源。

:::note 重要提示：

rancher-backup Operator 不会保存 `EncryptionConfiguration`，因此在备份中加密对象时，你必须自行保存该文件。

例如，[将 Rancher 迁移到新集群](../../how-to-guides/new-user-guides/backup-restore-and-disaster-recovery/migrate-rancher-to-new-cluster.md)时，该文件可用于在新集群​​中重新创建 secret。

:::

Operator 将 `EncryptionConfiguration` 用作 `cattle-resources-system` 命名空间中的 Kubernetes Secret，在 Secret 数据中，它位于名为 `encryption-provider-config.yaml` 的 key 下面。

对于 `EncryptionConfiguration`，你可以使用 [Kubernetes 文档中提供的示例](https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/#understanding-the-encryption-at-rest-configuration)。

为确保在 secret 中使用正确的密钥，加密配置文件必须命名为 `encryption-provider-config.yaml`。下面的命令使用 `--from-file` 标志来创建具有正确密钥名称的 Secret。

将 `EncryptionConfiguration` 保存到名为 `encryption-provider-config.yaml` 的文件中，并运行以下命令：

```bash
kubectl create secret generic encryptionconfig \
  --from-file=./encryption-provider-config.yaml \
  -n cattle-resources-system
```

这将确保密文包含一个名为 `encryption-provider-config.yaml` 的 key，而且 operator 会使用该 key 来获取加密配置。

`Encryption Config Secret` 下拉菜单将过滤并仅列出拥有这个 key 的密文。

![](/img/backup_restore/backup/encryption.png)

在上面的示例命令中，`encryptionconfig` 这个名称可以任意修改。


| YAML 指令名称 | 描述 |
| ---------------- | ---------------- |
| `encryptionConfigSecretName` | 提供 `cattle-resources-system` 命名空间中包含加密配置文件的密文的名称。 |

## 存储位置

如果在备份中指定了 `StorageLocation`，operator 将从该特定的 S3 存储桶中检索备份位置。如果没有指定，operator 将尝试在默认 operator 级别的 S3 存储和 operator 级别的 PVC 存储中查找这个文件。默认存储位置是在部署 `rancher-backup` operator 时配置的。

如果你选择第一个选项，备份将存储在安装 rancher-backup Chart 时配置的存储位置中。如果你选择第二个选项，你可以配置不同的兼容 S3 的对象存储作为备份存储位置。

### S3

:::caution

如果你使用 S3 备份目标，请确保每个集群都有自己的存储桶或文件夹。Rancher 将使用集群配置的 S3 存储桶或文件夹中的可用快照来填充快照信息。

:::

S3 存储位置包含以下配置字段：

1. **凭证密文**（可选）：如果你需要使用 AWS 访问密钥（access key）和密文密钥（secret key）来访问 S3 存储桶，请使用带有密钥和指令 `accessKey` 和 `secretKey` 的凭证来创建密文。它可以是任意一个命名空间。你可以点击[此处](#credentialsecret-示例)查看示例密文。如果运行 operator 的节点在 EC2 中，并且设置了允许它们访问 S3 的 IAM 权限，则此指令是不必要的（如[本节](#ec2-节点访问-s3-的-iam-权限)所述）。凭证密文下拉菜单列出了所有命名空间的密文。
1. **存储桶名称**：存储备份文件的 S3 存储桶的名称。
1. **区域**（可选）：S3 存储桶所在的 AWS [区域](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/)。配置 MinIO 时不需要该字段。
1. **文件夹**（可选）：S3 存储桶中存储备份文件的文件夹名称。不支持嵌套文件夹（例如， `rancher/cluster1`）。如果此字段留空，则默认将备份文件存储在 S3 存储桶的根文件夹中。
1. **端点**：用于访问存储桶区域中的 S3 的[端点](https://docs.aws.amazon.com/general/latest/gr/s3.html)。
1. **端点 CA**（可选）：Base64 编码的 CA 证书。如需获取示例，请参见 [S3 兼容配置示例](#s3-存储配置示例)。
1. **跳过 TLS 验证**（可选）：如果你不使用 TLS，则设置为 `true`。


| YAML 指令名称 | 描述 | 必填 |
| ---------------- | ---------------- | ------------ |
| `credentialSecretName` | 如果你需要使用 AWS 访问密钥（access key）和密文密钥（secret key）来访问 S3 存储桶，请使用带有密钥和指令 `accessKey` 和 `secretKey` 的凭证来创建密文。它可以在任何命名空间中，只要你在 `credentialSecretNamespace` 中提供该命名空间。点击[这里](#credentialsecret-示例)查看示例密文。如果运行 operator 的节点在 EC2 中，并且设置了允许它们访问 S3 的 IAM 权限，则此指令是不必要的（如[本节](#ec2-节点访问-s3-的-iam-权限)所述）。 |  |
| `credentialSecretNamespace` | 包含访问 S3 的凭证的密文的命名空间。如果运行 operator 的节点在 EC2 中，并且设置了允许它们访问 S3 的 IAM 权限，则此指令是不必要的（如[本节](#ec2-节点访问-s3-的-iam-权限)所述）。 |  |
| `bucketName` | 存储备份文件的 S3 存储桶的名称。 | ✓ |
| `folder` | S3 存储桶中存储备份文件的文件夹名称。不支持嵌套文件夹（例如， `rancher/cluster1`）。如果此字段留空，则默认将备份文件存储在 S3 存储桶的根文件夹中。 | |
| `region` | S3 存储桶所在的 AWS [区域](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/)。 | ✓ |
| `endpoint` | 用于访问存储桶区域中的 S3 的[端点](https://docs.aws.amazon.com/general/latest/gr/s3.html)。 | ✓ |
| `endpointCA` | Base64 编码的 CA 证书。如需获取示例，请参见 [S3 兼容配置示例](#s3-存储配置示例)。 |  |
| `insecureTLSSkipVerify` | 如果你不使用 TLS，则设置为 `true`。 | |

### S3 存储配置示例

```yaml
s3:
  credentialSecretName: s3-creds
  credentialSecretNamespace: default
  bucketName: rancher-backups
  folder: rancher
  region: us-west-2
  endpoint: s3.us-west-2.amazonaws.com
```

### MinIO 配置示例

```yaml
s3:
  credentialSecretName: minio-creds
  bucketName: rancherbackups
  endpoint: minio.35.202.130.254.xip.io
  endpointCA:  
```
### credentialSecret 示例

```yaml
apiVersion: v1
kind: Secret
metadata:
  name: creds
type: Opaque
data:
  accessKey: <base64-encoded access key>
  secretKey: <base64-encoded secret key>
```

:::note

为避免编码问题，你可以使用以下命令创建 `credentialSecret`，更新 `accessKey` 和 `secretKey` 的值。

```bash
kubectl create secret generic s3-creds \
  --from-literal=accessKey=<access key> \
  --from-literal=secretKey=<secret key>
```

:::

### EC2 节点访问 S3 的 IAM 权限

有两种方法可以设置 `rancher-backup` operator 来使用 S3 作为备份存储位置。

一种方法是在 Backup 自定义资源中配置 `credentialSecretName`（即可以访问 S3 的 AWS 凭证）。

如果集群节点在 Amazon EC2 中，你也可以给 EC2 节点分配 IAM 权限，使其可以访问 S3。

要允许节点访问 S3，请按照 [AWS 文档](https://aws.amazon.com/premiumsupport/knowledge-center/ec2-instance-access-s3-bucket/)中的说明，为 EC2 创建一个 IAM 角色。在向角色添加自定义策略时，添加以下权限，并将 `Resource` 替换为你的存储桶名称：

```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket"
      ],
     "Resource": [
        "arn:aws:s3:::rancher-backups"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject",
        "s3:PutObjectAcl"
      ],
      "Resource": [
         "arn:aws:s3:::rancher-backups/*"
      ]
    }
  ]
}
```

在创建角色并将相应的实例配置文件附加 EC2 实例后，Backup 自定义资源中的 `credentialSecretName` 指令可以留空。

## 示例

如需获取 Backup 自定义资源的示例，请参见[本页](examples.md#备份)。
