選單

本頁面使用了機器翻譯。某些內容可能不盡完善。請告訴我們如何改進。

分享意見

Kubernetes 持久卷聲明詳解

目錄

分享本頁

Yifat Perry
Yifat Perry

什麼是 Kubernetes 持久磁碟區和持久磁碟區宣告?

Kubernetes 持久性磁碟區(PV) 是一種允許 Pod 存取儲存裝置上的持久儲存的物件,該儲存裝置透過 Kubernetes StorageClass 進行定義。與本質上是暫時性的一般磁碟區不同,PV 是持久性的,支援具狀態應用程式使用案例。PV 是 Kubernetes 叢集中的資源物件,即使使用它的 Pod 被銷毀後,PV 仍然存在。

持久性磁碟區(PV)必須透過持久性磁碟區宣告(PVC)來要求,PVC 是一種儲存請求。PVC 本質上是在 Pod 上掛載滿足特定要求的 PV 的請求。PVC 並非指定具體的 PV,而是指定 Pod 所需的 StorageClass。管理員可以定義 StorageClasses,以指示儲存設備的屬性,例如效能、服務等級和後端策略。

Kubernetes 中 PVC 模式的一個主要優勢是,它允許開發人員動態請求儲存資源,而無需了解底層儲存裝置的實作。

相關內容:閱讀我們的 Kubernetes StorageClass 指南

在本文中:

持久性磁碟區宣告:靜態佈建與動態佈建

若要將 pod 繫結至 PV,pod 必須包含磁碟區掛載和 PVC。這些宣告可讓使用者在不瞭解基礎儲存設備詳細資訊的情況下,將 PV 掛載至 pod 中。

將 PV 掛載到 Pod 有兩種選項:

  • 靜態配置是指管理者手動建立 PV 並定義一個符合這些 PV 條件的 StorageClass。當 Pod 使用指定了 StorageClass 的 PVC 時,它就可以存取這些靜態 PV 之一。
  • 動態配置會在沒有與 PVC 相符的靜態 PV 時發生。在這種情況下,Kubernetes 叢集會根據 StorageClass 定義配置新的 PV。

相關內容:閱讀我們的 Kubernetes 共享儲存指南

建立持久性磁碟區宣告並繫結至持久性磁碟區

本教學示範了 PV 和 PVC 的工作原理。它是 Kubernetes 文件中完整教程 的概要。

1.設定節點
使用單一節點設定 Kubernetes 叢集,並確保 kubectl 命令列已連接到控制平面。在節點上建立一個目錄,如下所示:

sudo mkdir /mnt/data

在目錄中建立 index.html 檔案。

2.建立持久卷
建立如下 YAML 檔案來定義 PV。

k8s pvc 1

執行此命令在節點上建立 PV:

kubectl apply -f https://k8s.io/examples/pods/storage/pv-volume.yaml

3.建立持久磁碟區宣告並將其繫結至持久磁碟區
建立需要 PV 的 PVC,並符合下列條件以符合您先前建立的 PV:

  • 3 GB 或以上的儲存容量
  • 啟用讀取 / 寫入存取權限
k8s pvc 2

執行以下命令以應用 PVC:

kubectl apply -f https://k8s.io/examples/pods/storage/pv-claim.yaml

建立持久性磁碟區宣告時,Kubernetes 控制平面會找到正確的 PV。如果找到,它會將 PVC 綁定到該 PV。

執行以下命令檢查先前建立的 PV 狀態:

kubectl get pv task-pv-volume

如果綁定成功,輸出應如下所示:

k8s pvc 3

4.建立 Pod 並掛載持久卷宣告
最後,建立一個使用 PVC 的 Pod。使用 NGINX 映像執行該 Pod,並在 Pod 規範的相關部分指定您預先建立的 PVC:

k8s pvc 4

使用 bash 命令在您的 pod 中安裝 curl,然後執行以下命令:

curl http://localhost/

輸出應顯示步驟 1 中建立的 index.html 檔案的內容。它應顯示新的 pod 可以透過 PVC 存取 PV 中的資料。

Kubernetes PVC 錯誤:常見原因及解決方法 [C]

Kubernetes PVC 的使用可能較為複雜,所產生的錯誤可能難以診斷和解決。PVC 錯誤通常與三大類問題相關:PV 創建問題、PV 配置問題以及 PV 或 PVC 規範的變更。

與 PVC 相關的最常見錯誤是 FailedAttachVolume、FailedMount 和 CrashLoopBackOff。

FailedAttachVolume 和 FailedMount 錯誤

這兩個錯誤都表示 pod 無法掛載 PV。差別在於,FailedAttachVolume 發生在磁碟區無法從先前的節點分離時,FailedMount 發生在磁碟區無法掛載到所需路徑時。

這兩個錯誤可能有多種原因,包括新節點故障、新節點連接的磁碟過多、網路分割錯誤以及先前節點上的儲存設備故障。

診斷問題

若要診斷諸如 FailedAttachVolume 和 FailedMount 之類的問題,請執行 describe pod 命令,並在「事件」部分搜尋指示錯誤的訊息。該訊息還應提供有關問題原因的資訊。

解決問題

Kubernetes 無法自動處理 FailedAttachVolume 和 FailedMount 錯誤,因此您需要手動處理這些問題:

  • 如果錯誤原因是「無法分離」,請使用儲存裝置的介面手動分離磁碟區。
  • 如果錯誤為 Failure to Attach 或 Mount- 請檢查網路分割問題或網路路徑不正確。如果這不是問題所在,請嘗試讓 Kubernetes 將 pod 排程到另一個節點上,或調查並修復新節點上的問題。

CrashLoopBackOff 由 PersistentVolumeClaim 導致的錯誤

CrashLoopBackOff 表示某個 pod 崩潰、重新啟動後又再次崩潰,這種情況反覆發生。在某些情況下,此錯誤是由於 PersistentVolumeClaims 損壞造成的。

診斷問題

若要確定 CrashLoopBackOff 錯誤是否由 PVC 引起,請檢查掛載 PV 的先前容器執行個體的日誌、部署日誌,如有必要,請在容器上執行 shell 以確定其崩潰的原因。

解決問題

如果 CrashLoopBackOff 是 PVC 問題導致的,請嘗試以下步驟:

  1. 將部署規模縮減至 0 個執行個體以啟用偵錯功能。
  2. 使用以下查詢取得失效 PVC 的標識符:
    kubectl get deployment -o jsonpath="{.spec.template.spec.volumes[*].persistentVolumeClaim.claimName}" failed-deployment 
    
  3. 建立一個新的偵錯 pod,並使用以下命令執行 shell:
    exec -it volume-debugger sh
    
  4. 確定目前掛載在 /datadirectory 中的磁碟區,並修復導致 pod 當機的問題。
  5. 退出 shell、刪除調試 pod,並將部署擴展回所需的副本數。

使用 Cloud Volumes ONTAP 進行 Kubernetes 儲存最佳化

NetApp Cloud Volumes ONTAP 是領先業界的企業級儲存管理解決方案,可在 AWS、Azure 和 Google Cloud 上提供安全可靠、實證肯定的儲存管理服務。Cloud Volumes ONTAP 容量可以擴充至 PB 級,並支援各種使用案例,例如檔案服務、資料庫、DevOps 或任何其他企業工作負載,並具有一系列強大的功能,包括高可用度、資料保護、儲存效率、Kubernetes 整合等。

特別值得一提的是,Cloud Volumes ONTAP 可支援容器化工作負載的 Kubernetes Persistent Volume 資源配置和管理 需求。

了解更多關於 Cloud Volumes ONTAP 如何協助解決容器化應用程式面臨的挑戰,請參閱這些 Kubernetes Workloads with Cloud Volumes ONTAP 案例研究。

Drift chat loading