IBM Cloud Docs
IBM Cloud 存储实用程序

IBM Cloud 存储实用程序

经典:安装 IBM Cloud Block Storage Attacher 插件(测试版)

使用 IBM Cloud Block Storage Attacher 插件将原始、未格式化和未加载块存储附加到群集中的经典工作节点上。

IBM Cloud Block Storage 连接程序插件仅可用于经典工作程序节点。 如果要将未格式化的原始块存储器连接到 VPC 工作程序节点,请参阅 添加原始 Block Storage for VPC 工作程序节点

例如,您想使用软件定义存储解决方案(SDS)存储数据,如 Portworx 等软件定义存储解决方案来存储数据,但又不想使用为 SDS 使用而优化的、带有额外本地磁盘的传统裸机工作节点。 要将本地磁盘添加到经典非 SDS 工作节点,您必须在 IBM Cloud 基础架构账户中手动创建块存储设备,然后使用 IBM Cloud Block Volume Attacher 将存储附加到非 SDS 工作节点。

IBM Cloud Block Volume Attachcher 插件会在集群中的每个工作程序节点上创建 pod 以作为守护程序集的一部分,还会设置一个 Kubernetes 存储类,稍后您需要使用此存储类将块存储设备连接到非 SDS 工作程序节点。

要了解有关如何更新或除去 IBM Cloud Block Volume Attacher 插件的指示信息吗? 请参阅更新插件除去插件

  1. 遵循指示信息 在本地机器上安装 Helm 客户机版本 3。

  2. 更新 Helm 存储库以在此存储库中检索所有最新版本的 Helm chart。

    helm repo update
    
  3. 安装 IBM Cloud Block Volume Attacher 插件。 安装该插件时,会将预定义的块存储类添加到集群中。

    helm install block-attacher iks-charts/ibm-block-storage-attacher --namespace kube-system
    

    示例输出

    NAME:   block-volume-attacher
    LAST DEPLOYED: Thu Sep 13 22:48:18 2018
    NAMESPACE: default
    STATUS: DEPLOYED
    
    RESOURCES:
    ==> v1beta1/ClusterRoleBinding
    NAME                             AGE
    ibmcloud-block-storage-attacher  1s
    
    ==> v1beta1/DaemonSet
    NAME                             DESIRED  CURRENT  READY  UP-TO-DATE  AVAILABLE  NODE SELECTOR  AGE
    ibmcloud-block-storage-attacher  0        0        0      0           0          <none>         1s
    
    ==> v1/StorageClass
    NAME                 PROVISIONER                AGE
    ibmc-block-attacher  ibm.io/ibmc-blockattacher  1s
    
    ==> v1/ServiceAccount
    NAME                             SECRETS  AGE
    ibmcloud-block-storage-attacher  1        1s
    
    ==> v1beta1/ClusterRole
    NAME                             AGE
    ibmcloud-block-storage-attacher  1s
    
    NOTES:
    Thank you for installing: ibmcloud-block-storage-attacher.   Your release is named: block-volume-attacher
    
    Please refer Chart README.md file for attaching a block storage
    Please refer Chart RELEASE.md to see the release details/fixes
    
  4. 验证 IBM Cloud Block Volume Attacher 守护程序集是否已成功安装。

    oc get pod -n kube-system -o wide | grep attacher
    

    示例输出

    ibmcloud-block-storage-attacher-z7cv6           1/1       Running            0          19m
    

    如果看到一个或多个 ibmcloud-block-storage-attacher pod,那么表明安装成功。 pod 数等于集群中的工作程序节点数。 所有 pod 都必须处于 Running 状态。

  5. 验证 IBM Cloud Block Volume Attacher 的存储类是否已成功创建。

    oc get sc | grep attacher
    

    示例输出

    ibmc-block-attacher       ibm.io/ibmc-blockattacher   11m
    

更新 IBM Cloud Block Storage Attacher 插件

您可以将现有 IBM Cloud Block Storage Attacher 插件升级到最新版本。

  1. 更新 Helm 存储库以在此存储库中检索所有最新版本的 Helm chart。

    helm repo update
    
  2. 可选:将最新 Helm chart 下载到本地计算机。 然后,解压缩包并查看 release.md 文件,以了解最新的发行版信息。

    helm pull iks-charts/ibmcloud-block-storage-plugin
    
  3. 查找 IBM Cloud Block Storage Attacher 插件的 Helm chart 名称。

    helm ls -A
    

    示例输出

    <helm_chart_name>    1           Wed Aug  1 14:55:15 2022    DEPLOYED    ibm-block-storage-attacher-1.0.0    default
    
  4. 将 IBM Cloud Block Storage Attacher 升级到最新版本。

    helm upgrade --force --recreate-pods <helm_chart_name> ibm-block-storage-attacher
    

除去 IBM Cloud Block Volume Attacher 插件

如果不想在群集中配置和使用 IBM Cloud Block Storage Attacher 插件,可以卸载 Helm 图表。

  1. 查找 IBM Cloud Block Storage Attacher 插件的 Helm chart 名称。

    helm list | grep ibm-block-storage-attacher
    

    示例输出

    <helm_chart_name>    1           Wed Aug  1 14:55:15 2022    DEPLOYED    ibm-block-storage-attacher-1.0.0    default
    
  2. 通过除去 Helm chart 来删除 IBM Cloud Block Storage Attacher 插件。

    helm uninstall <helm_chart_name> -n <namespace>
    
  3. 验证 IBM Cloud Block Storage Attacher 插件 pod 是否已除去。

    oc get pod -n kube-system -o wide | grep attacher
    

    如果 CLI 输出中未显示任何 pod,那么表明已成功除去 pod。

  4. 验证 IBM Cloud Block Storage Attacher 存储类是否已除去。

    oc get sc | grep attacher
    

如果 CLI 输出中未显示任何存储类,那么表明已成功除去存储类。

经典:为特定工作节点手动添加块存储

要添加不同的块存储器配置,将块存储器仅添加到一部分的工作程序节点,或者要拥有对供应过程的更多控制权,请使用此选项。

本主题中的指示信息仅适用于经典工作程序节点。 如果要将未格式化的原始块存储器连接到 VPC 工作程序节点,请参阅 将原始 Block Storage for VPC 添加到工作程序节点

  1. 列出集群中的工作程序节点,并记下要在其中添加块存储设备的非 SDS 工作程序节点的专用 IP 地址和专区。

    ibmcloud oc worker ls --cluster <cluster_name_or_ID>
    
  2. 查看决定块存储器配置中的步骤 3 和 4,以选择要添加到非 SDS 工作程序节点的块存储设备的类型、大小和 IOPS 数。

  3. 在非 SDS 工作程序节点所在的专区中创建块存储设备。

    示例:以每 GB 两个 IOPS 配置 20 GB 持久块存储。

    ibmcloud sl block volume-order --storage-type endurance --size 20 --tier 2 --os-type LINUX --datacenter dal10
    

    例如,配置 20 GB 性能块存储,IOPS 为 100。

    ibmcloud sl block volume-order --storage-type performance --size 20 --iops 100 --os-type LINUX --datacenter dal10
    
  4. 确认块存储设备已创建,并注意卷的 id注意: 如果您没有立即看到块存储设备,请等待几分钟。 然后,重新运行此命令。

    ibmcloud sl block volume-list
    

    示例输出

    id         username          datacenter   storage_type                capacity_gb   bytes_used   ip_addr         lunId   active_transactions   
    123456789  IBM02SL1234567-8  dal10        performance_block_storage   20            -            161.12.34.123   0       0   
    
  5. 查看音量的详细信息,并注意 Target IPLUN Id

    ibmcloud sl block volume-detail <volume_ID>
    

    示例输出

    NAME                       Value   
    ID                         1234567890   
    User name                  IBM123A4567890-1   
    Type                       performance_block_storage   
    Capacity (GB)              20   
    LUN Id                     0   
    IOPS                       100   
    Datacenter                 dal10   
    Target IP                  161.12.34.123   
    # of Active Transactions   0   
    Replicant Count            0
    
  6. 授权非 SDS 工作程序节点访问块存储设备。 将 <volume_ID> 替换为之前获取的块存储设备的卷 ID,将 <private_worker_IP> 替换为要连接设备的非 SDS 工作节点的私有 IP 地址。

    ibmcloud sl block access-authorize <volume_ID> -p <private_worker_IP>
    

    示例输出

    The IP address 123456789 was authorized to access <volume_ID>.
    
  7. 验证您的非 SDS 工作节点是否已成功授权,并注意 host_iqnusernamepassword

    ibmcloud sl block access-list <volume_ID>
    

    示例输出

    ID          name                 type   private_ip_address   source_subnet   host_iqn                                      username   password           allowed_host_id   
    123456789   <private_worker_IP>  IP     <private_worker_IP>  -               iqn.2018-09.com.ibm:ibm02su1543159-i106288771   IBM02SU1543159-I106288771   R6lqLBj9al6e2lbp   1146581   
    

    如果分配了 host_iqnusernamepassword,那么表明授权成功。

  8. 将块存储设备连接到工作程序节点

经典:将原始块存储连接到非 SDS 工作节点

要将块存储设备连接到非 SDS 工作程序节点,必须使用 IBM Cloud Block Volume Attacher 存储类和块存储设备详细信息来创建持久卷 (PV)。

本主题中的指示信息仅适用于经典工作程序节点。 如果要将未格式化的原始块存储器连接到 VPC 工作程序节点,请参阅 将原始 Block Storage for VPC 添加到工作程序节点

  1. 准备创建 PV。

    • 如果使用 mkpvyaml 容器,请运行以下命令。

      1. 打开 pv-<cluster_name>.yaml 文件。

        nano pv-<cluster_name>.yaml
        
      2. 查看 PV 的配置。

    • 如果您手动添加了块存储:**

      1. 创建 pv.yaml 文件。 以下命令会使用 nano 编辑器来创建该文件。

        nano pv.yaml
        
      2. 将块存储设备的详细信息添加到 PV。

        apiVersion: v1
        kind: PersistentVolume
        metadata:
          name: <pv_name>
          annotations:
            ibm.io/iqn: "<IQN_hostname>"
            ibm.io/username: "<username>"
            ibm.io/password: "<password>"
            ibm.io/targetip: "<targetIP>"
            ibm.io/lunid: "<lunID>"
            ibm.io/nodeip: "<private_worker_IP>"
            ibm.io/volID: "<volume_ID>"
        spec:
          capacity:
            storage: <size>
          accessModes:
            - ReadWriteOnce
          hostPath:
              path: /
          storageClassName: ibmc-block-attacher
        
      metadata.name
      输入 PV 的名称。
      ibm.io/iqn
      输入先前检索到的 IQN 主机名。
      ibm.io/username
      输入您之前获取的 IBM Cloud 基础设施用户名。
      ibm.io/password
      输入先前检索到的 IBM Cloud 基础架构密码。
      ibm.io/targetip
      输入先前检索到的目标 IP。
      ibm.io/lunid
      输入先前检索到的块存储设备的 LUN 标识。
      ibm.io/nodeip
      输入要在其中连接块存储设备并且先前授权其访问块存储设备的工作程序节点的专用 IP 地址。
      ibm.io/volID
      输入先前检索到的块存储卷的标识。
      storage
      输入先前创建的块存储设备的大小。 例如,如果块存储设备为 20 千兆字节,请输入 20Gi
  2. 创建 PV 以将块存储设备连接到非 SDS 工作程序节点。

    • 如果使用 mkpvyaml 容器,请运行以下命令。

      oc apply -f pv-<cluster_name>.yaml
      
    • 如果您手动添加了块存储器,请运行以下命令。

      oc apply -f pv.yaml
      
  3. 验证块存储器是否已成功连接到工作程序节点。

    oc describe pv <pv_name>
    

    示例输出

    NAME:            kube-wdc07-cr398f790bc285496dbeb8e9137bc6409a-w1-pv1
    Labels:          <none>
    Annotations:     ibm.io/attachstatus=attached
                    ibm.io/dm=/dev/dm-1
                    ibm.io/iqn=iqn.2018-09.com.ibm:ibm02su1543159-i106288771
                    ibm.io/lunid=0
                    ibm.io/mpath=3600a09803830445455244c4a38754c66
                    ibm.io/nodeip=10.176.48.67
                    ibm.io/password=R6lqLBj9al6e2lbp
                    ibm.io/targetip=161.26.98.114
                    ibm.io/username=IBM02SU1543159-I106288771
                    kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"v1","kind":"PersistentVolume","metadata":{"annotations":{"ibm.io/iqn":"iqn.2018-09.com.ibm:ibm02su1543159-i106288771","ibm.io/lunid":"0"...
    Finalizers:      []
    StorageClass:    ibmc-block-attacher
    Status:          Available
    Claim:           
    Reclaim Policy:  Retain
    Access Modes:    RWO
    Capacity:        20Gi
    Node Affinity:   <none>
    Message:         
    Source:
        Type:          HostPath (bare host directory volume)
        Path:          /
        HostPathType:  
    Events:            <none>
    

    如果 ibm.io/dm 设置为设备标识(如 /dev/dm/1),并且您可以在 CLI 输出的 Annotations 部分中看到 ibm.io/attachstatus=attached,那么表明块存储设备已成功连接。

如果想要拆离卷,可以删除 PV。 已拆离的卷仍可由特定工作程序节点进行访问,当您使用 IBM Cloud Block Volume Attacher 存储类创建新的 PV 以将其他卷连接到同一工作程序节点时,会重新连接已拆离的卷。 要避免重新连接旧的已拆离卷,请使用 ibmcloud sl block access-revoke 命令取消工作程序节点对已拆离卷的访问权。 拆离卷并不会从 IBM Cloud 基础架构帐户中除去该卷。 要取消该卷的计费,必须手动 从 IBM Cloud 基础架构帐户中除去存储器

VPC: 使用 API 将原始 Block Storage for VPC 添加到 VPC 工作程序节点

您可以使用 Kubernetes Service API 将未经格式化的原始 Block Storage for Classic 连接和拆离到 VPC 集群中的工作程序节点。

只能将卷连接到一个工作程序节点。 请确保卷与工作程序节点位于同一专区中,以便连接成功。

您还可以使用 CLI 来连接,拆离和列出工作程序节点的卷连接。 有关更多信息,请参阅 存储 CLI 参考

本主题中的指示信息仅适用于 VPC 工作程序节点。 如果要将原始无格式块存储器连接到经典工作程序节点,那么必须安装 IBM Cloud Block Storage attacher 插件

开始之前:

访问 Red Hat OpenShift 集群

  1. 检查 VPC 工作程序节点所在的区域和区域。

    ibmcloud oc worker ls -c <cluster_name>
    
  2. 决定最符合容量和性能要求的 Block Storage for Classic 配置文件

  3. 供应 Block Storage for Classic 卷。 供应的卷必须与工作程序节点位于同一资源组,区域和区域中。

  4. 检索 IAM 令牌。

    ibmcloud iam oauth-tokens
    
  5. 检索要连接到 Block Storage for Classic 实例的工作程序节点的标识。 确保选择与 Block Storage for Classic 卷位于同一专区中的工作程序节点。

    ibmcloud oc worker ls --cluster <cluster_name_or_ID>
    
  6. 使用 POST 请求将 Block Storage for Classic 卷连接到工作程序节点。

    示例请求

    curl -X POST "https://containers.cloud.ibm.com/global/v2/storage/createAttachment" -H  "accept: application/json" -H  "Authorization: <IAM_token>" -H  "X-Auth-Resource-Group-ID: <resource_group>" -H  "Content-Type: application/json" -d "{  \"cluster\": \"<cluster_name_or_ID>\",  \"volumeID\": \"<volume_ID>\",  \"worker\": \"<worker_ID>\"}"
    
    IAM_token
    当前会话的 IAM OAuth 令牌。 您可以通过运行 ibmcloud iam oauth-tokens 来检索此值。
    cluster_name_or_ID
    分配给集群的唯一标识或名称。 您可以通过运行 ibmcloud oc cluster ls 来检索此标识。
    worker_ID
    分配给要在其中连接卷的工作程序节点的唯一标识。 您可以通过运行 ibmcloud oc worker ls -c <cluster_name> 来检索此值。
    volume_ID
    分配给 Block Storage for Classic 卷的唯一标识。 您可以通过运行 ibmcloud is volumes 来检索 Block Storage for Classic 卷的列表。

    示例响应。

    {
        "id": "0111-1aaa11a1-aa1a-111a-111b-1111a1dad1bc",
    "volume": {
        "name": "my-vol",
        "id": "r001-11aa0d59-a1aa-1a11-11ca-ba2bc11e01aa"
    },
    "device": {
        "id": ""
    },
    "name": "volume-attachment",
    "status": "attaching",
    "type": "data"
    }
    
  7. 通过 查看 VPC 工作程序节点的现有卷附件 来验证附件。

使用 API 从 VPC 集群中的工作程序节点拆离原始和未格式化的 Block Storage for Classic

您可以使用 DELETE 请求从 VPC 工作程序节点拆离存储器。

从 VPC 集群拆离存储器不会除去 Block Storage for Classic 卷或存储在该卷中的数据。 您将继续计费,直到 您手动删除卷 为止。

  1. 标识要除去的存储卷,并记下卷标识。

    ibmcloud is volumes
    
  2. 了解音量的详细信息。 此命令返回工作程序节点标识和连接标识。 记下工作程序节点标识。 在以下命令中,此标识将作为“实例名称”返回。

    ibmcloud is volume <volume_ID>
    
  3. 检索 PV 的列表。 此命令将返回 PV 的列表,然后可以使用这些 PV 来确定哪些 PVC 使用要除去的卷。

    oc get pv
    
  4. 描述使用该卷的 PV。 如果您不知道哪个 PV 使用要除去的卷,那么可以在集群中的每个 PV 上运行 describe pv 命令。 请注意使用 PV 的 PVC。

    oc describe pv <pv_name>
    
  5. 检查存储卷是否正由 pod 使用。 以下命令显示安装卷和关联 PVC 的 pod。 如果未返回任何 pod,那么表示存储器未在使用中。

    oc get pods --all-namespaces -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.volumes[*]}{.persistentVolumeClaim.claimName}{" "}{end}{end}' | grep "<pvc_name>"
    
  6. 如果卷正在使用的 pod 是部署的一部分,请删除该部署。 如果 pod 不属于部署,请删除 pod。

    oc delete deployment <deployment_name>
    
    oc delete pod <pod_name>
    
  7. 删除 PVC 和 PV。

    oc delete pvc <pvc_name>
    
    oc delete pv <pv_name>
    
  8. 检索 IAM 令牌。

    ibmcloud iam oauth-tokens
    
  9. 使用 POST 请求拆离存储器。

    示例请求

    curl -X POST "https://containers.cloud.ibm.com/global/v2/storage/deleteAttachment" -H  "accept: application/json" -H  "Authorization: <IAM_token>" -H  "X-Auth-Resource-Group-ID: <resource_group>" -H  "Content-Type: application/json" -d "{  \"cluster\": \"<cluster_name_or_ID\",  \"volumeAttachmentID\": \"<volume_attachment_ID>\",  \"volumeID\": \"<volume_ID>\",  \"worker\": \"<worker_ID>\"}"
    
    IAM_token
    当前会话的 IAM OAuth 令牌。 您可以通过运行 ibmcloud iam oauth-tokens 来检索此值。
    cluster_name_or_ID
    分配给集群的唯一标识或名称。 您可以通过运行 ibmcloud oc cluster ls 来检索此标识。
    worker_ID
    分配给要在其中连接卷的工作程序节点的唯一标识。 您可以通过运行 ibmcloud oc worker ls -c <cluster_name> 来检索此值。
    volume_ID
    分配给 Block Storage for Classic 卷的唯一标识。 您可以通过运行 ibmcloud is volumes 来检索 Block Storage for Classic 卷的列表。
    volume_attachment_ID
    分配给卷连接的唯一标识。 您可以通过运行 ibmcloud is volume <volume_ID> 来检索此标识。

使用 API 查看 VPC 工作程序节点的卷连接详细信息

您可以使用 GET 请求来检索 VPC 工作程序节点的卷连接详细信息。

  1. 检索 IAM 令牌。

    ibmcloud iam oauth-tokens
    
  2. 读取部署群集的资源组 ID。

    ibmcloud oc cluster get <cluster_name_or_ID> | grep "Resource Group ID"
    
  3. 检索要查看其卷连接详细信息的工作程序节点的标识。 确保选择与 Block Storage for Classic 实例位于同一专区中的工作程序节点。

    ibmcloud oc worker ls --cluster <cluster_name_or_ID>
    
  4. 查看工作程序节点上的现有卷连接的列表。

    curl -X GET "https://containers.cloud.ibm.com/v2/storage/getAttachments?cluster=<cluster_ID>&worker=<worker_ID>" --header "X-Auth-Resource-Group-ID: <resource_group_ID>" --header "Authorization: <IAM_token>"
    
  5. 检索特定附件的详细信息。

    curl -X GET "https://containers.cloud.ibm.com/v2/storage/getAttachment?cluster=<cluster_ID>&worker=<worker_ID>&volumeAttachmentID=<volume_attachment_ID>" --header "X-Auth-Resource-Group-ID: <resource_group_ID>" --header "Authorization: <IAM_token>"
    
    IAM_token
    当前会话的 IAM OAuth 令牌。 您可以通过运行 ibmcloud iam oauth-tokens 来检索此值。
    cluster_ID
    分配给群集的唯一 ID。 您可以通过运行 ibmcloud oc cluster ls 来检索此标识。
    worker_ID
    分配给要在其中连接卷的工作程序节点的唯一标识。 您可以通过运行 ibmcloud oc worker ls -c <cluster_name> 来检索此值。
    volume_ID
    分配给 Block Storage for Classic 卷的唯一标识。 您可以通过运行 ibmcloud is volumes 来检索 Block Storage for Classic 卷的列表。
    volume_attachment_ID
    分配给卷连接的唯一标识。 您可以通过运行 ibmcloud is volume <volume_ID> 来检索此标识。

VPC: 使用 CLI 将原始 Block Storage for VPC 连接到 VPC 工作程序节点

您可以使用 Kubernetes Service CLI 将未格式化的原始 Block Storage for Classic 连接和拆离到 VPC 集群中的工作程序节点。

只能将卷连接到一个工作程序节点。 请确保卷与工作程序节点位于同一专区中,以便连接成功。

本主题中的指示信息仅适用于 VPC 工作程序节点。 如果要将原始无格式块存储器连接到经典工作程序节点,那么必须安装 IBM Cloud Block Storage attacher 插件

开始之前:

访问 Red Hat OpenShift 集群

  1. 列出存储卷并记下要连接的卷的标识。

    ibmcloud is vols
    
  2. 列出集群中的工作程序节点,并记下要在其中附加卷的工作程序节点的标识。

    ibmcloud oc worker ls -c <cluster_name_or_ID>
    
  3. 将 Block Storage for Classic 连接到 VPC 工作程序节点。

    ibmcloud oc storage attachment create --cluster <cluster_name_or_ID> --volume <volume> --worker <worker_ID>
    

使用 CLI 从 VPC 工作程序节点中除去原始 Block Storage for VPC

您可以使用 ibmcloud oc storage attachment rm 命令从工作程序节点中除去存储器。

登录您的账户。 如果适用,请将相应的资源组设定为目标。 设置集群的上下文。

  1. 列出存储卷并记下要除去的卷的标识。

    ibmcloud is vols
    
  2. 获取卷的详细信息,例如连接卷的 worker-idworker-id 在命令输出的 Volume Attachment Instance Reference 部分中列示为 Instance name

    ibmcloud is vol <volume-ID>
    

    示例输出

    Volume Attachment Instance Reference   Attachment type   Instance ID                                 Instance name                                        Auto delete   Attachment ID                               Attachment name      
                                        data              0727_e18c10d7-7f18-48aa-b5ef-5ed163e54198   kube-bsaucubd07dhl66e4tgg-cluster-default-00000a19   false         0727-3bfe90b0-dc2d-498a-946b-8837a5dad7bc   volume-attachment
    
  3. 列出集群中工作程序节点上的存储附件,并记下要除去的附件标识。

    ibmcloud oc storage attachment ls -c <cluster> --worker <worker-id>
    

    示例输出:

    Listing volume attachments...
    OK
    ID                                          Name                Status     Type   Volume ID                                   Volume Name                          Worker ID   
    0111-1a111aaa-1111-1111-111a-aaa1a1a11a11   volume-attachment   attached   boot   a001-f11ed1e1-1aa1-11dc-b11d-a0dc111b1111  dissuade-anointer-errand-handbrake   kube-aa1111aa11aaaaa11aa1-cluster-name-default-00000110
    
  4. 除去存储器附件。

    ibmcloud oc storage attachment rm --attachment <attachment-ID> -c <cluster> --worker <worker-ID>
    
  5. 验证是否已从工作程序节点中除去存储器。

    ibmcloud oc storage attachment ls -c <cluster-ID> --worker <worker-id>
    

备份和复原文件和块存储器的 PVC 数据

在使用 CoreOS 工作程序的 Satellite V 4.13 集群上不支持备份和复原 Helm Chart。

通过 IBM Cloud 备份复原 Helm Chart,您可以为存储在文件存储器或块存储器持久卷声明 (PVC) 中的数据创建一次性备份或调度备份。 您的数据存储在您创建和拥有的 IBM Cloud Object Storage 服务实例中。 可以使用 IBM Cloud Object Storage 服务实例中的现有备份将数据复原到集群中的 PVC。

安装 Helm Chart 时会发生什么?
安装 Helm Chart 时,将在集群中创建 Kubernetes pod,用于执行 PVC 数据的一次性或定期备份,或者将数据从 IBM Cloud Object Storage 复原到 PVC。 您可以在 Helm Chart 随附的 values.yaml 文件中或通过在 helm install 命令中设置选项来配置备份或复原。
我需要注意哪些限制?
如果要备份或复原块存储器 PVC 的数据,那么不得将 PVC 安装到应用程序。 块存储器使用 RWO 访问方式进行安装。 此访问权仅允许一次将一个 pod 安装到块存储器。 要备份或复原数据,必须除去使用存储器卸载 PVC 的 pod。 备份或复原数据完成后,您可以重新创建 pod 并安装备份或复原的 PVC。
开始之前我需要什么?
要将数据备份或复原到 IBM Cloud Object Storage,必须 设置 IBM Cloud Object Storage 服务实例,创建服务凭证以访问服务,并创建可存放数据的存储区

设置 IBM Cloud Object Storage 服务实例

创建并配置 IBM Cloud Object Storage 服务实例,以充当要备份的数据的存储库。

  1. 创建使用 HMAC 凭证的 IBM Cloud Object Storage 服务实例
  2. IBM Cloud Object Storage 凭证存储在 Kubernetes 私钥 中。
  3. 创建第一个 IBM Cloud Object Storage 存储区。
    1. 在“服务详细信息”页面的导航中,单击存储区
    2. 单击创建存储区。 此时会显示一个对话框。
    3. 输入存储区的唯一名称。 该名称必须在所有区域上的 IBM Cloud Object Storage 中以及在所有 IBM Cloud 帐户上唯一。
    4. 弹性列表中,选择希望数据具有的可用性级别。 有关更多信息,请参阅 IBM Cloud Object Storage 区域和端点。 对于 VPC 集群,请记下直接端点。 例如:s3.direct.us.cloud-object-storage.appdomain.cloud
    5. 位置更改为要存储数据的区域。 请记住,由于法律方面的原因,并非每个区域都允许存储您的数据。
    6. 单击创建
  4. 检索存储区的 IBM Cloud Object Storage 主机名。
    1. 单击您在上一步中创建的水桶名称。
    2. 在“服务详细信息”页面的导航中,单击存储区 > 配置
    3. 请注意,您可以使用公共 URL 访问数据桶中的数据。

有关配置服务实例的更多信息,请参阅 IBM Cloud Object Storage 文档。

使用 IBM Cloud Object Storage 来备份和复原 PVC 数据

您可以使用 IBM Cloud 备份复原 Helm 图表将文件存储器或块存储器 PVC 中的数据备份到 IBM Cloud Object Storage,或者将数据从 IBM Cloud Object Storage 复原到集群中的 PVC。

开始之前:

您可以通过编辑和应用 Helm Chart 的 values.yaml 文件,或者通过从 CLI 运行 helm install 命令来部署 ibm-storage-backup pod 或 ibm-storage-restore pod。

要通过编辑 values.yaml 文件来备份或复原 PVC:

  1. 将最新的 Helm 图表版本下载到本地计算机。

    helm fetch --untar iks-charts/ibmcloud-backup-restore
    
  2. nano 命令行编辑器中打开 values.yaml 文件。

    nano ibmcloud-backup-restore/values.yaml
    
  3. 配置 Helm Chart 以备份或复原 PVC 数据。 您可以为多个 PVC 配置备份。

    通过配置 values.yaml 文件创建备份 pod 的示例:

    image:
        repository: icr.io/iks-charts/ibmcloud-backup-restore
    pullPolicy: Always
    tag: latest
    ACCESS_KEY_ID: # Example: 10110abab1111bbb111aa1aaa111b1a1
    SECRET_ACCESS_KEY: # Example: a1aba11aaa11b11b11aa1111a1111ba111111111a0b1b11a
    ENDPOINT: # Example: s3.us-east.cloud-object-storage.appdomain.cloud
    BUCKET_NAME: # Example: my-bucket
    BACKUP_NAME: # Example: my_backup
    PVC_NAMES:
        - # Example: my_pvc
    - # Optional example: my_pvc2
    CHART_TYPE: # Example: backup or restore
    BACKUP_TYPE: # Example: incremental
    SCHEDULE_TYPE: # Example: periodic
    SCHEDULE_INFO: # Example: weekly
    
    ACCESS_KEY_ID
    输入先前检索到的 IBM Cloud Object Storage 服务凭证的访问密钥标识。
    SECRET_ACCESS_KEY
    输入先前检索到的 IBM Cloud Object Storage 服务凭证的私钥访问密钥。
    ENDPOINT
    输入先前检索到的存储区的公共 IBM Cloud Object Storage s3 API 端点。
    BUCKET_NAME
    备份:输入您之前创建的 IBM Cloud Object Storage 桶的名称。 执行备份时,可使用此存储区来存储 PVC 数据。 复原: 输入存储备份的 IBM Cloud Object Storage 存储区的名称。
    BACKUP_NAME
    备份: 输入要在 IBM Cloud Object Storage中创建的备份的名称。 复原: 在 IBM Cloud Object Storage中输入使用 IBM Cloud 备份复原 Helm 图表创建的备份的名称。 如果您的 IBM Cloud Object Storage 服务实例中有多个完全备份,那么会使用上次完全备份的数据复原 PVC。 如果有增量备份,PVC 将使用上次完全备份的数据进行复原,包括截至开始复原的日期的所有增量备份。
    PVC_NAMES
    备份:输入要备份的 PVC 的名称。 如果要备份多个 PVC,请将每个 PVC 添加到 PVC 列表中。 要列出集群中可备份的可用 PVC,请运行 oc get pvc复原: 输入要将数据从 IBM Cloud Object Storage复原到的 PVC 的名称。 一次只能将数据复原到一个 PVC。 要列出集群中可将数据复原到的可用 PVC,请运行 oc get pvc
    CHART_TYPE
    输入要部署的图表类型名称。 输入 backup 以部署备份 Chart。 输入 restore 以部署复原 Chart。
    BACKUP_TYPE
    仅对于备份是必需的。 输入 full 以创建完全备份,或者如果要仅备份新的或已更改的文件,请输入 incremental。 如果选择 incremental,那么必须指定 SCHEDULING_INFOSCHEDULING_TYPE 选项。 如果未指定 BACKUP_TYPE 选项,那么缺省情况下将创建完全备份。
    SCHEDULE_TYPE
    仅对于备份是必需的。 输入 periodic 以创建调度备份,或者将此选项留空以创建一次性备份。 如果要创建定期备份,那么必须在 SCHEDULE_INFO 选项中定义备份时间间隔。
    SCHEDULE_INFO
    仅对于备份是必需的。 如果要创建定期备份,那么必须决定备份调度。 在 hourlydailyweekly 之间进行选择。 如果设置此选项,那么必须将 SCHEDULE_TYPE 设置为 periodic
  4. 保存并关闭 values.yaml 文件。

  5. 使用 values.yaml 文件中的定制设置安装 Helm Chart。 安装 Helm Chart 并配置备份或复原时,会将 ibm-storage-backupibm-storage-restore pod 部署到集群。 备份 pod 将数据从 PVC 备份到 IBM Cloud Object Storage,复原 pod 将数据复原到 PVC。 将 <release_name> 替换为 Helm Chart 的名称。 确保将备份和复原 pod 安装在要备份或复原的 PVC 所在的区域中。

    • 使用 helm install 命令安装 Helm 图表。

      helm install <release_name> ./ibmcloud-backup-restore -n <namespace>
      

      备份的示例输出:

      NAME: <release_name>
      LAST DEPLOYED: Mon Jan 20 09:17:02 2020
      NAMESPACE: default
      STATUS: deployed
      REVISION: 1
      TEST SUITE: None
      NOTES:
      Thank you for installing: ibmcloud-backup-restore.   Your release is named: <release_name>
      
      Please refer Chart README.md file for creating a sample PVC
      Please refer Chart RELEASE.md to see the release details/fixes
      
    • 可选: 通过在 helm install 命令中设置选项来安装 Helm Chart。 您可以通过指定 --name 参数来命名发布。

      helm install <release_name> --set ACCESS_KEY_ID=<access_key_ID> --set SECRET_ACCESS_KEY=<secret_access_key> --set ENDPOINT=<public_bucket_endpoint> --set BUCKET_NAME=<bucket_name> --set BACKUP_NAME=<backup_name> --set PVC_NAMES[0]=<pvc_name1> --set PVC_NAMES[1]=<pvc_name2> --set CHART_TYPE=backup --set BACKUP_TYPE=<backup_type> --set SCHEDULE_TYPE=<schedule_type> --set SCHEDULE_INFO=<schedule_info> ./ibmcloud-backup-restore
      
  6. 验证数据备份或复原是否成功完成。

    备份

    1. 验证 ibm-storage-backup pod 是否处于运行状态。

      oc get pods -A | grep backup
      

      示例输出

      ibm-storage-backup                        1/1     Running             0          64m
      
    2. 查看 ibm-storage-backup pod 的日志以确保备份成功。 当您在日志中看到 ... backup completed 消息时,说明备份已成功完成。

      oc logs ibm-storage-backup
      

      每日备份的示例输出。

      [2019-04-18 16:01:51,157] [utilities : 151] [INFO] *****************Start logging to ./Backup.log
      [2019-04-18 16:01:51,158] [backup : 48] [INFO] Starting backup:
      [2019-04-18 16:01:51,158] [configureOS : 66] [INFO] Configuring duplicity with IBM CloudObjectStorage i.e s3.
      [2019-04-18 16:01:51,158] [backup : 62] [INFO] Configuration done!!!
      [2019-04-18 16:01:51,158] [backup : 78] [INFO] Got all required input from config file!!
      [2019-04-18 16:01:52,366] [backup : 119] [WARNING] Incremental backup was not created
      [2019-04-18 16:01:52,366] [backup : 120] [INFO] duplicity  --no-encryption incremental /myvol s3://s3.us-south.cloud-object-storage.appdomain.cloud/mybucket/helm-backup command failed due to Fatal Error: Unable to start incremental backup.  Old signatures not found and incremental specified
      
      [2019-04-18 16:01:52,367] [backup : 121] [INFO] A full backup is required before incremental backups can begin. Creating a one-time full backup and will run incremental backups for scheduled backups.
      [2019-04-18 16:01:54,357] [backup : 129] [INFO] Full backup completed
      [2019-04-18 16:01:54,357] [backup : 130] [INFO] Local and Remote metadata are synchronized, no sync needed.
      Last full backup date: none
      --------------[ Backup Statistics ]--------------
      StartTime 1555603313.31 (Thu Apr 18 16:01:53 2019)
      EndTime 1555603313.32 (Thu Apr 18 16:01:53 2019)
      ElapsedTime 0.01 (0.01 seconds)
      SourceFiles 3
      SourceFileSize 20495 (20.0 KB)
      NewFiles 3
      NewFileSize 20495 (20.0 KB)
      DeletedFiles 0
      ChangedFiles 0
      ChangedFileSize 0 (0 bytes)
      ChangedDeltaSize 0 (0 bytes)
      DeltaEntries 3
      RawDeltaSize 15 (15 bytes)
      TotalDestinationSizeChange 183 (183 bytes)
      Errors 0
      -------------------------------------------------
      
      [2019-04-18 16:01:54,357] [backup : 162] [INFO] Scheduling backup as per configurations, please don't stop this program or run this in background !!!
      [2019-04-18 16:01:54,358] [backup : 166] [INFO] Schedule info is: ['daily']
      [2019-04-18 16:01:54,358] [backup : 172] [INFO] Scheduled for daily!!!
      
  7. 验证是否已成功备份或复原数据。

    • 备份

      1. IBM Cloud 资源列表 中找到 IBM Cloud Object Storage 服务实例。
      2. 从导航中选择“”,然后单击备份配置中使用的桶。 您的备份会显示为存储区中的对象。
      3. 复查压缩文件。 您可以下载 *.gz 文件,提取文件并验证备份数据。
    • 恢复

      1. 使用安装包含复原数据的 PVC 的 pod 创建 deployment.yaml 文件。 以下示例部署用于在 /test 安装目录上安装 PVC 的 nginx pod。

          apiVersion: apps/v1
          kind: Deployment
          metadata:
            name: restore
            labels:
            app: nginx
          spec:
            selector:
              matchLabels:
                app: nginx
            template:
              metadata:
                labels:
                  app: nginx
              spec:
                containers:
                  - image: nginx
                    name: nginx
                    volumeMounts:
                    - name: my-volume # Example: my_volume
                      mountPath: /test # Example: /test
                volumes:
                - name: my-volume # Example: my_volume
                  persistentVolumeClaim:
                    claimName: my-actual-pvc-name # Example: my_pvc
        
        spec.containers.image
        要使用的映像的名称。 要列出 IBM Cloud Container Registry 帐户中的可用映像,请运行 ibmcloud cr image-list
        spec.containers.name
        要部署到集群的容器的名称。
        spec.containers.volumeMounts.mountPath
        在容器中安装卷的目录的绝对路径。 写入安装路径的数据会存储在物理块存储器实例中的根目录下。 如果要在不同应用程序之间共享音量,可以为每个应用程序指定 音量子路径
        spec.containers.volumeMounts.name
        要安装到 pod 中的卷的名称。
        volumes.name
        要安装到 pod 中的卷的名称。 该名称通常与 volumeMounts/name
        volumes.persistentVolumeClaim.claimName
        绑定要使用的 PV 的 PVC 的名称。
      2. 创建部署。

        oc apply -f deployment.yaml
        
      3. 验证 pod 是否处于运行状态。

        如果发现 "ibm-storage-restore pod 没有达到 "已完成"或 CrashLoopBackOff 状态,则可能是恢复数据失败。 运行 oc logs ibm-storage-restore 以查找故障的根本原因。

        oc get pods | grep restore
        

        示例输出

        restore-7dfc6f4c78-wkcqp                  1/1     Running             0          3m54s
        
      4. 登录到 pod。

        oc exec <pod_name> -it bash
        
      5. 浏览至您在部署 YAML 中指定的安装目录。

        cd <mount_directory>
        
      6. 列出安装目录中的文件,以验证是否已将所有数据复原到安装目录。

        ls
        
      7. 从集群中删除 Helm Chart 安装。 如果将数据复原到块存储器 PVC,那么需要执行此步骤。 块存储器使用 RWO 访问方式进行安装。 此访问权仅允许一次将一个 pod 安装到块存储器。 由于 ibm-storage-restore pod 已安装 PVC,因此必须除去 pod 以释放 PVC,以便可以将 PVC 安装到集群中的其他 pod。

        helm uninstall <release_name> -n <namespace>
        
      8. 您已成功复原备份。 现在,可以将绑定了 PV 的 PVC 安装到集群中的其他任何 pod,以访问已复原的文件。 如果备份的容器数据包含非 root 用户,那么您必须向新容器添加非 root 许可权。 有关更多信息,请参阅添加卷的非 root 用户访问权

为存储卷设置 IBM Cloud Monitoring

在 IBM Cloud Monitoring 中为正在使用存储卷的工作负载设置警报。 有关更多信息,请参阅 警报

当存储卷关闭时,正在使用存储器的应用程序 pod 具有较低的文件系统 I/O,存在网络错误或导致副本计数关闭的崩溃。 您可以在 IBM Cloud Monitoring 中设置警报,以在应用程序的文件系统操作低于特定阈值,发生网络错误或应用程序 pod 未达到 Ready 状态时收到通知。

  1. 控制台选择您要为存储卷设置警报的集群。

  2. 监视 部分中,单击 连接 以将现有 IBM Cloud Monitoring 实例连接到集群。 如果没有实例,请单击 创建实例 以创建实例。 有关如何设置 IBM Cloud Monitoring 实例的更多信息,请参阅 供应实例

  3. 单击 启动 按钮以打开 IBM Cloud Monitoring 仪表板。

  4. 为集群中运行的应用程序创建文件系统利用率警报。

    1. 在 IBM Cloud Monitoring 控制台中,单击 概述 > 工作负载
    2. 选择部署应用程序的 名称空间。 查找应用程序,单击应用程序上的箭头图标,然后选择 Kubernetes Pod 概述
    3. 文件系统利用率 部分中,查看 文件 I/O 带宽 (按 Pod) 磁贴。
    4. 查看最近一天或一周时间范围内的文件 I/O 带宽,以确定平均带宽。 您可以使用平均带宽作为阈值,以在文件 I/O 带宽在一定时间内小于平均值时设置警报。 例如,如果应用程序的平均文件 I/O 带宽为 300B/s,那么您可以在网络利用率在一定时间内保持小于 300B/s 时创建警报。
    5. 文件 I/O 带宽 (按 Pod) 磁贴中,通过单击 选项 菜单,然后单击 创建警报来创建警报。
    6. 打开警报菜单的 通知 部分,然后创建或选择警报通知通道。
    7. 保存警报。
    8. 对集群中部署的所有应用程序重复这些步骤。
    9. 通过编辑配置为手动触发警报的阈值来测试您创建的警报。 例如,如果将文件系统利用率警报设置为在 5 分钟的利用率小于 300B/s 时触发,请将阈值增大到大于应用程序 5 分钟的当前利用率,然后选择 at least once 选项。
    10. 验证警报是否在 5 分钟后触发。 验证警报后,将值重置为先前配置的值。
  5. 为集群中运行的应用程序创建网络利用率警报。

    1. 在 IBM Cloud Monitoring 控制台中,单击 概述 > 工作负载
    2. 选择部署应用程序的 名称空间。 查找应用程序,单击应用程序上的箭头图标,然后选择 Kubernetes Pod 概述
    3. 在“网络利用率”部分中,查看 网络请求计数 (按 Pod) 磁贴。
    4. 查看最近 1 天或 1 周时间范围内按 pod 列出的平均网络请求计数,以确定阈值。
    5. 网络请求计数 (按 Pod) 磁贴中,通过单击 选项 菜单,然后单击 创建警报来创建警报。 根据观察到的阈值设置警报参数。 例如,如果网络利用率在一定时间内保持在阈值以下,那么将触发警报。
    6. 打开警报菜单的 通知 部分,然后创建或选择警报通知通道。
    7. 保存警报。
    8. 对集群中部署的所有应用程序重复这些步骤。
    9. 通过编辑配置为手动触发警报的阈值来测试您创建的警报。 例如,如果为 5 分钟内 pod 的网络请求数小于 3/s 的情况设置警报,请将警报阈值编辑为小于 5 分钟内观察到的阈值,然后选择 at least once 选项。
    10. 验证警报是否在 5 分钟后触发。 验证警报后,将值重置为先前配置的值。
  6. 为集群中运行的应用程序创建 pod 可用性警报。

    1. 在 IBM Cloud Monitoring 控制台中,单击 概述 > 工作负载
    2. 选择部署应用程序的 名称空间。 查找应用程序,单击应用程序上的箭头图标,然后选择 Kubernetes Pod 概述
    3. 在“Pod 运行状况”部分中,查看 Pod 可用性 磁贴。
    4. 查看最近 1 天或 1 周时间范围内的平均 pod 可用性,以确定阈值。
    5. 请查看应用程序配置文件以获取请求的副本数。 当可用 pod 数少于应用程序的所请求副本数时,可以将此数目用作发送警报的阈值。 如果您请求了应用程序的 3 副本,那么可以设置警报,以确定在特定持续时间 (例如,30 分钟的持续时间) 内,可用 pod 数保持小于所请求的副本计数。 在此示例中,当 pod 可用性保持低于 3 请求的副本时,将触发警报。
    6. 在“Pod 可用性”磁贴中,通过单击 选项 菜单,然后单击 创建警报来创建警报。 根据观察到的阈值和请求的应用程序副本设置警报参数。
    7. 打开警报菜单的 通知 部分,然后创建或选择警报通知通道。
    8. 保存警报。
    9. 对集群中部署的所有应用程序重复这些步骤。
    10. 通过编辑配置为手动触发警报的阈值来测试您创建的警报。 例如,如果在可用 pod 数小于 3 (表示 5 分钟) 时设置 pod 可用性警报,请将警报阈值编辑为小于 4 pod (表示 5 分钟),然后选择 at least once 选项。
    11. 验证警报是否在 5 分钟后触发。 验证警报后,将值重置为先前配置的值。

在触发 IBM Cloud Monitoring 警报时对持久存储器进行故障诊断

触发警报时,请查看 IBM Cloud Monitoring 中的警报详细信息,并查看持久存储器,应用程序,工作程序节点和集群的故障诊断指南以查找警报的根本原因。 您设置的警报可能与存储卷问题无关,而是与应用程序中,工作程序节点上或集群中发生的问题相关。