IBM Cloud Docs
File Storage for Classic のセットアップ

File Storage for Classic のセットアップ

IBM Cloud File Storage for Classic は、Kubernetes 永続ボリューム (PV) を使用してアプリに追加できる高速で柔軟なネットワーク接続型の永続的 NFS ベース・File Storage for Classicです。 ワークロードの要件を満たす 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 の構成をよく理解してから、こちらに戻ってきてください。

  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 を作成します。

    kubectl 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. クラスター内にデプロイメントを作成します。

    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 を変更することができます。 ストレージのタイプと保持ポリシーを変更するには、新しいストレージ・インスタンスを作成し、古いストレージ・インスタンスから新しいストレージ・インスタンスにデータをコピーする必要があります。

始める前に: アカウントにログインします。 該当する場合は、適切なリソース・グループをターゲットにします。 クラスターのコンテキストを設定します。

ストレージ構成を決定するには、以下のようにします。

  1. 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
    
  2. ストレージ・クラスの構成を確認します。

    kubectl describe storageclass <storageclass_name>
    

    各ストレージ・クラスについて詳しくは、ストレージ・クラス・リファレンスを参照してください。 探しているものが見つからない場合は、カスタマイズした独自のストレージ・クラスを作成することを検討してください。 まずは、ストレージ・クラスのカスタマイズ例を確認してください。

  3. 使用するファイル・ストレージのタイプIOPS回収ポリシー、および課金方法を選択します。

ファイル・ストレージのタイプ

プロビジョンする File Storage for Classic のタイプを選択します。

ブロンズ、シルバー、およびゴールドのストレージ・クラス
これらのストレージ・クラスはエンデュランス・ストレージをプロビジョンします。 エンデュランス・ストレージの場合、事前定義された IOPS ティアでストレージのサイズ (ギガバイト単位) を選択できます。
カスタム・ストレージ・クラス
このストレージ・クラスはパフォーマンス・ストレージをプロビジョンします。 パフォーマンス・ストレージの場合は、より柔軟にストレージのサイズと IOPS を選択できます。

IOPS

File Storage for Classicのサイズと IOPS を選択します。 IOPS のサイズと数値によって、合計 IOPS (1 秒あたりの入出力操作数) が決まります。これは、ストレージの速度を示す指標となります。 ストレージの合計 IOPS が多いほど、読み取り/書き込み操作の処理が高速になります。

ブロンズ、シルバー、およびゴールドのストレージ・クラス
これらのストレージ・クラスは、ギガバイト当たりの IOPS 数が固定されており、SSD ハード・ディスクにプロビジョンされます。 合計の IOPS 数は、選択したストレージのサイズによって決まります。 指定可能なサイズの範囲内で、任意の整数のギガバイト (20 Gi、256 Gi、11854 Gi など) を選択できます。 合計 IOPS 数を求めるには、選択したサイズと IOPS を乗算します。 例えば、4 IOPS/GB のシルバー・ストレージ・クラスで、1000Gi のFile Storage for Classic・サイズを選択すると、ストレージの合計 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 をより詳細に制御できます。 サイズについては、指定可能なサイズの範囲内で、任意の整数のギガバイトを選択できます。 選択したサイズに応じて、選択可能な IOPS の範囲が決まります。 指定された範囲にある 100 の倍数で IOPS を選択できます。 選択する IOPS は静的であり、ストレージのサイズに合わせてスケーリングされません。 例えば、40Gi と 100 IOPS を選択した場合、合計 IOPS は 100 のままです。
ギガバイトに対する IOPS の比率によって、プロビジョンされるハード・ディスクのタイプも決まります。 例えば、500Gi を 100 IOPS で選択した場合、ギガバイトに対する IOPS の比率は 0.2 となります。 0.3 以下の比率のストレージは、SATA ハード・ディスクにプロビジョンされます。 0.3 より大きい比率のストレージは、SSD ハード・ディスクにプロビジョンされます。
クラス・サイズの範囲と IOPS のテーブル
サイズの範囲 (ギガバイト単位) 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"、ギガバイト・サイズが 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-custom
    
    name
    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:11111eu-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 出力のゾーン列を確認します。 ゾーンを指定する場合は、リージョンも指定する必要があります。 ゾーンを指定しない場合、または指定されたゾーンがマルチゾーン・クラスターで見つからない場合、そのゾーンはラウンドロビン・ベースで選択されます。 PVC にリージョンとゾーンを指定するのではなく、カスタマイズ型ストレージ・クラスにそれらの値を指定することもできます。 そして、PVC の metadata.annotations.volume.beta.kubernetes.io/storage-class セクションでそのストレージ・クラスを使用します。 リージョンとゾーンがストレージ・クラスにも PVC にも指定されている場合は、PVC の値が優先されます。
    accessMode
    以下のいずれかのオプションを指定します。
    • ReadWriteMany: PVC は複数のポッドによってマウントできます。 すべてのポッドは、ボリュームに対する読み取りと書き込みを行うことができます。
    • ReadOnlyMany: PVC は複数のポッドによってマウントできます。 すべてのポッドには読み取り専用アクセス権限があります。
    • ReadWriteOnce: PVC は 1 つのポッドのみによってマウントできます。 このポッドは、ボリュームに対して読み取りと書き込みを行うことができます。
    storage
    File Storage for Classicのサイズをギガバイト (Gi) 単位で入力します。 ストレージがプロビジョンされた後は、File Storage for Classic のサイズを変更できません。 保管するデータの量に一致するサイズを指定してください。
    iops
    このオプションは、独自のカスタム・ストレージ・クラスでのみ使用できます ibmc-file-custom / ibmc-file-retain-custom)。許容範囲内で 100 の倍数を選択して、ストレージの合計 IOPS を指定します。 リストされているもの以外の IOPS を選択した場合、その IOPS は切り上げられます。
    storageClassName
    File Storage for Classicをプロビジョンするために使用するストレージ・クラスの名前。 IBM 提供のストレージ・クラスの 1 つを使用するのか、独自のストレージ・クラスを作成するのかを選択できます。 ストレージ・クラスを指定しない場合、PV はデフォルトのストレージ・クラス ibmc-file-bronzeを使用して作成されます。

    カスタマイズされたストレージ・クラスを使用する場合は、対応するストレージ・クラス名、有効な IOPS、およびサイズを指定して PVC を作成します。

  2. PVC を作成します。

    kubectl apply -f mypvc.yaml
    
  3. 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
    
    
  4. ストレージをデプロイメントにマウントするには、構成 .yaml ファイルを作成し、PV をバインドする PVC を指定します。

    非 root ユーザーによる永続ストレージへの書き込みを必要とするアプリ、またはマウント・パスが root ユーザーによって所有されることを必要とするアプリがある場合は、NFS File Storage for Classic への非 root ユーザー・アクセス権限の追加を参照してください。

    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
    metadata セクションで、デプロイメントのラベルを入力します。
    matchLabels.app および labels.app
    spec の selector セクションおよび template の metadata セクションで、アプリのラベルを入力します。
    image
    使用するコンテナー・イメージの名前。 IBM Cloud Container Registry アカウント内の使用可能なイメージをリストするには、ibmcloud cr image-list を実行します。
    name
    クラスターにデプロイするコンテナーの名前。
    mountPath
    containers の volumeMounts セクションに、コンテナー内部でボリュームをマウントするディレクトリーの絶対パスを入力します。 マウント・パスに書き込まれるデータは、物理File Storage for Classic・インスタンスの root ディレクトリーに保管されます。 異なるアプリ間でボリュームを共有したい場合は、アプリごとに ボリュームのサブパスを指定できます。
    name
    containers の volumeMounts セクションで、ポッドにマウントするボリュームの名前を入力します。
    name
    volumes セクションで、ポッドにマウントするボリュームの名前を入力します。 通常、この名前は volumeMounts.name.
    claimName
    volumes の persistentVolumeClaim セクションで、使用する PV をバインドする PVC の名前を入力します。
  5. デプロイメントを作成します。

    kubectl apply -f <local_yaml_path>
    
  6. 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を手動で作成してストレージを静的にプロビジョニングできます。

始める前に

少なくとも 1 つのワーカー・ノードが、既存のFile Storage for Classic・インスタンスと同じゾーンに存在することを確認してください。

アカウントにログインします。 該当する場合は、適切なリソース・グループをターゲットにします。 クラスターのコンテキストを設定します。

既存のストレージの準備

アプリへの既存のストレージのマウントを開始するには、その前に、PV に関する必要な情報をすべて取得し、クラスターでストレージにアクセスできるように準備する必要があります。

ストレージ retain クラスでプロビジョニングされたストレージの場合。
retain ストレージ・クラスを指定してストレージをプロビジョンした場合、PVC を削除しても、PV と物理ストレージ・デバイスは自動的に削除されません。 そのストレージをクラスターで再使用するには、残っている PV をまず削除する必要があります。

既存のストレージを、プロビジョンしたクラスターとは別のクラスターで使用するには、クラスターの外部で作成されたストレージの手順に従って、ストレージをワーカー・ノードのサブネットに追加してください。

  1. 既存の PV をリストします。

    kubectl get pv
    

    対象の永続ストレージに属する PV を探します。 PV は released 状態になっています。

  2. PV の詳細情報を取得します。

    kubectl describe pv <pv_name>
    
  3. CapacityGbstorageClassfailure-domain.beta.kubernetes.io/regionfailure-domain.beta.kubernetes.io/zoneserverpath をメモします。

  4. PV を削除します。

    kubectl delete pv <pv_name>
    
  5. PV が削除されたことを確認します。

    kubectl get pv
    
クラスタ外部でプロビジョニングされた永続ストレージの場合
以前にプロビジョンして、まだクラスターで使用したことがない既存のストレージを使用するには、そのストレージをワーカー・ノードと同じサブネットで使用できるようにする必要があります。
  1. IBM Cloudインフラストラクチャーポータルから、ストレージをクリックします。
  2. **「File Storage for Classic」をクリックして、「アクション」メニューから「ホストの許可」**を選択します。
  3. **「サブネット」**を選択します。
  4. ドロップダウン・リストから、ワーカー・ノードが接続されているプライベート VLAN サブネットを選択します。 ワーカー・ノードのサブネットを見つけるには、ibmcloud ks 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
    先ほど取得したリージョンとゾーンを入力します。 同じリージョンとゾーンに少なくとも 1 つのワーカー・ノードがなければなりません。
    storage
    先ほど取得した既存の NFS ファイル共有のストレージ・サイズを入力します。 このストレージ・サイズはギガバイト単位 (例えば、20Gi (20 GB) や 1000Gi (1 TB) など) で入力する必要があり、そのサイズは既存のファイル共有のサイズと一致している必要があります。
    accessMode
    以下のいずれかのオプションを指定します。
    • ReadWriteMany: PVC は複数のポッドによってマウントできます。 すべてのポッドは、ボリュームに対する読み取りと書き込みを行うことができます。
    • ReadOnlyMany: PVC は複数のポッドによってマウントできます。 すべてのポッドには読み取り専用アクセス権限があります。
    • ReadWriteOnce: PVC は 1 つのポッドのみによってマウントできます。 このポッドは、ボリュームに対して読み取りと書き込みを行うことができます。
    server
    先ほど取得した NFS ファイル共有サーバーの ID を入力します。
    path
    先ほど取得した NFS ファイル共有のパスを入力します。
  2. クラスターに PV を作成します。

    kubectl apply -f mypv.yaml
    
  3. PV が作成されたことを確認します。

    kubectl get pv
    
  4. PVC を作成するために、別の構成ファイルを作成します。 PVC が、前の手順で作成した PV と一致するようにするには、storage および accessMode に同じ値を選択する必要があります。 storage-class フィールドは空の文字列である必要があります。 これらのフィールドのいずれかがPVと一致しない場合、新しいPVと新しい物理ストレージインスタンスが動的にプロビジョニングされる。

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: mypvc
    spec:
      accessModes:
       - ReadWriteMany
      resources:
        requests:
          storage: "<size>"
      storageClassName: ""
    
  5. PVC を作成します。

    kubectl apply -f mypvc.yaml
    
  6. 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 Database as a Service を使用し、クラウドにデータを保管することもできます。

ステートフルセットにFile Storage for Classicを追加する際に注意することはありますか?
ストレージをステートフル・セットに追加するには、ステートフル・セット YAML の volumeClaimTemplates セクションでストレージ構成を指定します。 volumeClaimTemplates は、PVC の基礎となるもので、プロビジョンするFile Storage for Classicのストレージ・クラスとサイズ (または IOPS) を含めることができます。 ただし、volumeClaimTemplates にラベルを含める場合、Kubernetes による PVC の作成時にそれらのラベルは組み込まれません。 その代わりに、自分で直接、それらのラベルをステートフル・セットに追加する必要があります。

2 つのステートフル・セットを同時にデプロイすることはできません。 1 つのステートフル・セットが完全にデプロイされる前に別のステートフル・セットを作成しようとすると、ステートフル・セットのデプロイメントが予期しない結果となる可能性があります。

特定のゾーンにステートフルセットを作成するには?
複数ゾーン・クラスターでは、ステートフル・セット YAML の spec.selector.matchLabels および spec.template.metadata.labels セクションで、ステートフル・セットを作成するゾーンとリージョンを指定することができます。 あるいは、それらのラベルをカスタマイズ・ストレージ・クラスに追加し、このストレージ・クラスをステートフル・セットの volumeClaimTemplates セクションで使用することもできます。
PVとステートフル・ポッドのバインドを、ポッドの準備が整うまで遅らせることはできますか?
はい。 volumeBindingMode: WaitForFirstConsumer フィールドを含む PVC 用に 独自のストレージ・クラスを作成 できます。
ステートフル・セットにFile Storage for Classicを追加するには、どのようなオプションがありますか?
ステートフル・セットを作成するときに PVC を自動的に作成する場合は、動的プロビジョニングを使用します。 また、ステートフル・セットで使用するために PVC を事前プロビジョンするか、既存の PVC を使用することもできます。

動的プロビジョニングを使用してステートフル・セットを作成するときの PVC の作成

このオプションは、ステートフル・セットを作成するときに PVC を自動的に作成する場合に使用します。

始める前に: アカウントにログインします。 該当する場合は、適切なリソース・グループをターゲットにします。 クラスターのコンテキストを設定します。

  1. クラスターにある既存のすべてのステートフル・セットが完全にデプロイ済みであることを確認します。 ステートフル・セットがまだデプロイされている場合は、ステートフル・セットの作成を開始できません。 予期しない結果が生じるのを避けるため、クラスター内のすべてのステートフル・セットが完全にデプロイされるまで待つ必要があります。 クラスター内の既存のステートフル・セットをリストします。

    kubectl get statefulset --all-namespaces
    

    出力例

    NAME              DESIRED   CURRENT   AGE
    mystatefulset     3         3         6s
    
  2. ステートフル・セットのデプロイメントが完了していることを確かめるため、各ステートフル・セットの Pods Status を確認します。

    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 ポッドの数と等しい場合は、ステートフル・セットが完全にデプロイ済みです。 ステートフル・セットがまだ完全にデプロイされていない場合は、デプロイメントが完了するまで待ってから、次に進んでください。

  3. ステートフル・セットと、そのステートフル・セットを公開するために使用するサービスに関する、構成ファイルを作成します。

    ゾーンを指定するステートフル・セットの例。 下記の例は、3 つのレプリカを伴うステートフル・セットとして NGINX をデプロイする方法を示しています。 レプリカごとに、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: 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の作成が遅延される、アンチアフィニティー・ルールを使用するステートフル・セットの例。 下記の例は、3 つのレプリカを伴うステートフル・セットとして NGINX をデプロイする方法を示しています。 このステートフル・セットでは、File Storage for Classicの作成場所であるリージョンとゾーンは指定されません。 代わりに、このステートフル・セットではアンチアフィニティー・ルールを使用して、ポッドが複数のワーカー・ノードとゾーンにまたがって分散されるようにします。 ワーカー・ノードのアンチアフィニティーは、app: nginx ラベルを定義することで実現されます。 このラベルは、これと同じラベルを持つポッドが既に実行されているワーカー・ノード上で、どのポッドもスケジュールしないように Kubernetes スケジューラーに対して指示します。 topologykey: failure-domain.beta.kubernetes.io/zone ラベルによって、このアンチアフィニティー・ルールがさらに制限されて、このポッドが、app: nginx ラベルを持つポッドを既に実行しているワーカー・ノードと同じゾーンに配置されたワーカー・ノード上でスケジュールされることが防止されます。 各ステートフル・セット・ポッドについて、volumeClaimTemplates セクション内の定義に従って 2 つの PVC が作成されますが、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
    ---
    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
    metadata で、ステートフル・セットに対する名前を入力します。 入力した名前は、<volume_name>-<statefulset_name>-<replica_number>という形式で PVC の名前を作成するために使用されます。
    serviceName
    spec セクションで、ステートフル・セットを公開するために使用するサービスの名前を入力します。
    replicas
    ステートフル・セットのレプリカの数を入力します。
    podManagementPolicy
    ステートフル・セットで使用するポッド管理ポリシーを入力します。 次のいずれかのオプションを選択します。
    • OrderedReady: このオプションを指定すると、ステートフル・セット・レプリカが 1 つずつデプロイされます。 例えば、3 つのレプリカを指定した場合、Kubernetes は 1 番目のレプリカの PVC を作成し、PVC がバインドされるまで待機し、ステートフル・セット・レプリカをデプロイし、PVC をレプリカにマウントします。 このデプロイメントが完了したら、2 番目のレプリカがデプロイされます。 このオプションの詳細については、 OrderedReadyポッド管理を参照してください。
    • Parallel: このオプションを指定すると、ステートフル・セット・レプリカのすべてのデプロイメントが同時に開始します。 アプリでレプリカの並行デプロイメントをサポートしている場合は、このオプションを使用して、PVC とステートフル・セット・レプリカをデプロイする時間を節約してください。
    matchLabels
    spec の selector セクションで、ステートフル・セットと PVC に含めるすべてのラベルを入力します。 ステートフル・セットの volumeClaimTemplates に含めたラベルは、Kubernetes によって認識されません。 ラベルの例を以下に記載します。
    • region および zone: ステートフル・セット・レプリカと PVC のすべてを、1 つの特定のゾーンに作成する場合は、これらのラベルを両方とも追加します。 また、使用するストレージ・クラスでゾーン (zone) とリージョン (region) を指定することもできます。 ゾーンとリージョンを指定せず、複数ゾーン・クラスターを使用している場合、ボリューム要求をすべてのゾーン間で均等に分散させるために、ストレージは、ラウンドロビン・ベースで選択されたゾーンにプロビジョンされます。
    • billingType: PVC で使用する課金タイプを入力します。 hourly または monthly のいずれかを選択します。 このラベルを指定しない場合、すべての PVC が時間単位 (hourly) の課金タイプで作成されます。
    labels
    spec の template の metadata セクションで、spec.selector.matchLabelsセクションに追加したラベルと同じラベルを入力します。
    affinity
    spec の template の spec の affinity セクションで、アンチアフィニティー・ルールを指定して、ステートフル・セット・ポッドが複数のワーカー・ノードとゾーンにまたがって分散されるようにします。 この例では、app: nginx ラベルを持つポッドが実行されるワーカー・ノード上でステートフル・セット・ポッドがスケジュールされることが望ましくないアンチアフィニティー・ルールを示しています。 topologykey: failure-domain.beta.kubernetes.io/zone によって、このアンチアフィニティー・ルールがさらに制限されて、このポッドが、app: nginx ラベルを持つポッドと同じゾーン内のワーカー・ノード上でスケジュールされることが防止されます。 このアンチアフィニティー・ルールを使用すると、複数のワーカー・ノードとゾーンにまたがってアンチアフィニティーを実現できます。
    name
    spec の volumeClaimTemplates の metadata セクションで、ボリュームの名前を入力します。 spec.containers.volumeMount.name セクションで定義した名前と同じ名前を使用します。 ここに入力する名前は、<volume_name>-<statefulset_name>-<replica_number>という形式で PVC の名前を作成するために使用されます。
    storage
    spec の volumeClaimTemplates の spec の resources の requests セクションで、File Storage for Classicのサイズをギガバイト (Gi) 単位で入力します。
    iops
    パフォーマンス・ストレージをプロビジョンする場合は、spec の volumeClaimTemplates の spec の resources の requests セクションで、IOPS 数を入力します。 エンデュランス・ストレージ・クラスを使用することにして IOPS 数を指定した場合は、IOPS 数が無視されます。 その代わりに、そのストレージ・クラスで指定されている IOPS が使用されます。
    storageClassName
    spec の volumeClaimTemplates の spec セクションで、使用するストレージ・クラスを入力します。 既存のストレージクラスを一覧表示するには、kubectl get sc | grep file を実行する。 ストレージ・クラスを指定しない場合、クラスターに設定されているデフォルトのストレージ・クラスを使用して PVC が作成されます。 File Storage for Classicを使用してステートフル・セットがプロビジョンされるようにするために、デフォルト・ストレージ・クラスで ibm.io/ibmc-file プロビジョナーが使用されていることを確認してください。
  4. ステートフル・セットを作成します。

    kubectl apply -f statefulset.yaml
    
  5. ステートフル・セットがデプロイされるまで待ちます。

    kubectl describe statefulset <statefulset_name>
    

PVC の現在の状況を確認するには、kubectl get pvc を実行します。 PVC の名前は、<volume_name>-<statefulset_name>-<replica_number>の形式になります。

静的プロビジョニング: ステートフル・セットと組み合わせた既存の PVC の使用

ステートフル・セットを作成する前に PVC を事前プロビジョンするか、既存の PVC をステートフル・セットで使用することができます。

ステートフル・セットの作成時に PVC を動的にプロビジョンする場合は、ステートフル・セット YAML ファイルで使用した値に基づいて、PVC の名前が割り当てられます。 ステートフル・セットによって既存の PVC が使用されるようにするには、PVC の名前が、動的プロビジョニングを使用する場合に自動的に作成される名前と一致していなければなりません。

始める前に: アカウントにログインします。 該当する場合は、適切なリソース・グループをターゲットにします。 クラスターのコンテキストを設定します。

  1. ステートフル・セットを作成する前に PVC を事前プロビジョンする場合は、File Storage for Classicをアプリに追加するのステップ 1 から 3 に従って、各ステートフル・セット・レプリカ用の PVC を作成してください。 <volume_name>-<statefulset_name>-<replica_number>という形式に従った名前で PVC を作成するようにしてください。

    <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. PVC がステートフル・セット・レプリカ・ポッドで使用されていることを確認します。そのためには、クラスター内のポッドをリストし、ステートフル・セットに属しているポッドを確認します。

    kubectl get pods
    
  4. 既存の 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 コンソールを使用してストレージを変更する手順を調べたい場合は、ファイル共有容量の拡張を参照してください。

  1. クラスターの 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
    
  2. PVC がバインドされている PV の詳細をリストして、PVC に関連付けられている物理File Storage for Classicの StorageTypevolumeId、および 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
    ...
    
  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
    ボリュームの新しいサイズをギガバイト (Gi) 単位で入力します。 有効なサイズについては、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
    エンデュランス・ストレージのみ。 必要な新しい IOPS 数/GB を入力します。 有効な 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. サイズを変更したボリュームをポッドで使用する場合は、ポッドにログインして新しいサイズを確認します。 PVC を使用するすべてのポッドをリストします。 ポッドは、<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>"
    
  5. ポッドにログインします。

    kubectl 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 が表示されます。 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を動的にプロビジョンするか、ポッドにマウントされている既存の PV を変更します。

最新のセキュリティー更新を適用してパフォーマンスを向上させるには、デフォルトの NFS バージョンを使用し、古い NFS バージョンには変更しないでください。

特定のNFSバージョンでカスタマイズされたストレージ・クラスを作成する

  1. プロビジョンする NFS バージョンを指定して、カスタマイズしたストレージ・クラスを作成します。

  2. クラスター内にストレージ・クラスを作成します。

    kubectl apply -f nfsversion_storageclass.yaml
    
  3. カスタマイズしたストレージ・クラスが作成されたことを確認します。

    kubectl get sc
    
  4. カスタマイズしたストレージ・クラスでFile Storage for Classicをプロビジョンします。

既存のPVを変更して異なるNFSバージョンを使用する

  1. NFS バージョンを変更するFile Storage for Classicの PV を取得し、PV の名前をメモします。

    kubectl get pv
    
  2. 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>"}}}'
    
  3. File Storage for Classicを使用するポッドを削除し、ポッドを再作成します。

    1. ポッド YAML をローカル・マシンに保存します。

      kubect get pod <pod_name> -o yaml > <filepath/pod.yaml>
      
    2. ポッドを削除します。

      kubectl deleted pod <pod_name>
      
    3. ポッドを再作成します。

      kubectl apply -f pod.yaml
      
  4. ポッドがデプロイされるまで待ちます。 status が Running に変更されたら、ポッドは完全にデプロイされています。

    kubectl get pods
    
  5. ポッドにログインします。

    kubectl 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・プラグインのスケールダウン

デフォルトでは、クラシッククラスタにはFile Storage for Classicプラグインが含まれています。 クラスターで File Storage for Classic を使用する必要がない場合は、プラグイン・コンポーネントとウォッチャー・コンポーネントをスケールダウンすることで、クラスター・リソースを節約できます。 後でFile Storage for Classicが必要になった場合には、スケールアップしてレプリカ 1 つに戻すことができます。 他の設定を変更することも、デプロイメント全体を削除することもできません。 プラグインはまだインストールされているので、プラグインをスケールダウンしても、クラスターのバージョン更新と一緒にプラグインも更新されます。

始める前に

File Storage for Classic・プラグインをスケールダウンするには、以下のようにします。

  1. File Storage for Classic・プラグインおよびウォッチャー・デプロイメントのレプリカを 0 にスケールダウンします。

    kubectl scale deployment -n kube-system --replicas=0 ibm-file-plugin
    
    kubectl 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

  2. オプション: プラグインがスケールダウンされたことを確認します。 ポッドが削除され、クラスターのリフレッシュや更新などによってマスター状態が変更された後であっても削除されたままである場合、スケールダウンは正常に行われます。

    1. ポッドが削除されていることを確認します。

      kubectl get pods -n kube-system -l 'app in (ibm-file-plugin, ibm-storage-watcher)'
      

      出力例

      No resources found.
      
    2. クラスター・マスターをリフレッシュします。

      ibmcloud ks cluster refresh -c <cluster_name_or_ID>
      
    3. リフレッシュが完了するまで数分待ってから、サブステップ 2.a を繰り返し、ポッドが取り除かれていることを確認する。 ポッドがスケジュールし直されていた場合は、File Storage for Classic・プラグイン構成ファイルに加えた変更が正しく保存されていません。 正しい Kubernetes バージョンがクラスターで実行されるようにして、再試行してください。

データのバックアップと復元

File Storage for Classicは、クラスター内のワーカー・ノードと同じロケーションにプロビジョンされます。 サーバーがダウンした場合の可用性を確保するために、IBM は、クラスター化したサーバーでストレージをホストしています。 ただし、File Storage for Classicは自動的にはバックアップされないため、ロケーション全体で障害が発生した場合はアクセス不能になる可能性があります。 データの損失や損傷を防止するために、定期バックアップをセットアップすると、必要時にバックアップを使用してデータをリストアできます。

File Storage for Classicのバックアップとリストアのための以下のオプションを検討してください。

定期的なスナップショットをセットアップする

File Storage for Classicの定期的なスナップショットをセットアップできます。スナップショットとは、特定の時点のインスタンスの状態をキャプチャーした読み取り専用のイメージです。 スナップショットを保管するには、File Storage for Classicでスナップショット・スペースを要求する必要があります。 スナップショットは、同じゾーン内の既存のストレージ・インスタンスに保管されます。 ユーザーが誤って重要なデータをボリュームから削除した場合に、スナップショットからデータをリストアできます。

ボリュームのスナップショットを作成するには、以下の手順を実行します。

  1. アカウントにログインします。 該当する場合は、適切なリソース・グループをターゲットにします。 クラスターのコンテキストを設定します。

  2. ibmcloud sl CLI にログインします。

    ibmcloud sl init
    
  3. クラスター内の既存の PV をリストします。

    kubectl get pv
    
  4. スナップショット・スペースを作成する PV の詳細を取得し、ボリューム ID、サイズ、および IOPS をメモします。 ボリューム ID、サイズ、および IOPS は CLI 出力の Labels セクションにあります。

    kubectl describe pv <pv_name>
    
  5. 前のステップで取得したパラメーターを使用して、既存のボリュームのスナップショット・サイズを作成します。

    ibmcloud sl file snapshot-order <volume_ID> --size <size> --tier <iops>
    
  6. スナップショット・サイズが作成されるまで待ちます。 CLI 出力の「スナップショット・サイズ (GB)」が 0 から注文したサイズに変更されると、スナップショット・サイズは正常にプロビジョンされます。

    ibmcloud sl file volume-detail <volume_ID>
    
  7. ボリュームのスナップショットを作成し、作成されたスナップショットの ID をメモします。

    ibmcloud sl file snapshot-create <volume_ID>
    
  8. スナップショットが正常に作成されたことを確認します。

    ibmcloud sl file snapshot-list <volume_ID>
    
  9. スナップショット・スケジュールを設定します。 スナップショット・スケジュールで使用可能なオプションについて詳しくは、 CLI の資料 を参照してください。

    ibmcloud sl block snapshot-enable VOLUME_ID <OPTIONS>
    
  10. スナップショットのデータを既存のボリュームにリストアするには、次のコマンドを実行します。

    ibmcloud sl file snapshot-restore <volume_ID> <snapshot_ID>
    

別のゾーンへのスナップショットのレプリケーション

ゾーンの障害からデータを保護するために、別のゾーンにセットアップしたFile Storage for Classicのインスタンスにスナップショットをレプリケーションすることができます。

データは、1 次ストレージからバックアップ・ストレージにのみレプリケーションできます。 複製された File Storage for Classic インスタンスをクラスターにマウントすることはできません。 1 次ストレージに障害が発生した場合には、レプリケーションされたバックアップ・ストレージを 1 次ストレージに手動で設定できます。 すると、そのファイル共有をクラスターにマウントできます。 1 次ストレージがリストアされたら、バックアップ・ストレージからデータをリストアできます。

ストレージの複製

元のストレージ・インスタンスと同じゾーンに、File Storage for Classic・インスタンスを複製できます。

複製インスタンスのデータは、それを作成した時点の元のストレージ・インスタンスと同じです。 レプリカとは異なり、複製インスタンスは、元のインスタンスから独立したストレージ・インスタンスとして使用します。 複製するには、まず、ボリュームのスナップショットをセットアップします

IBM Cloud® Object Storage へのデータのバックアップ

ibm-backup-restore Helm チャートを使用して、クラスター内のバックアップとリストアのポッドをスピンアップできます。

このポッドには、クラスター内の任意の永続ボリューム請求 (PVC) のために 1 回限りのバックアップまたは定期バックアップを実行するスクリプトが含まれています。 データは、ゾーンにセットアップした IBM Cloud® Object Storage インスタンスに保管されます。

データの可用性をさらに高め、アプリをゾーン障害から保護するには、2 つ目の IBM Cloud® Object Storage インスタンスをセットアップして、ゾーン間でデータを複製します。 IBM Cloud® Object Storage インスタンスからデータをリストアする必要がある場合は、Helm チャートに付属するリストア・スクリプトを使用します。

ポッドやコンテナーとの間のデータのコピー

You can use the kubectl cp 命令 to copy files and directories to and from pods or specific containers in your cluster.

始める前に: アカウントにログインします。 該当する場合は、適切なリソース・グループをターゲットにします。 クラスターのコンテキストを設定します。 -c でコンテナーを指定しない場合、コマンドはポッド内の最初の使用可能なコンテナーを使用します。

ローカル・マシンからクラスター内のポッドにデータをコピーする。

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

クラスター内のポッドからローカル・マシンにデータをコピーする。

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

ローカル・マシンからクラスター内のポッドで実行される特定のコンテナーにデータをコピーする。

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

ストレージ・クラス・リファレンス

ブロンズ
特性 設定
名前 ibmc-file-bronze
ibmc-file-retain-bronze
ibmc-file-bronze-gid
タイプ エンデュランス・ストレージ
ファイル・システム NFS
IOPS/GB 2
サイズの範囲 (ギガバイト単位) 20 から 12000 Gi
ハード・ディスク SSD
再利用ポリシー ibmc-file-bronze:
の削除 ibmc-file-retain-bronze:
ibmc-file-bronze-gid: 削除の保存
補助グループ ID 非 root ユーザーにファイル・ストレージ・インスタンスへのアクセスを許可するために ibmc-file-bronze-gid ストレージ・クラスを使用すると、補足グループ ID 65531 が自動的に設定されます。 このストレージ・クラスの使用方法やカスタム・グループ ID の設定方法について詳しくは、ファイル・ストレージ: 永続ストレージに対する非 root ユーザー・アクセスの追加が失敗するを参照してください。
課金 毎時
価格設定 料金情報
シルバー
特性 設定
名前 ibmc-file-silver
ibmc-file-retain-silver
ibmc-file-silver-gid
タイプ エンデュランス・ストレージ
ファイル・システム NFS
IOPS/GB 4
サイズの範囲 (ギガバイト単位) 20 から 12000 Gi
ハード・ディスク SSD
再利用ポリシー ibmc-file-silver:
の削除 ibmc-file-retain-silver:
ibmc-file-silver-gid: 削除の保存
補助グループ ID 非 root ユーザーにファイル・ストレージ・インスタンスへのアクセスを許可するために ibmc-file-bronze-gid ストレージ・クラスを使用すると、補足グループ ID 65531 が自動的に設定されます。 このストレージ・クラスの使用方法やカスタム・グループ ID の設定方法について詳しくは、ファイル・ストレージ: 永続ストレージに対する非 root ユーザー・アクセスの追加が失敗するを参照してください。
課金 毎時
価格設定 料金情報
ゴールド
特性 設定
名前 ibmc-file-gold
ibmc-file-retain-gold
ibmc-file-gold-gid
タイプ エンデュランス・ストレージ
ファイル・システム NFS
IOPS/GB 10
サイズの範囲 (ギガバイト単位) 20 から 4000 Gi
ハード・ディスク SSD
再利用ポリシー ibmc-file-gold:
の削除 ibmc-file-retain-gold:
ibmc-file-gold-gid: 削除の保存
補助グループ ID 非 root ユーザーにファイル・ストレージ・インスタンスへのアクセスを許可するために ibmc-file-bronze-gid ストレージ・クラスを使用すると、補足グループ ID 65531 が自動的に設定されます。 このストレージ・クラスの使用方法やカスタム・グループ 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 の比率によって、プロビジョンされるハード・ディスクのタイプが決まります。 ギガバイトに対する IOPS の比率を求めるには、IOPS をストレージ・サイズで除算します。
例: 100 IOPS のストレージの 500Gi を選択したとします。 比率は 0.2 です (100 IOPS/500Gi)。
0.3:
*-0.3: SSD
再利用ポリシー ibmc-file-custom:
の削除 ibmc-file-retain-custom: 保存
課金 毎時
価格設定 料金情報

ストレージ・クラスのカスタマイズ例

カスタマイズされたストレージ・クラスを作成し、PVC でそのストレージ・クラスを使用することができます。

IBM Cloud Kubernetes Service では、特定の層と構成のFile Storage for Classicをプロビジョンするための、事前定義ストレージ・クラスが用意されています。 状況に応じて、それらの事前定義ストレージ・クラスではカバーされない、異なる構成のストレージをプロビジョンすることができます。 このトピックの例では、カスタマイズ・ストレージ・クラスのサンプルを示します。

カスタマイズ・ストレージ・クラスを作成するには、ストレージ・クラスのカスタマイズを参照してください。 それから、カスタマイズ・ストレージ・クラスを PVC で使用します。

トポロジー対応ストレージの作成

マルチゾーン・クラスターでFile Storage for Classicを使用するには、File Storage for Classic・インスタンスと同じゾーン内でポッドがスケジュールされる必要があります。その結果として、ボリュームの読み取りと書き込みが可能になります。 Kubernetes でトポロジー対応ボリューム・スケジューリングが導入される前は、ストレージの動的プロビジョニングによって、PVC の作成時にFile Storage for Classic・インスタンスが自動的に作成されていました。 その当時は、ポッドを作成したときに、Kubernetes スケジューラーは、そのポッドをFile Storage for Classic・インスタンスと同じデータ・センター内のワーカー・ノードにデプロイしようとしていました。

ポッドの制約事項を知らずにFile Storage for Classic・インスタンスを作成すると、望ましくない結果が生じる可能性があります。 例えば、ご使用のストレージと同じワーカー・ノードに対してポッドをスケジュールできない場合があります。その理由は、そのワーカー・ノードのリソースが不十分であるか、そのワーカー・ノードにテイントが適用されているためそのワーカー・ノードではそのポッドのスケジューリングが許可されないからです。 トポロジー対応ボリューム・スケジューリングを使用すると、該当ストレージを使用する最初のポッドが作成されるまで、File Storage for Classicが遅延されます。

次の例では、当該ストレージを使用する最初のポッドがスケジュール可能になるまで、File Storage for Classic・インスタンスの作成を遅延させるストレージ・クラスを作成する方法を示しています。 作成を遅延させるには、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:11111eu-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)、ポッドにマウントされる、PVC で指定された Kubernetes 永続ボリューム (PV)、クラシック・ファイルやブロック・ストレージなどの IBM Cloud インフラストラクチャー・インスタンスという 3 つの主なコンポーネントを作成します。 ストレージの作成方法によっては、3 つのコンポーネントすべてを個別に削除しなければならない場合があります。

ストレージ削除オプションについて

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 時間かかる可能性があります。

永続ストレージのクリーンアップ

永続ストレージに対する追加料金が発生することを回避するために、PVC、PV、およびストレージ・インスタンスを IBM Cloud アカウントから削除します。

始める前に

永続データをクリーンアップするには、次の手順を実行します。

  1. クラスターの PVC をリストし、PVC の NAMESTORAGECLASS、および 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
    
  2. ストレージ・クラスの ReclaimPolicybillingType を確認します。

    kubectl describe storageclass <storageclass_name>
    

    回収ポリシーが Delete の場合は、PVC を削除すると、PV と物理ストレージも削除されます。 回収ポリシーが Retain の場合、またはストレージ・クラスを指定せずにストレージをプロビジョンした場合は、PVC を削除しても、PV と物理ストレージは削除されません。 PVC、PV、および物理ストレージを個別に削除する必要があります。

    ストレージの課金が月単位の場合は、課金サイクルの終了前にストレージを削除しても、その月の月額料金が課金されます。

  3. PVC をマウントするすべてのポッドを削除します。 PVC をマウントするポッドをリストします。 CLI 出力でポッドが返されない場合は、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
    
  4. PVC を使用するポッドを削除します。 ポッドがデプロイメントの一部である場合は、デプロイメントを削除します。

    kubectl delete pod <pod_name>
    
  5. ポッドが削除されたことを確認します。

    kubectl get pods
    
  6. PVC を削除します。

    kubectl delete pvc <pvc_name>
    
  7. PV の状況を確認します。 先ほど取得した PV の名前を、VOLUME として使用します。 PVC を削除すると、PVC にバインドされている PV はリリースされます。 PV の状態は、ストレージをプロビジョンした方法に応じて、PV が自動的に削除された場合は Deleting 状態になり、PV を手動で削除する必要がある場合は Released 状態になります。 : 自動的に削除される PV の場合、削除が終わる前に一時的に状況が Released と表示されることがあります。 数分後にコマンドを再実行し、PV が削除されたことを確認してください。

    kubectl get pv <pv_name>
    
  8. PV が削除されていない場合は、手動で PV を削除します。

    kubectl delete pv <pv_name>
    
  9. PV が削除されたことを確認します。

    kubectl 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"
    ファイル・ストレージまたは Block Storage のタイプ (Endurance または Performance)。
    "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 時間かかることがあります。