IBM Cloud Docs
設定 File Storage for Classic

設定 File Storage for Classic

IBM Cloud File Storage for Classic是持久、快速且靈活的網路連線、基於NFS的File Storage for Classic,您可以使用Kubernetes持久性磁碟區 (PV) 會新增到您的應用程式。 您可以從具有符合您工作負載需求之 GB 大小及 IOPS 的預先定義儲存空間層級中進行選擇。 若要瞭解 IBM Cloud File Storage for Classic 是否為您的正確儲存體選項,請參閱 選擇儲存體解決方案。 如需定價資訊,請參閱 定價

標準基礎架構

File Storage for Classic快速入門

在此快速入門手冊中,您可以透過建立 PVC 以動態佈建磁區,在叢集中建立 24Gi endurance File Storage for Classic 磁區。 然後,您建立應用程式部署來裝載 PVC。

第一次在叢集裡使用 File Storage for Classic 嗎? 在您熟悉 File Storage for Classic 配置之後,請回到這裡。

  1. 建立 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
    
  2. 在叢集裡建立 PVC。

    oc apply -f pvc.yaml
    
  3. 連結 silver-pvc PVC 之後,請建立使用 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
    
  4. 在叢集裡建立部署。

    oc 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。 若要變更儲存的類型和保留策略,您必須建立一個新的儲存實例並將資料從舊的儲存實例複製到新的儲存實例。

開始之前: 存取 Red Hat OpenShift 叢集

若要決定儲存空間配置,請執行下列動作:

  1. 列出 IBM Cloud® Kubernetes Service 中可用的儲存空間類別。

    oc 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
    
  2. 檢閱儲存空間類別的配置。

    oc describe storageclass <storageclass_name>
    

    如需每一個儲存空間類別的相關資訊,請參閱儲存空間類別參照。 如果您沒有找到所需的內容,請考慮建立您自己的自訂儲存類別。 若要開始使用,請參閱自訂的儲存空間類別範例

  3. 選擇您要使用的檔案儲存空間 類型IOPS收回原則計費

檔案儲存體類型

選擇您要佈建的 類型 File Storage for Classic

銅級、銀級及金級儲存類別
這些儲存空間類別會佈建耐久性儲存空間。 耐久性儲存空間可讓您在預先定義的 IOPS 層級選擇儲存空間的大小(以 GB 為單位)。
自訂儲存類別
此儲存類別會供應「效能」儲存體。 使用效能儲存空間,您更能控制儲存空間大小及 IOPS。

IOPS

選擇您的File Storage for Classic的大小和 IOPS。 大小及 IOPS 數目定義 IOPS(每秒的輸入/輸出作業數)總數,此 IOPS 可作為儲存空間有多快的指示器。 您的儲存空間的 IOPS 總數越大,其處理讀取及寫入作業的速度就越快。

銅級、銀級及金級儲存類別
這些儲存類別具有固定數量的每 GB 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 的 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 硬碟上。
類別大小範圍及 IOPS 的表格
大小範圍(以 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 基礎架構帳戶中訂購實體儲存裝置。

開始之前:

希望在有狀態集中部署File Storage for Classic? 如需相關資訊,請參閱 在有狀態集中使用 File Storage for Classic

若要新增 File Storage for Classic,請執行下列動作:

  1. 建立配置檔來定義持續性磁區要求 (PVC),以及將配置儲存為 .yaml 檔案。

    青銅、銀、金色儲存類別的範例。

    以下 .yaml 檔案建立一個名為 mypvc"ibmc-file-silver" 儲存類別聲明,計費為 "monthly",大小為 GB 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",大小為 GB 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-custom
    
    name
    輸入 PVC 名稱。
    billingType
    指定計算儲存空間費用的頻率為 "monthly" 或 "hourly"。 如果您不指定計費類型,則儲存空間將按小時計費類型進行配置。
    region
    選用:指定您要設定File Storage for Classic的區域。 若要連接至儲存空間,請在叢集所在的相同地區中建立儲存空間。 如果指定地區,則也須指定區域。 如果您未指定區域,或未找到指定的區域,則儲存將在與您的叢集相同的區域中建立。 若要取得叢集的區域,請執行 ibmcloud oc cluster get --cluster <cluster_name_or_ID> 並在 Master 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 oc worker ls --cluster <cluster_name_or_ID> 並查看 CLI 輸出的 「區域」欄位。 如果指定區域,則也須指定地區。 如果您未指定可用區,或在多可用區叢集中找不到指定的可用區,則系統將循環選擇該可用區。 您也可以在 自訂儲存類別 中指定這些值,而不是在 PVC 中指定區域和可用區。 然後,在 PVC 的 metadata.annotations.volume.beta.kubernetes.io/storage-class 部分使用您的儲存類別。 如果在儲存空間類別和 PVC 中指定了地區和區域,則會優先採用 PVC 中的值。
    accessMode
    指定以下選項之一。
    • ReadWriteMany:PVC 可以由多個 pod 掛載。 所有 Pod 都可以讀取及寫入至磁區。
    • ReadOnlyMany:PVC 可以由多個 pod 掛載。 所有 Pod 都具有唯讀存取權。
    • ReadWriteOnce:PVC 只能由一個 pod 掛載。 此 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提供的儲存類別 之一或 建立您自己的儲存類別。 如果您不指定儲存類別,則使用預設儲存類別 ibmc-file-bronze 建立 PV。

    如果您要使用自訂的儲存空間類別,則請建立具有對應儲存空間類別名稱、有效 IOPS 及大小的 PVC。

  2. 建立 PVC。

    oc apply -f mypvc.yaml
    
  3. 驗證您的 PVC 已建立並已連結至 PV。

    oc 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
    
    
  4. 若要將儲存空間裝載至部署,請建立配置 .yaml 檔,並指定連結 PV 的 PVC。

    如果您的應用程式需要非 root 使用者寫入持久性存儲,或者應用程式需要安裝路徑由 root 使用者擁有,請參閱 新增非 root 使用者對NFS 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.applabels.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 名稱。
  5. 建立部署。

    oc apply -f <local_yaml_path>
    
  6. 驗證已順利裝載 PV。

    oc 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實例位於同一區域。

存取您的 Red Hat OpenShift 叢集

準備現有儲存體

在可以開始將現有儲存空間裝載至應用程式之前,您必須擷取所有適用於 PV 的必要資訊,並準備可在叢集裡存取的儲存空間。

對於使用 retain 儲存類別配置的儲存。
如果您已使用 retain 儲存空間類別佈建儲存空間,並移除 PVC,則不會自動移除 PV 及實體儲存裝置。 若要在叢集裡重複使用儲存空間,您必須先移除剩餘的 PV。

若要在不同的叢集(不是您佈建儲存空間的叢集)中使用現有儲存空間,請遵循已在叢集外建立的儲存空間的步驟,將儲存空間新增至工作者節點的子網路。

  1. 列出現有 PV。

    oc get pv
    

    尋找屬於持續性儲存空間的 PV。 PV 處於 released 狀況。

  2. 取得 PV 的詳細資料。

    oc describe pv <pv_name>
    
  3. 記下 CapacityGbstorageClassfailure-domain.beta.kubernetes.io/regionfailure-domain.beta.kubernetes.io/zoneserverpath

  4. 移除 PV。

    oc delete pv <pv_name>
    
  5. 驗證已移除 PV。

    oc get pv
    
對於在叢集外部配置的持久性存儲
如果您想要使用先前佈建、但之前從未在叢集裡使用的現有儲存空間,您必須讓儲存空間可在與工作者節點相同的子網路中使用。
  1. IBM Cloud基礎架構入口網站中,按一下儲存
  2. 點選 File Storage for Classic 並從 「操作」 選單中選擇 「授權主機」
  3. 選取子網路
  4. 從下拉清單,選取您的工作者節點所連接的專用 VLAN 子網路。 若要尋找工作節點的子網,請執行 ibmcloud oc worker ls --cluster <cluster_name> 並將工作節點的 Private IP 與您在下拉清單中找到的子網路進行比較。
  5. 按一下提交
  6. 點選File Storage for Classic的名稱。
  7. 記下 Mount PointsizeLocation 欄位。 Mount Point 欄位顯示為 <nfs_server>:<file_storage_path>

建立持續性磁區及持續性磁區要求

  1. 建立 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 掛載。 所有 Pod 都可以讀取及寫入至磁區。
    • ReadOnlyMany:PVC 可以由多個 pod 掛載。 所有 Pod 都具有唯讀存取權。
    • ReadWriteOnce:PVC 只能由一個 pod 掛載。 此 Pod 可以讀取及寫入至磁區。
    server
    輸入您先前擷取的 NFS 檔案共用伺服器 ID。
    path
    輸入您先前擷取之 NFS 檔案共用的路徑。
  2. 在叢集裡建立 PV。

    oc apply -f mypv.yaml
    
  3. 驗證已建立 PV。

    oc get pv
    
  4. 建立另一個配置檔來建立您的 PVC。 為了讓 PVC 符合您先前建立的 PV,您必須對 storageaccessMode 選擇相同的值。 storage-class 欄位必須是空字串。 如果這些欄位中的任何一個與 PV 不匹配,則會動態配置新的 PV 和新的實體儲存實例。

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: mypvc
    spec:
      accessModes:
       - ReadWriteMany
      resources:
        requests:
          storage: "<size>"
      storageClassName: ""
    
  5. 建立您的 PVC。

    oc apply -f mypvc.yaml
    
  6. 驗證您的 PVC 已建立並已連結至 PV。

    oc 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.matchLabelsspec.template.metadata.labels 區段中建立有狀態集合的區域及地區。 或者,您也可以將這些標籤新增至自訂的儲存空間類別,並在有狀態集合的 volumeClaimTemplates 區段中使用此儲存空間類別。
我可以延遲將 PV 綁定到有狀態 Pod 直到 Pod 準備就緒嗎?
是,您可以為 PVC 建立自己的儲存空間類別,其中包括 volumeBindingMode: WaitForFirstConsumer 欄位。
我必須使用哪些選項才能將File Storage for Classic新增到有狀態集?
如果您要在建立有狀態集合時自動建立 PVC,請使用動態佈建。 您也可以選擇使用有狀態集合來預先佈建 PVC 或使用現有 PVC

使用動態佈建建立有狀態集時建立 PVC

如果您要在建立有狀態集合時自動建立 PVC,請使用此選項。

開始之前: 存取 Red Hat OpenShift 叢集

  1. 驗證已完整部署叢集裡的所有現有有狀態集合。 如果有狀態集仍在部署中,您將無法開始建立有狀態集。 您必須等到叢集裡的所有有狀態集合皆已完整部署,才能避免非預期的結果。 列出叢集裡的現有有狀態集合。

    oc get statefulset --all-namespaces
    

    輸出範例

    NAME              DESIRED   CURRENT   AGE
    mystatefulset     3         3         6s
    
  2. 檢視每個有狀態集合的 Pod 狀態,確定已完成有狀態集合的部署。

    oc 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:        oc.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 數目時,即已完整部署有狀態集合。 如果尚未完整部署有狀態集合,請先等到部署完成之後,再繼續。

  3. 建立有狀態集的配置檔,以及您用來公開有狀態集的服務。

    指定區域的狀態集範例。 下列範例顯示如何將 NGINX 部署為具有 3 個抄本的有狀態集合。 對於每個副本,根據 ibmc-file-retain-bronze 儲存類別中的規範配置一個 20 GB 的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: k8s.gcr.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 的工作者節點位於相同的區域。 對於每個有狀態集 pod,將按照 volumeClaimTemplates 部分中的定義建立兩個 PVC,但File Storage for Classic實例的建立會延遲,直到調度使用儲存的有狀態集 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: k8s.gcr.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-delayed
    
    name
    在 meta 資料中,輸入有狀態集的名稱。 您輸入的名稱用於建立 PVC 的名稱,格式為:<volume_name>-<statefulset_name>-<replica_number>
    serviceName
    在規格部分中,輸入要用於公開有狀態集的服務的名稱。
    replicas
    輸入有狀態集合的抄本數目。
    podManagementPolicy
    輸入您要用於有狀態集合的 Pod 管理原則。 請從下列選項中進行選擇。
    • OrderedReady:使用此選項,有狀態集副本將被一個接一個地部署。 例如,如果您已指定 3 個抄本,則 Kubernetes 會為您的第一個抄本建立 PVC、等待 PVC 連結、部署有狀態集合抄本,以及將 PVC 裝載至抄本。 部署完成之後,會部署第二個抄本。 有關此選項的更多信息,請參閱 OrderedReady Pod 管理
    • Parallel:使用此選項,所有有狀態集副本的部署將同時啟動。 如果您的應用程式支援平行部署抄本,則請使用此選項來儲存您 PVC 及有狀態集合抄本的部署時間。
    matchLabels
    在規範選擇器部分中,輸入要包含在有狀態集和 PVC 中的所有標籤。 Kubernetes無法辨識您的有狀態集的 volumeClaimTemplates 中所包含的標籤。 檢閱下列範例標籤。
    • regionzone:如果您希望在一個特定區域中建立所有有狀態集副本和 PVC,請新增這兩個標籤。 您也可以在所使用的儲存空間類別中指定區域及地區。 如果您未指定區域和區域,並且擁有多區域集群,則會循環選擇配置儲存的區域,以在所有區域之間均勻平衡磁碟區請求。
    • billingType:輸入您要用於 PVC 的計費類型。 在 hourlymonthly 之間選擇。 如果不指定此標籤,則所有 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
    在規格磁區要求範本規格區段中,輸入您要使用的儲存類別。 若要列出現有儲存類,請執行 oc get sc | grep file。 如果您未指定儲存類別,則將使用叢集中設定的預設儲存類別建立 PVC。 確保預設儲存類別使用 ibm.io/ibmc-file 配置程序,以便使用File Storage for Classic來配置有狀態集。
  4. 建立有狀態集合。

    oc apply -f statefulset.yaml
    
  5. 等待部署有狀態集合。

    oc describe statefulset <statefulset_name>
    

若要查看 PVC 的現行狀態,請執行 oc get pvc。 PVC 的名稱格式為 <volume_name>-<statefulset_name>-<replica_number>

靜態佈建:搭配使用現有 PVC 與有狀態集合

您可以在使用有狀態集合來建立有狀態集合或使用現有 PVC 之前,預先佈建 PVC。

如果您在建立有狀態集合時動態佈建 PVC,則會根據有狀態集合 YAML 檔案中所使用的值來指派 PVC 名稱。 若要讓有狀態集合使用現有 PVC,則 PVC 名稱必須符合使用動態佈建時所自動建立的名稱。

開始之前: 存取 Red Hat OpenShift 叢集

  1. 如果您想要在建立有狀態集之前預先設定 PVC,請依照 將File Storage for Classic新增至應用程式 中的步驟 1-3 為每個有狀態集副本建立 PVC。 確保您建立的 PVC 名稱遵循以下格式:<volume_name>-<statefulset_name>-<replica_number>

    <volume_name>
    使用您想要在有狀態集的 spec.volumeClaimTemplates.metadata.name 部分中指定的名稱,例如 nginxvol
    <statefulset_name>
    使用您想要在有狀態集的 metadata.name 部分中指定的名稱,例如 nginx_statefulset
    <replica_number>
    輸入從 0 開始的副本編號。

    例如,如果您必須建立 3 個有狀態集合抄本,請建立具有下列名稱的 3 個 PVC:nginxvol-nginx_statefulset-0nginxvol-nginx_statefulset-1nginxvol-nginx_statefulset-2

    希望為現有的File Storage for Classic實例建立 PVC 和 PV? 使用靜態佈建,以建立 PVC 和 PV。

  2. 遵循動態佈建:在建立有狀態集合時建立 PVC 中的步驟,以建立有狀態集合。 PVC 的名稱遵循格式 <volume_name>-<statefulset_name>-<replica_number>。 確保在有狀態集規格中使用 PVC 名稱中的下列值。

    spec.volumeClaimTemplates.metadata.name
    輸入您的 PVC 名稱的 <volume_name>
    metadata.name
    輸入您的 PVC 名稱的 <statefulset_name>
    spec.replicas
    輸入您要為有狀態集建立的副本數。 抄本數目必須等於您先前所建立的 PVC 數目。

    如果您的 PVC 位於不同區域,請不要在狀態集中包含區域或區域標籤。

  3. 列出叢集裡的 Pod 並識別屬於有狀態集的 Pod,以驗證有狀態集抄本 Pod 中使用 PVC。

    oc get pods
    
  4. 驗證現有 PVC 已裝載至有狀態集合抄本。 請檢閱 CLI 輸出之 ClaimName 區段中的 Volumes

    oc 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 主控台來修改儲存空間的步驟,請參閱擴充檔案共用容量

  1. 列出叢集裡的 PVC,並記下 VOLUME 直欄中關聯 PV 的名稱。

    oc get pvc
    

    輸出範例

    NAME             STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS        AGE
    myvol            Bound     pvc-01ac123a-123b-12c3-abcd-0a1234cb12d3   20Gi       RWX            ibmc-file-bronze    147d
    
  2. 透過列出您的 PVC 綁定到的 PV 的詳細信息,檢索與您的 PVC 關聯的物理File Storage for Classic的 StorageTypevolumeIdserver。 將 <pv_name> 替換為您在上一個步驟中檢索到的 PV 的名稱。 儲存類型、磁碟區 ID 和伺服器名稱顯示在 CLI 輸出的 Labels 部分。

    oc 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
    ...
    
  3. 在 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.
    
  4. 如果您已變更磁區的大小,並使用 Pod 中的磁區,請登入 Pod 以驗證新的大小。 列出所有使用 PVC 的 Pod。 Pod 以以下格式傳回:<pod_name>: <pvc_name>

    oc get pods --all-namespaces -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.volumes[*]}{.persistentVolumeClaim.claimName}{" "}{end}{end}' | grep "<pvc_name>"
    
  5. 登入 Pod。

    oc exec -it <pod_name> bash
    
  6. 顯示磁碟用量統計資料,並尋找您先前擷取之磁區的伺服器路徑。

    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。 您可以選擇使用 oc 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版本建立自訂儲存類

  1. 使用您要佈建的 NFS 版本來建立自訂的儲存空間類別

  2. 在叢集裡建立儲存空間類別。

    oc apply -f nfsversion_storageclass.yaml
    
  3. 驗證已建立自訂的儲存空間類別。

    oc get sc
    
  4. 使用您的自訂儲存類別來配置 File Storage for Classic

更改現有 PV 以使用不同的NFS版本

  1. 取得要變更NFS版本的File Storage for Classic的 PV 並記下 PV 的名稱。

    oc get pv
    
  2. 將註釋新增至 PV。 將 <version_number> 替換為您要使用的NFS版本。 例如,若要變更為 NFS 3.0 版,請輸入 3

    oc patch pv <pv_name> -p '{"metadata": {"annotations":{"volume.beta.kubernetes.io/mount-options":"vers=<version_number>"}}}'
    
  3. 刪除使用File Storage for Classic的 Pod,然後重新建立該 Pod。

    1. 將 Pod YAML 儲存至本端機器。

      kubect get pod <pod_name> -o yaml > <filepath/pod.yaml>
      
    2. 刪除 Pod。

      oc deleted pod <pod_name>
      
    3. 重建 Pod。

      oc apply -f pod.yaml
      
  4. 等待要部署的 Pod。 狀態變更為 Running 時,即已完整部署 Pod。

    oc get pods
    
  5. 登入 Pod。

    oc exec -it <pod_name> sh
    
  6. 驗證是否使用您先前指定的NFS版本安裝了File Storage for Classic。

    mount | grep "nfs" | awk -F" |," '{ print $5, $8 }'
    

    輸出範例

    nfs vers=3.0
    

備份及還原資料

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。

  1. 存取您的 Red Hat OpenShift 叢集

  2. 登入 ibmcloud sl CLI。

    ibmcloud sl init
    
  3. 列出叢集裡的現有 PV。

    oc get pv
    
  4. 取得您要建立 Snapshot 空間之 PV 的詳細資料,並記下磁區 ID、大小及 IOPS。 卷 ID、大小和 IOPS 可以在 CLI 輸出的標籤部分中找到。

    oc describe pv <pv_name>
    
  5. 使用您在前一個步驟中擷取的參數,建立現有磁區的 Snapshot 大小。

    ibmcloud sl file snapshot-order <volume_ID> --size <size> --tier <iops>
    
  6. 等待要建立的 Snapshot 大小。 當 CLI 輸出中的 快照大小 (GB) 從 0 變更為您訂購的大小時,快照大小已成功配置。

    ibmcloud sl file volume-detail <volume_ID>
    
  7. 為您的磁區建立 Snapshot,並記下為您建立的 Snapshot ID。

    ibmcloud sl file snapshot-create <volume_ID>
    
  8. 驗證已順利建立 Snapshot。

    ibmcloud sl file snapshot-list <volume_ID>
    
  9. 設定 Snapshot 排程。 如需 Snapshot 排程可用選項的相關資訊,請參閱 CLI 文件

    ibmcloud sl block snapshot-enable VOLUME_ID <OPTIONS>
    
  10. 若要將資料從 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 和容器以及從 pod 和容器複製數據

您可以使用 oc cp指令在叢集中的 pod 或特定容器之間複製檔案和目錄。

開始之前: 存取 Red Hat OpenShift 叢集。 如果您未使用 -c 指定容器,則指令將使用 Pod 中的第一個可用容器。

將資料從本機電腦複製到叢集中的 Pod。

oc cp <local_filepath>/<filename> <namespace>/<pod>:<pod_filepath>

將資料從叢集中的 pod 複製到本機。

oc cp <namespace>/<pod>:<pod_filepath>/<filename></var> <local_filepath>/<filename>

將資料從本機電腦複製到叢集中 pod 中執行的特定容器。

oc cp <local_filepath>/<filename> <namespace>/<pod>:<pod_filepath> -c CONTAINER

儲存空間類別參照

銅級
特徵 設定
名稱 ibmc-file-bronze
ibmc-file-retain-bronze
ibmc-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-silver
ibmc-file-retain-silver
ibmc-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-gold
ibmc-file-retain-gold
ibmc-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-custom
ibmc-file-retain-custom
類型 效能
檔案系統 NFS
IOPS 及大小
  • 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
硬碟 IOPS 與 GB 的比例決定佈建之硬碟的類型。 若要判定 IOPS 與 GB 的比例,您可將 IOPS 除以儲存空間的大小。
範例:您選擇了500Gi的儲存和 100 IOPS。 您的比例為 0.2 (100 IOPS/500Gi)。
每個比例的硬碟類型概觀: -小於或等於 0.3: SATA
-大於 0.3: SSD
收回原則 ibmc-file-custom: 刪除
ibmc-file-retain-custom: 保留
計費 每小時
定價 計價資訊

自訂的儲存空間類別範例

您可以建立自訂的儲存空間類別,並使用 PVC 中的儲存空間類別。

Red Hat OpenShift on IBM Cloud 提供 預先定義的儲存類別,以佈建具有特定層級和配置的 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 oc cluster get --cluster <cluster_name_or_ID> 並在 Master URL 中尋找區域前綴,例如 https://c2.eu-de.containers.cloud.ibm.com:11111 中的 eu-de。 若要取得工作節點的區域,請執行 ibmcloud oc 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 及儲存空間實例,以避免持續性儲存空間的進一步費用。

開始之前:

若要清除持續性資料,請執行下列動作:

  1. 列出叢集裡的 PVC,並記下 PVC 的 NAMESTORAGECLASS,以及連結至 PVC 並顯示為 VOLUME 的 PV 名稱。

    oc 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
    
  2. 檢閱儲存空間類別的 ReclaimPolicybillingType

    oc describe storageclass <storageclass_name>
    

    如果收回原則指明為 Delete,則在您移除 PVC 時,也會移除 PV 及實體儲存空間。 如果收回原則指明為 Retain,或如果您已佈建儲存空間,但沒有儲存空間類別,則在您移除 PVC 時,不會移除 PV 及實體儲存空間。 您必須個別移除 PVC、PV 及實體儲存空間。

    如果儲存空間依月收費,即使在計費週期結束之前已移除儲存空間,也仍需要依整月付費。

  3. 移除任何裝載 PVC 的 Pod。 列出裝載 PVC 的 Pod。 如果 CLI 輸出中沒有回傳 pod,則表示您沒有使用 PVC 的 pod。

    oc 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
    
  4. 移除使用 PVC 的 Pod。 如果 Pod 是部署的一部分,便移除部署。

    oc delete pod <pod_name>
    
  5. 驗證已移除 Pod。

    oc get pods
    
  6. 移除 PVC。

    oc delete pvc <pvc_name>
    
  7. 檢閱 PV 的狀態。 請使用您先前擷取的 PV 名稱 VOLUME。 移除 PVC 時,會釋放連結至 PVC 的 PV。 視佈建儲存空間的方式而定,如果自動刪除 PV,您的 PV 會進入 Deleting 狀況,或者如果您必須手動刪除 PV,則 PV 會進入 Released 狀況。 附註:若為自動刪除的 PV,則在刪除它之前,狀況可能短暫地顯示為 Released。 請在幾分鐘後重新執行該指令以查看該 PV 是否已移除。

    oc get pv <pv_name>
    
  8. 如果 PV 未刪除,請手動移除 PV。

    oc delete pv <pv_name>
    
  9. 驗證已移除 PV。

    oc get pv
    
  10. 列出 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"
    文件或區塊儲存的類型,EndurancePerformance
    "ns":"default"
    儲存實例部署到的命名空間。
    "pvc":"mypvc"
    與儲存實例關聯的 PVC 的名稱。
    "pv":"pvc-d979977d-d79d-77d9-9d7d-d7d97ddd99d7"
    與儲存實例關聯的 PV。
    "storageclass":"ibmc-file-gold"
    儲存類別的類型:青銅、銀、金或客製化。
  11. 移除實體儲存空間實例。

    ibmcloud sl file volume-cancel <classic_file_id>
    
  12. 驗證已移除實體儲存空間實例。

    ibmcloud sl file volume-list
    

刪除程序最長可能需要 72 小時才能完成。