IBM Cloud 儲存空間公用程式

本主題涵蓋在 IBM Cloud Kubernetes Service 集群中管理原始、未格式化區塊儲存的公用程式。 公用程式和程序依您的群集基礎架構類型而有所不同。

經典集群
使用 IBM Cloud Block Storage Attacher 外掛程式,將原始區塊儲存附加到經典工作節點。
VPC 集群
使用 IBM Cloud API 或 CLI 將原始 Block Storage for VPC 附加到 VPC 工作節點。 請參閱 新增原始 Block Storage for VPC 至 VPC 工作節點

經典教學:安裝 IBM Cloud Block Storage Attacher 外掛程式(測試版)

請使用 IBM Cloud Block Storage Attacher 外掛程式,將原始、未格式化且未掛載的區塊儲存裝置掛載至叢集中的傳統工作節點。

舉例來說,若要透過軟體定義儲存(SDS)解決方案來儲存您的資料,例如 Portworx,而不使用那些針對 SDS 使用情境進行優化、並配備額外本地磁碟的傳統裸機工作節點。 若要將本地磁碟新增至您的傳統非 SDS 工作節點,您必須在 IBM Cloud 基礎架構帳戶中手動建立區塊儲存裝置,並使用 IBM Cloud 區塊卷宗掛載工具,將儲存裝置掛載至您的非 SDS 工作節點。

IBM Cloud Block Volume Attacher 外掛程式會在叢集裡的每個工作者節點上建立 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 輸出中沒有顯示任何儲存空間類別,則表示已順利移除儲存空間類別。

經典方式:手動將區塊儲存新增至特定工作節點

使用此選項可新增不同的區塊儲存配置、僅將區塊儲存新增至部分工作節點,或對資源配置流程進行更細緻的控制。

  1. 列出叢集中的工作節點,並記錄您要為其新增區塊儲存裝置的非 SDS 工作節點的私有 IP 位址及區域。

    ibmcloud oc worker ls --cluster CLUSTER_NAME_OR_ID
    
  2. 請參閱 「決定您的區塊儲存配置」 中的步驟 3 和 4,以選擇要新增至非 SDS 工作節點的區塊儲存裝置的類型、容量及 IOPS 數量。

  3. 在非 SDS 工作者節點所在的相同區域中建立區塊儲存裝置。

    以下為配置 20 GB 耐用型區塊儲存(每 GB 2 IOPS)的範例。

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

    以下為配置 20 GB 效能型區塊儲存(100 IOPS)的範例。

    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_iqnusername 以及 password

    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)。

  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 ID。
    ibm.io/nodeip
    請輸入您已將區塊儲存裝置連接至該節點,且先前已授權其存取該區塊儲存裝置的工作節點之私有 IP 位址。
    ibm.io/volID
    輸入您先前擷取的區塊儲存空間磁區 ID。
    storage
    輸入您先前所建立區塊儲存裝置的大小。 例如,若您的區塊儲存裝置容量為 20 吉字節,請輸入 20Gi
  2. 建立 PV,以將區塊儲存裝置連接至您的非 SDS 工作者節點。

    • 如果您使用 mkpvyaml 儲存器,請執行下列指令。
        oc apply -f pv-<cluster_name>.yaml
        ```
    - 如果您手動新增區塊儲存體,請執行下列指令。
    
    ```sh {: pre}
        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 設為裝置 ID(例如 /dev/dm/1),且您可以在 CLI 輸出的註釋區段中,看到 ibm.io/attachstatus=attached,表示已順利連接區塊儲存裝置。

如果您要分離磁區,請刪除 PV。 已分離的磁區仍有授權可供特定工作者節點存取,並且在您使用 IBM Cloud BlockVolume 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 集群中的 Worker 節點。

您只能將磁區連接至一個工作者節點。 確保卷與 Worker 節點位於相同區域,才能成功附加。

您也可以使用 CLI 來連接、分離及列出工作者節點的磁區連接。 如需相關資訊,請參閱 儲存空間 CLI 參考資料

開始之前:

存取您的 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. 讀取 Worker 節點的 ID,以附加到 Block Storage for Classic 範例。 確保您選擇的 Worker 節點與 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
    指派給叢集的唯一 ID 或名稱。 您可以執行 ibmcloud oc cluster ls 來擷取此 ID。
    worker_ID
    指定給附加磁碟區的工作站的唯一 ID。 您可以執行 ibmcloud oc worker ls -c CLUSTER_NAME 來擷取此值。
    volume_ID
    指派給 Block Storage for Classic 磁區的唯一 ID。 您可以執行 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. 識別要移除的儲存磁碟區並記下磁碟區 ID。

    ibmcloud is volumes
    
  2. 查看該卷的詳細資訊。 此指令會傳回工作者節點 ID 及附件 ID。 記下工作者節點 ID。 在下列指令中,此 ID 會以「實例名稱」傳回。

    ibmcloud is volume <volume_ID>
    
  3. 擷取 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
    指派給叢集的唯一 ID 或名稱。 您可以執行 ibmcloud oc cluster ls 來擷取此 ID。
    worker_ID
    指派給您要在其中連接磁區的工作者節點的唯一 ID。 您可以執行 ibmcloud oc worker ls -c CLUSTER_NAME 來擷取此值。
    volume_ID
    指派給 Block Storage for Classic 磁區的唯一 ID。 您可以執行 ibmcloud is volumes 來擷取 Block Storage for Classic 磁區的清單。
    volume_attachment_ID
    指派給磁區連接的唯一 ID。 您可以執行 ibmcloud is volume <volume_ID> 來擷取此 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. 擷取您要查看其磁區連接詳細資料之工作者節點的 ID。 確保您選擇的 Worker 節點與您的 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
    分配給您叢集的唯一識別碼。 您可以執行 ibmcloud oc cluster ls 來擷取此 ID。
    worker_ID
    指派給您要在其中連接磁區的工作者節點的唯一 ID。 您可以執行 ibmcloud oc worker ls -c CLUSTER_NAME 來擷取此值。
    volume_ID
    指派給 Block Storage for Classic 磁區的唯一 ID。 您可以執行 ibmcloud is volumes 來擷取 Block Storage for Classic 磁區的清單。
    volume_attachment_ID
    指派給磁區連接的唯一 ID。 您可以執行 ibmcloud is volume <volume_ID> 來擷取此 ID。

VPC: 使用 CLI 將原始 Block Storage for VPC 連接至 VPC 工作者節點

您可以使用 Kubernetes Service CLI 將原始、未格式化的 Block Storage for Classic 附加和分離到 VPC 群集中的工作站節點。

您只能將磁區連接至一個工作者節點。 確保卷與 Worker 節點位於相同區域,才能成功附加。

開始之前:

存取您的 Red Hat OpenShift 叢集

  1. 列出您的儲存磁碟區,並註記要附加的磁碟區 ID。

    ibmcloud is vols
    
  2. 列出群集中的工作站,並註記您附加磁碟區的工作站 ID。

    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. 列出您的儲存磁碟區,並註記要移除的磁碟區 ID。

    ibmcloud is vols
    
  2. 取得磁區的詳細資料,例如磁區所連接的 worker-idworker-id 在指令輸出的 Volume Attachment Instance Reference 區段中列為 實例名稱

    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. 列出叢集裡工作者節點上的儲存空間連接,並記下您要移除的連接 ID。

    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 Worker 的 Satellite 版本 4.13 集群不支援備份和還原 Helm 圖。

透過 IBM Cloud 備份還原 Helm 圖表,您可以為儲存於檔案儲存或區塊儲存持久性磁碟區索賠 (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 圖表的 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 服務認證的存取金鑰 ID。
    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 以部署備份圖表。 輸入 restore 以部署還原圖表。
    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>
        ```
        備份的範例輸出:
    
        ```sh {: screen}
        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` 參數來命名發行。
    ```sh {: pre}
        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 的狀態為「Running」。 sh {: pre} oc get pods -A | grep backup 輸出範例

    ```sh {: screen}
    ibm-storage-backup                        1/1     Running             0          64m
    ```
2. 檢閱 `ibm-storage-backup` Pod 的日誌,以確定您的備份成功。 當您在記錄中看到 `... backup completed` 訊息時,表示您的備份已成功完成。

```sh {: pre}
    oc logs ibm-storage-backup
    ```
    每日備份的範例輸出。

    ```sh {: screen}
    [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!!!
    ```
  1. 驗證您的資料已順利備份或還原。
    • 備份

      1. IBM Cloud 資源清單 中尋找 IBM Cloud Object Storage 服務實例。
      2. 從導覽列中,選擇「儲存桶」,然後點選您在備份設定中使用的儲存桶。 您的備份會顯示為儲存區中的物件。
      3. 檢閱壓縮檔。 您可以下載 *.gz 檔案,解壓縮該檔案,並驗證備份資料。
    • 還原

      1. 使用 Pod 來建立 deployment.yaml 檔案,該 Pod 會裝載包含所還原資料的 PVC。 下列範例會部署 nginx Pod,以在 /test 裝載目錄上裝載 PVC。

          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 狀態為「Running」。

        如果您發現 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 連結至叢集內任何其他 Pod 的 PVC,以便存取還原檔案。 如果所備份的容器資料包含非 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. 在「檔案系統使用率」區段中,檢閱 依 Pod 的檔案 I/O 頻寬 磚。
    4. 檢閱過去一天或一週時間範圍的檔案 I/O 頻寬,以判定平均頻寬。 您可以使用平均頻寬作為臨界值,來設定當檔案 I/O 頻寬在特定時間量內小於平均值時的警示。 例如,如果應用程式的平均檔案 I/O 頻寬為 300B/s,則您可以針對網路使用率在特定時間量內保持低於 300B/s 時建立警示。
    5. 依 Pod 的檔案 I/O 頻寬 磚中,按一下 選項 功能表,然後按一下 建立警示,以建立警示。
    6. 開啟警示功能表的 通知 區段,並建立或選取警示通知頻道。
    7. 儲存警示。
    8. 針對叢集裡部署的所有應用程式重複這些步驟。
    9. 透過編輯您配置為手動觸發警示的臨界值,來測試您建立的警示。 例如,如果您將檔案系統使用率警示設為在使用率小於 300B/s 達 5 分鐘時觸發,請將臨界值增加為大於應用程式的現行使用率達 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. 透過編輯您配置為手動觸發警示的臨界值,來測試您建立的警示。 例如,如果您設定警示,指出 Pod 的網路要求數在 5 分鐘內小於 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 可用性警示,當可用 Pod 數目在 5 分鐘內小於 3 時,請將警示臨界值編輯為在 5 分鐘內小於 4 個 Pod,然後選取 at least once 選項。
    11. 驗證警示在 5 分鐘之後觸發。 驗證警示之後,請將值重設為您先前配置的值。

在觸發 IBM Cloud Monitoring 警示時對持續性儲存體進行疑難排解

觸發警示時,請檢閱 IBM Cloud Monitoring 中的警示詳細資訊,並檢閱持久性儲存、應用程式、工作人員節點及群集的疑難排解指南,以找出警示的根本原因。 您設定的警示可能與儲存空間磁區問題無關,而是與應用程式、工作者節點上或叢集裡發生的問題相關。