設定 File Storage for Classic
IBM Cloud File Storage for Classic 這是一款持久、快速且靈活的網路附加型、基於 的,您可以透過 持久卷 (PV) 將其整合至您的應用程式中。NFS File Storage for Classic Kubernetes 您可以從具有符合您工作負載需求之 GB 大小及 IOPS 的預先定義儲存空間層級中進行選擇。 若要了解 IBM Cloud File Storage for Classic 是否適合您,請參閱「選擇儲存解決方案」。 如需定價資訊,請參閱 定價。
傳統基礎設施
快速入門指南:File Storage for Classic
在此快速入門指南中,您將透過建立一個 PVC 來動態配置儲存卷,藉此在叢集中建立一個 24Gi 持久性 File Storage for Classic 儲存卷。 然後,您建立應用程式部署來裝載 PVC。
這是您第一次在叢集中使用 File Storage for Classic 嗎? 當您熟悉了這些 File Storage for Classic 設定後,再回來這裡。
-
建立 PVC 的檔案,並將其命名為
pvc.yaml。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: silver-pvc labels: billingType: hourly region: # Example: us-south zone: # Example: dal13 spec: accessModes: - ReadWriteMany resources: requests: storage: 24Gi storageClassName: ibmc-file-silver -
在叢集裡建立 PVC。
kubectl apply -f pvc.yaml -
連結
silver-pvcPVC 之後,請建立使用 PVC 的應用程式部署。 建立部署的檔案,並將其命名為deployment.yaml。apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment labels: app: spec: selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - image: # Your contanerized app image. name: my-container volumeMounts: - name: my-volume mountPath: /mount-path volumes: - name: my-volume persistentVolumeClaim: claimName: silver-pvc -
在叢集裡建立部署。
kubectl apply -f deployment.yaml
如需相關資訊,請參閱下列鏈結。
決定 File Storage for Classic 配置
IBM Cloud® Kubernetes Service 為 File Storage for Classic 提供預先定義的儲存類別,您可以藉此以特定設定來配置 File Storage for Classic。
每個儲存類別皆會指定您所配置的「File Storage for Classic」類型,包括可用容量、IOPS、檔案系統以及保留政策。
使用儲存類別配置特定類型的儲存空間後,您將無法變更該儲存裝置的類型或保留政策。 不過,如果想要增加您的儲存空間容量及效能,您可以變更大小及 IOPS。 若要變更儲存空間的類型與保留政策,您必須建立一個新的儲存實例,並將資料從舊的儲存實例複製到新的儲存實例中。
開始之前:請登入您的帳戶。 適用的話,請將適當的資源群組設為目標。 設定叢集的環境定義。
若要決定儲存空間配置,請執行下列動作:
-
列出 IBM Cloud® Kubernetes Service 中可用的儲存空間類別。
kubectl get sc | grep file輸出範例
NAME TYPE ibmc-file-bronze (default) ibm.io/ibmc-file ibmc-file-custom ibm.io/ibmc-file ibmc-file-gold ibm.io/ibmc-file ibmc-file-retain-bronze ibm.io/ibmc-file ibmc-file-retain-custom ibm.io/ibmc-file ibmc-file-retain-gold ibm.io/ibmc-file ibmc-file-retain-silver ibm.io/ibmc-file ibmc-file-silver ibm.io/ibmc-file -
檢閱儲存空間類別的配置。
kubectl describe storageclass <storageclass_name>如需每一個儲存空間類別的相關資訊,請參閱儲存空間類別參照。 如果您找不到所需的內容,不妨考慮建立自己的自訂儲存類別。 若要開始使用,請參閱自訂的儲存空間類別範例。
檔案儲存體類型
請選擇您要配置 的 File Storage for Classic 類型。
- 銅級、銀級及金級儲存類別
- 這些儲存空間類別會佈建耐久性儲存空間。 耐久性儲存空間可讓您在預先定義的 IOPS 層級選擇儲存空間的大小(以 GB 為單位)。
- 自訂儲存類別
- 此儲存類別會供應「效能」儲存體。 使用效能儲存空間,您更能控制儲存空間大小及 IOPS。
IOPS
請為您的 File Storage for Classic 選擇容量與IOPS。 大小及 IOPS 數目定義 IOPS(每秒的輸入/輸出作業數)總數,此 IOPS 可作為儲存空間有多快的指示器。 您的儲存空間的 IOPS 總數越大,其處理讀取及寫入作業的速度就越快。
- 銅級、銀級及金級儲存類別
- 這些儲存類別每吉字節具備固定的 IOPS 數值,並配置於 SSD 硬碟上。 IOPS 總數取決於您選擇的儲存空間大小。 您可以選取所容許大小範圍內的任何整數的 GB 大小,例如 20 Gi、256 Gi 或 11854 Gi。 若要決定 IOPS 總數,您必須將 IOPS 乘以選取的大小。 舉例來說,若您在「銀級」儲存類別中選擇 1000Gi File Storage for Classic 此規格,該規格每 GB 提供 4 IOPS,則您的儲存空間總計擁有 4000 IOPS。
| 儲存空間類別 | 每 GB 的 IOPS 數目 | 大小範圍(以 GB 為單位) |
|---|---|---|
| 銅級 | 2 IOPS/GB | 20-12000 Gi |
| 銀級 | 4 IOPS/GB | 20-12000 Gi |
| 金級 | 10 IOPS/GB | 20-4000 Gi |
- 自訂儲存類別
- 選擇此儲存類別時,您將能更精確地控制所需的大小與 IOPS。 對於大小,您可以選取所容許大小範圍內的任何整數的 GB 大小。 您選擇的大小決定了可供您使用的 IOPS 範圍。 您可以選擇在指定範圍內的 100 的倍數的 IOPS。 您選擇的 IOPS 是靜態的,不會隨著儲存空間大小一起調整。 例如,如果您選擇具有 100 IOPS 的 40Gi,則 IOPS 總數會保留 100。
- IOPS 與 GB 的比例也會決定為您佈建之硬碟的類型。 例如,如果您有 100 IOPS 的 500Gi,則您的 IOPS 與 GB 的比例為 0.2。 比例小於或等於 0.3 的儲存空間會佈建在 SATA 硬碟上。 如果您的比例大於 0.3,則您的儲存空間會佈建在 SSD 硬碟上。
| 大小範圍(以 GB 為單位) | IOPS 範圍(以 100 的倍數表示) |
|---|---|
| 20-39 Gi | 100-1000 IOPS |
| 40-79 Gi | 100-2000 IOPS |
| 80-99 Gi | 100-4000 IOPS |
| 100-499 Gi | 100-6000 IOPS |
| 500-999 Gi | 100-10000 IOPS |
| 1000-1999 Gi | 100-20000 IOPS |
| 2000-2999 Gi | 200-40000 IOPS |
| 3000-3999 Gi | 200-48000 IOPS |
| 4000-7999 Gi | 300-48000 IOPS |
| 8000-9999 Gi | 500-48000 IOPS |
| 10000-12000 Gi | 1000-48000 IOPS |
收回原則
選擇是否要在刪除叢集或持續性磁區要求 (PVC) 之後保留您的資料。
- 如果要保留資料,則請選擇
retain儲存空間類別。 當您刪除 PVC 時,只會刪除 PVC。 PV、IBM Cloud 基礎架構帳戶中的實體儲存裝置,以及您的資料仍然存在。 若要釋放儲存空間並在叢集中再次使用該空間,您必須移除 PV,並依照「使用現有 File Storage for Classic」中的步驟操作。 - 如果要在刪除 PVC 時刪除 PV、資料和實體 File Storage for Classic,請選擇不含
retain的儲存空間類別。
計費類型
選擇每小時或每月。 如需相關資訊,請檢閱 定價。
預設情況下,所有 File Storage for Classic 裝置皆採用每小時計費方式進行配置。
如果您選擇依月計費類型,則移除持續性儲存空間時,仍然需要支付它的一個月費用,即使您只是短時間使用也是一樣。
在應用程式中加入 File Storage for Classic
建立一個持久性卷請求 (PVC),以便為您的叢集動態配置 File Storage for Classic。 動態佈建將自動建立符合的持續性磁區 (PV),並在 IBM Cloud 基礎架構帳戶中訂購實體儲存裝置。
開始之前:
- 如果您有防火牆,請對叢集所在區域的 IBM Cloud 基礎架構 IP 範圍容許進行 Egress 存取,這樣您才可以建立 PVC。
- 決定預先定義的儲存空間類別或建立自訂的儲存空間類別。
想在有狀態集(stateful set)中部署 File Storage for Classic 嗎? 如需更多資訊,請參閱《 在有狀態集合中使用 File Storage for Classic 》。
若要新增 File Storage for Classic,請執行下列動作:
-
建立配置檔來定義持續性磁區要求 (PVC),以及將配置儲存為
.yaml檔案。青銅、白銀、黃金儲存類別的範例。
以下
.yaml檔案會建立一個名為mypvc、儲存類別為"ibmc-file-silver"、計費對象為"monthly"、大小為24Gi吉位元組的索賠。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mypvc labels: billingType: "monthly" region: us-south zone: dal13 spec: accessModes: - ReadWriteMany resources: requests: storage: 24Gi storageClassName: ibmc-file-silver使用您自己的儲存空間類別的範例。
以下
.yaml檔案會建立一個名為mypvc的索賠,其儲存類別為ibmc-file-retain-custom,計費方式為"hourly",容量為45Gi吉位元組,IOPS 為"300"。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mypvc labels: billingType: "hourly" region: us-south zone: dal13 spec: accessModes: - ReadWriteMany resources: requests: storage: 45Gi iops: "300" storageClassName: ibmc-file-retain-customname- 輸入 PVC 名稱。
billingType- 指定計算儲存空間費用的頻率為 "monthly" 或 "hourly"。 若未指定計費類型,儲存空間將以每小時計費的方式進行配置。
region- (可選):指定您要為 File Storage for Classic 進行配置的區域。 若要連接至儲存空間,請在叢集所在的相同地區中建立儲存空間。 如果指定地區,則也須指定區域。 若未指定區域,或無法找到指定的區域,則儲存空間將建立在與您的叢集相同的區域中。 要取得您的叢集所屬的區域,請執行
ibmcloud ks cluster get --cluster <cluster_name_or_ID>,並在**大師 URL**中尋找區域前綴,例如https://c2.eu-de.containers.cloud.ibm.com:11111`` 中的eu-de。 除了在 PVC 中指定區域和區段外,您也可以在 自訂儲存類別中 指定這些值。 接著,請在 PVC 的「metadata.annotations.volume.beta.kubernetes.io/storage-class」區段中使用您的儲存類別。 如果在儲存空間類別和 PVC 中指定了地區和區域,則會優先採用 PVC 中的值。 zone- (可選):指定您要為 File Storage for Classic 進行配置的區域。 若要在應用程式中使用儲存空間,請在工作者節點所在的相同區域中建立儲存空間。 若要查看您的工作節點所屬的區域,請執行
ibmcloud ks worker ls --cluster <cluster_name_or_ID>,並檢視 CLI 輸出中的「 Zone 」欄位。 如果指定區域,則也須指定地區。 若未指定區域,或於多區域叢集中找不到所指定的區域,則會以輪詢方式選取區域。 除了在 PVC 中指定區域和區段外,您也可以在 自訂儲存類別中 指定這些值。 接著,請在 PVC 的「metadata.annotations.volume.beta.kubernetes.io/storage-class」區段中使用您的儲存類別。 如果在儲存空間類別和 PVC 中指定了地區和區域,則會優先採用 PVC 中的值。 accessMode- 請指定以下其中一個選項。
ReadWriteMany: PVC 可透過多個艙體進行安裝。 所有 Pod 都可以讀取及寫入至磁區。ReadOnlyMany: PVC 可透過多個艙體進行安裝。 所有 Pod 都具有唯讀存取權。ReadWriteOnce: PVC 只能由一個艙體進行安裝。 此 Pod 可以讀取及寫入至磁區。
storage- 請輸入 File Storage for Classic 的容量,單位為吉位元組(Gi)。 儲存空間配置完成後,您將無法變更 File Storage for Classic 的大小。 請確定指定符合您要儲存的資料量的大小。
iops- 此選項僅適用於您自己的自訂儲存空間類別 (
ibmc-file-custom / ibmc-file-retain-custom)。指定儲存空間的 IOPS 總計,並選取容許範圍內 100 的倍數。 如果您選擇的 IOPS 不是所列出的 IOPS,則會將 IOPS 無條件進位。 storageClassName- 您要用來配置 File Storage for Classic 的儲存類別名稱。 您可以選擇使用 IBM 所提供的儲存類別 之一,或 自行建立儲存類別。 若未指定儲存類別,該 PV 將以預設儲存類別「
ibmc-file-bronze」建立。
如果您要使用自訂的儲存空間類別,則請建立具有對應儲存空間類別名稱、有效 IOPS 及大小的 PVC。
-
建立 PVC。
kubectl apply -f mypvc.yaml -
驗證您的 PVC 已建立並已連結至 PV。
kubectl describe pvc mypvc輸出範例
Name: mypvc Namespace: default StorageClass: "" Status: Bound Volume: pvc-0d787071-3a67-11e7-aafc-eef80dd2dea2 Labels: <none> Capacity: 20Gi Access Modes: RWX Events: FirstSeen LastSeen Count From SubObjectPath Type Reason Message --------- -------- ----- ---- ------------- -------- ------ ------- 3m 3m 1 {ibm.io/ibmc-file 31898035-3011-11e7-a6a4-7a08779efd33 } Normal Provisioning External provisioner is provisioning volume for claim "default/my-persistent-volume-claim" 3m 1m 10 {persistentvolume-controller } Normal ExternalProvisioning can't find provisioner "ibm.io/ibmc-file", expecting that a volume for the claim is provisioned either manually or via external software 1m 1m 1 {ibm.io/ibmc-file 31898035-3011-11e7-a6a4-7a08779efd33 } Normal ProvisioningSucceeded Successfully provisioned volume pvc-0d787071-3a67-11e7-aafc-eef80dd2dea2 -
若要將儲存裝置掛載至您的部署,請建立一個名為
.yaml的配置檔案,並指定與該 PV 綁定的 PVC。若您有需要非 root 使用者寫入持久儲存空間的應用程式,或是需要掛載路徑由 root 使用者擁有的應用程式,請參閱 《為 NFS 新增非 root 使用者存取權限》 File Storage for Classic。
apiVersion: apps/v1 kind: Deployment metadata: name: <deployment_name> labels: app: <deployment_label> spec: selector: matchLabels: app: <app_name> template: metadata: labels: app: <app_name> spec: containers: - image: <image_name> name: <container_name> volumeMounts: - name: <volume_name> mountPath: /<file_path> volumes: - name: <volume_name> persistentVolumeClaim: claimName: <pvc_name>app- 在 meta 資料區段中,輸入部署的標籤。
matchLabels.app及labels.app- 在規格選取器和範本 meta 資料區段中,輸入應用程式的標籤。
image- 您要使用的容器映像檔名稱。 若要列出 IBM Cloud Container Registry 帳戶中的可用映像檔,請執行
ibmcloud cr image-list。 name- 您要部署至叢集的容器的名稱。
mountPath- 在儲存器磁區裝載區段中,輸入在儲存器內裝載磁區的目錄絕對路徑。 寫入掛載路徑的資料,會儲存於您的實體 File Storage for Classic 實例中的
root目錄下。 若要讓不同應用程式共用同一個儲存區,您可以為每個應用程式指定 儲存區的子路徑。 name- 在容器磁區裝載區段中,輸入要裝載至 Pod 的磁區名稱。
name- 在磁區區段中,輸入要裝載至 Pod 的磁區名稱。 通常這個名稱與
volumeMounts.name相同。 claimName- 在磁區持續性磁區要求區段中,輸入連結您要使用之 PV 的 PVC 名稱。
-
建立部署。
kubectl apply -f <local_yaml_path> -
驗證已順利裝載 PV。
kubectl describe deployment <deployment_name>裝載點在 Volume Mounts(磁區裝載)欄位中,而磁區在 Volumes(磁區)欄位中。
Volume Mounts: /var/run/secrets/kubernetes.io/serviceaccount from default-token-tqp61 (ro) /volumemount from myvol (rw) ... Volumes: myvol: Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace) ClaimName: mypvc ReadOnly: false
在叢集裡使用現有的 File Storage for Classic
如果您已有現有的實體儲存裝置,並希望在叢集中使用,可以手動建立 PV 和 PVC,以靜態方式配置儲存空間。
開始之前:
請確保您至少有一個工作節點位於與現有 File Storage for Classic 實例相同的區域中。
請登入您的帳戶。 適用的話,請將適當的資源群組設為目標。 設定叢集的環境定義。
準備現有儲存體
在可以開始將現有儲存空間裝載至應用程式之前,您必須擷取所有適用於 PV 的必要資訊,並準備可在叢集裡存取的儲存空間。
- 針對已透過「
retain」儲存類別進行配置的儲存空間。 - 如果您已使用
retain儲存空間類別佈建儲存空間,並移除 PVC,則不會自動移除 PV 及實體儲存裝置。 若要在叢集裡重複使用儲存空間,您必須先移除剩餘的 PV。
若要在不同的叢集(不是您佈建儲存空間的叢集)中使用現有儲存空間,請遵循已在叢集外建立的儲存空間的步驟,將儲存空間新增至工作者節點的子網路。
-
列出現有 PV。
kubectl get pv尋找屬於持續性儲存空間的 PV。 PV 處於
released狀況。 -
取得 PV 的詳細資料。
kubectl describe pv <pv_name> -
記下
CapacityGb、storageClass、failure-domain.beta.kubernetes.io/region、failure-domain.beta.kubernetes.io/zone、server及path。 -
移除 PV。
kubectl delete pv <pv_name> -
驗證已移除 PV。
kubectl get pv
- 對於在叢集外部進行資源配置的持久性儲存
- 如果您想要使用先前佈建、但之前從未在叢集裡使用的現有儲存空間,您必須讓儲存空間可在與工作者節點相同的子網路中使用。
- 在 IBM Cloud 基礎架構入口網站中,點選「儲存」。
- 點擊 File Storage for Classic,然後從「動作」選單中選擇「授權主機」。
- 選取子網路。
- 從下拉清單,選取您的工作者節點所連接的專用 VLAN 子網路。 若要找出您的工作節點所屬的子網,請執行
ibmcloud ks worker ls --cluster <cluster_name>,並將您的工作節點的Private IP與下拉式清單中找到的子網進行比對。 - 按一下提交。
- 點擊「File Storage for Classic」的名稱。
- 記下
Mount Point、size及Location欄位。 「Mount Point」欄位顯示為「<nfs_server>:<file_storage_path>」。
建立持續性磁區及持續性磁區要求
-
建立 PV 的儲存空間配置檔。 包括您先前擷取的值。
apiVersion: v1 kind: PersistentVolume metadata: name: mypv labels: failure-domain.beta.kubernetes.io/region: <region> failure-domain.beta.kubernetes.io/zone: <zone> spec: capacity: storage: "<size>" accessModes: - ReadWriteMany nfs: server: "<nfs_server>" path: "<file_storage_path>"name- 輸入要建立的 PV 物件的名稱。
labels- 輸入您先前擷取的地區及區域。 您必須在相同的地區及區域中至少有一個工作者節點。
storage- 輸入您先前擷取之現有 NFS 檔案共用的儲存空間大小。 儲存空間大小必須以 GB 為單位寫入(例如,20Gi (20 GB) 或 1000Gi (1 TB)),而且大小必須符合現有檔案共用的大小。
accessMode- 請指定以下其中一個選項。
ReadWriteMany: PVC 可透過多個艙體進行安裝。 所有 Pod 都可以讀取及寫入至磁區。ReadOnlyMany: PVC 可透過多個艙體進行安裝。 所有 Pod 都具有唯讀存取權。ReadWriteOnce: PVC 只能由一個艙體進行安裝。 此 Pod 可以讀取及寫入至磁區。
server- 輸入您先前擷取的 NFS 檔案共用伺服器 ID。
path- 輸入您先前擷取之 NFS 檔案共用的路徑。
-
在叢集裡建立 PV。
kubectl apply -f mypv.yaml -
驗證已建立 PV。
kubectl get pv -
建立另一個配置檔來建立您的 PVC。 為了讓 PVC 符合您先前建立的 PV,您必須對
storage及accessMode選擇相同的值。storage-class欄位必須是空字串。 若這些欄位中有任何一項與 PV 不符,系統便會動態配置一個新的 PV 以及一個新的實體儲存實例。kind: PersistentVolumeClaim apiVersion: v1 metadata: name: mypvc spec: accessModes: - ReadWriteMany resources: requests: storage: "<size>" storageClassName: "" -
建立您的 PVC。
kubectl apply -f mypvc.yaml -
驗證您的 PVC 已建立並已連結至 PV。
kubectl describe pvc mypvc輸出範例
Name: mypvc Namespace: default StorageClass: "" Status: Bound Volume: pvc-0d787071-3a67-11e7-aafc-eef80dd2dea2 Labels: <none> Capacity: 20Gi Access Modes: RWX Events: FirstSeen LastSeen Count From SubObjectPath Type Reason Message --------- -------- ----- ---- ------------- -------- ------ ------- 3m 3m 1 {ibm.io/ibmc-file 31898035-3011-11e7-a6a4-7a08779efd33 } Normal Provisioning External provisioner is provisioning volume for claim "default/my-persistent-volume-claim" 3m 1m 10 {persistentvolume-controller } Normal ExternalProvisioning can't find provisioner "ibm.io/ibmc-file", expecting that a volume for the claim is provisioned either manually or via external software 1m 1m 1 {ibm.io/ibmc-file 31898035-3011-11e7-a6a4-7a08779efd33 } Normal ProvisioningSucceeded Successfully provisioned volume pvc-0d787071-3a67-11e7-aafc-eef80dd2dea2
您已順利建立 PV,並將它連結至 PVC。 現在,叢集使用者可以裝載 PVC 至其部署,並開始對 PV 物件進行讀寫。
在有狀態集中使用 File Storage for Classic
如果您具有有狀態應用程式(例如資料庫),則可以建立有狀態集合,以使用 File Storage for Classic 來儲存應用程式資料。 或者,您也可以使用 IBM Cloud 資料庫即服務,並將資料儲存在雲端。
- 將 File Storage for Classic 新增至有狀態集合時,我需要注意哪些事項?
- 若要將儲存空間新增至有狀態集合,您可以在有狀態集合 YAML 的
volumeClaimTemplates區段中指定儲存空間配置。volumeClaimTemplates是您的 PVC 的基礎,其中可包含儲存類別,以及您欲配置的 File Storage for Classic 的容量或 IOPS 數值。 不過,如果您要在volumeClaimTemplates中包括標籤,則在建立 PVC 時,Kubernetes 不會包括這些標籤。 相反地,您必須將標籤直接新增至有狀態集合。
您無法同時部署兩個帶狀態的集合。 如果您嘗試在完整部署不同的有狀態集合之前建立有狀態集合,則有狀態集合的部署可能會導致非預期的結果。
- 我該如何在特定區域中建立我的有狀態集?**
- 在多區域叢集裡,您可以指定要在有狀態集合 YAML 的
spec.selector.matchLabels及spec.template.metadata.labels區段中建立有狀態集合的區域及地區。 或者,您也可以將這些標籤新增至自訂的儲存空間類別,並在有狀態集合的volumeClaimTemplates區段中使用此儲存空間類別。 - 我能否將 PV 與我的帶狀態 Pod 的綁定延遲,直到該 Pod 準備就緒為止?
- 是,您可以為 PVC 建立自己的儲存空間類別,其中包括
volumeBindingMode: WaitForFirstConsumer欄位。 - 要將
File Storage for Classic加入有狀態集合(stateful set),有哪些選項? - 如果您要在建立有狀態集合時自動建立 PVC,請使用動態佈建。 您也可以選擇使用有狀態集合來預先佈建 PVC 或使用現有 PVC。
使用動態佈建建立有狀態集時建立 PVC
如果您要在建立有狀態集合時自動建立 PVC,請使用此選項。
開始之前:請登入您的帳戶。 適用的話,請將適當的資源群組設為目標。 設定叢集的環境定義。
-
驗證已完整部署叢集裡的所有現有有狀態集合。 如果某個有狀態集仍在部署中,您便無法開始建立您的有狀態集。 您必須等到叢集裡的所有有狀態集合皆已完整部署,才能避免非預期的結果。 列出叢集裡的現有有狀態集合。
kubectl get statefulset --all-namespaces輸出範例
NAME DESIRED CURRENT AGE mystatefulset 3 3 6s -
檢視每個有狀態集合的 Pod 狀態,確定已完成有狀態集合的部署。
kubectl describe statefulset <statefulset_name>輸出範例
Name: nginx Namespace: default CreationTimestamp: Fri, 05 Oct 2022 13:22:41 -0400 Selector: app=nginx,billingType=hourly,region=us-south,zone=dal10 Labels: app=nginx billingType=hourly region=us-south zone=dal10 Annotations: kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"apps/v1","kind":"StatefulSet","metadata":{"annotations":{},"name":"nginx","namespace":"default"},"spec":{"podManagementPolicy":"Par..." Replicas: 3 desired | 3 total Pods Status: 0 Running / 3 Waiting / 0 Succeeded / 0 Failed Pod Template: Labels: app=nginx billingType=hourly region=us-south zone=dal10當您在 CLI 輸出的 Replicas 區段中找到的抄本數目等於 Pods Status 區段中的 Running Pod 數目時,即已完整部署有狀態集合。 如果尚未完整部署有狀態集合,請先等到部署完成之後,再繼續。
-
建立有狀態集的配置檔,以及您用來公開有狀態集的服務。
指定區域的狀態化集合範例。 下列範例顯示如何將 NGINX 部署為具有 3 個抄本的有狀態集合。 針對每個複本,會根據「
ibmc-file-retain-bronze」儲存類別中的規格,配置一個 20 吉字節的 File Storage for Classic 裝置。 所有儲存裝置都會佈建在dal10區域。 由於無法從其他區域存取 File Storage for Classic,因此該有狀態集的所有複本也皆部署於位於dal10的工作節點上。apiVersion: v1 kind: Service metadata: name: nginx labels: app: nginx spec: ports: - port: 80 name: web clusterIP: None selector: app: nginx --- apiVersion: apps/v1 kind: StatefulSet metadata: name: nginx spec: serviceName: "nginx" replicas: 3 podManagementPolicy: Parallel selector: matchLabels: app: nginx billingType: "hourly" region: "us-south" zone: "dal10" template: metadata: labels: app: nginx billingType: "hourly" region: "us-south" zone: "dal10" spec: containers: - name: nginx image: registry.k8s.io/nginx-slim:0.8 ports: - containerPort: 80 name: web volumeMounts: - name: myvol mountPath: /usr/share/nginx/html volumeClaimTemplates: - metadata: name: myvol spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi iops: "300" #required only for performance storage storageClassName: ibmc-file-retain-bronze包含反親和性規則及延遲建立 File Storage for Classic 的狀態化集合範例。 下列範例顯示如何將 NGINX 部署為具有 3 個抄本的有狀態集合。 該有狀態集合並未指定建立「File Storage for Classic」的區域與區。 相反地,有狀態集合會使用反親緣性規則,確保 Pod 分散到各工作者節點和區域。 定義
app: nginx標籤,即可達成工作者節點反親緣性。 此標籤指示 Kubernetes 排程器在此工作者節點上已執行具有相同標籤的 Pod 時,不在工作者節點上排定 Pod。topologykey: failure-domain.beta.kubernetes.io/zone標籤會進一步限制此反親緣性規則,以及防止在工作者節點上排定 Pod,該工作者節點與已執行具有app: nginx標籤的 Pod 的工作者節點位於相同的區域。 對於每個 StatefulSet Pod,系統會依照「volumeClaimTemplates」章節的定義建立兩個 PVC,但 File Storage for Classic 實例的建立會延遲,直到有使用該儲存空間的 StatefulSet Pod 被排程為止。 這種設定被稱為「具拓撲意識的卷排程」。apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ibmc-file-bronze-delayed parameters: billingType: hourly classVersion: "2" iopsPerGB: "2" sizeRange: '[20-12000]Gi' type: Endurance provisioner: ibm.io/ibmc-file reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer --- apiVersion: v1 kind: Service metadata: name: nginx labels: app: nginx spec: ports: - port: 80 name: web clusterIP: None selector: app: nginx --- apiVersion: apps/v1 kind: StatefulSet metadata: name: web spec: serviceName: "nginx" replicas: 3 podManagementPolicy: "Parallel" selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchExpressions: - key: app operator: In values: - nginx topologyKey: failure-domain.beta.kubernetes.io/zone containers: - name: nginx image: registry.k8s.io/nginx-slim:0.8 ports: - containerPort: 80 name: web volumeMounts: - name: myvol1 mountPath: /usr/share/nginx/html - name: myvol2 mountPath: /tmp1 volumeClaimTemplates: - metadata: name: myvol1 spec: accessModes: - ReadWriteMany # access mode resources: requests: storage: 20Gi storageClassName: ibmc-file-bronze-delayed - metadata: name: myvol2 spec: accessModes: - ReadWriteMany # access mode resources: requests: storage: 20Gi storageClassName: ibmc-file-bronze-delayedname- 在 meta 資料中,輸入有狀態集的名稱。 您輸入的名稱將用於建立您的 PVC 的名稱,格式為:
<volume_name>-<statefulset_name>-<replica_number>。 serviceName- 在「規格」區段中,請輸入您要用來公開該有狀態集的服務名稱。
replicas- 輸入有狀態集合的抄本數目。
podManagementPolicy- 輸入您要用於有狀態集合的 Pod 管理原則。 請從下列選項中進行選擇。
OrderedReady: 選取此選項時,有狀態集的複本將依序部署。 例如,如果您已指定 3 個抄本,則 Kubernetes 會為您的第一個抄本建立 PVC、等待 PVC 連結、部署有狀態集合抄本,以及將 PVC 裝載至抄本。 部署完成之後,會部署第二個抄本。 如需有關此選項的更多資訊,請參閱《 OrderedReady 匣管理 》。Parallel: 選取此選項後,所有具狀態集(stateful set)複本的部署將同時啟動。 如果您的應用程式支援平行部署抄本,則請使用此選項來儲存您 PVC 及有狀態集合抄本的部署時間。
matchLabels- 在「規格選擇器」區段中,請輸入您希望納入狀態化集(stateful set)及 PVC 中的所有標籤。 您在有狀態集合(stateful set)的
volumeClaimTemplates中包含的標籤,不會被 Kubernetes 識別。 檢閱下列範例標籤。region以及zone:若您希望所有 StatefulSet 複本和 PVC 皆建立在某個特定區域中,請同時新增這兩組標籤。 您也可以在所使用的儲存空間類別中指定區域及地區。 若您未指定區域和區域,且擁有多區域叢集,系統將以輪詢方式選取用於配置儲存的區域,以將卷請求均勻地分散至所有區域。billingType: 請輸入您要為 PVC 使用的計費類型。 請選擇hourly或monthly。 若未指定此標籤,所有 PVC 皆會以「每小時計費」類型建立。
labels- 在規格範本 meta 資料區段中,輸入您新增至
spec.selector.matchLabels區段的相同標籤。 affinity- 在規格範本規格親緣性區段中,指定反親緣性規則,以確保有狀態集合 Pod 分散在工作者節點及區域之間。 此範例顯示偏好不要在工作者節點上排定有狀態集合 Pod 的反親緣性規則,其中 Pod 具有
app: nginx標籤。 如果工作者節點與具有topologykey: failure-domain.beta.kubernetes.io/zone標籤的 Pod 位於相同的區域,則app: nginx會進一步限制此反親緣性規則,以及防止在工作者節點上排定 Pod。 使用此反親緣性規則,您可以跨各工作者節點和區域達到反親緣性。 name- 在規格磁區要求範本 meta 資料區段中,輸入磁區的名稱。 請使用您在「
spec.containers.volumeMount.name」區段中定義的相同名稱。 您在此處輸入的名稱將用於建立您的 PVC 名稱,格式為:<volume_name>-<statefulset_name>-<replica_number>。 storage- 在規格磁區要求範本規格資源要求區段中,輸入 File Storage for Classic 的大小,以 GB (Gi) 為單位。
iops- 在規格磁區要求範本規格資源要求區段中,如果您要佈建 效能儲存體,請輸入 IOPS 數目。 如果您使用耐久性儲存空間類別,並指定 IOPS 數目,則會忽略 IOPS 數目。 相反地,會使用儲存空間類別中所指定的 IOPS。
storageClassName- 在規格磁區要求範本規格區段中,輸入您要使用的儲存類別。 若要列出現有的儲存類別,請執行
kubectl get sc | grep file。 若未指定儲存類別,該 PVC 將採用叢集中設定的預設儲存類別進行建立。 請確保預設儲存類別使用「ibm.io/ibmc-file」配置程式,以便您的有狀態集能透過「File Storage for Classic」進行配置。
-
建立有狀態集合。
kubectl apply -f statefulset.yaml -
等待部署有狀態集合。
kubectl describe statefulset <statefulset_name>
若要查看 PVC 的現行狀態,請執行 kubectl get pvc。 您的 PVC 名稱格式為 <volume_name>-<statefulset_name>-<replica_number>。
靜態佈建:搭配使用現有 PVC 與有狀態集合
您可以在使用有狀態集合來建立有狀態集合或使用現有 PVC 之前,預先佈建 PVC。
如果您在建立有狀態集合時動態佈建 PVC,則會根據有狀態集合 YAML 檔案中所使用的值來指派 PVC 名稱。 若要讓有狀態集合使用現有 PVC,則 PVC 名稱必須符合使用動態佈建時所自動建立的名稱。
開始之前:請登入您的帳戶。 適用的話,請將適當的資源群組設為目標。 設定叢集的環境定義。
- 若要在建立有狀態集之前預先配置 PVC,請依照 《將 File Storage for Classic 新增至應用程式》 中的步驟 1 至 3,為每個有狀態集的複本建立一個 PVC。 請務必以符合以下格式的名稱建立您的 PVC:
<volume_name>-<statefulset_name>-<replica_number>。
<volume_name>-
請在您的有狀態集合(stateful set)的「
spec.volumeClaimTemplates.metadata.name」區段中,指定您想要的名稱,例如nginxvol。 <statefulset_name>-
請在您的有狀態集合(stateful set)的「
metadata.name」區段中,指定您想要的名稱,例如nginx_statefulset。 <replica_number>-
請輸入您的複本編號,編號須以 0 開頭。
例如,如果您必須建立 3 個有狀態集合抄本,請建立具有下列名稱的 3 個 PVC:
nginxvol-nginx_statefulset-0、nginxvol-nginx_statefulset-1及nginxvol-nginx_statefulset-2。想為現有的 File Storage for Classic 實例建立 PVC 和 PV 嗎? 使用靜態佈建,以建立 PVC 和 PV。
- 遵循動態佈建:在建立有狀態集合時建立 PVC 中的步驟,以建立有狀態集合。 您的 PVC 名稱格式為
<volume_name>-<statefulset_name>-<replica_number>。 請務必在有狀態集合(stateful set)的規格中,使用您 PVC 名稱中的以下數值。
spec.volumeClaimTemplates.metadata.name-
請輸入您 PVC 名稱的
<volume_name>。 metadata.name-
請輸入您 PVC 名稱的
<statefulset_name>。 spec.replicas-
請輸入您要為該有狀態集建立的複本數量。 抄本數目必須等於您先前所建立的 PVC 數目。
如果您的 PVC 位於不同的區域中,請勿在您的狀態化集合中包含區域或分區標籤。
-
列出叢集裡的 Pod 並識別屬於有狀態集的 Pod,以驗證有狀態集抄本 Pod 中使用 PVC。
kubectl get pods -
驗證現有 PVC 已裝載至有狀態集合抄本。 請檢閱 CLI 輸出之
ClaimName區段中的Volumes。kubectl describe pod <pod_name>輸出範例
Name: nginx-0 Namespace: default Node: 10.xxx.xx.xxx/10.xxx.xx.xxx Start Time: Fri, 05 Oct 2022 13:24:59 -0400 ... Volumes: myvol: Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace) ClaimName: myvol-nginx-0 ...
變更現有儲存裝置的大小及 IOPS
如果您要增加儲存空間容量或效能,則可以修改現有磁區。
如需計費的相關問題,以及尋找如何使用 IBM Cloud 主控台來修改儲存空間的步驟,請參閱擴充檔案共用容量。
-
列出叢集裡的 PVC,並記下 VOLUME 直欄中關聯 PV 的名稱。
kubectl get pvc輸出範例
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE myvol Bound pvc-01ac123a-123b-12c3-abcd-0a1234cb12d3 20Gi RWX ibmc-file-bronze 147d -
透過列出您的 PVC 所綁定的 PV 詳細資訊,以取得與您的 PVC 相關聯的實體 File Storage for Classic 的
StorageType、volumeId以及server。 請將「<pv_name>」替換為您在上一步驟中取得的那個 PV 的名稱。 儲存類型、卷標 ID 以及伺服器名稱會顯示在 CLI 輸出中的「Labels」區段中。kubectl describe pv <pv_name>輸出範例
Name: pvc-4b62c704-5f77-11e8-8a75-b229c11ba64a Labels: CapacityGb=20 Datacenter=dal10 Iops=2 StorageType=ENDURANCE Username=IBM02SEV1543159_6 billingType=hourly failure-domain.beta.kubernetes.io/region=us-south failure-domain.beta.kubernetes.io/zone=dal10 path=IBM01SEV1234567_8ab12t server=fsf-dal1001g-fz.adn.networklayer.com volumeId=12345678 ... -
在 IBM Cloud 基礎架構帳戶中修改磁區的大小或 IOPS。
效能儲存體的範例。
ibmcloud sl file volume-modify <volume_ID> --new-size <size> --new-iops <iops>耐久性儲存空間的範例。
ibmcloud sl file volume-modify <volume_ID> --new-size <size> --new-tier <iops>volume_ID- 輸入您先前擷取的磁區 ID。
new-size- 以 GB 為單位輸入磁區的新大小。 如需有效的大小,請參閱 決定 File Storage for Classic 配置。 您輸入的大小必須大於或等於磁區的現行大小。 若未指定新大小,則會使用卷的當前大小。
new-iops- 僅限效能儲存空間。 輸入您想要的新 IOPS 數。 如需有效的 IOPS,請參閱 決定 File Storage for Classic 配置。 若未指定 IOPS,則會採用當前的 IOPS 值。 如果磁區的原始 IOPS/GB 比例小於 0.3,則新的 IOPS/GB 比例必須小於 0.3。 如果磁區的原始 IOPS/GB 比例大於或等於 0.3,則磁區的新 IOPS/GB 比例必須大於或等於 0.3。
new-tier- 僅限耐久性儲存空間。 輸入您想要的每 GB 新 IOPS 數。 如需有效的 IOPS,請參閱 決定 File Storage for Classic 配置。 若未指定 IOPS,則會採用當前的 IOPS 值。 如果磁區的原始 IOPS/GB 比例小於 0.25,則新的 IOPS/GB 比例必須小於 0.25。 如果磁區的原始 IOPS/GB 比例大於或等於 0.25,則磁區的新 IOPS/GB 比例必須大於或等於 0.25。
輸出範例
Order 31020713 was placed successfully!. > Storage as a Service > 40 GBs > 2 IOPS per GB > 20 GB Storage Space (Snapshot Space) You might run 'ibmcloud sl file volume-list --order 12345667' to find this file volume after it is ready. -
如果您已變更磁區的大小,並使用 Pod 中的磁區,請登入 Pod 以驗證新的大小。 列出所有使用 PVC 的 Pod。 Pod 的回傳格式為:
<pod_name>: <pvc_name>。kubectl get pods --all-namespaces -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.volumes[*]}{.persistentVolumeClaim.claimName}{" "}{end}{end}' | grep "<pvc_name>" -
登入 Pod。
kubectl exec -it <pod_name> bash -
顯示磁碟用量統計資料,並尋找您先前擷取之磁區的伺服器路徑。
df -h輸出範例
Filesystem Size Used Avail Use% Mounted on overlay 99G 4.8G 89G 6% / tmpfs 64M 0 64M 0% /dev tmpfs 7.9G 0 7.9G 0% /sys/fs/cgroup fsf-dal1001g-fz.adn.networklayer.com:/IBM01SEV1234567_6/data01 40G 0 40G 0% /myvol
雖然實體儲存空間的大小及 IOPS 已變更,但這些值不會反映在 PV 或 PVC 中。 如果您說明 PV 或 PVC,則會繼續顯示舊大小及 IOPS。 您可以選擇使用 kubectl patch pv 指令來手動更新 PV 中的大小及 IOPS。 不過,此指令無法用來變更 PVC 中的大小或 IOPS。 若要防止 PVC 及 PV 中有不同的大小及 IOPS,請依現狀保留 PVC 及 PV。
變更預設 NFS 版本
File Storage for Classic 的版本決定了與 IBM Cloud File Storage for Classic 伺服器通訊時所使用的通訊協定。 預設情況下,所有 File Storage for Classic 實例均已設定為使用 NFS 第 4 版。 如果您的應用程式需要特定版本才能正常運作,您可以將現有的 PV 變更為較舊的 NFS 版本。
若要變更預設的 NFS 版本,您可以建立一個新的儲存類別,以在叢集中動態配置 File Storage for Classic;或者選擇變更已掛載至您的 Pod 的現有 PV。
為了套用最新的安全性更新並獲得更好的效能,請使用預設的 NFS 版本,切勿切換至較舊的 NFS 版本。
建立一個採用特定 NFS 版本的自訂儲存類別
-
使用您要佈建的 NFS 版本來建立自訂的儲存空間類別。
-
在叢集裡建立儲存空間類別。
kubectl apply -f nfsversion_storageclass.yaml -
驗證已建立自訂的儲存空間類別。
kubectl get sc -
提供 File Storage for Classic 並搭配您自訂的儲存類別。
將現有的 PV 改為使用不同的 NFS 版本
-
取得您欲變更「NFS」版本的「File Storage for Classic」的 PV,並記下該 PV 的名稱。
kubectl get pv -
將註釋新增至 PV。 請將
<version_number>替換為您要使用的NFS版本。 例如,若要變更為 NFS 3.0 版,請輸入 3。kubectl patch pv <pv_name> -p '{"metadata": {"annotations":{"volume.beta.kubernetes.io/mount-options":"vers=<version_number>"}}}' -
刪除使用 File Storage for Classic 的Pod,並重新建立該Pod。
- 將 Pod YAML 儲存至本端機器。
kubect get pod <pod_name> -o yaml > <filepath/pod.yaml> ``` 2. 刪除 Pod。 ```sh {: pre} kubectl deleted pod <pod_name> ``` 3. 重建 Pod。 ```sh {: pre} kubectl apply -f pod.yaml ``` -
等待要部署的 Pod。 狀態變更為
Running時,即已完整部署 Pod。kubectl get pods -
登入 Pod。
kubectl exec -it <pod_name> sh -
請確認 File Storage for Classic 已掛載您先前指定的 NFS 版本。
mount | grep "nfs" | awk -F" |," '{ print $5, $8 }'輸出範例
nfs vers=3.0
縮減預設 File Storage for Classic 外掛程式
預設情況下,您的經典叢集會包含「File Storage for Classic」外掛程式。 若您在叢集中無需使用 File Storage for Classic,可透過縮減外掛程式與監控元件的規模來節省叢集資源。 日後,若您需要 File Storage for Classic,可將複本數量重新擴展至一個。 您無法變更其他設定,也無法完全移除該部署。 因為該外掛程式仍處於已安裝狀態,所以即使對其進行了縮減,該外掛程式也會隨叢集版本更新一起更新。
開始之前:
- 請登入您的帳戶。 適用的話,請將適當的資源群組設為目標。 設定叢集的環境定義。
- 請確保您擁有該叢集的「Manager IAM」服務存取角色,以便您能對「
kube-system」命名空間中的部署進行變更。
若要縮減 File Storage for Classic 外掛程式,請執行下列動作:
-
將 File Storage for Classic 外掛程式與監控器的部署規模縮減至
0的複本。kubectl scale deployment -n kube-system --replicas=0 ibm-file-pluginkubectl scale deployment -n kube-system --replicas=0 ibm-storage-watcher若您日後需要使用「File Storage for Classic」,可透過以下指令將外掛程式恢復至原有規模。
kubectl scale deployment -n kube-system --replicas=1 ibm-file-plugin && kubectl scale deployment -n kube-system --replicas=1 ibm-storage-watcher -
選用:確認外掛程式是否已縮減。 當移除的 Pod 即使在主節點狀態變更後(例如透過叢集重新整理或更新),仍保持已移除狀態時,即表示縮減規模操作已成功。
- 確認 Pod 是否已移除。
kubectl get pods -n kube-system -l 'app in (ibm-file-plugin, ibm-storage-watcher)' ``` 輸出範例 ```sh {: screen} No resources found. ``` 2. 重新整理叢集主節點。 ```sh {: pre} ibmcloud ks cluster refresh -c <cluster_name_or_ID> ``` 3. 請等待幾分鐘,直到重新整理完成,然後重複子步驟 `2.a`,以確認 Pod 已移除。 如果 Pod 已被重新排程,表示您對 File Storage for Classic 外掛程式設定檔所做的變更並未正確儲存。 請確保叢集執行的是正確的 Kubernetes 版本,然後重試。
備份及還原資料
File Storage for Classic 已部署至與您叢集中的工作節點相同的位址。 儲存空間是在叢集化伺服器上由 IBM 管理,以在伺服器關閉時提供可用性。 然而,File Storage for Classic 並不會自動備份,若整個位置發生故障,該檔案可能無法存取。 若要避免資料遺失或損壞,您可以設定定期備份,以在需要時使用它們來還原您的資料。
請檢視您所使用的 File Storage for Classic 的以下備份與還原選項。
設定定期 Snapshot
您可以 為您的 File Storage for Classic 設定定期快照,這是一種唯讀映像,用於記錄實例在特定時間點的狀態。 若要儲存快照,您必須在您的 File Storage for Classic 上申請快照儲存空間。 Snapshot 儲存於相同區域內的現有儲存空間實例上。 如果使用者不小心從磁區移除重要資料,您可以從 Snapshot 還原資料。
完成下列步驟,以建立磁區的 Snapshot。
-
登入
ibmcloud slCLI。ibmcloud sl init -
列出叢集裡的現有 PV。
kubectl get pv -
取得您要建立 Snapshot 空間之 PV 的詳細資料,並記下磁區 ID、大小及 IOPS。 卷識別碼、大小及 IOPS 可於 CLI 輸出結果的「標籤」區段中找到。
kubectl describe pv <pv_name> -
使用您在前一個步驟中擷取的參數,建立現有磁區的 Snapshot 大小。
ibmcloud sl file snapshot-order <volume_ID> --size <size> --tier <iops> -
等待要建立的 Snapshot 大小。 當您的 CLI 輸出中的 快照大小 (GB) 從 0 變更為您訂購的大小時,即表示快照大小已成功配置。
ibmcloud sl file volume-detail <volume_ID> -
為您的磁區建立 Snapshot,並記下為您建立的 Snapshot ID。
ibmcloud sl file snapshot-create <volume_ID> -
驗證已順利建立 Snapshot。
ibmcloud sl file snapshot-list <volume_ID> -
設定 Snapshot 排程。 如需 Snapshot 排程可用選項的相關資訊,請參閱 CLI 文件。
ibmcloud sl block snapshot-enable VOLUME_ID <OPTIONS> -
若要將資料從 Snapshot 還原至現有磁區,請執行下列指令。
ibmcloud sl file snapshot-restore <volume_ID> <snapshot_ID>
將快照複製到另一個區域
為防止您的資料因區域故障而受損,您可以 將快照複寫 至設定在另一個區域的 File Storage for Classic 實例中。
資料只能從主要儲存空間抄寫至備份儲存空間。 您無法將抄寫的 File Storage for Classic 實例裝載至叢集。 當主要儲存空間失敗時,您可以手動將抄寫的備份儲存空間設為主要儲存空間。 然後,您可以將它裝載至叢集。 還原主要儲存空間之後,您可以從備份儲存空間中還原資料。
複製儲存體
您可以 將您的 File Storage for Classic 實例複製到 與原始儲存實例位於同一區域的位置。
在建立複本的時間點,複本具有與原始儲存空間實例相同的資料。 與抄本不同,請使用複本作為獨立於原始儲存空間實例外的儲存空間實例。 若要複製,請先設定磁區的 Snapshot。
將資料備份至 IBM Cloud® Object Storage
您可以使用 ibm-backup-restore Helm 中的圖表,在您的叢集中建立備份與還原 Pod。
這個 Pod 包含一個 Script,它會針對叢集裡的任何持續性磁區要求 (PVC) 執行一次性或定期備份。 資料會儲存在您於區域中設定的 IBM Cloud® Object Storage 實例中。
若要讓資料有更高的可用性,並在發生區域故障時保護應用程式,請設定第二個 IBM Cloud® Object Storage 實例,並在區域之間抄寫資料。 若您需要從 IBM Cloud® Object Storage 實例中還原資料,請使用 Helm 圖表所提供的還原腳本。
在 Pod 和容器之間複製資料
您可以使用 kubectl cp [ 指令](https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#cp){: external} ,將檔案和目錄複製到叢集中的
Pod 或特定容器內,或從其中複製出來。
開始之前:請登入您的帳戶。 適用的話,請將適當的資源群組設為目標。 設定叢集的環境定義。 若未透過 -c`` 指定容器,該指令將使用 Pod 中第一個可用的容器。
將資料從您的本地端機器複製到叢集中的某個 Pod。
kubectl cp <local_filepath>/<filename> <namespace>/<pod>:<pod_filepath>
將叢集內某個 Pod 中的資料複製到您的本地端電腦。
kubectl cp <namespace>/<pod>:<pod_filepath>/<filename></var> <local_filepath>/<filename>
將資料從您的本地端機器複製到您叢集中的某個 Pod 內執行的特定容器中。
kubectl cp <local_filepath>/<filename> <namespace>/<pod>:<pod_filepath> -c CONTAINER
儲存空間類別參照
| 特徵 | 設定 |
|---|---|
| 名稱 | ibmc-file-bronzeibmc-file-retain-bronzeibmc-file-bronze-gid |
| 類型 | 耐久性儲存體 |
| 檔案系統 | NFS |
| 每 GB 的 IOPS 數目 | 2 |
| 大小範圍(以 GB 為單位) | 20-12000 Gi |
| 硬碟 | SSD |
| 收回原則 | ibmc-file-bronze: 刪除ibmc-file-retain-bronze: 保留ibmc-file-bronze-gid: 刪除 |
| 增補群組 ID | 當您使用 ibmc-file-bronze-gid 儲存空間類別時,會自動設定增補群組 ID 65531,以容許非 root 使用者存取您的檔案儲存空間實例。 如需如何使用此儲存空間類別或設定自訂群組 ID 的相關資訊,請參閱 檔案儲存空間: 新增持續性儲存空間的非 root 使用者存取權失敗。 |
| 計費 | 每小時 |
| 定價 | 計價資訊 |
| 特徵 | 設定 |
|---|---|
| 名稱 | ibmc-file-silveribmc-file-retain-silveribmc-file-silver-gid |
| 類型 | 耐久性儲存體 |
| 檔案系統 | NFS |
| 每 GB 的 IOPS 數目 | 4 |
| 大小範圍(以 GB 為單位) | 20-12000 Gi |
| 硬碟 | SSD |
| 收回原則 | ibmc-file-silver: 刪除ibmc-file-retain-silver: 保留ibmc-file-silver-gid: 刪除 |
| 增補群組 ID | 當您使用 ibmc-file-bronze-gid 儲存空間類別時,會自動設定增補群組 ID 65531,以容許非 root 使用者存取您的檔案儲存空間實例。 如需如何使用此儲存空間類別或設定自訂群組 ID 的相關資訊,請參閱 檔案儲存空間: 新增持續性儲存空間的非 root 使用者存取權失敗。 |
| 計費 | 每小時 |
| 定價 | 計價資訊 |
| 特徵 | 設定 |
|---|---|
| 名稱 | ibmc-file-goldibmc-file-retain-goldibmc-file-gold-gid |
| 類型 | 耐久性儲存體 |
| 檔案系統 | NFS |
| 每 GB 的 IOPS 數目 | 10 |
| 大小範圍(以 GB 為單位) | 20-4000 Gi |
| 硬碟 | SSD |
| 收回原則 | ibmc-file-gold: 刪除ibmc-file-retain-gold: 保留ibmc-file-gold-gid: 刪除 |
| 增補群組 ID | 當您使用 ibmc-file-bronze-gid 儲存空間類別時,會自動設定增補群組 ID 65531,以容許非 root 使用者存取您的檔案儲存空間實例。 如需如何使用此儲存空間類別或設定自訂群組 ID 的相關資訊,請參閱 檔案儲存空間: 新增持續性儲存空間的非 root 使用者存取權失敗。 |
| 計費 | 每小時 |
| 定價 | 計價資訊 |
| 特徵 | 設定 |
|---|---|
| 名稱 | ibmc-file-customibmc-file-retain-custom |
| 類型 | 效能 |
| 檔案系統 | NFS |
| IOPS 及大小 |
|
| 硬碟 |
IOPS 與 GB 的比例決定佈建之硬碟的類型。 若要判定 IOPS 與 GB 的比例,您可將 IOPS 除以儲存空間的大小。
|
| 收回原則 | ibmc-file-custom: 刪除ibmc-file-retain-custom: 保留 |
| 計費 | 每小時 |
| 定價 | 計價資訊 |
自訂的儲存空間類別範例
您可以建立自訂的儲存空間類別,並使用 PVC 中的儲存空間類別。
IBM Cloud Kubernetes Service 提供 預先定義的儲存空間類別,以佈建具有特定層級和配置的 File Storage for Classic。 有時,您可能希望以預先定義的儲存類別中未涵蓋的不同配置來配置儲存空間。 您可以使用本主題中的範例,來尋找範例自訂儲存空間類別。
若要建立自訂的儲存空間類別,請參閱自訂儲存空間類別。 然後,在 PVC 中使用自訂的儲存空間類別。
建立拓蹼察覺儲存空間
若要在多區域叢集中使用 File Storage for Classic,您的 Pod 必須排程至與 File Storage for Classic 實例位於同一區域,才能對該卷進行讀寫操作。 在 Kubernetes 引入「具拓撲意識的卷排程」功能之前,當建立 PVC 時,儲存空間的動態配置會自動建立 File Storage for Classic 實例。 接著,當您建立 Pod 時,Kubernetes 排程器嘗試將該
Pod 部署至與您的 File Storage for Classic 實例位於同一資料中心的作業節點上。
若在不了解 Pod 限制的情況下建立 File Storage for Classic 實例,可能會導致預期之外的結果。 例如,Pod 可能無法排定至與儲存空間相同的工作者節點,因為工作者節點的資源不足,或者工作者節點有污點,而且不容許排定 Pod。 透過「考量拓撲結構的卷排程」,File Storage for Classic 實例會延遲至第一個使用該儲存空間的 Pod 建立之後才會建立。
以下範例說明如何建立儲存類別,將 File Storage for Classic 實例的建立延遲至第一個使用此儲存的 Pod 準備好進行排程為止。 若要延遲建立,您必須包括 volumeBindingMode: WaitForFirstConsumer 選項。 若未包含此選項,volumeBindingMode 將自動設定為 Immediate,且在建立 PVC 時會一併建立 File Storage
for Classic 實例。
耐力項目的範例 File Storage for Classic。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ibmc-file-bronze-delayed
parameters:
billingType: hourly
classVersion: "2"
iopsPerGB: "2"
sizeRange: '[20-12000]Gi'
type: Endurance
provisioner: ibm.io/ibmc-file
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
效能範例 File Storage for Classic。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ibmc-file-performance-storageclass
labels:
kubernetes.io/cluster-service: "true"
provisioner: ibm.io/ibmc-file
parameters:
billingType: "hourly"
classVersion: "2"
sizeIOPSRange: |-
"[20-39]Gi:[100-1000]"
"[40-79]Gi:[100-2000]"
"[80-99]Gi:[100-4000]"
"[100-499]Gi:[100-6000]"
"[500-999]Gi:[100-10000]"
"[1000-1999]Gi:[100-20000]"
"[2000-2999]Gi:[200-40000]"
"[3000-3999]Gi:[200-48000]"
"[4000-7999]Gi:[300-48000]"
"[8000-9999]Gi:[500-48000]"
"[10000-12000]Gi:[1000-48000]"
type: "Performance"
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
指定多區域叢集的區域
若您希望在特定區域中建立您的「File Storage for Classic」,可在自訂儲存類別中指定該區域及區域。
若要將 「File Storage for Classic」靜態配置 於特定區域,請使用自訂儲存類別。 在所有其他情況下,請直接在 PVC 中指定區域。
建立自訂的儲存空間類別時,請指定叢集和工作者節點所在的相同地區和區域。 若要取得您的叢集所在的區域,請執行 ibmcloud ks cluster get --cluster <cluster_name_or_ID> ,並在 **大師 URL** 中尋找區域前綴,例如 https://c2.eu-de.containers.cloud.ibm.com:11111``
中的 eu-de 。 要取得您的工作節點所屬的區域,請執行 ibmcloud ks worker ls --cluster <cluster_name_or_ID>。
耐力項目的範例 File Storage for Classic。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ibmc-file-silver-mycustom-storageclass
labels:
kubernetes.io/cluster-service: "true"
provisioner: ibm.io/ibmc-file
parameters:
zone: "dal12"
region: "us-south"
type: "Endurance"
iopsPerGB: "4"
sizeRange: "[20-12000]Gi"
reclaimPolicy: "Delete"
classVersion: "2"
reclaimPolicy: Delete
volumeBindingMode: Immediate
效能範例 File Storage for Classic。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ibmc-file-performance-storageclass
labels:
kubernetes.io/cluster-service: "true"
provisioner: ibm.io/ibmc-file
parameters:
zone: "dal12"
region: "us-south"
billingType: "hourly"
classVersion: "2"
sizeIOPSRange: |-
"[20-39]Gi:[100-1000]"
"[40-79]Gi:[100-2000]"
"[80-99]Gi:[100-4000]"
"[100-499]Gi:[100-6000]"
"[500-999]Gi:[100-10000]"
"[1000-1999]Gi:[100-20000]"
"[2000-2999]Gi:[200-40000]"
"[3000-3999]Gi:[200-48000]"
"[4000-7999]Gi:[300-48000]"
"[8000-9999]Gi:[500-48000]"
"[10000-12000]Gi:[1000-48000]"
type: "Performance"
reclaimPolicy: Delete
volumeBindingMode: Immediate
變更預設 NFS 版本
下列自訂的儲存空間類別可讓您定義您要佈建的 NFS 版本。 例如,若要配置 NFS 版本 3.0,請將 <nfs_version> 替換為 3.0。
耐力項目的範例 File Storage for Classic。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ibmc-file-mount
labels:
kubernetes.io/cluster-service: "true"
provisioner: ibm.io/ibmc-file
parameters:
type: "Endurance"
iopsPerGB: "2"
sizeRange: "[1-12000]Gi"
reclaimPolicy: "Delete"
classVersion: "2"
mountOptions: nfsvers=<nfs_version>
效能範例 File Storage for Classic。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ibmc-file-mount
labels:
kubernetes.io/cluster-service: "true"
provisioner: ibm.io/ibmc-file
parameters:
type: "Performance"
classVersion: "2"
sizeIOPSRange: |-
"[20-39]Gi:[100-1000]"
"[40-79]Gi:[100-2000]"
"[80-99]Gi:[100-4000]"
"[100-499]Gi:[100-6000]"
"[500-999]Gi:[100-10000]"
"[1000-1999]Gi:[100-20000]"
"[2000-2999]Gi:[200-40000]"
"[3000-3999]Gi:[200-48000]"
"[4000-7999]Gi:[300-48000]"
"[8000-9999]Gi:[500-48000]"
"[10000-12000]Gi:[1000-48000]"
mountOptions: nfsvers=<nfs_version>
從叢集移除持續性儲存空間
在叢集裡設定持續性儲存空間時,有三個主要元件:Kubernetes 持續性磁區要求 (PVC)(用於要求儲存空間)、Kubernetes 持續性磁區 (PV)(將裝載到 Pod,並在 PVC 中進行說明)和 IBM Cloud 基礎架構實例(例如,標準檔案儲存空間或區塊儲存空間)。 這三個元件可能需要個別刪除,具體取決於儲存空間的建立方式。
瞭解儲存空間移除選項
從 IBM Cloud 帳戶移除持續性儲存空間,會根據儲存空間的佈建方式及已移除的元件而不同。
- 當我刪除叢集時,我的持久儲存會被刪除嗎?
- 在叢集刪除期間,您可以選擇移除持續性儲存空間。 不過,根據儲存空間的佈建方式,移除儲存空間可能不會包括所有儲存空間元件。 若您使用設定了
reclaimPolicy: Delete的儲存類別來動態配置儲存空間,則在刪除叢集時,您的 PVC、PV 以及儲存實例將會自動被刪除。 對於靜態配置的儲存空間,或是您使用設定了 ` `reclaimPolicy: Retain的儲存類別所配置的儲存空間,當您刪除叢集時,PVC 和 PV 將會被移除,但您的儲存實例和資料仍會保留。 仍然會向您收取儲存空間實例的費用。 此外,如果您已刪除處於性能不佳狀況的叢集,則即使您選擇要移除儲存空間,此儲存空間可能仍會存在。 - 如果我想保留叢集,該如何刪除儲存空間?
- 當您已使用設定
reclaimPolicy: Delete的儲存空間類別來動態佈建儲存空間時,可以移除 PVC 以開始持續性儲存空間的刪除處理程序。 PVC、PV 及儲存空間實例會自動予以移除。 對於靜態配置的儲存空間,或是您使用設定了reclaimPolicy: Retain`` 的儲存類別所配置的儲存空間,您必須手動移除 PVC、PV 以及儲存實例,以避免產生進一步的費用。 - 刪除儲存空間後,計費會如何停止?
- 取決於所刪除的儲存空間元件及時間,計費週期可能不會立即停止。 如果您刪除 PVC 及 PV,但未刪除 IBM Cloud 帳戶中的儲存空間實例,則該實例仍然存在,因此仍需要為此付費。
如果您刪除 PVC、PV 及儲存空間實例,則會根據您在佈建儲存空間時所選擇的 billingType 以及所選擇的刪除儲存空間方式,來停止計費週期。
-
當您透過 IBM Cloud 控制台或 CLI 手動取消持久儲存實例時,計費將依下列方式停止:
- 按小時計費儲存空間:立即停止計費。 取消儲存空間後,可能最長 72 小時內仍會在主控台裡看到該儲存空間實例。
- 按月計費儲存空間:您可以選擇立即取消或在週年日取消。 在這兩種情況下,會一直計費直到現行計費週期結束,而且下一個計費週期會停止計費。 取消儲存空間後,可能最長 72 小時內仍會在主控台或 CLI 中看到該儲存空間實例。
- 立即取消:選擇此選項,以立即移除儲存空間。 您和您的使用者都無法再使用儲存空間或回復資料。
- 週年日:選擇此選項,以在下一個週年日取消儲存空間。 儲存空間實例會一直保持作用中狀態,直到下一個週年日為止,而且您在此日期之前都可以繼續使用它們,例如讓團隊有時間來備份資料。
-
如果您已使用設定
reclaimPolicy: Delete的儲存空間類別來動態佈建儲存空間,而且選擇移除 PVC,則會立即移除 PV 及儲存空間實例。 對於按小時計費的儲存空間,會立即停止計費。 對於按月計費的儲存空間,仍會向您收取當月剩餘時間的費用。 移除儲存空間且停止計費之後,最多可能長達 72 小時仍會在主控台或 CLI 中看到該儲存空間實例。
- 在刪除持久性儲存裝置之前,我需要注意哪些事項?
- 清除持續性儲存空間時,也會刪除其中儲存的所有資料。 如果您需要資料的副本,請進行備份。
- 我刪除了我的儲存實例。 為什麼我仍然可以看到我的實例?
- 移除持續性儲存空間後,要完全處理好移除作業並且讓儲存空間從 IBM Cloud 主控台或 CLI 中消失,最多可能需要長達 72 小時。
清除持續性儲存空間
從 IBM Cloud 帳戶中移除 PVC、PV 及儲存空間實例,以避免持續性儲存空間的進一步費用。
開始之前:
- 確定您已備份要保留的所有資料。
- 請登入您的帳戶。 適用的話,請將適當的資源群組設為目標。 設定叢集的環境定義。
若要清除持續性資料,請執行下列動作:
-
列出叢集裡的 PVC,並記下 PVC 的
NAME、STORAGECLASS,以及連結至 PVC 並顯示為VOLUME的 PV 名稱。kubectl get pvc輸出範例
NAME STATUS VOLUME CAPACITY ACCESSMODES STORAGECLASS AGE claim1 Bound pvc-06886b77-102b-11e8-968a-f6612bb731fb 20Gi RWO class 78d claim2 Bound pvc-457a2b96-fafc-11e7-8ff9-b6c8f770356c 4Gi RWX class 105d claim3 Bound pvc-1efef0ba-0c48-11e8-968a-f6612bb731fb 24Gi RWX class 83d -
檢閱儲存空間類別的
ReclaimPolicy及billingType。kubectl describe storageclass <storageclass_name>如果收回原則指明為
Delete,則在您移除 PVC 時,也會移除 PV 及實體儲存空間。 如果收回原則指明為Retain,或如果您已佈建儲存空間,但沒有儲存空間類別,則在您移除 PVC 時,不會移除 PV 及實體儲存空間。 您必須個別移除 PVC、PV 及實體儲存空間。如果儲存空間依月收費,即使在計費週期結束之前已移除儲存空間,也仍需要依整月付費。
-
移除任何裝載 PVC 的 Pod。 列出裝載 PVC 的 Pod。 如果 CLI 輸出中未顯示任何 Pod,則表示您沒有任何 Pod 使用該 PVC。
kubectl get pods --all-namespaces -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.volumes[*]}{.persistentVolumeClaim.claimName}{" "}{end}{end}' | grep "<pvc_name>"輸出範例
depl-12345-prz7b: claim1 -
移除使用 PVC 的 Pod。 如果 Pod 是部署的一部分,便移除部署。
kubectl delete pod <pod_name> -
驗證已移除 Pod。
kubectl get pods -
移除 PVC。
kubectl delete pvc <pvc_name> -
檢閱 PV 的狀態。 請使用您先前擷取的 PV 名稱
VOLUME。 移除 PVC 時,會釋放連結至 PVC 的 PV。 視佈建儲存空間的方式而定,如果自動刪除 PV,您的 PV 會進入Deleting狀況,或者如果您必須手動刪除 PV,則 PV 會進入Released狀況。 附註:若為自動刪除的 PV,則在刪除它之前,狀況可能短暫地顯示為Released。 請在幾分鐘後重新執行該指令以查看該 PV 是否已移除。kubectl get pv <pv_name> -
如果 PV 未刪除,請手動移除 PV。
kubectl delete pv <pv_name> -
驗證已移除 PV。
kubectl get pv -
列出您的 PV 所指向的實體儲存實例,並記錄
id該實體儲存實例的資訊。ibmcloud sl file volume-list --columns id --columns notes | grep <pv_name>File Storage for Classic 的輸出範例。
id notes 12345678 {"plugin":"ibm-file-plugin-5b55b7b77b-55bb7","region":"us-south","cluster":"aa1a11a1a11b2b2bb22b22222c3c3333","type":"Endurance","ns":"default","pvc":"mypvc","pv":"pvc-d979977d-d79d-77d9-9d7d-d7d97ddd99d7","storageclass":"ibmc-file-gold"}"plugin":"ibm-file-plugin-5b55b7b77b-55bb7"- 叢集所使用的儲存外掛程式。
"region":"us-south"- 您的叢集所在的區域。
"cluster":"aa1a11a1a11b2b2bb22b22222c3c3333"- 與該儲存實例相關聯的叢集 ID。
"type":"Endurance"- 檔案或區塊儲存的類型,可為
Endurance或Performance。 "ns":"default"- 儲存實例所部署的命名空間。
"pvc":"mypvc"- 與儲存實例相關聯的 PVC 名稱。
"pv":"pvc-d979977d-d79d-77d9-9d7d-d7d97ddd99d7"- 與該儲存實例相關聯的 PV。
"storageclass":"ibmc-file-gold"- 儲存類別:青銅、白銀、黃金或自訂。
-
移除實體儲存空間實例。
ibmcloud sl file volume-cancel <classic_file_id> -
驗證已移除實體儲存空間實例。
ibmcloud sl file volume-list
刪除程序最長可能需要 72 小時才能完成。
為檔案儲存指定可信設定檔
您可以使用受信任的設定檔,授權不同的 IBM Cloud 身分存取您帳戶中的資源,包括您的儲存解決方案。 可信賴的設定檔可集中存取控制、消除對長期使用的 API 金鑰的需求,並允許您將權限的範圍精確到特定任務所需的最小值。 如需詳細資訊,請參閱 設定儲存元件的可信設定檔。