本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。

这是尚未发布的文档。 SUSE® Storage 1.12 (Dev).

配置备份目标

备份目标是用于访问备份存储的端点。可以在SUSE Storage UI上配置备份目标(设置 > 备份目标)。备份存储是存储Longhorn卷备份的服务器。您可以使用NFS、SMB/CIFS、Azure Blob存储和兼容S3的服务器。

从v1.8.0开始,SUSE Storage支持使用多个备份存储。建议在创建新备份目标之前设置默认备份目标。

保存到像S3这样的对象存储更可取,因为它通常提供更好的可靠性。 另一个优点是您不需要挂载和卸载目标,这样可以避免故障转移和升级过程变得复杂。

有关SUSE Storage中备份存储工作原理的更多信息,请参见概念

如果您无法访问AWS S3或想先尝试备份存储,我们还提供了一种方法来设置本地S3测试备份存储,使用 MinIO

SUSE Storage还支持通过SUSE Storage UI或Kubernetes存储类设置卷的定期快照/备份作业。有关详细信息,请参见这里

  • Longhorn备份在备份存储中的生命周期完全由SUSE Storage管理。在备份存储上直接应用保留策略是严格禁止的

  • SUSE Storage尝试在以下情况下清理与备份相关的自定义资源:

  • NFS服务器变得不可用并发送空响应。

  • 相关的Longhorn备份控制器之间发生竞争条件。

备份信息在下一个轮询间隔期间重新同步。有关更多信息,请参见 问题#9530

默认备份目标

默认备份目标(default)在全新安装时会自动创建。您可以在安装过程中或安装后使用 Helm 或 清单 YAML 文件longhorn.yaml)设置默认备份目标。

使用 Helm 设置默认备份目标

values.yaml 文件中,您可以设置三个参数来管理默认备份目标。

  • defaultBackupStore.backupTarget:用于访问默认备份存储的端点。

  • defaultBackupStore.backupTargetCredentialSecret:与默认备份目标关联的 Kubernetes 密钥的名称。

  • defaultBackupStore.pollInterval:SUSE Storage 等待的秒数,然后检查默认备份存储以获取新备份。

# -- Setting that allows you to update the default backupstore.
defaultBackupStore:
  # -- Endpoint used to access the default backupstore.
  backupTarget: ~
  # -- Name of the Kubernetes secret associated with the default backup target.
  backupTargetCredentialSecret: ~
  # -- Number of seconds that {longhorn-product-name} waits before checking the default backupstore for new backups.
  pollInterval: ~

使用清单 YAML 文件设置默认备份目标

从 v1.8.0 开始,您可以使用新 ConfigMap 资源,该资源名为 longhorn-default-resource,来管理资源的设置,包括默认备份目标资源。

  • backup-target:用于访问默认备份存储的端点。

  • backup-target-credential-secret:与默认备份目标关联的 Kubernetes 密钥的名称。

  • backupstore-poll-interval:Longhorn 等待的秒数,然后检查默认备份存储是否有新备份。

# Example
apiVersion: v1
kind: ConfigMap
metadata:
  name: longhorn-default-resource
  namespace: longhorn-system
data:
  default-resource.yaml: |
    "backup-target": "s3://example@us-west-1/"
    "backup-target-credential-secret": "example-secret"
    "backupstore-poll-interval": "180"

设置 AWS S3 备份存储

  1. AWS S3. 中创建一个新桶

  2. 为 SUSE Storage 设置权限。有两种选项来设置凭据。第一种是您可以设置一个包含 AWS IAM 用户凭据的 Kubernetes 密钥。第二种是您可以使用第三方应用程序通过注释管理 Pod 的临时 AWS IAM 权限,而不是使用 AWS 凭据。

    • 选项 1:创建一个包含 IAM 用户凭据的 Kubernetes 密钥

      1. 按照 指南 创建一个新的 AWS IAM 用户,并设置以下权限。编辑 Resource 部分以使用您的 S3 存储桶名称:

        {
          "Version": "2012-10-17",
          "Statement": [
            {
              "Sid": "GrantLonghornBackupstoreAccess0",
              "Effect": "Allow",
              "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:DeleteObject"
              ],
              "Resource": [
                "arn:aws:s3:::<your-bucket-name>",
                "arn:aws:s3:::<your-bucket-name>/*"
              ]
            }
          ]
        }
      2. 在 SUSE Storage 命名空间中创建一个名为 aws-secret 的 Kubernetes 密钥(默认情况下为 longhorn-system)。该密钥必须在 longhorn-system 命名空间中创建,以便 SUSE Storage 访问它:

        kubectl create secret generic <aws-secret> \
            --from-literal=AWS_ACCESS_KEY_ID=<your-aws-access-key-id> \
            --from-literal=AWS_SECRET_ACCESS_KEY=<your-aws-secret-access-key> \
            -n longhorn-system
        • 选项 2:通过 AWS STS AssumeRole 设置 IAM 临时凭证的权限(kube2iam 或 kiam)

          kube2iamkiam 是一个 Kubernetes 应用程序,允许通过注释管理 Pod 的 AWS IAM 权限,而不是操作 AWS 凭证。按照 kube2iam 或 kiam 的 GitHub 储存库中的说明将其安装到 Kubernetes 集群中。

      3. 按照 指南 创建一个新的 AWS IAM 角色,用于 AWS S3 服务,并设置以下权限:

        {
          "Version": "2012-10-17",
          "Statement": [
            {
              "Sid": "GrantLonghornBackupstoreAccess0",
              "Effect": "Allow",
              "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:DeleteObject"
              ],
              "Resource": [
                "arn:aws:s3:::<your-bucket-name>",
                "arn:aws:s3:::<your-bucket-name>/*"
              ]
            }
          ]
        }
      4. 编辑 AWS IAM 角色,设置以下信任关系:

        {
          "Version": "2012-10-17",
          "Statement": [
            {
              "Effect": "Allow",
              "Principal": {
                  "Service": "ec2.amazonaws.com"
              },
              "Action": "sts:AssumeRole"
            },
            {
              "Effect": "Allow",
              "Principal": {
                "AWS": "arn:aws:iam::<AWS_ACCOUNT_ID>:role/<AWS_EC2_NODE_INSTANCE_ROLE>"
              },
              "Action": "sts:AssumeRole"
            }
          ]
        }
      5. 在 命名空间中创建一个名为 aws-secret 的 Kubernetes 密钥(默认情况下为 longhorn-system`Longhorn)。该密钥必须在 `longhorn-system 命名空间中创建,以便 SUSE Storage 访问它:

        kubectl create secret generic <aws-secret> \
            --from-literal=AWS_IAM_ROLE_ARN=<your-aws-iam-role-arn> \
            -n longhorn-system
  3. 在 SUSE Storage 界面上,转到 备份和恢复 > 备份目标,然后创建或编辑备份目标。

    URL 设置为:

     s3://<your-bucket-name>@<your-aws-region>/

    确保在结尾有 /,否则您将收到错误。可以使用子目录(前缀):

     s3://<your-bucket-name>@<your-aws-region>/mypath/

    还要确保您已在 URL 中设置了 <your-aws-region>

    例如,对于 AWS,您可以在 这里找到区域代码。

    对于 Google Cloud Storage,您可以在 这里找到区域代码。

    凭证密钥 设置为:

    aws-secret

    这是带有 AWS 凭证或 AWS IAM 角色的密钥名称。

结果: SUSE Storage 可以在 S3 中存储备份。要创建备份,请参见 本节

如果您在代理后操作 SUSE Storage,并且想要使用 AWS S3 作为备份存储,您必须在 aws-secret 中提供关于您的代理的 SUSE Storage 信息,如下所示:
kubectl create secret generic <aws-secret> \
    --from-literal=AWS_ACCESS_KEY_ID=<your-aws-access-key-id> \
    --from-literal=AWS_SECRET_ACCESS_KEY=<your-aws-secret-access-key> \
    --from-literal=HTTP_PROXY=<your-proxy-ip-and-port> \
    --from-literal=HTTPS_PROXY=<your-proxy-ip-and-port> \
    --from-literal=NO_PROXY=<excluded-ip-list> \
    -n longhorn-system

确保`NO_PROXY`包含应排除使用代理的网络地址、网络地址范围和域。为了使SUSE Storage正常运行,`NO_PROXY`的最低要求值为:

  • localhost

  • 127.0.0.1

  • 0.0.0.0

  • 10.0.0.0/8(K8s组件的IP)

  • 192.168.0.0/16(集群中的内部IP)

设置GCP云存储备份存储

  1. Google Cloud Storage中创建一个新桶

  2. IAM & Admin中创建一个GCP服务账户

  3. 授予GCP服务账户在桶中读取、写入和删除对象的权限。

    服务账户将需要`roles/storage.objectAdmin`角色以读取、写入和删除桶中的对象。

考虑创建IAM条件,以减少此服务账户对多少桶具有对象管理员访问权限。在Google Cloud控制台中,转到*Cloud Storage > Buckets*,并选择目标桶。在*桶详细信息*屏幕上,转到*权限*选项卡,点击*授予访问权限*,并为目标桶授予您的服务账户存储对象管理员权限。

  1. 导航到您的 云存储中的桶,并选择您新创建的桶。

  2. 转到云存储的设置菜单,并导航到 互操作性选项卡

  3. 向下滚动到_服务账户HMAC_并按`+ CREATE A KEY FOR A SERVICE ACCOUNT`

  4. 选择您之前创建的GCP服务账户并按`CREATE KEY`

  5. 保存_访问密钥_和_密钥_。

    在互操作性菜单中,记下配置的_存储URI_,位于_请求端点_下。

    • 访问密钥将映射到我们稍后创建的 Kubernetes 密钥中的`AWS_ACCESS_KEY_ID`字段。

    • 密钥将映射到我们稍后创建的 Kubernetes 密钥中的`AWS_SECRET_ACCESS_KEY`字段。

    • 存储URI将映射到我们稍后创建的 Kubernetes 密钥中的`AWS_ENDPOINTS`字段。

  6. 访问SUSE Storage用户界面。在顶部导航栏中,点击*备份和恢复/备份目标*,并创建或编辑备份目标。

    URL 设置为:

    s3://${BUCKET_NAME}@us/

    凭证密钥 设置为:

    longhorn-gcp-backups
  7. 在`longhorn-system`命名空间中创建一个名为`longhorn-gcp-backups`的 Kubernetes 密钥,内容如下:

apiVersion: v1
kind: Secret
metadata:
  name: longhorn-gcp-backups
  namespace: longhorn-system
type: Opaque
stringData:
  AWS_ACCESS_KEY_ID: GOOG1EBYHGDE4WIGH2RDYNZWWWDZ5GMQDRMNSAOTVHRAILWAMIZ2O4URPGOOQ
  AWS_ENDPOINTS: https://storage.googleapis.com
  AWS_SECRET_ACCESS_KEY: BKoKpIW021s7vPtraGxDOmsJbkV/0xOVBG73m+8f
密钥可以命名为您喜欢的任何名称,只要与 SUSE Storage 的设置匹配。

一旦密钥创建并且 SUSE Storage 的设置已保存,请导航到 SUSE Storage 中的备份选项卡。如果有任何问题,它们应该会以弹窗通知的形式弹出。

如果没有错误消息,请尝试创建备份并确认内容已推送到您的新存储桶。

用户界面上的SUSE Storage*备份目标*屏幕显示每个备份目标的状态。如果状态为*错误*且没有提供其他详细信息,您可以使用浏览器的*检查*功能查看`/v1/backuptargets`的响应数据。来自GCP的错误标记为"AWS错误"(例如,AWS Error: AccessDenied)。有关更多信息,请参见 问题#10428

设置本地测试备份存储。

SUSE Storage提供用于测试目的的示例备份存储服务器设置。 您可以在`longhorn/deploy/backupstores`文件夹中找到AWS S3(MinIO)、Azure、CIFS和NFS的示例。

  1. 在`longhorn-system`名称空间中设置MinIO S3服务器作为备份存储。

     kubectl create -f https://raw.githubusercontent.com/longhorn/longhorn/v1.12.0/deploy/backupstores/minio-backupstore.yaml
  2. 访问SUSE Storage用户界面,点击*备份和恢复/备份目标*,并创建或编辑备份目标。

    URL 设置为:

     s3://backupbucket@us-east-1/

    凭证密钥 设置为:

     minio-secret

    `minio-secret`的yaml看起来像这样:

     apiVersion: v1
     kind: Secret
     metadata:
       name: minio-secret
       namespace: longhorn-system
     type: Opaque
     data:
       AWS_ACCESS_KEY_ID: bG9uZ2hvcm4tdGVzdC1hY2Nlc3Mta2V5 # longhorn-test-access-key
       AWS_SECRET_ACCESS_KEY: bG9uZ2hvcm4tdGVzdC1zZWNyZXQta2V5 # longhorn-test-secret-key
       AWS_ENDPOINTS: aHR0cHM6Ly9taW5pby1zZXJ2aWNlLmRlZmF1bHQ6OTAwMA== # https://minio-service.default:9000
       AWS_CERT: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURMRENDQWhTZ0F3SUJBZ0lSQU1kbzQycGhUZXlrMTcvYkxyWjVZRHN3RFFZSktvWklodmNOQVFFTEJRQXcKR2pFWU1CWUdBMVVFQ2hNUFRHOXVaMmh2Y200Z0xTQlVaWE4wTUNBWERUSXdNRFF5TnpJek1EQXhNVm9ZRHpJeApNakF3TkRBek1qTXdNREV4V2pBYU1SZ3dGZ1lEVlFRS0V3OU1iMjVuYUc5eWJpQXRJRlJsYzNRd2dnRWlNQTBHCkNTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFEWHpVdXJnUFpEZ3pUM0RZdWFlYmdld3Fvd2RlQUQKODRWWWF6ZlN1USs3K21Oa2lpUVBvelVVMmZvUWFGL1BxekJiUW1lZ29hT3l5NVhqM1VFeG1GcmV0eDBaRjVOVgpKTi85ZWFJNWRXRk9teHhpMElPUGI2T0RpbE1qcXVEbUVPSXljdjRTaCsvSWo5Zk1nS0tXUDdJZGxDNUJPeThkCncwOVdkckxxaE9WY3BKamNxYjN6K3hISHd5Q05YeGhoRm9tb2xQVnpJbnlUUEJTZkRuSDBuS0lHUXl2bGhCMGsKVHBHSzYxc2prZnFTK3hpNTlJeHVrbHZIRXNQcjFXblRzYU9oaVh6N3lQSlorcTNBMWZoVzBVa1JaRFlnWnNFbQovZ05KM3JwOFhZdURna2kzZ0UrOElXQWRBWHExeWhqRDdSSkI4VFNJYTV0SGpKUUtqZ0NlSG5HekFnTUJBQUdqCmF6QnBNQTRHQTFVZER3RUIvd1FFQXdJQ3BEQVRCZ05WSFNVRUREQUtCZ2dyQmdFRkJRY0RBVEFQQmdOVkhSTUIKQWY4RUJUQURBUUgvTURFR0ExVWRFUVFxTUNpQ0NXeHZZMkZzYUc5emRJSVZiV2x1YVc4dGMyVnlkbWxqWlM1awpaV1poZFd4MGh3Ui9BQUFCTUEwR0NTcUdTSWIzRFFFQkN3VUFBNElCQVFDbUZMMzlNSHVZMzFhMTFEajRwMjVjCnFQRUM0RHZJUWozTk9kU0dWMmQrZjZzZ3pGejFXTDhWcnF2QjFCMVM2cjRKYjJQRXVJQkQ4NFlwVXJIT1JNU2MKd3ViTEppSEtEa0Jmb2U5QWI1cC9VakpyS0tuajM0RGx2c1cvR3AwWTZYc1BWaVdpVWorb1JLbUdWSTI0Q0JIdgpnK0JtVzNDeU5RR1RLajk0eE02czNBV2xHRW95YXFXUGU1eHllVWUzZjFBWkY5N3RDaklKUmVWbENtaENGK0JtCmFUY1RSUWN3cVdvQ3AwYmJZcHlERFlwUmxxOEdQbElFOW8yWjZBc05mTHJVcGFtZ3FYMmtYa2gxa3lzSlEralAKelFadHJSMG1tdHVyM0RuRW0yYmk0TktIQVFIcFc5TXUxNkdRakUxTmJYcVF0VEI4OGpLNzZjdEg5MzRDYWw2VgotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0t

    有关创建密钥的更多信息,请参见 Kubernetes文档。该密钥必须在`longhorn-system`名称空间中创建,以便SUSE Storage访问它。

    生成base64编码时,请确保使用`echo -n`,否则字符串末尾会添加换行符,这会导致访问S3时出错。
  3. 在用户界面中点击*备份*选项卡。它应该报告一个空列表,没有任何错误。

结果: SUSE Storage 可以在 S3 中存储备份。要创建备份,请参见本节。

使用自签名SSL证书进行S3通信

如果您想使用自签名SSL证书,可以在您提供给SUSE Storage的Kubernetes密钥中指定AWS_CERT。请参见设置本地测试备份存储中的示例。 重要的是要注意,证书需要是PEM格式,并且必须是其自己的CA。或者,必须包含一个包含CA证书的证书链。 要包含多个证书,只需将不同的证书(PEM文件)连接在一起。

为S3兼容的备份存储启用虚拟主机样式访问

当您想要为您的S3兼容备份存储启用这种新的寻址方法时

  1. 您现在想切换到这种新的访问样式,以便您不必担心 亚马逊S3路径弃用计划

  2. 您使用的备份存储仅支持虚拟主机样式访问,例如,阿里云(Aliyun)OSS;

  3. 您已将 MINIO_DOMAIN 环境变量配置为 为 MinIO 服务器启用虚拟主机样式请求

  4. 错误`…​…​ error: AWS Error: SecondLevelDomainForbidden Please use virtual hosted style to access. …​..`被触发。

启用虚拟主机样式访问的方法

  1. 向您的备份目标密钥添加一个新字段`VIRTUAL_HOSTED_STYLE`,其值为`true`。例如:

     apiVersion: v1
     kind: Secret
     metadata:
       name: s3-compatible-backup-target-secret
       namespace: longhorn-system
     type: Opaque
     data:
       AWS_ACCESS_KEY_ID: bG9uZ2hvcm4tdGVzdC1hY2Nlc3Mta2V5
       AWS_SECRET_ACCESS_KEY: bG9uZ2hvcm4tdGVzdC1zZWNyZXQta2V5
       AWS_ENDPOINTS: aHR0cHM6Ly9taW5pby1zZXJ2aWNlLmRlZmF1bHQ6OTAwMA==
       VIRTUAL_HOSTED_STYLE: dHJ1ZQ== # true
  2. 部署或更新密钥。

  3. 备份和恢复 > 备份目标 中创建相应的备份目标,提供以下详细信息:

    1. 名称:输入您希望为备份目标指定的名称。

    2. URL:使用格式 s3://<bucket-name>@<region>/ 指定 S3 URL。

    3. 凭证密钥:选择凭证密钥。在此示例中为 s3-compatible-backup-target-secret

设置 NFS 备份存储

确保 NFS 服务器支持 NFSv4,并且目标 URL 指向该服务。

示例:

nfs://longhorn-test-nfs-svc.default:/opt/backupstore

默认挂载选项为 actimeo=1,soft,timeo=300,retry=2。 要使用其他选项,请将关键字 "nfsOptions" 和选项字符串附加到目标 URL。

示例:

nfs://longhorn-test-nfs-svc.default:/opt/backupstore?nfsOptions=soft,timeo=330,retrans=3

您指定的任何挂载选项将替换默认选项,而不是添加到默认选项中。

您可以在 这里 找到一个用于测试的 NFS 备份存储示例。

结果: SUSE Storage 可以在 NFS 中存储备份。要创建备份,请参见本节。

设置 SMB/CIFS 备份存储

在配置 SMB/CIFS 备份存储之前,可以通过创建和部署备份存储的凭证密钥。

  #!/bin/bash

  USERNAME=${Username of SMB/CIFS Server}
  PASSWORD=${Password of SMB/CIFS Server}

  CIFS_USERNAME=`echo -n ${USERNAME} | base64`
  CIFS_PASSWORD=`echo -n ${PASSWORD} | base64`

  cat <<EOF >>cifs_secret.yml
  apiVersion: v1
  kind: Secret
  metadata:
    name: cifs-secret
    namespace: longhorn-system
  type: Opaque
  data:
    CIFS_USERNAME: ${CIFS_USERNAME}
    CIFS_PASSWORD: ${CIFS_PASSWORD}
  EOF

  kubectl apply -f cifs_secret.yml

在 SUSE Storage 界面上,转到 备份和恢复 > 备份目标

  1. 创建或编辑备份目标。

    URL 设置为:

     cifs://longhorn-test-cifs-svc.default/backupstore

    默认 CIFS 挂载选项为 "soft"。 要使用其他选项,请将关键字 "cifsOptions" 和选项字符串附加到目标 URL。

    示例:

     cifs://longhorn-test-cifs-svc.default/backupstore?cifsOptions=rsize=65536,wsize=65536,soft

    您指定的任何挂载选项将替换默认选项,而不是添加到默认选项中。

  2. 设置*备份目标凭证密钥*。

    凭证密钥 设置为:

     cifs-secret

    这是带有CIFS凭证的密钥名称。

您可以在 这里找到一个用于测试目的的CIFS备份存储示例。

结果: SUSE Storage 可以在 CIFS 中存储备份。要创建备份,请参见本节。

设置 Azure Blob 存储备份存储。

  1. 验证 Azure Blob 存储 中是否存在备份存储的容器。

  2. 授予 Azure 服务帐户在容器中读取、写入和删除对象的权限。

    有关更多信息,请参见 Microsoft 文档中的 使用 Azure 门户管理 Blob 容器

  3. 转到*主页 → serviceaccount → 安全性 + 网络 → 访问密钥*。

  4. 保存以下信息:

    • Storage account name:映射到您将创建的Kubernetes密钥中的`AZBLOB_ACCOUNT_NAME`字段。

    • Key:映射到您将创建的Kubernetes密钥中的`AZBLOB_ACCOUNT_KEY`字段。

  5. 访问SUSE Storage用户界面。在顶部导航栏中,点击*备份和恢复/备份目标*,并创建或编辑备份目标。

    设置*URL*。目标URL应如下所示:

    azblob://[your-container-name]@core.windows.net/

    确保在末尾有 /,否则您将收到错误。可以使用子目录(前缀):

    azblob://[your-container-name]@core.windows.net/my-path/

    设置*凭证密钥*。

    longhorn-azblob-secret
  6. 创建一个名为`longhorn-azblob-secret`的Kubernetes密钥。

    此密钥用于在SUSE Storage名称空间(默认:longhorn-system)中访问备份存储,内容如下:

    #!/bin/bash
    cat <<EOF >>longhorn-azblob-secret.yml
    apiVersion: v1
    kind: Secret
    metadata:
      name: longhorn-azblob-secret
      namespace: longhorn-system
    type: Opaque
    stringData:
      AZBLOB_ACCOUNT_NAME: "<Storage account name>"
      AZBLOB_ACCOUNT_KEY:  "<Key>"
      ...
      # Parameters below are used for the compatible azure server for instance `Azurite` or
      # you have a proxy to redirect the requests.
      #AZBLOB_ENDPOINT: ""
      #AZBLOB_CERT: ""
      #HTTP_PROXY: ""
      #HTTPS_PROXY: ""
    EOF
    kubectl apply -f longhorn-azblob-secret.yml

配置上述设置后,您可以在Azure Blob存储上管理备份。有关详细信息,请参见如何创建备份