除錯 Block Storage for Classic 失敗

檢視各種選項以進行除錯 Block Storage for Classic,並找出任何故障的根本原因。

檢查掛載您的儲存實例的 Pod 是否已成功部署

請遵循步驟來檢閱與 Pod 部署相關的任何錯誤訊息。

  1. 列出叢集裡的 Pod。 如果 Pod 顯示的狀態為 Running,則 Pod 已順利部署。

    oc get pods
    
  2. 請查看您的 Pod 詳細資訊,並檢視 CLI 輸出中「事件」區段所顯示的任何錯誤訊息。

    oc describe pod <pod_name>
    
  3. 擷取 Pod 的日誌,並檢閱任何錯誤訊息。

    oc logs <pod_name>
    
  4. 檢閱 Block Storage for Classic 疑難排解說明文件,以取得解決一般錯誤的步驟

重新啟動應用程式 Pod

透過重新啟動並重新部署 Pod,可以解決部分問題。 遵循步驟以重新部署特定 Pod。

  1. 如果您的 Pod 是部署的一部分,請刪除 Pod 並讓部署重建它。 如果 Pod 不是部署的一部分,請刪除 Pod 並重新套用 Pod 配置檔。

    1. 刪除 Pod。
        oc delete pod <pod_name>
        ```
        輸出範例
        ```sh {: screen}
        pod "nginx" deleted
        ```
    2. 重新套用配置檔以重新部署 Pod。
    ```sh {: pre}
        oc apply -f <app.yaml>
        ```
        輸出範例
        ```sh {: pre}
        pod/nginx created
        ```
    
  2. 如果重新啟動 Pod 無法解決問題,請 重新載入工作者節點

  3. 驗證是否使用的是最新的 IBM Cloud 和 IBM Cloud Kubernetes Service 外掛程式版本。

    ibmcloud update
    
    ibmcloud plugin repo-plugins
    
    ibmcloud plugin update
    

確認儲存驅動程式和外掛程式 Pod 的狀態顯示為「執行中

遵循步驟來檢查儲存體驅動程式及外掛程式 Pod 的狀態,並檢閱任何錯誤訊息。

  1. 列出 kube-system 項目中的 Pod。

    oc get pods -n kube-system
    
  2. 如果儲存體驅動程式及外掛程式 Pod 未顯示 執行中 狀態,請取得 Pod 的更多詳細資料,以尋找主要原因。 視 Pod 的狀態而定,下列指令可能會失敗。

    1. 取得在驅動程式 Pod 中執行的容器名稱。
        kubectl describe pod POD_NAME -n kube-system
        ```
    2. 將日誌從驅動程式 Pod 匯出至本端機器上的 `logs.txt` 檔案。
    
    ```sh {: pre}
        oc logs <pod_name> -n kube-system > logs.txt
        ```
    3. 請檢閱日誌檔。
    
    ```sh {: pre}
        cat logs.txt
        ```
    
    
  3. 如果儲存體驅動程式及外掛程式 Pod 未顯示 執行中 狀態,請取得 Pod 的更多詳細資料,以尋找主要原因。 視您的 Pod 狀態而定,您可能無法執行以下所有指令。

    1. 取得在驅動程式 Pod 中執行的容器名稱。
        kubectl get pod ibm-vpc-block-csi-controller-0 -n kube-system -o jsonpath="{.spec['containers','initContainers'][*].name}" | tr -s '[[:space:]]' '\n'
        ```
        **以下為 Block Storage for VPC**
        ```sh {: screen}
        csi-provisioner
        csi-attacher
        liveness-probe
        iks-vpc-block-driver
        ```
    2. 將容器日誌從驅動程式 Pod 匯出至本端機器上的 `logs.txt` 檔案。
    ```sh {: pre}
        oc logs <pod_name> -n kube-system -c <container_name> > logs.txt
        ```
    
  4. 請檢查最新日誌,以取得任何錯誤訊息。 檢閱 Block Storage for Classic 疑難排解說明文件,以取得解決一般錯誤的步驟

正在檢查您的 PVC 是否已成功配置。

請遵循步驟來檢查 PVC 的狀態,並檢閱任何錯誤訊息。

  1. 請檢查您的 PVC 狀態。 如果 PVC 顯示的狀態為 Bound,說明 PVC 已順利佈建。

    oc get pvc
    
    • 如果 PVC 顯示狀態 Bound,則表示 PVC 已順利佈建。

      輸出範例

      NAME         STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                AGE
      silver-pvc   Bound     pvc-4b881a6b-ada8-4a44-b568-fe909107d756   24Gi       RWX            ibmc-file-silver            7m29s
      
    • 如果 PVC 的狀態顯示 Pending,請說明 PVC,並檢閱輸出的 Events 區段,以找出任何警告或錯誤訊息。 請注意,在磁區連結模式設為 WaitForFirstConsumer 的情況下,參照儲存空間類別的 PVC 會保持 擱置,直到部署使用 PVC 的應用程式 Pod 為止。

      oc describe pvc <pvc_name>
      

      輸出範例

      Name:          local-pvc
      Namespace:     default
      StorageClass:  sat-local-file-gold
      Status:        Pending
      Volume:        
      Labels:        <none>
      Annotations:   <none>
      Finalizers:    [kubernetes.io/pvc-protection]
      Capacity:      
      Access Modes:  
      VolumeMode:    Filesystem
      Mounted By:    <none>
      Events:
      Type     Reason              Age                 From                         Message
      ----     ------              ----                ----                         -------
      Warning  ProvisioningFailed  60s (x42 over 11m)  persistentvolume-controller  storageclass.storage.k8s.io "sat-local-file-gold" not found
      
  2. 檢閱 Block Storage for Classic 疑難排解說明文件,以取得解決一般錯誤的步驟

檢查並更新 oc CLI 版本

若您使用的 oc CLI 版本未達到與您的叢集所使用的 major.minor 版本相同或更高,可能會導致出現意料之外的結果。 舉例 來說,Kubernetes 不支援與伺服器版本相差 2 個或更多版本(n ± 2)的 oc 客戶端版本。

  1. 請確認您在本地端電腦上執行的 oc CLI 版本,與安裝在叢集中的 Kubernetes 版本相符。 顯示您叢集及本地端電腦中已安裝的 oc CLI 版本。

    oc version
    

    輸出範例:

    Client Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.35", GitCommit:"641856db18352033a0d96dbc99153fa3b27298e5", GitTreeState:"clean", BuildDate:"2019-03-25T15:53:57Z", GoVersion:"go1.12.1", Compiler:"gc", Platform:"darwin/amd64"}
    Server Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.35+IKS", GitCommit:"e15454c2216a73b59e9a059fd2def4e6712a7cf0", GitTreeState:"clean", BuildDate:"2019-04-01T10:08:07Z", GoVersion:"go1.11.5", Compiler:"gc", Platform:"linux/amd64"}
    

    如果在 GitVersion 中看到用戶端和伺服器的版本相同,表示 CLI 版本相符。 可以忽略伺服器版本中的 +IKS 部分。

  2. 如果您的本地電腦與叢集上的 oc CLI 版本不一致,請更新叢集,或在 本地電腦上安裝不同版本的 CLI

檢查並更新 Block Storage for Classic 驅動程式

  1. 對於 Block Storage for VPC,請驗證您具有最新版本的 Block Storage for VPC 叢集附加程式

  2. 對於標準叢集上的 Block Storage for Classic,請確定您已安裝外掛程式的最新 Helm Chart 版本。

    1. 更新 Helm chart 儲存庫。
        helm repo update
        ```
    2. 列出儲存庫中的 Helm chart。
    ```sh {: pre}
        helm search repo iks-charts | grep block-storage-plugin
        ```
        輸出範例
        ```sh {: screen}
        iks-charts-stage/ibmcloud-block-storage-plugin    1.5.0                                                        A Helm chart for installing ibmcloud block storage plugin   
        iks-charts/ibmcloud-block-storage-plugin          1.5.0                                                        A Helm chart for installing ibmcloud block storage plugin   
        ```
    3. 列出叢集裡已安裝的 Helm Chart,並比較您安裝的版本與可用的版本。
    ```sh {: pre}
        helm list --all-namespaces
        ```
    4. 如果有較新的版本可用,請安裝此版本。 如需指示,請參閱 [更新 IBM Cloud Block Storage 外掛程式](/docs/openshift?topic=openshift-vpc-block#vpc-addon-update)。