管理并分配存储资源


Red Hat OpenShift Data Foundation 4.17

有关如何将存储分配给 OpenShift Data Foundation 中的核心服务和托管应用程序的说明,包括快照和克隆。

Red Hat Storage Documentation Team

摘要

本文档介绍如何为 Red Hat OpenShift Data Foundation 中的核心服务和托管应用程序分配存储。

使开源包含更多

红帽承诺替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、list 和 whitelist。由于此努力的显著性,这些更改将在即将推出的几个版本中逐步实施。详情请查看 CTO Chris Wright 信息

向红帽文档提供反馈

我们感谢您对文档的输入。请告诉我们如何使其更好。

要提供反馈,请创建一个 Bugzilla ticket:

  1. 进入 Bugzilla 网站。
  2. Component 部分中,选择 文档
  3. Description 字段中填写您要改进的建议。包括文档相关部分的链接。
  4. 单击 Submit Bug

第 1 章 概述

阅读本文档,了解如何在 Red Hat OpenShift Data Foundation 中创建、配置和分配存储到核心服务或托管应用程序。

第 2 章 存储类

OpenShift Data Foundation Operator 根据使用的平台安装默认存储类。这个默认存储类由 Operator 拥有和控制,且无法删除或修改。但是,您可以创建自定义存储类来使用其他存储资源或为应用程序提供不同的行为。

注意

外部模式 OpenShift Data Foundation 集群不支持自定义存储类。

2.1. 创建存储类和池

您可以使用现有池创建存储类,或者在创建存储类时为存储类创建新池。

先决条件

  • 确保您已登录到 OpenShift Container Platform Web 控制台,并且 OpenShift Data Foundation 集群处于 Ready 状态。

流程

  1. StorageStorageClasses
  2. 单击 Create Storage Class
  3. 输入存储类 NameDescription
  4. reclaim Policy 设置为 Delete 作为默认选项。使用这个设置。

    如果您在存储类中将重新声明策略改为 Retain,则持久性卷(PV)会处于 Released 状态,即使在删除持久性卷声明(PVC)后也是如此。

  5. 卷绑定模式 设置为 WaitForConsumer 作为默认选项。

    如果您选择 Immediate 选项,则创建 PVC 时会立即创建 PV。

  6. 选择 RBDCephFS Provisioner 作为插件来调配持久卷。
  7. 为您的工作负载 选择存储系统。
  8. 从列表中选择现有 存储池,或创建新池。

    注意

    双向复制数据保护策略仅支持非默认 RBD 池。可以通过创建额外的池来使用双向复制。要了解副本 2 池的数据可用性和完整性注意事项,请参阅 知识库文章

    创建新池
    1. 单击 Create New Pool
    2. 输入 池名称
    3. 选择 2-way-Replication3-way-Replication 作为数据保护策略。
    4. 如果需要压缩数据,请选择 启用压缩。

      启用压缩可能会影响应用程序性能,并在已压缩或加密数据时可能会证明无效。在启用压缩前写入的数据不会被压缩。

    5. 单击 Create 以创建新存储池。
    6. 创建池后,单击 Finish
  9. 可选: 选择 启用加密 复选框。
  10. Create 创建存储类。

2.2. 用于持久性卷加密的存储类

持久性卷(PV)加密可确保租户(应用程序)之间的隔离和保密性。在使用 PV 加密前,您必须为 PV 加密创建一个存储类。持久卷加密仅适用于 RBD PV。

OpenShift Data Foundation 支持在 HashiCorp Vault 和 Thales CipherTrust Manager 中存储加密密码短语。您可以使用外部密钥管理系统(KMS)创建加密的存储类进行持久性卷加密。在创建存储类前,您需要配置对 KMS 的访问。

注意

对于 PV 加密,您必须具有有效的 Red Hat OpenShift Data Foundation 高级订阅。如需更多信息,请参阅有关 OpenShift Data Foundation 订阅的知识库文章

2.2.1. 密钥管理系统(KMS)的配置

根据您的用例,您需要使用以下方法之一配置对 KMS 的访问:

  • 使用 vaulttoken 允许用户使用令牌进行身份验证
  • 使用 Thales CipherTrust Manager :使用密钥管理互操作性协议(KMIP)
  • 使用 vaulttenantsa (技术预览):允许用户使用 serviceaccounts 通过 Vault进行身份验证
重要

使用 vaulttenantsa 访问 KMS 是一项技术预览功能。技术预览功能不被红帽产品服务等级协议(SLA)支持,且可能无法完成。红帽不推荐在生产环境中使用它们。这些功能可让您试用即将推出的产品功能,使客户能够在开发过程中测试并提供反馈。

如需更多信息,请参阅技术预览功能支持范围

2.2.1.1. 使用 vaulttoken配置对 KMS 的访问

先决条件

  • OpenShift Data Foundation 集群处于 Ready 状态。
  • 在外部密钥管理系统(KMS)上,

    • 确保存在具有令牌的策略,并且启用了 Vault 中的键值后端路径。
    • 确保您在 Vault 服务器上使用签名证书。

流程

在租户命名空间中创建一个 secret。

  1. 在 OpenShift Container Platform Web 控制台中导航至 Workloads → Secrets
  2. Create → Key/value secret
  3. 输入 Secret Name 作为 ceph-csi-kms-token
  4. 输入 Key 作为 令牌
  5. 输入 Value

    它是来自 Vault 的令牌。您可以点 Browse 来选择并上传包含令牌的文件,或者直接在文本框中输入令牌。

  6. Create
注意

只有在所有使用 ceph-csi-kms-token 的加密 PVC 已被删除后,才能删除令牌。

2.2.1.2. 使用 Thales CipherTrust Manager配置对 KMS 的访问

先决条件

  1. 如果 KMIP 客户端不存在,请创建一个。在用户界面中,选择 KMIPClient ProfileAdd Profile

    1. 在创建配置集的过程中,将 CipherTrust 用户名添加到 Common Name 字段中。
  2. 通过进入到 KMIPRegistration TokenNew Registration Token 来创建令牌。为下一步复制令牌。
  3. 要注册客户端,请进入到 KMIPRegistered ClientsAdd Client。指定名称 。粘贴 上一步中的注册令牌然后单击保存
  4. Save Private Key 和 Save Certificate 下载 私钥和客户端证书
  5. 要创建新的 KMIP 接口,请导航到 Admin SettingsInterfacesAdd Interface

    1. 选择 KMIP Key Management Interoperability Protocol 并点 Next
    2. 选择空闲端口
    3. 选择 Network Interface 作为 all
    4. 选择 Interface Mode as TLS, verify client cert, user name taken from client cert, auth request is optional
    5. (可选)您可以在密钥被删除时启用硬删除以删除元数据和材料。它默认是禁用的。
    6. 选择要使用的 CA,然后单击 Save
  6. 要获取服务器 CA 证书,请点击新创建的界面右侧的 Action 菜单 (&&),然后点 Download Certificate

流程

  1. 要创建密钥来作为 storageclass 加密的密钥加密(KEK),请按照以下步骤执行:

    1. 导航到 KeysAdd Key
    2. 输入 Key Name
    3. 分别将 AlgorithmSize 设置为 AES256
    4. 启用 Create a key in Pre-Active state,并设置激活的日期和时间。
    5. 确保在 Key Usage 下启用了 EncryptDecrypt
    6. 复制新创建的密钥的 ID,以在部署过程中用作唯一标识符。
2.2.1.3. 使用 vaulttenantsa配置对 KMS 的访问

先决条件

  • OpenShift Data Foundation 集群处于 Ready 状态。
  • 在外部密钥管理系统(KMS)上,

    • 确保策略存在,并且启用了 Vault 中的键值后端路径。
    • 确保您在 Vault 服务器上使用签名证书。
  • 在租户命名空间中创建以下 serviceaccount,如下所示:

    Copy to Clipboard Toggle word wrap
    $ cat <<EOF | oc create -f -
    apiVersion: v1
    kind: ServiceAccount
    metadata:
        name: ceph-csi-vault-sa
    EOF

流程

在 OpenShift Data Foundation 使用 Vault 进行身份验证之前,您需要配置 Kubernetes 身份验证方法。以下说明创建并配置所需的 serviceAccountClusterRole 和 ClusterRoleBinding ,以允许 OpenShift Data Foundation 使用 Vault 进行身份验证。

  1. 将以下 YAML 应用到您的 Openshift 集群:

    Copy to Clipboard Toggle word wrap
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: rbd-csi-vault-token-review
    ---
    kind: ClusterRole
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: rbd-csi-vault-token-review
    rules:
      - apiGroups: ["authentication.k8s.io"]
        resources: ["tokenreviews"]
        verbs: ["create", "get", "list"]
    
    ---
    kind: ClusterRoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: rbd-csi-vault-token-review
    subjects:
      - kind: ServiceAccount
        name: rbd-csi-vault-token-review
        namespace: openshift-storage
    roleRef:
      kind: ClusterRole
      name: rbd-csi-vault-token-review
      apiGroup: rbac.authorization.k8s.io
  2. 为 serviceaccount 令牌和 CA 证书创建 secret。

    Copy to Clipboard Toggle word wrap
    $ cat <<EOF | oc create -f -
    apiVersion: v1
    kind: Secret
    metadata:
      name: rbd-csi-vault-token-review-token
      namespace: openshift-storage
      annotations:
        kubernetes.io/service-account.name: "rbd-csi-vault-token-review"
    type: kubernetes.io/service-account-token
    data: {}
    EOF
  3. 从 secret 获取令牌和 CA 证书。

    Copy to Clipboard Toggle word wrap
    $ SA_JWT_TOKEN=$(oc -n openshift-storage get secret rbd-csi-vault-token-review-token -o jsonpath="{.data['token']}" | base64 --decode; echo)
    $ SA_CA_CRT=$(oc -n openshift-storage get secret rbd-csi-vault-token-review-token -o jsonpath="{.data['ca\.crt']}" | base64 --decode; echo)
  4. 检索 OpenShift 集群端点。

    Copy to Clipboard Toggle word wrap
    $ OCP_HOST=$(oc config view --minify --flatten -o jsonpath="{.clusters[0].cluster.server}")
  5. 使用前面步骤中收集的信息在 Vault 中设置 kubernetes 验证方法,如下所示:

    Copy to Clipboard Toggle word wrap
    $ vault auth enable kubernetes
    $ vault write auth/kubernetes/config \
              token_reviewer_jwt="$SA_JWT_TOKEN" \
              kubernetes_host="$OCP_HOST" \
              kubernetes_ca_cert="$SA_CA_CRT"
  6. 在 Vault 中为租户命名空间创建一个角色:

    Copy to Clipboard Toggle word wrap
    $ vault write "auth/kubernetes/role/csi-kubernetes" bound_service_account_names="ceph-csi-vault-sa" bound_service_account_namespaces=<tenant_namespace> policies=<policy_name_in_vault>

    csi-kubernetes 是 OpenShift Data Foundation 在 Vault 中查找的默认角色名称。OpenShift Data Foundation 集群中租户命名空间中的默认服务帐户名称为 ceph-csi-vault-sa。这些默认值可以通过在租户命名空间中创建 ConfigMap 来覆盖。

    有关覆盖默认名称的更多信息,请参阅使用租户 ConfigMap 覆盖 Vault 连接详情

YAML 示例

  • 要创建使用 vaulttenantsa 方法进行 PV 加密的存储类,您必须编辑现有的 ConfigMap 或创建名为 csi-kms-connection-details 的 ConfigMap,它将保存建立与 Vault 连接所需的所有信息。

    以下提供的 yaml 示例可用于更新或创建 csi-kms-connection-detail ConfigMap:

    Copy to Clipboard Toggle word wrap
    apiVersion: v1
    data:
      vault-tenant-sa: |-
        {
          "encryptionKMSType": "vaulttenantsa",
          "vaultAddress": "<https://hostname_or_ip_of_vault_server:port>",
          "vaultTLSServerName": "<vault TLS server name>",
          "vaultAuthPath": "/v1/auth/kubernetes/login",
          "vaultAuthNamespace": "<vault auth namespace name>"
          "vaultNamespace": "<vault namespace name>",
          "vaultBackendPath": "<vault backend path name>",
          "vaultCAFromSecret": "<secret containing CA cert>",
          "vaultClientCertFromSecret": "<secret containing client cert>",
          "vaultClientCertKeyFromSecret": "<secret containing client private key>",
          "tenantSAName": "<service account name in the tenant namespace>"
        }
    metadata:
      name: csi-kms-connection-details

    encryptionKMSType

    设置为 vaulttenantsa,以使用服务帐户与 vault 进行身份验证。

    vaultAddress

    使用端口号的 vault 服务器的主机名或 IP 地址。

    vaultTLSServerName

    (可选) vault TLS 服务器名称

    vaultAuthPath

    (可选)在 Vault 中启用 kubernetes auth 方法的路径。默认路径为 kubernetes。如果在 kubernetes 以外的其他路径中启用了 auth 方法,则需要将此变量设置为 "/v1/auth/<path>/login "。

    vaultAuthNamespace

    (可选)启用 kubernetes auth 方法的 Vault 命名空间。

    vaultNamespace

    (可选)用于存储密钥的后端路径存在的 Vault 命名空间

    vaultBackendPath

    存储加密密钥的 Vault 中的后端路径

    vaultCAFromSecret

    包含来自 Vault 的 CA 证书的 OpenShift Data Foundation 集群中的 secret

    vaultClientCertFromSecret

    包含来自 Vault 的客户端证书的 OpenShift Data Foundation 集群中的 secret

    vaultClientCertKeyFromSecret

    包含来自 Vault 的客户端私钥的 OpenShift Data Foundation 集群中的 secret

    tenantSAName

    (可选)租户命名空间中的服务帐户名称。默认值为 ceph-csi-vault-sa。如果使用其他名称,则必须相应地设置此变量。

2.2.2. 为持久性卷加密创建存储类

先决条件

根据您的用例,您必须确保为以下之一配置对 KMS 的访问:

流程

  1. 在 OpenShift Web 控制台中,导航到 StorageStorageClasses
  2. 单击 Create Storage Class
  3. 输入存储类 NameDescription
  4. Reclaim Policy 选择 DeleteRetain。默认情况下会选择 Delete
  5. 选择 ImmediateWaitForFirstConsumer 作为 卷绑定模式WaitForConsumer 设置为默认选项。
  6. 选择 RBD Provisioner openshift-storage.rbd.csi.ceph.com,这是用于调配持久卷的插件。
  7. 选择 存储池,其中卷数据从列表中存储或创建新池。
  8. 选中 启用加密 复选框。

    • 选择以下选项之一来设置 KMS 连接详情:

      • 选择现有 KMS 连接 :从下拉列表中选择现有 KMS 连接。该列表填充自 csi-kms-connection-details ConfigMap 中的连接详情。

        1. 从下拉菜单中选择 Provider
        2. 从列表中选择给定供应商的 Key 服务
      • 创建新的 KMS 连接 :这仅适用于 vaulttokenThales CipherTrust Manager (using KMIP)

        1. 选择以下 Key Management Service Provider 之一并提供所需详情。

          • Vault

            1. 输入唯一的连接名称,即 Vault 服务器的主机地址 ('https://<hostname 或 ip>')、端口号和 Token
            2. 展开 Advanced Settings,以根据您的 Vault 配置输入额外的设置和证书详情:

              1. 在 后端路径中输入为 OpenShift Data Foundation 专用 且唯一的 Key Value secret 路径。
              2. 可选:输入 TLS Server NameVault Enterprise Namespace
              3. 上传对应的 PEM 编码证书文件,以提供 CA 证书客户端证书和客户端 私钥
              4. Save
          • Thales CipherTrust Manager (using KMIP)

            1. 输入唯一 连接名称
            2. AddressPort 部分中,输入 Thales CipherTrust Manager 的 IP 以及启用了 KMIP 接口的端口。例如: Address: 123.34.3.2, Port: 5696。
            3. 上传 客户端证书CA 证书客户端私钥
            4. 输入上面生成的用于加密和解密的密钥的唯一标识符。
            5. TLS Server 字段是可选的,并在没有 KMIP 端点的 DNS 条目时使用。例如: kmip_all_<port>.ciphertrustmanager.local
          • Azure Key Vault (仅适用于 Azure 平台上的 Azure 用户)

            有关设置客户端身份验证和获取客户端凭证的详情,请参考 使用 Microsoft Azure 部署 OpenShift Data Foundation 指南中的创建 OpenShift Data Foundation 集群 的先决条件部分。

            1. 在项目中输入密钥管理服务的唯一 连接名称
            2. 输入 Azure Vault URL
            3. 输入 客户端 ID
            4. 输入 租户 ID
            5. .PEM 格式上传证书文件,并且证书文件必须包含客户端证书和私钥。
        2. Save
        3. Create
  9. 如果 HashiCorp Vault 设置不允许自动检测后端路径使用的 Key/Value (KV) secret 引擎 API 版本,请编辑 ConfigMap 以添加 vaultBackend 参数。

    注意

    vaultBackend 是一个可选参数,添加到 configmap 中,以指定与后端路径关联的 KV secret 引擎 API 版本。确保值与为后端路径设置的 KV secret 引擎 API 版本匹配,否则可能会导致持久性卷声明(PVC)创建过程中失败。

    1. 识别新创建的存储类使用的 encryptionKMSID。

      1. 在 OpenShift Web 控制台中,导航到 StorageStorage Classes
      2. Storage class name → YAML 标签页。
      3. 捕获 存储类 使用的 encryptionKMSID。

        示例:

        Copy to Clipboard Toggle word wrap
        encryptionKMSID: 1-vault
    2. 在 OpenShift Web 控制台中,导航到 WorkloadsConfigMaps
    3. 要查看 KMS 连接详情,请单击 csi-kms-connection-details
    4. 编辑 ConfigMap。

      1. 点 Action 菜单 (radosgw)Edit ConfigMap
      2. 根据 之前 标识的 encryptionKMSID 配置的后端,添加 vaultBackend 参数。

        您可以为 KV secret engine API 版本 1 和 kv -v2 分配 kv 用于 KV secret engine API 版本 2。

        示例:

        Copy to Clipboard Toggle word wrap
         kind: ConfigMap
         apiVersion: v1
         metadata:
           name: csi-kms-connection-details
         [...]
         data:
           1-vault: |-
             {
               "encryptionKMSType": "vaulttokens",
               "kmsServiceName": "1-vault",
               [...]
               "vaultBackend": "kv-v2"
             }
           2-vault: |-
             {
               "encryptionKMSType": "vaulttenantsa",
               [...]
               "vaultBackend": "kv"
             }
      3. 点 Save

后续步骤

  • 存储类可用于创建加密的持久性卷。如需更多信息,请参阅管理持久性卷声明

    重要

    红帽与技术合作伙伴合作,为客户提供本文档作为服务。但是,红帽不为 HashiCorp 产品提供支持。有关此产品的技术协助,请联系 HashiCorp

2.2.2.1. 使用租户 ConfigMap 覆盖 Vault 连接详情

Vault 连接详情可以通过在 Openshift 命名空间中创建 ConfigMap 来重新配置每个租户,其配置选项与 openshift-storage 命名空间中的 csi-kms-connection-details ConfigMap 中设置的值不同。ConfigMap 需要位于租户命名空间中。租户命名空间中的 ConfigMap 中的值将覆盖该命名空间中创建的加密持久性卷的 csi-kms-connection-details ConfigMap 中设置的值。

流程

  1. 确保您位于租户命名空间中。
  2. Workloads → ConfigMaps
  3. Create ConfigMap
  4. 以下是 yaml 示例。为给定租户命名空间覆盖的值可以在 data 部分下指定,如下所示:

    Copy to Clipboard Toggle word wrap
    ---
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: ceph-csi-kms-config
    data:
      vaultAddress: "<vault_address:port>"
      vaultBackendPath: "<backend_path>"
      vaultTLSServerName: "<vault_tls_server_name>"
      vaultNamespace: "<vault_namespace>"
  5. 编辑 yaml 后,点 Create

2.3. 带有单一副本的存储类

您可以使用单个副本创建存储类,供您的应用程序使用。这可避免冗余数据副本,并允许在应用程序级别进行弹性管理。

警告

启用此功能会创建一个没有数据复制的单一副本池,如果应用程序没有自己的复制,这会增加数据丢失、数据崩溃和潜在系统不稳定的风险。如果有任何 OSD 丢失,此功能需要非常破坏性的步骤来恢复。所有应用可能会丢失其数据,在故障 OSD 时必须重新创建。

流程

  1. 使用以下命令启用单个副本功能:

    Copy to Clipboard Toggle word wrap
    $ oc patch storagecluster ocs-storagecluster -n openshift-storage --type json --patch '[{ "op": "replace", "path": "/spec/managedResources/cephNonResilientPools/enable", "value": true }]'
  2. 验证 storagecluster 是否处于 Ready 状态:

    Copy to Clipboard Toggle word wrap
    $ oc get storagecluster

    输出示例:

    Copy to Clipboard Toggle word wrap
    NAME                 AGE   PHASE   EXTERNAL   CREATED AT             VERSION
    ocs-storagecluster   10m   Ready              2024-02-05T13:56:15Z   4.17.0
  3. 为每个故障域创建新的 cephblockpools。验证 cephblockpools 是否处于 Ready 状态:

    Copy to Clipboard Toggle word wrap
    $ oc get cephblockpools

    输出示例:

    Copy to Clipboard Toggle word wrap
    NAME                                          PHASE
    ocs-storagecluster-cephblockpool              Ready
    ocs-storagecluster-cephblockpool-us-east-1a   Ready
    ocs-storagecluster-cephblockpool-us-east-1b   Ready
    ocs-storagecluster-cephblockpool-us-east-1c   Ready
  4. 验证新存储类是否已创建:

    Copy to Clipboard Toggle word wrap
    $ oc get storageclass

    输出示例:

    Copy to Clipboard Toggle word wrap
    NAME                                        PROVISIONER                             RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
    gp2 (default)                               kubernetes.io/aws-ebs                   Delete          WaitForFirstConsumer   true                   104m
    gp2-csi                                     ebs.csi.aws.com                         Delete          WaitForFirstConsumer   true                   104m
    gp3-csi                                     ebs.csi.aws.com                         Delete          WaitForFirstConsumer   true                   104m
    ocs-storagecluster-ceph-non-resilient-rbd   openshift-storage.rbd.csi.ceph.com      Delete          WaitForFirstConsumer   true                   46m
    ocs-storagecluster-ceph-rbd                 openshift-storage.rbd.csi.ceph.com      Delete          Immediate              true                   52m
    ocs-storagecluster-cephfs                   openshift-storage.cephfs.csi.ceph.com   Delete          Immediate              true                   52m
    openshift-storage.noobaa.io                 openshift-storage.noobaa.io/obc         Delete          Immediate              false                  50m
  5. 创建新 OSD pod;3 osd-prepare pod 和 3 个额外的 pod。验证新 OSD pod 是否处于 Running 状态:

    Copy to Clipboard Toggle word wrap
    $ oc get pods | grep osd

    输出示例:

    Copy to Clipboard Toggle word wrap
    rook-ceph-osd-0-6dc76777bc-snhnm                                  2/2     Running     0               9m50s
    rook-ceph-osd-1-768bdfdc4-h5n7k                                   2/2     Running     0               9m48s
    rook-ceph-osd-2-69878645c4-bkdlq                                  2/2     Running     0               9m37s
    rook-ceph-osd-3-64c44d7d76-zfxq9                                  2/2     Running     0               5m23s
    rook-ceph-osd-4-654445b78f-nsgjb                                  2/2     Running     0               5m23s
    rook-ceph-osd-5-5775949f57-vz6jp                                  2/2     Running     0               5m22s
    rook-ceph-osd-prepare-ocs-deviceset-gp2-0-data-0x6t87-59swf       0/1     Completed   0               10m
    rook-ceph-osd-prepare-ocs-deviceset-gp2-1-data-0klwr7-bk45t       0/1     Completed   0               10m
    rook-ceph-osd-prepare-ocs-deviceset-gp2-2-data-0mk2cz-jx7zv       0/1     Completed   0               10m

2.3.1. 在 OSD 丢失了单个副本后恢复

使用副本 1 时,当 OSD 丢失时,会保证数据丢失的存储类。丢失的 OSD 会进入故障状态。使用以下步骤在 OSD 丢失后恢复。

流程

按照以下步骤,在数据丢失副本 1 后让应用程序再次运行。您首先需要识别故障 OSD 所在的域。

  1. 如果您知道失败的 OSD 所在的故障域,请运行以下命令获取后续步骤所需的 replica1-pool-name。如果您不知道失败的 OSD 所处的位置,请跳至第 2 步。

    Copy to Clipboard Toggle word wrap
    $ oc get cephblockpools

    输出示例:

    Copy to Clipboard Toggle word wrap
    NAME                                          PHASE
    ocs-storagecluster-cephblockpool              Ready
    ocs-storagecluster-cephblockpool-us-south-1   Ready
    ocs-storagecluster-cephblockpool-us-south-2   Ready
    ocs-storagecluster-cephblockpool-us-south-3   Ready

    复制对应的故障域名称,以便在后续步骤中使用,然后跳至第 4 步。

  2. 查找处于 Error 状态或 CrashLoopBackoff 状态的 OSD pod 以查找失败的 OSD:

    Copy to Clipboard Toggle word wrap
    $ oc get pods -n openshift-storage -l app=rook-ceph-osd  | grep 'CrashLoopBackOff\|Error'
  3. 识别具有故障 OSD 的 replica-1 池。

    1. 识别运行故障 OSD 的节点:

      Copy to Clipboard Toggle word wrap
      failed_osd_id=0 #replace with the ID of the failed OSD
    2. 识别运行故障 OSD 的 failureDomainLabel:

      Copy to Clipboard Toggle word wrap
      failure_domain_label=$(oc get storageclass ocs-storagecluster-ceph-non-resilient-rbd -o yaml | grep domainLabel |head -1 |awk -F':' '{print $2}')
      Copy to Clipboard Toggle word wrap
      failure_domain_value=$”(oc get pods $failed_osd_id -oyaml |grep topology-location-zone |awk ‘{print $2}’)”

      输出显示了其 OSD 失败的 replica-1 池名称,例如:

      Copy to Clipboard Toggle word wrap
      replica1-pool-name= "ocs-storagecluster-cephblockpool-$failure_domain_value”

      其中 $failure_domain_value 是 failureDomainName。

  4. 删除 replica-1 池。

    1. 连接到 toolbox pod:

      Copy to Clipboard Toggle word wrap
      toolbox=$(oc get pod -l app=rook-ceph-tools -n openshift-storage -o jsonpath='{.items[*].metadata.name}')
      
      oc rsh $toolbox -n openshift-storage
    2. 删除 replica-1 池。请注意,您必须在命令中输入 replica-1 池名称两次,例如:

      Copy to Clipboard Toggle word wrap
      ceph osd pool rm <replica1-pool-name> <replica1-pool-name> --yes-i-really-really-mean-it

      使用之前标识的故障域名称替换 replica1-pool-name

  5. 按照您的平台 替换 设备指南中的"替换操作或失败存储设备"一节中的步骤清除失败的 OSD。
  6. 重启 rook-ceph operator:

    Copy to Clipboard Toggle word wrap
    $ oc delete pod -l rook-ceph-operator -n openshift-storage
  7. 在 avaialbity 区域中重新创建任何受影响的应用程序,以使用名称的新池开始。

第 3 章 块池

OpenShift Data Foundation Operator 根据使用的平台安装一组默认的存储池。这些默认存储池由 Operator 拥有和控制,且无法删除或修改。

注意

外部模式 OpenShift Data Foundation 集群不支持多个块池。

3.1. 在内部模式中管理块池

在 OpenShift Container Platform 中,您可以创建多个自定义存储池,它们映射到提供以下功能的存储类:

  • 使具有其自身高可用性的应用程序能够使用具有两个副本的持久卷,从而可能提高应用性能。
  • 使用启用了压缩的存储类为持久性卷声明节省空间。

3.1.1. 创建块池

先决条件

  • 您必须以管理员身份登录到 OpenShift Container Platform Web 控制台。

流程

  1. Storage → Data Foundation
  2. Storage systems 选项卡中,选择 storage 系统,然后点 Storage pool 选项卡。
  3. 单击 Create storage pool
  4. 选择 卷类型Block
  5. 输入 池名称

    注意

    默认池不支持使用双向复制数据保护策略。但是,如果您要创建额外的池,您可以使用双向复制。

  6. 选择 数据保护策略,可以是 双向复制三向复制
  7. 可选:如果您需要压缩数据,请选择 启用压缩 复选框。

    启用压缩可能会影响应用程序性能,并在已压缩或加密数据时可能会证明无效。在启用压缩前写入的数据不会被压缩。

  8. Create

3.1.2. 更新现有池

先决条件

  • 您必须以管理员身份登录到 OpenShift Container Platform Web 控制台。

流程

  1. Storage → Data Foundation
  2. Storage systems 选项卡中,选择存储系统,然后单击 Storage pool
  3. 点击您要更新的池末尾的 Action Menu (swig)。
  4. 单击 Edit storage pool
  5. 修改表单详情,如下所示:

    注意

    默认池不支持使用双向复制数据保护策略。但是,如果您要创建额外的池,您可以使用双向复制。

    1. 将数据保护策略 更改为双向复制或三向复制。
    2. 启用或禁用压缩选项。

      启用压缩可能会影响应用程序性能,并在已压缩或加密数据时可能会证明无效。在启用压缩前写入的数据不会被压缩。

  6. Save

3.1.3. 删除池

使用此流程删除 OpenShift Data Foundation 中的池。

先决条件

  • 您必须以管理员身份登录到 OpenShift Container Platform Web 控制台。

流程

  1. .点 Storage → Data Foundation
  2. Storage systems 选项卡中,选择 storage 系统,然后点 Storage pool 选项卡。
  3. 点击您要删除的池末尾的 Action Menu (swig)。
  4. 单击 Delete Storage Pool
  5. 单击 Delete 以确认删除池。
注意

当池绑定到 PVC 时,无法删除池。您必须分离所有资源,然后才能执行此活动。

注意

删除池时,底层 Ceph 池不会被删除。

第 4 章 为 OpenShift Container Platform 服务配置存储

您可以使用 OpenShift Data Foundation 为 OpenShift Container Platform 服务提供存储,如下所示:

  • OpenShift 镜像 registry
  • OpenShift 监控
  • OpenShift 日志记录(Loki)

为这些服务配置存储的过程取决于 OpenShift Data Foundation 部署中使用的基础架构。

警告

始终确保您拥有大量您配置的 OpenShift 服务存储容量:

  • OpenShift 镜像 registry
  • OpenShift 监控
  • OpenShift 日志记录(Loki)
  • OpenShift tracing 平台(Tempo)

如果这些关键服务的存储空间不足,OpenShift 集群将变得不可操作,且很难恢复。

红帽建议为这些服务配置较短的策展和保留间隔。详情请参阅 OpenShift Container Platform 文档中的 为 Prometheus 指标数据配置 Curator 调度和 修改保留时间

如果您确实耗尽这些服务的存储空间,请联系红帽客户支持。

4.1. 将镜像 registry 配置为使用 OpenShift Data Foundation

OpenShift Container Platform 提供了一个内建的容器镜像 Registry,它作为一个标准的工作负载在集群中运行。registry 通常用作集群中构建的镜像的发布目标,以及在集群中运行的工作负载的镜像源。

按照本节中的说明,将 OpenShift Data Foundation 配置为 Container Image Registry 的存储。在 AWS 中,不需要更改 registry 的存储。但是,建议将存储改为 vSphere 和裸机平台的 OpenShift Data Foundation 持久性卷。

警告

此过程不会将数据从现有镜像 registry 迁移到新镜像 registry。如果您在现有 registry 中已有容器镜像,请在完成此过程前备份 registry,并在此过程完成后重新注册您的镜像。

先决条件

  • 对 OpenShift Web 控制台的管理访问权限.
  • OpenShift Data Foundation Operator 在 openshift-storage 命名空间中安装并运行。在 OpenShift Web 控制台中,点 OperatorsInstalled Operators 查看已安装的 Operator。
  • Image Registry Operator 在 openshift-image-registry 命名空间中安装并运行。在 OpenShift Web 控制台中,点 AdministrationCluster SettingsCluster Operators 查看集群操作器。
  • 带有 provisioner openshift-storage.cephfs.csi.ceph.com 的存储类可用。在 OpenShift Web 控制台中,点 Storage → StorageClasses 查看可用的存储类。

流程

  1. 为镜像 Registry 创建一个持久性卷声明。

    1. 在 OpenShift Web 控制台中,点击 StoragePersistent Volume Claims
    2. Project 设置为 openshift-image-registry
    3. 单击 Create Persistent Volume Claim

      1. 从上面检索的可用存储类列表中,使用 provisioner openshift-storage.cephfs.csi.ceph.com 指定存储类。
      2. 指定持久性卷声明 名称,如 ocs4registry
      3. 指定 Shared Access (RWX) 的访问模式。
      4. 大小 至少为 100 GB。
      5. Create

        等待新持久卷声明的状态变为 Bound

  2. 将集群的 Image Registry 配置为使用新的持久性卷声明。

    1. AdministrationCustom Resource Definitions
    2. 点与 imageregistry.operator.openshift.io 组关联的 Config 自定义资源定义。
    3. 单击 实例选项卡
    4. 在集群实例旁边,点 Action Menu (&&)Edit Config
    5. 添加新的持久性卷声明作为镜像 Registry 的持久性存储。

      1. spec: 下添加以下内容,根据需要替换现有的 storage: 部分。

        Copy to Clipboard Toggle word wrap
          storage:
            pvc:
              claim: <new-pvc-name>

        例如:

        Copy to Clipboard Toggle word wrap
          storage:
            pvc:
              claim: ocs4registry
      2. Save
  3. 验证新配置是否正在使用。

    1. WorkloadsPods
    2. Project 设置为 openshift-image-registry
    3. 验证新的 image-registry github pod 的状态是否为 Running,并且前面的 image-registry channel pod 终止。
    4. 点新 image-registry github pod 查看 pod 详情。
    5. 向下滚动到 Volumes,再验证 registry-storage 卷是否具有与您的新持久性卷声明匹配的 Type,如 ocs4registry

4.2. 使用 Multicloud Object Gateway 作为 OpenShift Image Registry 后端存储

您可以在 OpenShift 部署中使用 Multicloud Object Gateway (MCG)作为 OpenShift Container Platform (OCP) Image Registry 后端存储。

要将 MCG 配置为 OCP 镜像 registry 的后端存储,请按照流程中所述的步骤操作。

先决条件

  • OCP Web 控制台的管理访问权限.
  • 正在运行的 OpenShift Data Foundation 集群使用 MCG。

流程

  1. 按照创建对象 Bucket Claim 中的步骤创建 Object BucketClaim
  2. 创建 image-registry-private-configuration-user secret。

    1. 进入 OpenShift web-console。
    2. Click ObjectBucketClaim -→ ObjectBucketClaim Data.
    3. ObjectBucketClaim 数据 中,在 openshift-image-registry 命名空间中查找 MCG 访问密钥和 MCG secret 密钥
    4. 使用以下命令创建 secret:

      Copy to Clipboard Toggle word wrap
      $ oc create secret generic image-registry-private-configuration-user --from-literal=REGISTRY_STORAGE_S3_ACCESSKEY=<MCG Accesskey> --from-literal=REGISTRY_STORAGE_S3_SECRETKEY=<MCG Secretkey> --namespace openshift-image-registry
  3. 将 Image Registry Operator 的 managementState 状态更改为 Managed

    Copy to Clipboard Toggle word wrap
    $ oc patch configs.imageregistry.operator.openshift.io/cluster --type merge -p '{"spec": {"managementState": "Managed"}}'
  4. 编辑 Image Registry Operator 配置文件的 spec.storage 部分:

    1. 从 Web 控制台获取 Object Bucket Claim Data 部分下的 unique-bucket-nameregionEndpoint,您也可以从命令获取 regionEndpoint 和 unique-bucket-name 的信息:

      Copy to Clipboard Toggle word wrap
       $ oc describe  noobaa
    2. 如果这个情况,添加 regionEndpoint 作为 http://<Endpoint-name>:<port >

      • StorageClass 是 ceph-rgw storageclass 和
      • 端点指向 openshift-storage 命名空间中的内部 SVC。
    3. 在更改 Operator registry 配置文件后,image-registry pod 会生成。

      Copy to Clipboard Toggle word wrap
      $ oc edit configs.imageregistry.operator.openshift.io -n openshift-image-registry
      apiVersion: imageregistry.operator.openshift.io/v1
      kind: Config
      metadata:
      [..]
      name: cluster
      spec:
      [..]
      storage:
      s3:
      
        bucket: <Unique-bucket-name>
      
        region: us-east-1 (Use this region as default)
      
        regionEndpoint: https://<Endpoint-name>:<port>
      
        virtualHostedStyle: false
  5. 将镜像 registry 设置重置为默认值。

    Copy to Clipboard Toggle word wrap
    $ oc get pods -n openshift-image-registry

验证步骤

  • 运行以下命令,以检查 MCG 是否已成功配置为 OpenShift Image Registry 后端存储。

    Copy to Clipboard Toggle word wrap
    $ oc get pods -n openshift-image-registry

    输出示例

    Copy to Clipboard Toggle word wrap
    $ oc get pods -n openshift-image-registry
    
    NAME        	                                   READY   STATUS     RESTARTS    AGE
    
    cluster-image-registry-operator-56d78bc5fb-bxcgv   2/2 	   Running 	    0         44d
    image-pruner-1605830400-29r7k                  	   0/1 	   Completed    0         10h
    image-registry-b6c8f4596-ln88h                 	   1/1 	   Running 	    0         17d
    node-ca-2nxvz                                  	   1/1 	   Running    	0         44d
    node-ca-dtwjd                                  	   1/1 	   Running 	    0         44d
    node-ca-h92rj                                  	   1/1 	   Running 	    0         44d
    node-ca-k9bkd                                  	   1/1 	   Running 	    0         44d
    node-ca-stkzc                                  	   1/1 	   Running 	    0         44d
    node-ca-xn8h4                                  	   1/1 	   Running 	    0         44d

  • (可选)您也可以运行以下命令,验证是否将 MCG 配置为 OpenShift Image Registry 后端存储。

    Copy to Clipboard Toggle word wrap
    $ oc describe pod <image-registry-name>

    输出示例

    Copy to Clipboard Toggle word wrap
    $ oc describe pod image-registry-b6c8f4596-ln88h
    
    Environment:
    
          REGISTRY_STORAGE_S3_REGIONENDPOINT:      http://s3.openshift-storage.svc
    
          REGISTRY_STORAGE:                        s3
    
          REGISTRY_STORAGE_S3_BUCKET:              bucket-registry-mcg
    
          REGISTRY_STORAGE_S3_REGION:              us-east-1
    
          REGISTRY_STORAGE_S3_ENCRYPT:             true
    
          REGISTRY_STORAGE_S3_VIRTUALHOSTEDSTYLE:  false
    
          REGISTRY_STORAGE_S3_USEDUALSTACK:        true
    
          REGISTRY_STORAGE_S3_ACCESSKEY:           <set to the key 'REGISTRY_STORAGE_S3_ACCESSKEY' in secret 'image-registry-private-configuration'> Optional: false
    
          REGISTRY_STORAGE_S3_SECRETKEY:           <set to the key 'REGISTRY_STORAGE_S3_SECRETKEY' in secret 'image-registry-private-configuration'> Optional: false
    
          REGISTRY_HTTP_ADDR:                      :5000
    
          REGISTRY_HTTP_NET:                       tcp
    
          REGISTRY_HTTP_SECRET:                    57b943f691c878e342bac34e657b702bd6ca5488d51f839fecafa918a79a5fc6ed70184cab047601403c1f383e54d458744062dcaaa483816d82408bb56e686f
    
          REGISTRY_LOG_LEVEL:                      info
    
          REGISTRY_OPENSHIFT_QUOTA_ENABLED:        true
    
          REGISTRY_STORAGE_CACHE_BLOBDESCRIPTOR:   inmemory
    
          REGISTRY_STORAGE_DELETE_ENABLED:         true
    
          REGISTRY_OPENSHIFT_METRICS_ENABLED:      true
    
          REGISTRY_OPENSHIFT_SERVER_ADDR:          image-registry.openshift-image-registry.svc:5000
    
          REGISTRY_HTTP_TLS_CERTIFICATE:           /etc/secrets/tls.crt
    
          REGISTRY_HTTP_TLS_KEY:                   /etc/secrets/tls.key

4.3. 配置监控以使用 OpenShift Data Foundation

OpenShift Data Foundation 提供了一个监控堆栈,它由 Prometheus 和 Alert Manager 组成。

按照本节中的说明,将 OpenShift Data Foundation 配置为监控堆栈的存储。

重要

如果存储空间不足,则监控将无法正常工作。始终确保您拥有大量用于监控的存储容量。

红帽建议为此服务配置简短的保留间隔。详情请参阅 OpenShift Container Platform 文档中的 Prometheus 指标指南的修改保留时间

先决条件

  • 对 OpenShift Web 控制台的管理访问权限.
  • OpenShift Data Foundation Operator 在 openshift-storage 命名空间中安装并运行。在 OpenShift Web 控制台中,点 OperatorsInstalled Operators 查看已安装的 Operator。
  • 监控 Operator 在 openshift-monitoring 命名空间中安装并运行。在 OpenShift Web 控制台中,点 AdministrationCluster SettingsCluster Operators 查看集群操作器。
  • 带有 provisioner openshift-storage.rbd.csi.ceph.com 的存储类可用。在 OpenShift Web 控制台中,点 Storage → StorageClasses 查看可用的存储类。

流程

  1. 在 OpenShift Web 控制台中,前往 WorkloadsConfig Maps
  2. Project 下拉菜单设置为 openshift-monitoring
  3. 单击 Create Config Map
  4. 使用以下示例定义新的 cluster-monitoring-config Config Map。

    将尖括号(< , &gt;)中的内容替换为您自己的值,例如 retention: 24hstorage: 40Gi

    storageClassName 替换为使用 provisioner openshift-storage.rbd.csi.ceph.com 的存储类。在以下示例中,storageclass 的名称为 ocs-storagecluster-ceph-rbd

    cluster-monitoring-config Config Map 示例

    Copy to Clipboard Toggle word wrap
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: cluster-monitoring-config
      namespace: openshift-monitoring
    data:
      config.yaml: |
          prometheusK8s:
            retention: <time to retain monitoring files, for example 24h>
            volumeClaimTemplate:
              metadata:
                name: ocs-prometheus-claim
              spec:
                storageClassName: ocs-storagecluster-ceph-rbd
                resources:
                  requests:
                    storage: <size of claim, e.g. 40Gi>
          alertmanagerMain:
            volumeClaimTemplate:
              metadata:
                name: ocs-alertmanager-claim
              spec:
                storageClassName: ocs-storagecluster-ceph-rbd
                resources:
                  requests:
                    storage: <size of claim, e.g. 40Gi>

  5. 单击 Create 以保存并创建 Config Map。

验证步骤

  1. 验证持久卷声明是否已绑定到 pod。

    1. 进入 StoragePersistent Volume Claims
    2. Project 下拉菜单设置为 openshift-monitoring
    3. 验证 5 持久性卷声明是否可见,状态为 Bound,附加到三个 alertmanager-main fluentd pod,以及两个 prometheus-k8s fluentd pod。

      图 4.1. 监控创建和绑定的存储

      OpenShift Web 控制台的截图显示在 openshift-monitoring 项目中绑定了五个持久卷声明的 Pod
  2. 验证新的 alertmanager-main channel pod 的状态是否为 Running

    1. 进入 WorkloadsPods
    2. 点新的 alertmanager-main fluentd pod 查看 pod 详情。
    3. 向下滚动到 Volumes,再验证卷是否具有 Type (ocs-alertmanager-claim ),它与您的新持久性卷声明匹配,如 ocs-alertmanager-claim-alertmanager-main-0

      图 4.2. 附加到 alertmanager-main channel pod 的持久性卷声明

      OpenShift Web 控制台的截图显示附加到 changemanager pod 的持久卷声明
  3. 验证新的 prometheus-k8s fluentd pod 的状态是否为 Running

    1. 点新的 prometheus-k8s netobserv pod 查看 pod 详情。
    2. 向下滚动到 Volumes,再验证卷是否具有 Type (ocs-prometheus-claim ),它与您的新持久性卷声明匹配,如 ocs-prometheus-claim-prometheus-k8s-0

      图 4.3. 附加到 prometheus-k8s fluentd pod 的持久性卷声明

      OpenShift Web 控制台的截图显示附加到 prometheus pod 的持久性卷声明

4.4. Overprovision 级别策略控制

Overprovision 控制是一种机制,可让您根据特定的应用程序命名空间定义从存储集群使用的持久性卷声明(PVC)的配额。

当您启用 overprovision 控制机制时,它会阻止您过度置备存储集群消耗的 PVC。OpenShift 提供了定义约束的灵活性,可通过 ClusterResourceQuota 来限制集群范围内聚合的资源消耗。如需更多信息,请参阅 OpenShift ClusterResourceQuota

通过超额置备控制,启动 ClusteResourceQuota,您可以为每个存储类设置存储容量限制。

如需有关 OpenShift Data Foundation 部署的更多信息,请参阅产品文档并根据平台选择部署过程。https://docs.redhat.com/en/documentation/red_hat_openshift_data_foundation/4.17

先决条件

  • 确保创建了 OpenShift Data Foundation 集群。

流程

  1. 使用命令行界面或用户界面部署 storagecluster
  2. 标记应用程序命名空间。

    Copy to Clipboard Toggle word wrap
    apiVersion: v1
    kind: Namespace
    metadata:
         name: <desired_name>
         labels:
              storagequota: <desired_label>
    <desired_name>
    为 application 命名空间指定一个名称,如 quota-rbd
    <desired_label>
    为存储配额指定一个标签,如 storagequota1
  3. 编辑 storagecluster,以在存储类上设置配额限制。

    Copy to Clipboard Toggle word wrap
    $ oc edit storagecluster -n openshift-storage <ocs_storagecluster_name>
    <ocs_storagecluster_name>
    指定存储集群的名称。
  4. StorageCluster.Spec 中为 Overprovision Control 添加一个条目:

    Copy to Clipboard Toggle word wrap
    apiVersion: ocs.openshift.io/v1
    kind: StorageCluster
    spec:
     [...]
         overprovisionControl:
         - capacity: <desired_quota_limit>
              storageClassName: <storage_class_name>
              quotaName: <desired_quota_name>
              selector:
                labels:
                       matchLabels:
                        storagequota: <desired_label>
    [...]
    <desired_quota_limit>
    为存储类指定所需的配额限制,例如 27Ti
    <storage_class_name>
    指定要设置配额限制的存储类的名称,如 ocs-storagecluster-ceph-rbd
    <desired_quota_name>
    为存储配额指定一个名称,如 quota1
    <desired_label>
    为存储配额指定一个标签,如 storagequota1
  5. 保存修改后的 storagecluster
  6. 验证是否定义了 clusterresourcequota

    注意

    期望 clusterresourcequota 带有您在上一步中定义的 quotaName,例如 quota1

    Copy to Clipboard Toggle word wrap
    $ oc get clusterresourcequota -A
    
    $ oc describe clusterresourcequota -A

4.5. OpenShift Data Foundation 的集群日志记录

您可以部署集群日志记录来聚合一系列 OpenShift Container Platform 服务的日志。有关如何部署集群日志记录的详情,请参考 部署集群日志记录

在初始 OpenShift Container Platform 部署时,默认情况下不配置 OpenShift Data Foundation,OpenShift Container Platform 集群将依赖于节点提供的默认存储。您可以编辑 OpenShift 日志记录(ElasticSearch)的默认配置,使其由 OpenShift Data Foundation 支持,使 OpenShift Data Foundation 支持日志(Elasticsearch)。

重要

始终确保您拥有大量用于这些服务的存储容量。如果您缺少这些关键服务的存储空间,日志记录应用程序将变得不可用,很难恢复。

红帽建议为这些服务配置较短的策展和保留间隔。详情请参阅 OpenShift Container Platform 文档中的 集群日志记录 Curator。

如果您缺少这些服务的存储空间,请联系红帽客户支持。

4.5.1. 配置持久性存储

您可以使用存储类名称和大小参数为 Elasticsearch 集群配置持久性存储类和大小。Cluster Logging Operator 根据这些参数为 Elasticsearch 集群中的每个数据节点创建一个持久性卷声明。例如:

Copy to Clipboard Toggle word wrap
spec:
    logStore:
      type: "elasticsearch"
      elasticsearch:
        nodeCount: 3
        storage:
          storageClassName: "ocs-storagecluster-ceph-rbd”
          size: "200G"

本例指定,集群中的每个数据节点将绑定到请求 200GiBocs-storagecluster-ceph-rbd 存储的持久性卷声明。每个主分片将由一个副本来支持。分片的副本会在所有节点之间复制,并且始终可用,如果因为单一冗余策略至少存在两个节点,则可以恢复副本。有关 Elasticsearch 复制策略的详情,请参考 关于部署和配置集群日志记录 中的 Elasticsearch 复制策略

注意

缺少存储块将导致默认存储支持部署。例如:

Copy to Clipboard Toggle word wrap
spec:
    logStore:
      type: "elasticsearch"
      elasticsearch:
        nodeCount: 3
        storage: {}

如需更多信息,请参阅 配置集群日志记录

4.5.2. 配置集群日志记录以使用 OpenShift Data Foundation

按照本节中的说明,将 OpenShift Data Foundation 配置为 OpenShift 集群日志记录的存储。

注意

您可在 OpenShift Data Foundation 中首次配置日志记录时获取所有日志。但是,在卸载和重新安装日志记录后,旧的日志会被删除并只处理新日志。

先决条件

  • 对 OpenShift Web 控制台的管理访问权限.
  • OpenShift Data Foundation Operator 在 openshift-storage 命名空间中安装并运行。
  • Cluster logging Operator 在 openshift-logging 命名空间中安装并运行。

流程

  1. 从 OpenShift Web 控制台左侧窗格中,点击 Administration → Custom Resource Definitions
  2. 在 Custom Resource Definitions 页面中,点 ClusterLogging
  3. 在 Custom Resource Definition Overview 页面上,从 Actions 菜单中选择 View Instances,或者点击 Instances 选项卡。
  4. 在 Cluster Logging 页面中,单击 Create Cluster Logging

    您可能需要刷新页面来加载数据。

  5. 在 YAML 中,将 storageClassName 替换为使用 provisioner openshift-storage.rbd.csi.ceph.comstorageclass。在以下示例中,storageclass 的名称为 ocs-storagecluster-ceph-rbd

    Copy to Clipboard Toggle word wrap
    apiVersion: "logging.openshift.io/v1"
    kind: "ClusterLogging"
    metadata:
      name: "instance"
      namespace: "openshift-logging"
    spec:
      managementState: "Managed"
      logStore:
        type: "elasticsearch"
        elasticsearch:
          nodeCount: 3
          storage:
            storageClassName: ocs-storagecluster-ceph-rbd
            size: 200G # Change as per your requirement
          redundancyPolicy: "SingleRedundancy"
      visualization:
        type: "kibana"
        kibana:
          replicas: 1
      curation:
        type: "curator"
        curator:
          schedule: "30 3 * * *"
      collection:
        logs:
          type: "fluentd"
          fluentd: {}

    如果 OpenShift Data Foundation 节点带有污点,您必须添加容限,以启用为日志记录调度 daemonset pod。

    Copy to Clipboard Toggle word wrap
    spec:
    [...]
      collection:
        logs:
          fluentd:
            tolerations:
            - effect: NoSchedule
              key: node.ocs.openshift.io/storage
              value: 'true'
          type: fluentd
  6. Save

验证步骤

  1. 验证持久卷声明是否已绑定到 elasticsearch Pod。

    1. 进入 StoragePersistent Volume Claims
    2. Project 下拉菜单设置为 openshift-logging
    3. 验证持久卷声明是否可见,状态为 Bound,附加到 elasticsearch-* pod。

      图 4.4. 创建并绑定集群日志记录

      附加到 elasticsearch pod 的持久性卷声明的截图
  2. 验证是否在使用新集群日志记录。

    1. Workload → Pods
    2. 将 Project 设置为 openshift-logging
    3. 验证新的 elasticsearch-* pod 的状态是否为 Running
    4. 点新的 elasticsearch-* pod 查看 pod 详情。
    5. 向下滚动到 Volumes,再验证 elasticsearch 卷是否具有与您的新持久性卷声明匹配的 Type,如 elasticsearch-elasticsearch-cdm-9r624biv-3
    6. 点 Persistent Volume Claim 名称,然后在 PersistentVolumeClaim Overview 页面中验证存储类名称。
注意

确保使用较短的 Curator 时间,以避免在附加到 Elasticsearch Pod 的 PV 上 PV 完整场景。

您可以配置 Curator,以根据保留设置删除 Elasticsearch 数据。建议您将以下默认索引数据保留 5 天设置为默认值。

Copy to Clipboard Toggle word wrap
config.yaml: |
    openshift-storage:
      delete:
        days: 5

如需了解更多详细信息,请参阅 Elasticsearch 数据

注意

要卸载由持久性卷声明支持的集群日志记录,请使用相应部署指南的卸载章节中从 OpenShift Data Foundation 中删除集群日志记录 Operator 的步骤。

第 5 章 创建 Multus 网络

OpenShift Container Platform 使用 Multus CNI 插件来串联 CNI 插件。您可以在集群安装过程中配置默认 pod 网络。默认网络处理集群的所有普通网络流量。

您可以基于可用的 CNI 插件定义额外网络,并将一个或多个这些网络附加到 pod。要将额外网络接口附加到 pod,您必须创建配置来定义接口的附加方式。

您可以使用 NetworkAttachmentDefinition (NAD)自定义资源(CR)来指定每个接口。每个 NetworkAttachmentDefinition 中的 CNI 配置定义如何创建该接口。

OpenShift Data Foundation 使用名为 macvlan 的 CNI 插件。创建基于 macvlan 的额外网络可让主机上的 pod 通过使用物理网络接口与其他主机和那些主机上的 pod 通信。附加到基于 macvlan 的额外网络的每个 pod 都会获得一个唯一的 MAC 地址。

5.1. 创建网络附加定义

要使用 Multus,需要一个已经正常工作的集群带有正确的网络配置,请参阅 Multus 配置的要求。新创建的 NetworkAttachmentDefinition (NAD)可以在存储集群安装过程中选择。这就是必须在存储集群之前创建它们的原因。

注意

网络附加定义只能使用关于 IP 地址管理(IPAM)的位置,且必须指定 range 字段。不支持 ip Range 和插件链。

您可以在存储集群安装过程中选择新创建的 NetworkAttachmentDefinition (NAD)。这就是您在创建存储集群前必须创建 NAD 的原因。

如规划指南中所述,您创建的 Multus 网络取决于您用于 OpenShift Data Foundation 流量的可用网络接口数量。可以将所有存储流量分隔到两个接口中的一个接口(一个用于默认 OpenShift SDN),或者将存储流量进一步分隔到客户端存储流量(公共)和存储复制流量(私有或集群)。

以下是同一接口上所有存储流量(公共和集群)的 NetworkAttachmentDefinition 示例。它要求所有可调度节点上有一个额外的接口(OpenShift 默认 SDN 在单独的网络接口上):

Copy to Clipboard Toggle word wrap
apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
 name: ceph-multus-net
 namespace: openshift-storage
spec:
 config: '{
     "cniVersion": "0.3.1",
     "type": "macvlan",
     "master": "eth0",
     "mode": "bridge",
     "ipam": {
       "type": "whereabouts",
       "range": "192.168.200.0/24",
       "routes": [
         {"dst": "NODE_IP_CIDR"}
       ]
     }
   }'
注意

所有网络接口名称必须在附加至 Multus 网络的所有节点上相同(即 ocs-public-clusterens2 )。

以下是用于单独 Multus 网络上存储流量的 NetworkAttachmentDefinition 示例,适用于客户端存储流量,以及用于复制流量的集群。它需要 OpenShift 节点上的两个额外接口托管对象存储设备(OSD) pod,并在所有其他可调度节点上(OpenShift 默认 SDN 在单独的网络接口上)上有一个额外的接口:

Copy to Clipboard Toggle word wrap
apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
  name: ocs-public
  namespace: openshift-storage
spec:
  config: '{
  	"cniVersion": "0.3.1",
  	"type": "macvlan",
  	"master": "ens2",
  	"mode": "bridge",
  	"ipam": {
    	    "type": "whereabouts",
    	    "range": "192.168.1.0/24"
  	}
  }'

NetworkAttachmentDefinition 示例:

Copy to Clipboard Toggle word wrap
apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
  name: ocs-cluster
  namespace: openshift-storage
spec:
  config: '{
  	"cniVersion": "0.3.1",
  	"type": "macvlan",
  	"master": "ens3",
  	"mode": "bridge",
  	"ipam": {
    	    "type": "whereabouts",
    	    "range": "192.168.2.0/24"
  	}
  }'
注意

所有网络接口名称必须在附加至 Multus 网络的所有节点上相同(即,ens2 用于 ocs-publicens3 用于 ocs-cluster)。

第 6 章 使用 OpenShift Data Foundation 支持 OpenShift Container Platform 应用程序

您无法在 OpenShift Container Platform 安装过程中直接安装 OpenShift Data Foundation。但是,您可以使用 Operator Hub 在现有 OpenShift Container Platform 上安装 OpenShift Data Foundation,然后将 OpenShift Container Platform 应用程序配置为由 OpenShift Data Foundation 支持。

先决条件

  • 已安装 OpenShift Container Platform,您有 OpenShift Web 控制台的管理访问权限。
  • OpenShift Data Foundation 在 openshift-storage 命名空间中安装并运行。

流程

  1. 在 OpenShift Web 控制台中,执行以下任一操作:

    • Workloads → Deployments

      在 Deployments 页面中,您可以执行以下操作之一:

      • Action 菜单中选择任何现有部署并点击 Add Storage 选项。
      • 创建新部署,然后添加存储。

        1. 单击 Create Deployment 以创建新部署。
        2. 根据您的要求编辑 YAML 以创建部署。
        3. Create
        4. 从页面右上角的 Actions 下拉菜单中选择 Add Storage
    • Workloads → Deployment Configs

      在 Deployment Configs 页面中,您可以执行以下操作之一:

      • Action 菜单中选择任何现有部署并点击 Add Storage 选项。
      • 创建新部署,然后添加存储。

        1. 单击 Create Deployment Config 以创建新部署。
        2. 根据您的要求编辑 YAML 以创建部署。
        3. Create
        4. 从页面右上角的 Actions 下拉菜单中选择 Add Storage
  2. 在 Add Storage 页面中,您可以选择以下选项之一:

    • Use existing claim 选项,然后从下拉列表中选择一个合适的 PVC。
    • Create new claim 选项。

      1. Storage Class 下拉列表中,选择适当的 CephFSRBD 存储类。
      2. 为持久性卷声明提供名称。
      3. 选择 ReadWriteOnce (RWO)或 ReadWriteMany (RWX)访问模式。

        注意

        ReadOnlyMany (ROX)被取消激活,因为它不被支持。

      4. 选择所需存储容量的大小。

        注意

        您可以扩展块 PV,但无法在创建持久性卷声明后减少存储容量。

  3. 指定容器内挂载路径卷的挂载路径和子路径(如果需要)。
  4. Save

验证步骤

  1. 根据您的配置,执行以下任一操作:

    • Workloads → Deployments
    • Workloads → Deployment Configs
  2. 根据需要设置项目。
  3. 单击您添加存储的部署,以显示部署详情。
  4. 向下滚动到 Volumes,再验证您的部署是否具有与您分配的持久性卷声明相匹配的 类型
  5. 点 Persistent Volume Claim 名称,然后在 Persistent Volume Claim Overview 页面中验证存储类名称。

第 7 章 将文件和对象存储添加到现有外部 OpenShift Data Foundation 集群

当 OpenShift Data Foundation 配置为外部模式时,可以通过多种方式为持久性卷声明和对象存储桶声明提供存储。

  • 块存储的持久卷声明直接从外部 Red Hat Ceph Storage 集群提供。
  • 文件存储的持久卷声明可以通过向外部 Red Hat Ceph Storage 集群添加元数据服务器(MDS)来提供。
  • 对象存储的对象 bucket 声明可以通过使用 Multicloud 对象网关或将 Ceph 对象网关添加到外部 Red Hat Ceph Storage 集群来提供。

使用以下流程,将文件存储(使用元数据服务器)或对象存储(使用 Ceph 对象网关)添加到最初部署为仅提供块存储的外部 OpenShift Data Foundation 集群。

先决条件

  • OpenShift Data Foundation 4.17 已安装并在 OpenShift Container Platform 版本 4.17 或更高版本中运行。另外,外部模式的 OpenShift Data Foundation 集群处于 Ready 状态。
  • 您的外部 Red Hat Ceph Storage 集群被配置为以下一个或多个集群:

    • OpenShift Container Platform 集群可以访问用于对象存储的 Ceph 对象网关(RGW)端点
    • 用于文件存储的元数据服务器(MDS)池
  • 确保您知道在外部 OpenShift Data Foundation 集群部署期间用于 ceph-external-cluster-details-exporter.py 脚本的参数。

流程

  1. 使用以下命令下载 OpenShift Data Foundation 的 ceph-external-cluster-details-exporter.py python 脚本:

    Copy to Clipboard Toggle word wrap
    oc get csv $(oc get csv -n openshift-storage | grep rook-ceph-operator | awk '{print $1}') -n openshift-storage -o jsonpath='{.metadata.annotations.externalClusterScript}' | base64 --decode >ceph-external-cluster-details-exporter.py
  2. 通过在外部 Red Hat Ceph Storage 集群中的任何客户端节点上运行 ceph-external-cluster-details-exporter.py 更新外部 Red Hat Ceph Storage 集群的权限上限。您可能需要要求您的 Red Hat Ceph Storage 管理员进行此操作。

    Copy to Clipboard Toggle word wrap
    # python3 ceph-external-cluster-details-exporter.py --upgrade \
    --run-as-user=ocs-client-name \
    --rgw-pool-prefix rgw-pool-prefix
    --run-as-user
    在 OpenShift Data Foundation 集群部署期间使用的客户端名称。如果没有设置其他客户端名称,请使用默认客户端名称 client.healthchecker
    --rgw-pool-prefix
    用于 Ceph 对象网关池的前缀。如果使用默认前缀,则可以省略它。
  3. 从外部 Red Hat Ceph Storage 生成并保存配置详情。

    1. 通过在外部 Red Hat Ceph Storage 集群中的任何客户端节点上运行 ceph-external-cluster-details-exporter.py 生成配置详情。

      Copy to Clipboard Toggle word wrap
      # python3 ceph-external-cluster-details-exporter.py --rbd-data-pool-name rbd-block-pool-name --monitoring-endpoint ceph-mgr-prometheus-exporter-endpoint --monitoring-endpoint-port ceph-mgr-prometheus-exporter-port --run-as-user ocs-client-name  --rgw-endpoint rgw-endpoint --rgw-pool-prefix rgw-pool-prefix
      --monitoring-endpoint
      是可选的。它接受可从 OpenShift Container Platform 集群访问的活跃和待机 mgrs 的以逗号分隔的 IP 地址列表。如果没有提供,则会自动填充该值。
      --monitoring-endpoint-port
      是可选的。它是与由- monitoring-endpoint 指定的 ceph-mgr Prometheus exporter 关联的端口。如果没有提供,则会自动填充该值。
      --run-as-user
      在 OpenShift Data Foundation 集群部署期间使用的客户端名称。如果没有设置其他客户端名称,请使用默认客户端名称 client.healthchecker。
      --rgw-endpoint
      提供此参数,以通过 Ceph 对象网关为 OpenShift Data Foundation 置备对象存储(可选参数)。
      --rgw-pool-prefix
      用于 Ceph 对象网关池的前缀。如果使用默认前缀,则可以省略它。

      用户权限已更新,如下所示:

      Copy to Clipboard Toggle word wrap
      caps: [mgr] allow command config
      caps: [mon] allow r, allow command quorum_status, allow command version
      caps: [osd] allow rwx pool=default.rgw.meta, allow r pool=.rgw.root, allow rw pool=default.rgw.control, allow rx pool=default.rgw.log, allow x pool=default.rgw.buckets.index
      注意

      确保除 Ceph 对象网关详细信息(如果提供)之外的所有参数(包括可选参数)与在外部模式中部署 OpenShift Data Foundation 期间所用的相同。

    2. 将脚本的输出保存到 external-cluster-config.json 文件中。

      以下示例输出以粗体文本显示生成的配置更改。

      Copy to Clipboard Toggle word wrap
      [{"name": "rook-ceph-mon-endpoints", "kind": "ConfigMap", "data": {"data": "xxx.xxx.xxx.xxx:xxxx", "maxMonId": "0", "mapping": "{}"}}, {"name": "rook-ceph-mon", "kind": "Secret", "data": {"admin-secret": "admin-secret", "fsid": "<fs-id>", "mon-secret": "mon-secret"}}, {"name": "rook-ceph-operator-creds", "kind": "Secret", "data": {"userID": "<user-id>", "userKey": "<user-key>"}}, {"name": "rook-csi-rbd-node", "kind": "Secret", "data": {"userID": "csi-rbd-node", "userKey": "<user-key>"}}, {"name": "ceph-rbd", "kind": "StorageClass", "data": {"pool": "<pool>"}}, {"name": "monitoring-endpoint", "kind": "CephCluster", "data": {"MonitoringEndpoint": "xxx.xxx.xxx.xxx", "MonitoringPort": "xxxx"}}, {"name": "rook-ceph-dashboard-link", "kind": "Secret", "data": {"userID": "ceph-dashboard-link", "userKey": "<user-key>"}}, {"name": "rook-csi-rbd-provisioner", "kind": "Secret", "data": {"userID": "csi-rbd-provisioner", "userKey": "<user-key>"}}, {"name": "rook-csi-cephfs-provisioner", "kind": "Secret", "data": {"adminID": "csi-cephfs-provisioner", "adminKey": "<admin-key>"}}, {"name": "rook-csi-cephfs-node", "kind": "Secret", "data": {"adminID": "csi-cephfs-node", "adminKey": "<admin-key>"}}, {"name": "cephfs", "kind": "StorageClass", "data": {"fsName": "cephfs", "pool": "cephfs_data"}}, {"name": "ceph-rgw", "kind": "StorageClass", "data": {"endpoint": "xxx.xxx.xxx.xxx:xxxx", "poolPrefix": "default"}}, {"name": "rgw-admin-ops-user", "kind": "Secret", "data": {"accessKey": "<access-key>", "secretKey": "<secret-key>"}}]
  4. 上传生成的 JSON 文件。

    1. 登录 OpenShift Web 控制台。
    2. WorkloadsSecrets
    3. project 设置为 openshift-storage
    4. rook-ceph-external-cluster-details
    5. Actions (&&)→ Edit Secret
    6. Browse 并上传 external-cluster-config.json 文件。
    7. Save

验证步骤

  • 要验证 OpenShift Data Foundation 集群是否健康且数据具有弹性,请导航到 StorageData foundationStorage Systems 选项卡,然后点击存储系统名称。

    • OverviewBlock and File 选项卡中,检查 Status 卡以确认 存储集群 有一个绿色勾号表示它处于健康状态。
  • 如果您为文件存储添加了元数据服务器:

    1. WorkloadsPods,验证 csi-cephfsplugin fluentd pod 是否已创建新并处于 Running 状态。
    2. StorageStorage Classes 并验证是否已创建 ocs-external-storagecluster-cephfs 存储类。
  • 如果您为对象存储添加了 Ceph 对象网关:

    1. StorageStorage Classes 并验证是否已创建 ocs-external-storagecluster-ceph-rgw 存储类。
    2. 要验证 OpenShift Data Foundation 集群是否健康且数据具有弹性,请导航到 StorageData foundationStorage Systems 选项卡,然后点击存储系统名称。
    3. 单击 Object 选项卡,并确认 Object Service 和数据弹性 具有绿色勾号,表示它处于健康状态。

第 8 章 如何将专用 worker 节点用于 Red Hat OpenShift Data Foundation

任何 Red Hat OpenShift Container Platform 订阅都需要一个 OpenShift Data Foundation 订阅。但是,如果您使用基础架构节点调度 OpenShift Data Foundation 资源,您可以在 OpenShift Container Platform 订阅上保存成本。

在支持 Machine API 时或不使用 Machine API 支持时,务必要保持环境的一致性。因此,强烈建议在所有情形中都有特殊类别的节点标记为 worker 或 infra,或者同时具有这两个角色。如需更多信息,请参阅 第 8.3 节 “手动创建基础架构节点” 部分。

8.1. 基础架构节点分析

用于 OpenShift Data Foundation 的基础架构节点有几个属性。需要 infra node-role 标签,以确保节点不使用 RHOCP 权利。infra node-role 标签负责确保运行 OpenShift Data Foundation 的节点只需要 OpenShift Data Foundation 权利。

  • 标记了 node-role.kubernetes.io/infra

还需要添加一个具有 NoSchedule effect 的 OpenShift Data Foundation 污点,以便 infra 节点只调度 OpenShift Data Foundation 资源。

  • Tainted with node.ocs.openshift.io/storage="true"

标签将 RHOCP 节点识别为 infra 节点,以便不应用 RHOCP 订阅成本。该污点可防止将非 OpenShift Data Foundation 资源调度到污点节点上。

注意

在节点上添加存储污点可能需要对其他 daemonset pod (如 openshift-dns daemonset )进行容限处理。有关如何管理容限的详情,请参考知识库文章: Openshift-dns daemonset 不包括在具有污点的节点上运行的容限

用于运行 OpenShift Data Foundation 服务的基础架构节点上的污点和标签示例:

Copy to Clipboard Toggle word wrap
    spec:
      taints:
      - effect: NoSchedule
        key: node.ocs.openshift.io/storage
        value: "true"
      metadata:
        creationTimestamp: null
        labels:
          node-role.kubernetes.io/worker: ""
          node-role.kubernetes.io/infra: ""
          cluster.ocs.openshift.io/openshift-storage: ""

8.2. 用于创建基础架构节点的机器集

如果环境中支持 Machine API,则标签应添加到要置备基础架构节点的 Machine Sets 模板中。避免将标签手动添加到机器 API 创建的节点的反模式。这样做类似于为部署创建的 pod 添加标签。在这两种情况下,当 pod/节点失败时,替换 pod/节点都将没有适当的标签。

注意

在 EC2 环境中,您将需要三个机器集,各自配置为在不同的可用区(如 us-east-2a、us-east-2b、us-east-2b、us-east-2c)中调配基础架构节点。目前,OpenShift Data Foundation 不支持在超过三个可用区部署。

以下 Machine Set 模板示例创建具有基础架构节点所需的适当污点和标签的节点。这将用于运行 OpenShift Data Foundation 服务。

Copy to Clipboard Toggle word wrap
  template:
    metadata:
      creationTimestamp: null
      labels:
        machine.openshift.io/cluster-api-cluster: kb-s25vf
        machine.openshift.io/cluster-api-machine-role: worker
        machine.openshift.io/cluster-api-machine-type: worker
        machine.openshift.io/cluster-api-machineset: kb-s25vf-infra-us-west-2a
    spec:
      taints:
      - effect: NoSchedule
        key: node.ocs.openshift.io/storage
        value: "true"
      metadata:
        creationTimestamp: null
        labels:
          node-role.kubernetes.io/infra: ""
          cluster.ocs.openshift.io/openshift-storage: ""
重要

如果向基础架构节点添加污点,您还需要为其他工作负载的污点添加容限,例如 fluentd pod。如需更多信息,请参阅 OpenShift 4 中的基础架构节点 红帽知识库解决方案。

8.3. 手动创建基础架构节点

只有在环境中不支持 Machine API 时,标签才应直接应用到节点。手动创建要求至少可使用 3 个 RHOCP worker 节点来调度 OpenShift Data Foundation 服务,并且这些节点有足够的 CPU 和内存资源。要避免 RHOCP 订阅成本,需要以下内容:

Copy to Clipboard Toggle word wrap
oc label node <node> node-role.kubernetes.io/infra=""
oc label node <node> cluster.ocs.openshift.io/openshift-storage=""

还需要添加一个 NoSchedule OpenShift Data Foundation 污点,以便 infra 节点只调度 OpenShift Data Foundation 资源并代表任何其他非 OpenShift Data Foundation 工作负载。

Copy to Clipboard Toggle word wrap
oc adm taint node <node> node.ocs.openshift.io/storage="true":NoSchedule
警告

不要删除 node-role node-role.kubernetes.io/worker=""

除非对 OpenShift 调度程序和 MachineConfig 资源进行了更改,否则删除 node-role.kubernetes.io/worker="" 可能会导致问题。

如果已被删除,则应将其重新添加到每个 infra 节点。添加 node-role node-role.kubernetes.io/infra="" 和 OpenShift Data Foundation 污点足以满足权利的要求。

8.4. 从用户界面污点节点

本节介绍在 OpenShift Data Foundation 部署后污点节点的步骤。

流程

  1. 在 OpenShift Web 控制台中,点 ComputeNodes,然后选择必须污点的节点。
  2. Details 页面中,单击 Edit taint
  3. Key <nodes.openshift.ocs.io/storage>, Value <true> 和 Effect<Noschedule> 字段中输入值。
  4. 点 Save。

验证步骤

  • 按照以下步骤验证节点是否已成功污点:

    • 导航到 ComputeNodes
    • 选择节点以验证其状态,然后单击 YAML 选项卡。
    • specs 部分中检查以下参数值:

      Copy to Clipboard Toggle word wrap
      Taints:
        Key: node.openshift.ocs.io/storage
        Value: true
        Effect: Noschedule

其他资源

如需更多信息,请参阅在 VMware vSphere 上创建 OpenShift Data Foundation 集群

第 9 章 管理持久性卷声明

9.1. 将应用程序 pod 配置为使用 OpenShift Data Foundation

按照本节中的说明,将 OpenShift Data Foundation 配置为应用 pod 的存储。

先决条件

  • 对 OpenShift Web 控制台的管理访问权限.
  • OpenShift Data Foundation Operator 在 openshift-storage 命名空间中安装并运行。在 OpenShift Web 控制台中,点 OperatorsInstalled Operators 查看已安装的 Operator。
  • OpenShift Data Foundation 提供的默认存储类可用。在 OpenShift Web 控制台中,点 StorageStorageClasses 查看默认存储类。

流程

  1. 为要使用的应用程序创建一个持久性卷声明(PVC)。

    1. 在 OpenShift Web 控制台中,点击 StoragePersistent Volume Claims
    2. 为应用 Pod 设置 Project
    3. 单击 Create Persistent Volume Claim

      1. 指定由 OpenShift Data Foundation 提供的存储类。
      2. 指定 PVC 名称,如 myclaim
      3. 选择所需的 Access Mode

        注意

        IBM FlashSystem 不支持 Access Mode,Shared access (RWX)

      4. 对于 Rados 块设备(RBD),如果 Access 模式是 ReadWriteOnce (RWO),请选择所需的 卷模式。默认卷模式是 Filesystem
      5. 根据应用程序要求指定一个 Size
      6. Create 并等待 PVC 处于 Bound 状态。
  2. 配置新的或现有的应用容器集以使用新的 PVC。

    • 对于新应用程序 pod,执行以下步骤:

      1. WorkloadsPods
      2. 创建新应用 pod。
      3. spec: 部分下,添加 volumes: 部分,将新 PVC 添加为应用 Pod 的卷。

        Copy to Clipboard Toggle word wrap
        volumes:
          - name: <volume_name>
            persistentVolumeClaim:
              claimName: <pvc_name>

        例如:

        Copy to Clipboard Toggle word wrap
        volumes:
          - name: mypd
            persistentVolumeClaim:
              claimName: myclaim
    • 对于现有应用程序 pod,执行以下步骤:

      1. WorkloadsDeployment Configs
      2. 搜索与应用程序 pod 关联的所需部署配置。
      3. 点击其 Action 菜单(OCPBUGS)Edit Deployment Config
      4. spec: 部分下,添加 volumes: 部分,将新 PVC 添加为应用程序 pod 的卷,然后点 Save

        Copy to Clipboard Toggle word wrap
        volumes:
          - name: <volume_name>
            persistentVolumeClaim:
              claimName: <pvc_name>

        例如:

        Copy to Clipboard Toggle word wrap
        volumes:
          - name: mypd
            persistentVolumeClaim:
              claimName: myclaim
  3. 验证新配置是否正在使用。

    1. WorkloadsPods
    2. 为应用 Pod 设置 Project
    3. 验证应用 Pod 的状态是否为 Running
    4. 单击应用 Pod 名称,以查看 Pod 详情。
    5. 向下滚动到 Volumes 部分,再验证卷的 Type 与您的新持久卷声明匹配,如 myclaim

9.2. 查看持久性卷声明请求状态

使用这个流程查看 PVC 请求的状态。

先决条件

  • 管理员对 OpenShift Data Foundation 的访问权限。

流程

  1. 登录 OpenShift Web 控制台。
  2. StoragePersistent Volume Claims
  3. 使用 Filter 文本框搜索所需的 PVC 名称。您还可以根据 Name 或 Label 过滤 PVC 列表来缩小列表范围
  4. 检查与所需 PVC 对应的 Status 列。
  5. 点所需的 Name 查看 PVC 详情。

9.3. 查看持久性卷声明请求事件

使用这个流程查看和解决持久性卷声明(PVC)请求事件。

先决条件

  • 管理员对 OpenShift Web 控制台的访问权限。

流程

  1. 在 OpenShift Web 控制台中,点 Storage → Data Foundation
  2. Storage systems 选项卡中,选择 storage 系统,然后点 OverviewBlock and File
  3. 找到 Inventory 卡,查看 PVC 数量并显示错误。
  4. StoragePersistent Volume Claims
  5. 使用 Filter 文本框搜索所需的 PVC。
  6. 点 PVC 名称并导航到 Events
  7. 根据需要或按指示处理事件。

9.4. 扩展持久性卷声明

OpenShift Data Foundation 4.6 能够扩展持久性卷声明,在管理持久性存储资源方面提供更多灵活性。

以下持久性卷支持扩展:

  • 具有 ReadWriteOnce (RWO)和 ReadWriteMany (RWX)访问的 PVC,它们基于 Ceph 文件系统(CephFS),用于卷模式 Filesystem
  • 具有 ReadWriteOnce (RWO)访问的 PVC,它基于卷模式 Filesystem 的 Ceph RADOS 块设备(RBD)。
  • 具有 ReadWriteOnce (RWO)访问的 PVC,它基于卷模式 Block 的 Ceph RADOS 块设备(RBD)。
  • 具有 ReadWriteOncePod (RWOP)的 PVC,它基于 Ceph 文件系统(CephFS)或用于卷模式 Filesystem 的网络文件系统(NFS)。
  • 具有 ReadWriteOncePod (RWOP)访问的 PVC,它基于卷模式 Filesystem 的 Ceph RADOS 块设备(RBD)。使用 RWOP 访问模式,您可以在单一节点上将单个 pod 以读写模式挂载。
注意

OSD、MON 和加密 PVC 不支持 PVC 扩展。

先决条件

  • 管理员对 OpenShift Web 控制台的访问权限。

流程

  1. 在 OpenShift Web 控制台中,导航到 StoragePersistent Volume Claims
  2. 点击您要扩展的持久性卷声明旁边的 Action Menu (swig)。
  3. Expand PVC

    持久性卷声明扩展 PVC 菜单项
  4. 选择持久性卷声明的新大小,然后点 Expand

    扩展持久性卷声明向导
  5. 要验证扩展,请导航到 PVC 的详情页面,并验证 Capacity 字段是否具有请求的正确大小。

    注意

    在基于 Ceph RADOS 块设备(RBD)扩展 PVC 时,如果 PVC 尚未附加到 pod,Condition type 在 PVC 的详细信息页面中是 FileSystemResizePending。挂载卷后,文件系统大小调整成功,新的大小反映在 Capacity 字段中。

9.5. 动态置备

9.5.1. 关于动态置备

StorageClass 资源对象描述并分类了可请求的存储,并提供了根据需要为动态置备存储传递参数的方法。StorageClass 也可以作为控制不同级别的存储和访问存储的管理机制。集群管理员(cluster-admin)或存储管理员(storage-admin)定义并创建用户可以请求的 StorageClass 对象,而无需了解底层存储卷源。

OpenShift Container Platform 持久性卷框架启用了此功能,并允许管理员为集群提供持久性存储。该框架还让用户能够在不了解底层基础架构的情况下请求这些资源。

在 OpenShift Container Platform 中,许多存储类型都可用作持久性卷。存储插件可能支持静态置备、动态置备或两种置备类型。

9.5.2. OpenShift Data Foundation 中的动态置备

Red Hat OpenShift Data Foundation 是软件定义的存储,针对容器环境优化。它作为 Operator 在 OpenShift Container Platform 上运行,为容器提供高度集成和简化的持久性存储管理。

OpenShift Data Foundation 支持各种存储类型,包括:

  • 数据库的块存储
  • 用于持续集成、消息传递和数据聚合的共享存储
  • 归档、备份和介质存储的对象存储

版本 4 使用 Red Hat Ceph Storage 提供支持持久性卷的文件、块和对象存储,Rook.io 管理并编配持久性卷和声明的调配。NooBaa 提供对象存储,其多云网关允许在多个云环境中联合对象(作为技术预览使用)。

在 OpenShift Data Foundation 4 中,RADOS 块设备(RBD)和 Ceph 文件系统(CephFS)的 Red Hat Ceph Storage Container Storage Interface (CSI)驱动程序处理动态置备请求。当 PVC 请求动态进入时,CSI 驱动程序有以下选项:

  • 创建一个具有 ReadWriteOnce (RWO)和 ReadWriteMany (RWX)访问权限的 PVC,它基于卷模式 Block 的 Ceph RBD。
  • 基于卷模式 Filesystem 的 Ceph RBD,创建具有 ReadWriteOnce (RWO)访问权限的 PVC。Filesystem 模式的 supported fstypeext4。这是默认值。
  • 为卷模式 Filesystem 创建基于 CephFS 的 ReadWriteOnce (RWO)和 ReadWriteMany (RWX)访问的 PVC。
  • 创建一个基于 CephFS、NFS 和 RBD 的 ReadWriteOncePod (RWOP)访问的 PVC。使用 RWOP 访问模式,您可以在单一节点上将单个 pod 以读写模式挂载。

判断要使用的驱动程序(RBD 或 CephFS)取决于 storageclass.yaml 文件中的条目。

9.5.3. 可用的动态置备插件

OpenShift Container Platform 提供了以下置备程序插件,用于使用集群配置的供应商 API 创建新存储资源的动态置备:

存储类型provisioner 插件名称备注

OpenStack Cinder

kubernetes.io/cinder

 

AWS Elastic Block Store (EBS)

kubernetes.io/aws-ebs

对于在不同区中使用多个集群时进行动态置备,请使用 Key=kubernetes.io/cluster/<cluster_name>,Value=<cluster_id>,Value=<cluster_id& gt; 来标记每个节点,其中 <cluster_name& gt ; 和 <cluster_id > 是唯一的。

AWS Elastic File System (EFS)

 

动态置备通过 EFS provisioner pod 实现,而不是通过置备程序插件实现。

Azure Disk

kubernetes.io/azure-disk

 

Azure File

kubernetes.io/azure-file

persistent-volume-binder ServiceAccount 需要相应的权限,以创建并获取 Secret 来存储 Azure 存储帐户和密钥。

GCE Persistent Disk (gcePD)

kubernetes.io/gce-pd

在多区配置中,建议在每个 GCE 项目中运行一个 OpenShift Container Platform 集群,以避免在当前集群中没有节点的区中创建 PV。

VMware vSphere

kubernetes.io/vsphere-volume

 

Red Hat Virtualization

csi.ovirt.org

 
重要

任何选择的置备程序插件还需要根据相关文档为相关的云、主机或第三方供应商配置。

第 10 章 在目标卷中重新声明空间

删除的文件或零数据块有时会在 Ceph 集群中占用存储空间,从而导致可用存储空间不准确报告。重新声明空间操作通过对目标卷执行以下操作来删除这种差异:

  • fstrim - 此操作用于处于 Filesystem 模式的卷,且仅在执行重新声明空间操作时挂载到 pod 时才使用。
  • RBD sparsify - 当卷没有附加到任何 pod 时,使用 RBD sparsify,并回收由 4M 大小零数据的块占用的空间。
注意
  • 只有 Ceph RBD 卷支持重新声明空间操作。
  • 回收空间操作涉及执行时的性能损失。

您可以使用以下任一方法重新声明空间:

10.1. 通过注解 PersistentVolumeClaim 来启用重新声明空间操作

使用这个流程自动调用重新声明空间操作,以根据给定的调度注解持久性卷声明(PVC)。

注意
  • schedule 值的格式与 Kubernetes CronJob 相同,它设定 重复操作请求的和/或 间隔。
  • 推荐的调度间隔为 @weekly。如果调度间隔值为空或无效格式,则默认调度值设为 @weekly。不要调度多个 ReclaimSpace 操作 @weekly 或同时。
  • 每个调度操作之间的最小支持间隔至少为 24 小时。例如,@daily (每天的At 00:00)或 0 3 * * (每天的At 3:00)。
  • 在非高峰、维护窗口或工作负载 输入/输出 低时调度 ReclaimSpace 操作。
  • 当修改调度时,ReclaimSpaceCronJob 会被重新创建。当注解被删除时,它会被自动删除。

流程

  1. 获取 PVC 详情。

    Copy to Clipboard Toggle word wrap
    $ oc get pvc data-pvc
    Copy to Clipboard Toggle word wrap
    NAME      STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                          AGE
    data-pvc  Bound    pvc-f37b8582-4b04-4676-88dd-e1b95c6abf74   1Gi        RWO            ocs-storagecluster-ceph-rbd           20h
  2. 将注解 reclaimspace.csiaddons.openshift.io/schedule=@monthly 添加到 PVC 以创建 reclaimspacecronjob

    Copy to Clipboard Toggle word wrap
    $ oc annotate pvc data-pvc "reclaimspace.csiaddons.openshift.io/schedule=@monthly"
    Copy to Clipboard Toggle word wrap
    persistentvolumeclaim/data-pvc annotated
  3. 验证 reclaimspacecronjob 是否已创建格式为 "< pvc-name>-xxxxxxx"。

    Copy to Clipboard Toggle word wrap
    $ oc get reclaimspacecronjobs.csiaddons.openshift.io
    Copy to Clipboard Toggle word wrap
    NAME                    SCHEDULE    SUSPEND   ACTIVE   LASTSCHEDULE   AGE
    data-pvc-1642663516     @monthly                                      3s
  4. 修改计划以自动运行此作业。

    Copy to Clipboard Toggle word wrap
    $ oc annotate pvc data-pvc "reclaimspace.csiaddons.openshift.io/schedule=@weekly" --overwrite=true
    Copy to Clipboard Toggle word wrap
    persistentvolumeclaim/data-pvc annotated
  5. 验证 reclaimspacecronjob 的调度是否已修改。

    Copy to Clipboard Toggle word wrap
    $ oc get reclaimspacecronjobs.csiaddons.openshift.io
    Copy to Clipboard Toggle word wrap
    NAME                  SCHEDULE    SUSPEND   ACTIVE   LASTSCHEDULE   AGE
    data-pvc-1642664617   @weekly                                       3s

10.2. 使用 ReclaimSpaceJob 启用重新声明空间操作

ReclaimSpaceJob 是一个命名空间自定义资源(CR),用于在目标卷上调用重新声明空间操作。这是一个时间方法,可立即启动重新声明空间操作。您必须重复创建 ReclaimSpaceJob CR,以便在需要时重复回收空间操作。

注意
  • 回收空间操作之间的推荐间隔为 每周
  • 确保每个操作之间的最小间隔至少为 24 小时
  • 在非高峰、维护窗口或工作负载输入/输出低期间调度重新声明空间操作。

流程

  1. 创建并应用以下自定义资源以回收空间操作:

    Copy to Clipboard Toggle word wrap
    apiVersion: csiaddons.openshift.io/v1alpha1
    kind: ReclaimSpaceJob
    metadata:
      name: sample-1
    spec:
      target:
        persistentVolumeClaim: pvc-1
      timeout: 360

    其中,

    target
    指明执行操作的卷目标。
    persistentVolumeClaim
    PersistentVolumeClaim 的名称。
    backOfflimit
    指定在将重新声明空间操作 标记为失败 前的最大重试次数。默认值为 6。允许的最大值和最小值分别为 600。
    retryDeadlineSeconds
    指定操作可能会立即停用的时间(以秒为单位),它相对于开始时间。该值必须是正整数。默认值为 600 秒,允许的最大值为 1800 秒。
    Timeout (超时)
    指定发送到 CSI 驱动程序的 grpc 请求超时(以秒为单位)。如果没有指定超时值,则默认为全局重新声明空间超时的值。超时允许的最小值为 60。
  2. 在完成操作后删除自定义资源。

10.3. 使用 ReclaimSpaceCronJob 启用重新声明空间操作

ReclaimSpaceCronJob 根据给定的调度(如每日、每周等)调用重新声明空间操作。您必须只为持久性卷声明创建 ReclaimSpaceCronJobCSI-addons 控制器在请求的时间和带有 schedule 属性的间隔创建一个 ReclaimSpaceJob

注意
  • 推荐的调度间隔为 @weekly
  • 每个调度操作之间的最小间隔应至少为 24 小时。例如,@daily (每天At 00:00)或 "0 3 * * *" (每天的At 3:00)。
  • 在非高峰、维护窗口或工作负载输入/输出低时调度 ReclaimSpace 操作。

流程

  1. 创建并应用以下自定义资源以回收空间操作

    Copy to Clipboard Toggle word wrap
    apiVersion: csiaddons.openshift.io/v1alpha1
    kind: ReclaimSpaceCronJob
    metadata:
      name: reclaimspacecronjob-sample
    spec:
      jobTemplate:
        spec:
          target:
            persistentVolumeClaim: data-pvc
          timeout: 360
      schedule: '@weekly'
      concurrencyPolicy: Forbid

    其中,

    concurrencyPolicy
    描述在 ReclaimSpaceCronJob 调度新 ReclaimSpaceJob 时的更改,而以前的 ReclaimSpaceJob 仍在运行。默认 Forbid 会阻止启动新的作业,而 replace 可用于删除可能处于故障状态的正在运行的作业并创建一个新作业。
    failedJobsHistoryLimit
    指定为故障排除保留失败的 ReclaimSpaceJobs 数量。
    jobTemplate
    指定 ReclaimSpaceJob.spec 结构,它描述了所请求 ReclaimSpaceJob 操作的详细信息。
    successfulJobsHistoryLimit
    指定成功 ReclaimSpaceJob 操作的数量。
    调度
    指定重复操作请求的 and/或间隔,其格式与 Kubernetes CronJobs 相同。
  2. 在不再需要执行重新声明空间操作时,或者删除目标 PVC 时,删除 ReclaimSpaceCronJob 自定义资源。

10.4. Reclaim Space 操作所需的自定义超时

根据 RBD 卷大小及其数据模式,Reclaim Space Operation 可能会失败,上下文截止时间超过 错误。您可以通过增加超时值来避免这种情况。

下面的例子通过检查相应 ReclaimSpaceJob 的 check -o yaml 来显示失败状态:

示例

Copy to Clipboard Toggle word wrap
Status:
  Completion Time:  2023-03-08T18:56:18Z
  Conditions:
    Last Transition Time:  2023-03-08T18:56:18Z
    Message:               Failed to make controller request: context deadline exceeded
    Observed Generation:   1
    Reason:                failed
    Status:                True
    Type:                  Failed
  Message:                 Maximum retry limit reached
  Result:                  Failed
  Retries:                 6
  Start Time:              2023-03-08T18:33:55Z

您还可以通过创建以下 configmap 在全局级别上设置自定义超时:

示例

Copy to Clipboard Toggle word wrap
apiVersion: v1
kind: ConfigMap
metadata:
  name: csi-addons-config
  namespace: openshift-storage
data:
  "reclaim-space-timeout": "6m"

重启 csi-addons operator pod。

Copy to Clipboard Toggle word wrap
oc delete po -n openshift-storage -l "app.kubernetes.io/name=csi-addons"

以上 configmap 创建后启动的所有 Reclaim Space 操作都使用自定义超时。

' :leveloffset: +1

第 11 章 查找并清理过时的子卷

有时,过时的子卷没有附加相应的 k8s 引用。这些子卷是不使用的,可以删除。您可以使用 ODF CLI 工具查找和删除过时的子卷。

先决条件

流程

  1. 使用带有 subvolumes 命令的-- stale 标志来查找过时的 子卷

    Copy to Clipboard Toggle word wrap
    $ odf subvolume ls --stale

    输出示例:

    Copy to Clipboard Toggle word wrap
    # Filesystem  Subvolume Subvolumegroup State
    # ocs-storagecluster-cephfilesystem csi-vol-427774b4-340b-11ed-8d66-0242ac110004 csi stale
    # ocs-storagecluster-cephfilesystem csi-vol-427774b4-340b-11ed-8d66-0242ac110005 csi stale
  2. 删除过时的子卷:

    Copy to Clipboard Toggle word wrap
    odf subvolume delete <subvolumes> <filesystem> <subvolumegroup>

    &lt;subvolumes> 替换为第一个命令输出中以逗号分隔的子卷列表。子卷必须是同一文件系统和 subvolumegroup。

    <filesystem & gt; 和 <subvolumegroup> 替换为第一个命令输出中的 filesystem 和 subvolumegroup。

    例如:

    Copy to Clipboard Toggle word wrap
    odf subvolume delete csi-vol-427774b4-340b-11ed-8d66-0242ac110004,csi-vol-427774b4-340b-11ed-8d66-0242ac110005 ocs-storagecluster csi

    输出示例:

    Copy to Clipboard Toggle word wrap
    # Info: subvolume csi-vol-427774b4-340b-11ed-8d66-0242ac110004 deleted
    # Info: subvolume csi-vol-427774b4-340b-11ed-8d66-0242ac110004 deleted

第 12 章 卷快照

卷快照是集群中特定时间点的存储卷的状态。这些快照有助于更有效地使用存储,不必每次都制作完整的副本,并可用作开发应用程序的构建块。

卷快照类允许管理员指定属于卷快照对象的不同属性。OpenShift Data Foundation operator 根据使用的平台安装默认卷快照类。Operator 拥有并控制这些默认卷快照类,且无法删除或修改它们。

您可以创建同一持久性卷声明(PVC)的许多快照,但无法调度定期创建快照。

  • 对于 CephFS,您可以为每个 PVC 创建最多 100 个快照。
  • 对于 RADOS 块设备(RBD),您可以为每个 PVC 创建最多 512 个快照。
注意

持久性卷加密现在支持卷快照。

12.1. 创建卷快照

您可以从持久性卷声明(PVC)页面或 Volume Snapshots 页面创建卷快照。

先决条件

  • 对于一致的快照,PVC 应该处于 Bound 状态,且不处于使用状态。在进行快照前,请确保停止所有 IO。
注意

只有 pod 使用时,OpenShift Data Foundation 才会为 PVC 的卷快照提供崩溃一致性。若要实现应用一致性,请务必先停止正在运行的容器集,以确保快照的一致性,或使用应用提供的任何静默机制来确保快照。

流程

在持久性卷声明页面中
  1. 从 OpenShift Web 控制台点 StoragePersistent Volume Claims
  2. 要创建卷快照,请执行以下操作之一:

    • 在所需 PVC 旁边,点 Action 菜单 (&&)Create Snapshot
    • 点击您要创建快照的 PVC,然后点击 ActionsCreate Snapshot
  3. 输入卷快照的名称。
  4. 从下拉列表中选择 Snapshot Class
  5. Create。您将被重定向到所创建的卷快照的 Details 页面。
从 Volume Snapshots 页面中
  1. 从 OpenShift Web 控制台点 StorageVolume Snapshots
  2. Volume Snapshots 页面中,单击 Create Volume Snapshot
  3. 从下拉列表中选择所需的 Project
  4. 从下拉列表中选择 持久性卷声明
  5. 输入 快照的名称。
  6. 从下拉列表中选择 Snapshot Class
  7. Create。您将被重定向到所创建的卷快照的 Details 页面。

验证步骤

  • 进入 PVC 的 Details 页面,点 Volume Snapshots 选项卡查看卷快照列表。验证是否列出了新卷快照。
  • 从 OpenShift Web 控制台点 StorageVolume Snapshots。验证是否列出了新卷快照。
  • 等待卷快照处于 Ready 状态。

12.2. 恢复卷快照

恢复卷快照时,会创建一个新的持久性卷声明(PVC)。恢复的 PVC 独立于卷快照和父 PVC。

您可以从持久性卷声明页面或 Volume Snapshots 页面恢复卷快照。

流程

在持久性卷声明页面中

只有在存在父 PVC 时,才可从持久性卷声明页面恢复卷快照。

  1. 从 OpenShift Web 控制台点 StoragePersistent Volume Claims
  2. 点击 PVC 名称及卷快照将卷快照恢复为新 PVC。
  3. Volume Snapshots 选项卡中,点您要恢复的卷快照旁的 Action 菜单(swig)。
  4. Restore 作为新 PVC
  5. 输入新 PVC 的名称。
  6. 选择 Storage Class 名称。
  7. 选择您选择的 Access Mode

    重要

    ReadOnlyMany (ROX)访问模式是一个开发者预览功能,受开发人员预览支持限制。开发人员预览版本不应在生产环境中运行,且不受红帽客户门户网站问题单管理系统的支持。如果您需要 ReadOnlyMany 功能的帮助,请联络 ocs-devpreview@redhat.com 邮件列表和红帽开发团队成员将根据可用性和工作计划尽快为您提供协助。请参阅使用新的只读访问模式创建克隆或恢复快照 以使用 ROX 访问模式。

  8. 可选:对于 RBD,选择 卷模式
  9. Restore。您将被重定向到新的 PVC 详情页面。
从 Volume Snapshots 页面中
  1. 从 OpenShift Web 控制台点 StorageVolume Snapshots
  2. Volume Snapshots 选项卡中,点您要恢复的卷快照旁的 Action 菜单(swig)。
  3. Restore 作为新 PVC
  4. 输入新 PVC 的名称。
  5. 选择 Storage Class 名称。
  6. 选择您选择的 Access Mode

    重要

    ReadOnlyMany (ROX)访问模式是一个开发者预览功能,受开发人员预览支持限制。开发人员预览版本不应在生产环境中运行,且不受红帽客户门户网站问题单管理系统的支持。如果您需要 ReadOnlyMany 功能的帮助,请联络 ocs-devpreview@redhat.com 邮件列表和红帽开发团队成员将根据可用性和工作计划尽快为您提供协助。请参阅使用新的只读访问模式创建克隆或恢复快照 以使用 ROX 访问模式。

  7. 可选:对于 RBD,选择 卷模式
  8. Restore。您将被重定向到新的 PVC 详情页面。

验证步骤

  • 从 OpenShift Web 控制台点 StoragePersistent Volume Claims,并确认新 PVC 在 Persistent Volume Claims 页面中列出。
  • 等待新 PVC 进入 Bound 状态。

12.3. 删除卷快照

先决条件

  • 要删除卷快照,应存在该特定卷快照中使用的卷快照类。

流程

从持久性卷声明页面
  1. 从 OpenShift Web 控制台点 StoragePersistent Volume Claims
  2. 点击包含需要删除卷快照的 PVC 名称。
  3. Volume Snapshots 选项卡中,点击所需卷快照旁的 Action 菜单 (&&)Delete Volume Snapshot
从卷快照页面
  1. 从 OpenShift Web 控制台点 StorageVolume Snapshots
  2. Volume Snapshots 页面中,点击所需卷快照菜单 (IPI)Delete Volume Snapshot 旁边。

验证步骤

  • 确保 PVC 详情页面的 Volume Snapshots 选项卡中没有删除的卷快照。
  • StorageVolume Snapshots 并确保没有列出删除的卷快照。

第 13 章 卷克隆

克隆是现有存储卷的副本,用作任何标准卷。您可以创建一个卷克隆,以达到数据的时间副本。持久性卷声明(PVC)无法使用不同的大小克隆。您可以为每个 PVC 创建最多 512 个克隆,用于 CephFS 和 RADOS 块设备(RBD)。

13.1. 创建克隆

先决条件

  • 源 PVC 必须处于 Bound 状态,且不得处于使用状态。
注意

如果 Pod 正在使用 PVC,则不要创建 PVC 克隆。这样做可能会导致数据崩溃,因为 PVC 没有静默(paused)。

流程

  1. 从 OpenShift Web 控制台点 StoragePersistent Volume Claims
  2. 要创建克隆,请执行以下操作之一:

    • 在所需 PVC 旁边,点 Action 菜单 (&&)Clone PVC
    • 点击您要克隆的 PVC,然后点击 ActionsClone PVC
  3. 输入克隆的 Name
  4. 选择您选择的访问模式。

    重要

    ReadOnlyMany (ROX)访问模式是一个开发者预览功能,受开发人员预览支持限制。开发人员预览版本不应在生产环境中运行,且不受红帽客户门户网站问题单管理系统的支持。如果您需要 ReadOnlyMany 功能的帮助,请联络 ocs-devpreview@redhat.com 邮件列表和红帽开发团队成员将根据可用性和工作计划尽快为您提供协助。请参阅使用新的只读访问模式创建克隆或恢复快照 以使用 ROX 访问模式。

  5. 输入克隆所需的大小。
  6. 选择您要在其中创建克隆的存储类。

    存储类可以是任何 RBD 存储类,它不一定与父 PVC 相同。

  7. 单击 Clone。您将被重定向到新的 PVC 详情页面。
  8. 等待克隆的 PVC 状态变为 Bound

    克隆的 PVC 现在可供 pod 使用。这个克隆的 PVC 独立于其 dataSource PVC。

第 14 章 管理容器存储接口(CSI)组件放置

每个集群由多个专用节点组成,如 infrastorage 节点。但是,具有自定义污点的 infra 节点将无法在节点上使用 OpenShift Data Foundation 持久性卷声明(PVC)。因此,如果要使用这样的节点,可以设置容限来在节点上调出 csi-plugins

流程

  1. 编辑 configmap,为自定义污点添加容限。记住在退出编辑器前保存。

    Copy to Clipboard Toggle word wrap
    $ oc edit configmap rook-ceph-operator-config -n openshift-storage
  2. 显示 configmap 以检查添加的容限。

    Copy to Clipboard Toggle word wrap
    $ oc get configmap rook-ceph-operator-config -n openshift-storage -o yaml

    为污点添加的容限的输出示例 nodetype=infra:NoSchedule

    Copy to Clipboard Toggle word wrap
    apiVersion: v1
    data:
    [...]
      CSI_PLUGIN_TOLERATIONS: |
        - key: nodetype
          operator: Equal
          value: "infra"
          effect: NoSchedule
        - key: node.ocs.openshift.io/storage
          operator: Equal
          value: "true"
          effect: NoSchedule
    [...]
    kind: ConfigMap
    metadata:
    [...]
    注意

    确保 Tolerations value 字段中的所有非字符串值都带有双引号。例如,值是 true (类型为布尔值),而类型为 int 的 1 必须是 "true" 和 "1"。

  3. 如果 csi-cephfsplugin-* 和 csi-rbdplugin-* pod 无法自行在 infra 节点上出现,重启 rook-ceph-operator

    Copy to Clipboard Toggle word wrap
    $ oc delete -n openshift-storage pod <name of the rook_ceph_operator pod>

    示例:

    Copy to Clipboard Toggle word wrap
    $ oc delete -n openshift-storage pod rook-ceph-operator-5446f9b95b-jrn2j
    
    pod "rook-ceph-operator-5446f9b95b-jrn2j" deleted

验证步骤

验证 csi-cephfsplugin-* 和 csi-rbdplugin-* pod 是否在 infra 节点上运行。

第 15 章 在 CephFS 中使用双向复制

要在数据弹性不是主要关注时减少 CephFS 的存储开销,您可以选择使用双向复制(replica-2)。这可减少使用的存储空间量,并降低容错程度。

将 replica-2 用于 CephFS 的方法有两种:

15.1. 将现有默认 CephFS 数据池编辑到 replica-2

使用此流程将现有默认 CephFS 池编辑为 replica-2,并将它与默认的 CephFS storageclass 搭配使用。

流程

  1. 修补 storagecluster,将默认 CephFS 数据池更改为 replica-2。

    Copy to Clipboard Toggle word wrap
    $ oc patch storagecluster ocs-storagecluster -n openshift-storage --type json --patch '[{ "op": "replace", "path": "/spec/managedResources/cephFilesystems/dataPoolSpec/replicated/size", "value": 2 }]'
    storagecluster.ocs.openshift.io/ocs-storagecluster patched
    Copy to Clipboard Toggle word wrap
    $ oc get cephfilesystem ocs-storagecluster-cephfilesystem -o=jsonpath='{.spec.dataPools}' | jq
    [
      {
        "application": "",
        "deviceClass": "ssd",
        "erasureCoded": {
          "codingChunks": 0,
          "dataChunks": 0
        },
        "failureDomain": "zone",
        "mirroring": {},
        "quotas": {},
        "replicated": {
          "replicasPerFailureDomain": 1,
          "size": 2,
          "targetSizeRatio": 0.49
        },
        "statusCheck": {
          "mirror": {}
        }
      }
    ]
  2. 检查池详细信息。

    Copy to Clipboard Toggle word wrap
    $ ceph osd pool ls | grep filesystem
    ocs-storagecluster-cephfilesystem-metadata
    ocs-storagecluster-cephfilesystem-data0

15.2. 使用 replica-2 添加额外的 CephFS 数据池

使用这个流程,使用 replica-2 添加额外的 CephFS 数据池。

先决条件

  • 确保您已登录到 OpenShift Container Platform Web 控制台,并且 OpenShift Data Foundation 集群处于 Ready 状态。

流程

  1. StorageStorageClassesCreate Storage Class
  2. 选择 CephFS Provisioner
  3. 存储池 下,单击 Create new storage pool

    1. 填写 Create Storage Pool 字段。
    2. 数据保护策略下,选择 双向复制
    3. 确认存储池创建
  4. 在 Storage Class 创建表单中,选择新创建的存储池。
  5. 确认存储类创建。

验证

  1. StorageData Foundation
  2. Storage systems 选项卡中,选择新的存储系统。
  3. 存储系统的 Details 选项卡反映了您在创建过程中选择的正确卷和设备类型

第 16 章 使用 NFS 创建导出

本节论述了如何使用 NFS 创建导出,然后可以从 OpenShift 集群外部访问。

按照以下步骤创建导出并从 OpenShift 集群外部访问它们:

16.1. 启用 NFS 功能

要使用 NFS 功能,您需要在集群创建后使用命令行界面(CLI)在存储集群中启用它。您还可以使用用户界面创建存储集群时启用 NFS 功能。

先决条件

  • OpenShift Data Foundation 在 openshift-storage 命名空间中安装并运行。
  • OpenShift Data Foundation 安装包含一个 CephFilesystem。

流程

  • 运行以下命令通过 CLI 启用 NFS 功能:
Copy to Clipboard Toggle word wrap
$ oc --namespace openshift-storage patch storageclusters.ocs.openshift.io ocs-storagecluster --type merge --patch '{"spec": {"nfs":{"enable": true}}}'

验证步骤

满足以下条件时,NFS 安装和配置已完成:

  • 名为 ocs-storagecluster-cephnfs 的 CephNFS 资源的状态为 Ready
  • 检查所有 csi-nfsplugin factory pod 是否正在运行:

    Copy to Clipboard Toggle word wrap
    oc -n openshift-storage describe cephnfs ocs-storagecluster-cephnfs
    Copy to Clipboard Toggle word wrap
    oc -n openshift-storage get pod | grep csi-nfsplugin

    输出具有多个 pod。例如:

    Copy to Clipboard Toggle word wrap
    csi-nfsplugin-47qwq                                          2/2     Running  0  10s
    csi-nfsplugin-77947                                          2/2     Running  0  10s
    csi-nfsplugin-ct2pm                                          2/2     Running  0  10s
    csi-nfsplugin-provisioner-f85b75fbb-2rm2w                    2/2     Running  0  10s
    csi-nfsplugin-provisioner-f85b75fbb-8nj5h                    2/2     Running  0  10s

16.2. 创建 NFS 导出

NFS 导出是通过针对 ocs-storagecluster-ceph-nfs StorageClass 创建的持久性卷声明(PVC)。

您可以通过两种方式创建 NFS PVC:

使用 yaml 创建 NFS PVC。

以下是一个 PVC 示例。

注意

对于 NFS 卷,volumeMode: Block 将无法正常工作。

Copy to Clipboard Toggle word wrap
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
 name: <desired_name>
spec:
 accessModes:
   - ReadWriteOnce
 resources:
   requests:
     storage: 1Gi
 storageClassName: ocs-storagecluster-ceph-nfs
<desired_name>
为 PVC 指定名称,如 my-nfs-export

当 PVC 达到 Bound 状态后,会创建导出。

从 OpenShift Container Platform Web 控制台创建 NFS PVC。

先决条件

  • 确保您已登录到 OpenShift Container Platform Web 控制台,并且为存储集群启用了 NFS 功能。

流程

  1. 在 OpenShift Web 控制台中,点 StoragePersistent Volume Claims
  2. Project 设置为 openshift-storage
  3. Create PersistentVolumeClaim

    1. 指定 Storage Class,ocs-storagecluster-ceph-nfs
    2. 指定 PVC 名称,例如 my-nfs-export
    3. 选择所需的 Access Mode
    4. 根据应用程序要求指定一个 Size
    5. 选择 卷模式 作为文件系统

      注: NFS PVC 不支持 Block 模式

    6. Create 并等待 PVC 处于 Bound 状态。

16.3. 在集群中消耗 NFS 导出

Kubernetes 应用程序 pod 可以通过挂载之前创建的 PVC 来消耗创建的 NFS 导出。

您可以通过两种方式挂载 PVC 之一:

使用 YAML:

以下是使用 第 16.2 节 “创建 NFS 导出” 中创建的示例 PVC 的 pod 示例:

Copy to Clipboard Toggle word wrap
apiVersion: v1
kind: Pod
metadata:
 name: nfs-export-example
spec:
 containers:
   - name: web-server
     image: nginx
     volumeMounts:
       - name: nfs-export-pvc
         mountPath: /var/lib/www/html
 volumes:
   - name: nfs-export-pvc
     persistentVolumeClaim:
       claimName: <pvc_name>
       readOnly: false
<pvc_name>
指定之前创建的 PVC,如 my-nfs-export

使用 OpenShift Container Platform Web 控制台。

流程

  1. 在 OpenShift Container Platform Web 控制台中导航至 WorkloadsPods
  2. Create Pod 以创建新应用程序 pod。
  3. metadata 部分下添加一个名称。例如: nfs-export-example,其 namespaceopenshift-storage
  4. spec: 部分,使用 imagevolumeMounts 部分添加 containers: 部分:

    Copy to Clipboard Toggle word wrap
    apiVersion: v1
    kind: Pod
    metadata:
     name: nfs-export-example
     namespace: openshift-storage
    spec:
     containers:
       - name: web-server
         image: nginx
         volumeMounts:
           - name: <volume_name>
             mountPath: /var/lib/www/html

    例如:

    Copy to Clipboard Toggle word wrap
    apiVersion: v1
    kind: Pod
    metadata:
     name: nfs-export-example
     namespace: openshift-storage
    spec:
     containers:
       - name: web-server
         image: nginx
         volumeMounts:
           - name: nfs-export-pvc
             mountPath: /var/lib/www/html
  5. spec: 部分下,添加 volumes: 部分,将 NFS PVC 添加为应用程序 pod 的卷:

    Copy to Clipboard Toggle word wrap
    volumes:
      - name: <volume_name>
        persistentVolumeClaim:
          claimName: <pvc_name>

    例如:

    Copy to Clipboard Toggle word wrap
    volumes:
      - name: nfs-export-pvc
        persistentVolumeClaim:
          claimName: my-nfs-export

16.4. 从 OpenShift 集群外部消耗 NFS 导出

OpenShift 集群外部的 NFS 客户端可以挂载由之前创建的 PVC 创建的 NFS 导出。

流程

  1. 启用 nfs 标志后,singe-server CephNFS 由 Rook 部署。您需要获取要在下一步中使用的 nfs-ganesha 服务器的 ceph_nfs 字段的值:

    Copy to Clipboard Toggle word wrap
    $ oc get pods -n openshift-storage | grep rook-ceph-nfs
    Copy to Clipboard Toggle word wrap
    $ oc describe pod  <name of the rook-ceph-nfs pod> | grep ceph_nfs

    例如:

    Copy to Clipboard Toggle word wrap
    $ oc describe pod rook-ceph-nfs-ocs-storagecluster-cephnfs-a-7bb484b4bf-bbdhs | grep ceph_nfs
      ceph_nfs=my-nfs
  2. 通过创建 Kubernetes LoadBalancer 服务,在 OpenShift 集群外公开 NFS 服务器。以下示例创建了 LoadBalancer 服务,并引用 OpenShift Data Foundation 创建的 NFS 服务器。

    Copy to Clipboard Toggle word wrap
    apiVersion: v1
    kind: Service
    metadata:
     name: rook-ceph-nfs-ocs-storagecluster-cephnfs-load-balancer
     namespace: openshift-storage
    spec:
     ports:
       - name: nfs
         port: 2049
     type: LoadBalancer
     externalTrafficPolicy: Local
     selector:
       app: rook-ceph-nfs
       ceph_nfs: <my-nfs>
       instance: a

    <my-nfs > 替换为在第 1 步中获取的值。

  3. 收集连接信息。外部客户端需要连接到导出的信息来自为 PVC 创建的持久性卷(PV),以及上一步中创建的 LoadBalancer 服务的状态。

    1. 从 PV 获取共享路径。

      1. 获取与 NFS 导出的 PVC 关联的 PV 名称:

        Copy to Clipboard Toggle word wrap
        $ oc get pvc <pvc_name> --output jsonpath='{.spec.volumeName}'
        pvc-39c5c467-d9d3-4898-84f7-936ea52fd99d

        <pvc_name > 替换为您自己的 PVC 名称。例如:

        Copy to Clipboard Toggle word wrap
        oc get pvc pvc-39c5c467-d9d3-4898-84f7-936ea52fd99d --output jsonpath='{.spec.volumeName}'
        pvc-39c5c467-d9d3-4898-84f7-936ea52fd99d
      2. 使用前面获取的 PV 名称获取 NFS 导出的共享路径:

        Copy to Clipboard Toggle word wrap
        $ oc get pv pvc-39c5c467-d9d3-4898-84f7-936ea52fd99d --output jsonpath='{.spec.csi.volumeAttributes.share}'
        /0001-0011-openshift-storage-0000000000000001-ba9426ab-d61b-11ec-9ffd-0a580a800215
    2. 获取 NFS 服务器的入口地址。服务的入口状态可能有多个地址。选择外部客户端所需的用途。在以下示例中,只有一个地址:主机名 ingress-id.somedomain.com

      Copy to Clipboard Toggle word wrap
      $ oc -n openshift-storage get service rook-ceph-nfs-ocs-storagecluster-cephnfs-load-balancer --output jsonpath='{.status.loadBalancer.ingress}'
      [{"hostname":"ingress-id.somedomain.com"}]
  4. 使用上一步中的共享路径和入口地址连接外部客户端。以下示例将导出挂载到客户端的目录路径 /export/mount/path

    Copy to Clipboard Toggle word wrap
    $ mount -t nfs4 -o proto=tcp ingress-id.somedomain.com:/0001-0011-openshift-storage-0000000000000001-ba9426ab-d61b-11ec-9ffd-0a580a800215 /export/mount/path

    如果这无法立即工作,则可能是 Kubernetes 环境仍需要时间来配置网络资源,以允许到 NFS 服务器的入口。

第 17 章 注解加密的 RBD 存储类

从 OpenShift Data Foundation 4.14 开始,当 OpenShift 控制台创建一个启用了加密的 RADOS 块设备(RBD)存储类时,会自动设置注解。但是,您需要为之前在升级到 OpenShift Data Foundation 版本 4.14 之前创建的任何加密 RBD 存储类中添加注解 cdi.kubevirt.io/clone-strategy=copy。这可让客户数据集成(CDI)使用主机辅助克隆而不是默认的智能克隆。

用于访问加密卷的密钥与创建卷的命名空间相关联。将加密卷克隆到新命名空间时,比如置备新的 OpenShift Virtualization 虚拟机,必须创建一个新卷,源卷的内容必须复制到新卷中。如果存储类被正确注解,会自动触发此行为。

第 18 章 在 OSD 回填过程中启用更快的客户端 IO 或恢复 IO

在维护窗口期间,您可能希望使用客户端 IO 或恢复 IO。与客户端 IO 相比,恢复 IO 会显著减少 OSD 恢复时间。有效恢复配置集选项为 balancedhigh_client_opshigh_recovery_ops。使用以下步骤设置恢复配置集。

先决条件

流程

  1. 检查当前的恢复配置集:

    Copy to Clipboard Toggle word wrap
    $ odf get recovery-profile
  2. 修改恢复配置集:

    Copy to Clipboard Toggle word wrap
    $ odf set recovery-profile <option>

    使用 balancedhigh_client_opshigh_recovery_ops 替换 option

  3. 验证更新的恢复配置集:

    Copy to Clipboard Toggle word wrap
    $ odf get recovery-profile

第 19 章 设置 Ceph OSD 完整阈值

您可以使用 ODF CLI 工具或更新 StorageCluster CR 来设置 Ceph OSD 完整阈值。

19.1. 使用 ODF CLI 工具设置 Ceph OSD 完整阈值

您可以使用 ODF CLI 工具临时设置 Ceph OSD 完整阈值。当集群进入 full 状态并且需要立即增加阈值时,这是必需的。

先决条件

流程

使用 set 命令调整 Ceph 完整阈值。set 命令支持子命令 fullbackfillfullnearfull。有关如何使用每个子命令,请参见以下示例。

full

如果 Ceph 防止达到指定容量的 OSD 上的 IO 操作,则此子命令允许更新 Ceph OSD 全满比率。默认值为 0.85

注意

如果该值设为 1.0,如果 OSD 已满并且没有地方增长,集群就变得不可恢复。

例如,将 Ceph OSD 全满比率设置为 0.9,然后添加容量:

Copy to Clipboard Toggle word wrap
$ odf set full 0.9

有关为特定用例添加容量的说明,请参阅扩展存储指南

如果 OSD 继续 处于待处理,或者根本没有处于 up 状态:

  1. 停止所有 IO。
  2. 全满比率 增加到 0.92

    Copy to Clipboard Toggle word wrap
    $ odf set full 0.92
  3. 等待集群重新平衡发生。集群重新平衡完成后,将 full ratio 返回其原始值 0.85 :

    Copy to Clipboard Toggle word wrap
    $ odf set full 0.85

backfillfull

当 Ceph 拒绝回填达到指定容量的 OSD 时,此子命令允许更新 Ceph OSDd backfillfull 比率。默认值为 0.80

注意

如果值设为 1.0,则 OSD 会变得满,并且集群无法回填。

例如,要将 backfillfull 设置为 0.85

Copy to Clipboard Toggle word wrap
$ odf set backfillfull 0.85

nearfull

此子命令允许更新 Ceph OSD nearfull 比率,以防 Ceph 在集群达到指定的容量时返回 nearfull OSD 消息。默认值为 0.75

例如,要将 nearfull 设置为 0.8

Copy to Clipboard Toggle word wrap
$ odf set nearfull 0.8

19.2. 通过更新 StorageCluster CR 设置 Ceph OSD 完整阈值

您可以通过更新 StorageCluster CR 来设置 Ceph OSD 完整阈值。如果要覆盖默认设置,请使用这个步骤。

流程

您可以更新 StorageCluster CR,以更改 fullbackfillfullnearfull 的设置。

full

如果 Ceph 阻止达到指定容量的 OSD 上的 IO 操作,则使用以下命令更新 Ceph OSD 全满比率。默认值为 0.85

注意

如果该值设为 1.0,如果 OSD 已满并且没有地方增长,集群就变得不可恢复。

例如,将 Ceph OSD 全满比率设置为 0.9

Copy to Clipboard Toggle word wrap
$ oc patch storagecluster ocs-storagecluster -n openshift-storage --type json --patch '[{ "op": "replace", "path": "/spec/managedResources/cephCluster/fullRatio", "value": 0.90 }]'

backfillfull

当 Ceph 拒绝回填达到指定容量的 OSD 时,使用以下命令设置 Ceph OSDd backfillfull 比率。默认值为 0.80

注意

如果值设为 1.0,则 OSD 会变得满,并且集群无法回填。

例如,将 backfill full 设置为 0.85

Copy to Clipboard Toggle word wrap
$ oc patch storagecluster ocs-storagecluster -n openshift-storage --type json --patch '[{ "op": "replace", "path": "/spec/managedResources/cephCluster/backfillFullRatio", "value": 0.85 }]'

nearfull

如果 Ceph 在集群达到指定的容量时,使用以下命令设置 Ceph OSD nearfull OSD 消息。默认值为 0.75

例如,将 nearfull 设置为 0.8

Copy to Clipboard Toggle word wrap
$ oc patch storagecluster ocs-storagecluster -n openshift-storage --type json --patch '[{ "op": "replace", "path": "/spec/managedResources/cephCluster/nearFullRatio", "value": 0.8 }]'
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat, Inc.