Block Storage for Classic のセットアップ
IBM Cloud Block Storage for Classic は、Kubernetes 永続ボリューム (PV) を使用してアプリに追加できる高性能な永続 iSCSI ストレージです。 ワークロードの要件を満たす GB サイズと IOPS を考慮して、事前定義されたストレージ層の中から選択できます。 IBM Cloud Block Storage for Classic が正しいストレージ・オプションであるかどうかを確認するには、 ストレージ・ソリューションの選択 を参照してください。
IBM Cloud Block Storage for Classic プラグインを使用する際には、以下の要件に留意してください。
IBM Cloud Block Storage for Classic プラグインは、クラシック・インフラストラクチャーにプロビジョンされた標準的な Red Hat OpenShift on IBM Cloud クラスターでのみ使用可能です。
Block Storage for Classicインスタンスは、単一キャンパスのマルチゾーン地域に固有です。 マルチゾーン・クラスターを使用している場合は、マルチゾーン永続ストレージ・オプションを検討してください。
クラシック・インフラストラクチャー
このページの手順は、クラシック・クラスターにのみ適用されます。 VPCクラスタでは、Block Storage for VPCクラスタ・アドオンがデフォルトでインストールされます。 詳しくは、 Setting up Block Storage for VPC を参照してください。
IBM Cloud Block Storage for Classic のクイック・スタート
このクイック・スタート・ガイドでは、PVCを作成してボリュームを動的にプロビジョニングすることにより、クラスタ内に24Giシルバー層Block Storage for Classicボリュームを作成します。 その後、その PVC をマウントするアプリ・デプロイメントを作成します。
クラスターで Block Storage for Classic を使用するのは初めてですか? ストレージ構成を確認してから、これ以降の作業に取りかかってください。
-
以下の Persistent Volume Claim (PVC) 構成を
pvc.yaml
というファイルに保存します。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: block-storage-pvc labels: billingType: "hourly" region: us-east zone: wdc07 spec: accessModes: - ReadWriteOnce resources: requests: storage: 45Gi storageClassName: ibmc-block-silver
-
構成をクラスターに適用して PVC を作成します。
oc apply -f pvc.yaml
-
PVC が
Bound
ステータスになるまで待ちます。 以下のコマンドを実行して、ステータスを確認できます。oc get pvc
-
PVC が
Bound
になったら、PVC を使用するアプリ・デプロイメントを作成します。 以下のデプロイメント構成をdeployment.yaml
というファイルに保存します。apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment labels: app: my-app spec: selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - image: nginx # Use the nginx image, or your own containerized app image. name: my-container command: ["/bin/sh"] args: ["-c", "while true; do date \"+%Y-%m-%d %H:%M:%S\"; sleep 3600; done"] # This app prints the timestamp, then sleeps. workingDir: /home imagePullPolicy: Always ports: - containerPort: 80 volumeMounts: - name: my-volume mountPath: /mount-path volumes: - name: my-volume persistentVolumeClaim: claimName: block-storage-pvc
-
クラスター内にデプロイメントを作成します。
oc apply -f deployment.yaml
-
デプロイメントが
Ready
になるまで待ちます。 以下のコマンドを実行して、デプロイメントの状況を確認します。oc get deployments
出力例
NAME READY UP-TO-DATE AVAILABLE AGE my-deployment 1/1 1 1 3m19s
-
ポッドをリストし、
my-deployment
ポッドが実行中であることを確認します。oc get pods
出力例
NAME READY STATUS RESTARTS AGE my-deployment-ccdf87dfb-vzn95 1/1 Running 0 5m27s
-
ポッドのログを取得して、タイム・スタンプが書き込まれていることを確認します。
oc logs
出力例
2022-01-21 14:18:59
Block Storage for Classicを使用するデプロイメントが正常に作成されました! 詳しくは、以下のリンクを参照してください。
ブロック・ストレージ構成の決定
Red Hat OpenShift on IBM Cloud には、ブロック・ストレージ用の事前定義のストレージ・クラスが用意されているので、これを使用して、特定の構成のブロック・ストレージをプロビジョンできます。
ストレージ・クラスごとに、プロビジョンされるブロック・ストレージのタイプ (使用可能なサイズ、IOPS、ファイル・システム、保存ポリシーなど) が指定されています。
データを保管できる十分な容量が得られるように、ストレージ構成は慎重に選択してください。 ストレージ・クラスを使用して特定のタイプのストレージをプロビジョニングした後、ストレージ・デバイスのタイプや保持ポリシーを変更することはできません。 ただし、ストレージ容量とパフォーマンスを向上させたい場合に、サイズと IOPS を変更することができます。 ストレージのタイプと保持ポリシーを変更するには、新しいストレージ・インスタンスを作成し、古いストレージ・インスタンスから新しいストレージ・インスタンスにデータをコピーする必要があります。
-
IBM Cloud® Kubernetes Service で使用可能なストレージ・クラスをリストします。
oc get sc | grep block
出力例
ibmc-block-bronze ibm.io/ibmc-block Delete Immediate true 148m ibmc-block-custom ibm.io/ibmc-block Delete Immediate true 148m ibmc-block-gold ibm.io/ibmc-block Delete Immediate true 148m ibmc-block-retain-bronze ibm.io/ibmc-block Retain Immediate true 148m ibmc-block-retain-custom ibm.io/ibmc-block Retain Immediate true 148m ibmc-block-retain-gold ibm.io/ibmc-block Retain Immediate true 148m ibmc-block-retain-silver ibm.io/ibmc-block Retain Immediate true 148m ibmc-block-silver ibm.io/ibmc-block Delete Immediate true 148m
-
ストレージ・クラスの構成を確認します。
oc describe storageclass STORAGECLASS
各ストレージ・クラスについて詳しくは、ストレージ・クラス・リファレンスを参照してください。 探しているものが見つからない場合は、カスタマイズした独自のストレージ・クラスを作成することを検討してください。 まずは、ストレージ・クラスのカスタマイズ例を確認してください。
-
プロビジョンするブロック・ストレージのタイプを選択します。
- ブロンズ、シルバー、ゴールドのストレージ・クラス: これらのストレージ・クラスはエンデュランス・ストレージをプロビジョンします。 エンデュランス・ストレージを使用する場合は、事前定義された IOPS ティアでストレージのサイズ (ギガバイト単位) を選択できます。
- カスタム・ストレージ・クラス: このストレージ・クラスはパフォーマンス・ストレージをプロビジョンします。 パフォーマンス・ストレージの場合は、より柔軟にストレージのサイズと IOPS を選択できます。
-
ブロック・ストレージのサイズと IOPS を選択します。 IOPS のサイズと数値によって、合計 IOPS (1 秒あたりの入出力操作数) が決まります。これは、ストレージの速度を示す指標となります。 ストレージの合計 IOPS が多いほど、読み取り/書き込み操作の処理が高速になります。
-
ブロンズ、シルバー、ゴールドのストレージ・クラス: これらのストレージ・クラスは、1 ギガバイトあたりの IOPS 数が固定されていて、SSD ハード・ディスクにプロビジョンされます。 合計の IOPS 数は、選択したストレージのサイズによって決まります。 指定可能なサイズの範囲内で、任意の整数のギガバイト (20 Gi、256 Gi、11854 Gi など) を選択できます。 合計 IOPS 数を求めるには、選択したサイズと IOPS を乗算します。 例えば、4 IOPS/GB のシルバー・ストレージ・クラスで、1000Gi のブロック・ストレージ・サイズを選択すると、ストレージの合計 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 の範囲が決まります。 IOPS は指定された範囲内で、100の倍数を選択することができます。 選択する IOPS は静的であり、ストレージのサイズに合わせてスケーリングされません。 例えば、40Gi と 100 IOPS を選択した場合、合計 IOPS は 100 のままです。 ギガバイトに対する IOPS の比率によって、プロビジョンされるハード・ディスクのタイプも決まります。 例えば、500Gi を 100 IOPS で選択した場合、ギガバイトに対する IOPS の比率は 0.2 となります。 0.3 以下の比率のストレージは、SATA ハード・ディスクにプロビジョンされます。 0.3 より大きい比率のストレージは、SSD ハード・ディスクにプロビジョンされます。
Table class size ranges and 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 を削除し、既存のブロック・ストレージを使用する手順に従う必要があります。 - PVC を削除するときに PV、データ、物理ブロック・ストレージ・デバイスが削除されるようにするには、
retain
なしのストレージ・クラスを選択します。
- データを保持する場合、
-
時間単位と月単位のどちらの課金方法にするかを選択します。 デフォルト設定は時間単位の請求です。
Block Storage for Classic 用の暗号化のセットアップ
Block Storage for Classic を使用して、 IBM Key Protect の暗号化をセットアップできます。
以下の例では、Key Protect およびクラスターに対する必要なアクセス役割を持つサービス ID を作成する方法について説明します。 このサービス ID の資格情報を、Block Storage for Classic ボリュームの暗号化を有効にするときに使用します。
ユーザー個人の API キーを使用する Kubernetes シークレットを作成して暗号化を有効にすることもできます。ただし、Key Protect インスタンスに対する**「リーダー」サービス・アクセス役割と、クラスターに対する「ビューアー」プラットフォーム・アクセス役割および「ライター」**サービス・アクセス役割を持っているユーザーでなければなりません。
アカウントにログインします。 該当する場合は、適切なリソース・グループをターゲットにします。 クラスターのコンテキストを設定します。
-
Key Protect インスタンスの暗号化に使用する独自のルート鍵を作成できるように、Block Storage for Classic に対する「エディター」プラットフォーム・アクセス役割と「ライター」サービス・アクセス役割を割り当てられていることを確認します。 IAMアクセス・ロールは IAMコンソールで確認できます。 IAM 役割について詳しくは、IAM アクセス権限を参照してください。
-
Key Protect インスタンスがない場合は、PROVISION oneを実行します。
-
ルート鍵を作成します。 デフォルトでは、ルート・キーは有効期限なしで作成されます。
-
IAM のサービス ID を作成します。
<service_ID_name>
を、ご使用のサービス ID に割り当てる名前に置き換えます。 このサービス ID を、Key Protect ボリュームから Block Storage for Classic インスタンスにアクセスするときに使用します。ibmcloud iam service-id-create <service_ID_name>
出力例
OK Service ID test-id is created successfully ID ServiceId-a1a11111-bb11-1111-a11b-1111111a11ba Name test-id Description CRN crn:v1:bluemix:public:iam-identity::a/1a1111aa2b11111aaa1a1111aa2aa111::serviceid:ServiceId-a1a11111-bb11-1111-a11b-1111111a11bb Version 1-bb11aa11a0aa1a11a011a1aaaa11a1bb Locked false
-
サービス ID の API キーを作成します。
<api-key-name>
を API キーの名前で置き換え、<service_ID_name>
を作成したサービス ID の名前で置き換えます。 API キーは後で取得できないため、必ず保存してください。 この API キーを、後の手順でクラスター内の Kubernetes シークレットに保管します。ibmcloud iam service-api-key-create <api_key_name> <service_ID_name>
-
アカウントの IAM 対応サービスのリストを取得し、作成した Key Protect インスタンスの名前をメモします。
ibmcloud resource service-instances
-
Key Protect インスタンスの GUID を取得します。 この ID を、サービス ID の IAM サービス・ポリシーを作成するときに使用します。
ibmcloud resource service-instance "<instance_name>" | grep GUID
-
IAM サービス・ポリシーを作成し、Key Protect インスタンスに対するアクセス権限をサービス ID に付与します。 以下のコマンドを実行すると、Key Protect インスタンスに対する
Reader
アクセス権限がサービス ID に付与されます。 「リーダー」アクセス役割は、Key Protect のキーを取得するためにサービス ID に必要な最低限のサービス・アクセス役割です。 詳しくは、Key Protect のユーザーのアクセス権限の管理を参照してください。ibmcloud iam service-policy-create <service_ID_name> --roles Reader --service-name kms --service-instance <service_instance_GUID>
-
別の IAM サービス・アクセス・ポリシーを作成して、クラスターに対するアクセス権限をサービス ID に付与します。 以下のコマンドを実行すると、クラスターに対する**「ビューアー」プラットフォーム・アクセス役割と「ライター」**サービス・アクセス役割がサービス ID に付与されます。
ibmcloud oc cluster get <cluster_name>
を実行して、クラスター ID を取得できます。ibmcloud iam service-policy-create <service_ID_name> --roles Writer,Viewer --service-name containers-kubernetes --service-instance <cluster_ID>
-
Helm チャート
ibmcloud-block-storage-plugin
を既にインストールした場合は、その Helm チャートを削除し、新しいバージョンをインストールする必要があります。
Helm を使用せずにプラグインをインストールした場合は、新規バージョンをインストールする前に、ブロック・ストレージ・プラグインのデプロイメントとすべての関連リソースを手動で削除する必要があります。
helm uninstall <name> <namespace>
ibmcloud-block-storage-plugin
Helm チャートをインストールします。
helm install <name> iks-charts/ibmcloud-block-storage-plugin
ibm-block-secrets
名前空間を作成します。
oc create ns ibm-block-secrets
ibm-block-secrets
名前空間にブロック・ストレージ・プラグインの役割バインディングを作成します。
oc create rolebinding ibmcloud-block-storage-plugin-byok --clusterrole=ibmcloud-block-storage-plugin-byok --serviceaccount=kube-system:ibmcloud-block-storage-plugin --group system:nodes --namespace=ibm-block-secrets
-
Key Protect サービス・インスタンス内のルート・キーにアクセスするための資格情報を含む、
secret.yaml
という名前の Kubernetes シークレットを作成します。 -
シークレットの構成ファイルを作成します。
apiVersion: v1 kind: Secret metadata: labels: kmsConfig: kpc-secretLabel name: <secret_name> # Enter a name for your secret. Example: my_secret namespace: <namespace> # Enter the name of the namespace where you want to create the secret. The secret must be in same namespace where your app is deployed. Example: default stringData: config: |- { "api_key":"<service_id_api_key>", # Enter the API key for the service ID that you created. Example: "AA1aAAaA1a21AAaA1aAAaAa-AA-1AAaaA1aA1aAaaaAA" "iam_endpoint":"https://iam.cloud.ibm.com", "key_protect_endpoint":"https://<region>.kms.cloud.ibm.com", # Example: "https://us-east.kms.cloud.ibm.com" "root_key_crn":"<rook_key_crn>", # Example: "crn:v1:bluemix:public:kms:<region>:a/1ab011ab2b11111aaa1a1111aa1aa111:11aa111a-1111-11a1-a111-a11a111aa111:key:11a11111-1a1a-111a-111a-11111a1a1aa1", "version":"" } type: ibm.io/kms-config
stringData.config.key_protect_endpoint
- Key Protect インスタンスのリージョン・エンドポイントを入力します。 Key Protect エンドポイントのリストについては、リージョンとエンドポイントを参照してください。
stringData.config.root_key_crn
- 作成したルート鍵の CRN を入力します。 ルート鍵の CRN を取得するには、以下の手順を実行します。
- IBM Cloud コンソールのリソース・リストにナビゲートします。
- **「サービス」**をクリックしてから、Key Protect インスタンスをクリックします。
- 「アクション」メニューでルート鍵を見つけ、**「CRN の表示 (View CRN)」**をクリックします。
- **「コピー」**ボタンをクリックして CRN をコピーします。
-
クラスター内にシークレットを作成します。
oc apply -f secret.yaml
-
シークレットが作成されたことを確認します。
oc get secrets
-
以下のオプションから選択して、ルート鍵でデータを暗号化するBlock Storage for Classicインスタンスを作成します。
独自のストレージクラスを使用したボリュームデータの暗号化
暗号化ボリュームを使用するアプリをデプロイするには、まず独自のストレージクラスを作成します。
以下の手順は、カスタムの暗号化ストレージ・クラスを作成する方法について説明しています。このストレージ・クラスを使用すれば、同じ構成の暗号化ブロック・ストレージ・インスタンスを複数作成できます。 IBM 提供のいずれかのストレージ・クラスを使用して暗号化 PVC を作成したい場合は、PVC で Key Protect の資格情報を直接参照する方法を使用してください。
-
IBMのストレージ・クラスのいずれかをベースとして使用して、暗号化ブロック・ストレージ・インスタンスをプロビジョニングする独自のストレージ・クラスを作成します。
oc get sc <storageclass_name> -o yaml
を実行して、ストレージ・クラスの詳細を取得できます。 次の例では、ibmc-block-retain-bronze
ストレージ・クラスを基礎にしています。apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: <name> # Enter the name of the storage class. Example: my_custom_storageclass parameters: billingType: hourly classVersion: "2" fsType: ext4 iopsPerGB: "2" sizeRange: '[20-12000]Gi' type: Endurance encrypted: "true" # Enter "true" to enable encryption. encryptionKeySecret: <secret_name> # # #nter the name of the secret that you created earlier.Example: my_secret encryptionKeyNamespace: <namespace> # # #nter the namespace where you created your secret. Example: default provisioner: ibm.io/ibmc-block reclaimPolicy: Delete volumeBindingMode: Immediate
-
クラスター内にストレージ・クラスを作成します。
oc apply -f storageclass.yaml
-
独自のストレージ・クラスを使ってPVCを作成し、Block Storage for Classicをアプリに追加 します。
Block Storage for Classic シークレットを参照する PVC の作成
Block Storage for Classic の資格情報を含む Kubernetes シークレットを指定した PVC を作成して、暗号化 Key Protect をプロビジョンすることができます。
以下の手順は、Key Protect の資格情報を PVC で参照して、暗号化 Block Storage for Classic インスタンスを作成する方法を示しています。 Key Protect の資格情報を PVC ごとに指定することなく複数の暗号化ボリュームを作成するためには、カスタムの暗号化ストレージ・クラスを作成してください。
-
提供されている Block Storage for Classic ストレージ・クラスを参照し、どのストレージ・クラスがアプリの要件に最も適しているか判断します。 提供されているストレージ・クラスがアプリの要件を満たしていない場合は、独自のカスタマイズ・ストレージ・クラスを作成できます。
-
Key Protect のサービス資格情報を保管した Kubernetes シークレットを参照する
pvc.yaml
という名前の PVC 構成ファイルを作成します。 このシークレットを作成するには、Block Storage for Classic の暗号化のセットアップを参照してください。kind: PersistentVolumeClaim apiVersion: v1 metadata: name: <pvc_name> # Enter a name for your PVC. annotations: volume.beta.kubernetes.io/storage-class: "<storage_class>" # Enter a storage class. To see a list of storageclasses run `kubectl get storageclasses`. labels: encrypted: "true" encryptionKeyNamespace: <namespace> # Enter the namespace where your secret was created. encryptionKeySecret: <secret_name> # Enter the name of the secret you created. spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi
-
クラスター内に PVC を作成します。
oc apply -f pvc.yaml
-
PVC の状況を確認します。
oc get pvc
-
PVC がバインドされるまで待ってから、PVC を使用するデプロイメントを作成します。
Block Storage for Classic ボリュームの暗号化の確認
ボリュームの暗号化を確認するには、ボリューム・マウント・パスを確認します。
-
アプリ・ポッドにログインします。
<pod_name>
を、暗号化された Block Storage for Classic ボリュームをマウントするポッドの名前に置き換えます。oc exec <pod_name> -it bash
-
ポッドのファイル・システムをリストします。
df -h
-
暗号化 Block Storage for Classic ボリュームのファイル・システムのパスを確認します。
-
暗号化ボリュームのパス構造は
/dev/mapper/<pvc-ID_encrypted>
です。 この例では、暗号化ボリュームが、ポッド内の/test
ファイル・パスにマウントされています。Filesystem Size Used Avail Use% Mounted on overlay 98G 8.2G 85G 9% / tmpfs 64M 0 64M 0% /dev tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup /dev/mapper/pvc-a011a111-1111-1111-111a-aaa1a1111a11_encrypted 20G 45M 20G 1% /test
-
暗号化されていないボリュームのパス構造は
dev/mapper/<random_string>
です。Filesystem Size Used Avail Use% Mounted on overlay 98G 16G 78G 17% / tmpfs 64M 0 64M 0% /dev tmpfs 7.9G 0 7.9G 0% /sys/fs/cgroup /dev/mapper/3600a09803830476e733f4e477370716e 24G 45M 24G 1% /test
-
Kubernetes シークレットを削除しても、ボリューム・データへのアクセス権限は取り消されません。 ポッドのみのデプロイメントを作成した場合は、ポッドを削除する必要があります。 デプロイメントを作成した場合は、デプロイメントを削除する必要があります。
アプリへのブロック・ストレージの追加
永続ボリューム・クレーム(PVC)を作成して、クラスタ用のブロック・ストレージを動的にプロビジョニングします。 動的プロビジョニングでは、対応する永続ボリューム (PV) が自動的に作成され、IBM Cloud インフラストラクチャー・アカウントで実際のストレージ・デバイスが注文されます。
ブロック・ストレージは、ReadWriteOnce
アクセス・モードです。 これは、一度にクラスター内の 1 つのワーカー・ノードの 1 つのポッドにのみマウントできます。
始める前に
- ファイアウォールがある場合は、クラスターのあるゾーンの IBM Cloud インフラストラクチャーの IP 範囲に発信アクセスを許可し、PVC を作成できるようにします。
- 事前定義されたストレージ・クラスを選択するか、またはカスタマイズしたストレージ・クラスを作成します。
ステートフル・セットにブロック・ストレージをデプロイしようとお考えですか? 詳しくは、ステートフル・セットでのブロック・ストレージの使用を参照してください。
ブロック・ストレージを追加するには、以下のようにします。
-
永続ボリューム請求 (PVC) を定義した構成ファイルを作成し、
.yaml
ファイルとして構成を保存します。-
ブロンズ、シルバー、ゴールドのストレージ・クラスの例: 以下の
.yaml
ファイルは、"ibmc-block-silver"
ストレージ・クラスのblock-storage-pvc
という名前のクレームを作成します。1 時間ごとに請求され、ギガバイト・サイズは24Gi
になります。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: block-storage-pvc labels: billingType: "hourly" region: us-south zone: dal13 spec: accessModes: - ReadWriteOnce resources: requests: storage: 24Gi storageClassName: ibmc-block-silver
-
独自のストレージ・クラスを使用する場合の例: 以下の
.yaml
ファイルは、ストレージ・クラスibmc-block-retain-custom
のblock-storage-pvc
という名前のクレームを作成します。毎時請求され、ギガバイト・サイズは45Gi
、IOPS は"300"
です。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: block-storage-pvc labels: billingType: "hourly" region: us-south zone: dal13 spec: accessModes: - ReadWriteOnce resources: requests: storage: 45Gi iops: "300" storageClassName: ibmc-block-retain-custom
name
- PVC の名前を入力します。
billingType
- metadata の labels セクションで、ストレージの課金額を計算する頻度として "monthly" または "hourly" を指定します。 デフォルトは「hourly」です。
region
- metadata の labels セクションで、ブロック・ストレージをプロビジョンするリージョンを指定します。 リージョンを指定する場合は、ゾーンも指定する必要があります。 リージョンを指定しない場合、または指定されたリージョンが見つからない場合、ストレージはクラスターと同じリージョンに作成されます。 このオプションは、IBM Cloud Block Storage プラグインのバージョン 1.0.1 以上でのみサポートされます。 複数ゾーン・クラスターを使用している場合、これより古いバージョンのプラグインでは、ボリューム要求をすべてのゾーン間で均等に分散させるために、ストレージは、ラウンドロビン・ベースで選択されたゾーンにプロビジョンされます。 ストレージのゾーンを指定するには、まずカスタマイズしたストレージ・クラスを作成できます。 それから、カスタマイズしたストレージ・クラスを使用して PVC を作成します。
zone
- metadata の labels セクションで、ブロック・ストレージをプロビジョンするゾーンを指定します。 ゾーンを指定する場合は、リージョンも指定する必要があります。 ゾーンを指定しない場合、または指定されたゾーンがマルチゾーン・クラスターで見つからない場合、そのゾーンはラウンドロビン・ベースで選択されます。 このオプションは、IBM Cloud Block Storage プラグインのバージョン 1.0.1 以上でのみサポートされます。 複数ゾーン・クラスターを使用している場合、これより古いバージョンのプラグインでは、ボリューム要求をすべてのゾーン間で均等に分散させるために、ストレージは、ラウンドロビン・ベースで選択されたゾーンにプロビジョンされます。 ストレージのゾーンを指定するには、まずカスタマイズしたストレージ・クラスを作成できます。 それから、カスタマイズしたストレージ・クラスを使用して PVC を作成します。
storage
- spec の resources の requests セクションで、ブロック・ストレージのサイズをギガバイト (Gi) 単位で入力します。 ストレージがプロビジョンされた後は、ブロック・ストレージのサイズを変更することはできません。 保管するデータの量に一致するサイズを指定してください。
iops
- このオプションは、独自のカスタム・ストレージ・クラス(
ibmc-block-custom / ibmc-block-retain-custom
)にのみ使用できます。spec resources requests] セクションで、許容範囲内で 100 の倍数を選択して、ストレージの合計 IOPS を指定します。 リストされているもの以外の IOPS を選択した場合、その IOPS は切り上げられます。 storageClassName
- spec セクションで、ブロック・ストレージをプロビジョンするために使用するストレージ・クラスの名前を入力します。 IBM 提供のストレージ・クラスの 1 つを使用するのか、独自のストレージ・クラスを作成するのかを選択できます。 ストレージ・クラスを指定しない場合、PV はデフォルトのストレージ・クラス
ibmc-file-bronze
を使用して作成されます。
カスタマイズされたストレージ・クラスを使用する場合は、対応するストレージ・クラス名、有効な IOPS、およびサイズを指定して PVC を作成します。
-
-
PVC を作成します。
oc apply -f block-storage.yaml
-
PVC が作成され、PV にバインドされたことを確認します。 この処理には数分かかる場合があります。
oc get pvc
出力例
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE block-storage-pvc Bound pvc-1aa1aaaa-11a1-48d1-ab11-11b11111f3bc 45Gi RWO ibmc-block-silver 150m
-
PV をデプロイメントにマウントするには、構成
.yaml
ファイルを作成し、PV をバインドする PVC を指定します。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 および spec の template の metadata で、アプリのラベルを入力します。
image
- 使用するコンテナー・イメージの名前。 IBM Cloud Container Registry アカウント内の使用可能なイメージをリストするには、
ibmcloud cr image-list
を実行します。 name
- クラスターにデプロイするコンテナーの名前。
mountPath
- containers の volumeMounts セクションに、コンテナー内部でボリュームをマウントするディレクトリーの絶対パスを入力します。 マウント・パスに書き込まれるデータは、物理ブロック・ストレージ・インスタンスのルート・ディレクトリーの下に保管されます。 異なるアプリ間でボリュームを共有したい場合は、アプリごとに ボリュームのサブパスを指定できます。
name
- containers の volumeMounts セクションで、ポッドにマウントするボリュームの名前を入力します。
name
- volumes セクションで、ポッドにマウントするボリュームの名前を入力します。 通常、この名前は
volumeMounts/name
と同じです。 claimName
- volumes の persistentVolumeClaim セクションで、使用する PV をバインドする PVC の名前を入力します。
-
デプロイメントを作成します。
oc apply -f <local_yaml_path>
-
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: block-storage-pvc ReadOnly: false
クラスターでの既存のブロック・ストレージの使用
クラスタで使用する既存の物理ストレージ・デバイスがある場合は、PVとPVCを手動で作成してストレージを静的にプロビジョニングできます。
アプリへの既存のストレージのマウントを開始するには、その前に、PV に関する必要な情報をすべて取得する必要があります。
既存のブロック・ストレージの情報の取得
-
IBM Cloud インフラストラクチャー・アカウントの API キーを取得または生成します。
- IBM Cloudインフラストラクチャ・ポータルにログインします。
- 「アカウント」、「ユーザー」、**「ユーザー・リスト」**の順に選択します。
- 自分のユーザー ID を見つけます。
- **「API キー」列で、「生成」をクリックして API キーを生成するか、または「表示」**をクリックして既存の API キーを表示します。
-
IBM Cloud インフラストラクチャー・アカウントの API ユーザー名を取得します。
- **「ユーザー・リスト」**メニューで、自分のユーザー ID を選択します。
- **「API アクセス情報」セクションで、自分の「API ユーザー名」**を見つけます。
-
IBM Cloud インフラストラクチャー CLI プラグインにログインします。
ibmcloud sl init
-
IBM Cloud インフラストラクチャー・アカウントのユーザー名と API キーを使用して認証を行うことを選択します。
-
前の手順で取得したユーザー名と API キーを入力します。
-
使用可能なブロック・ストレージ・デバイスをリストします。
ibmcloud sl block volume-list
出力例
id username datacenter storage_type capacity_gb bytes_used lunId 11111111 IBM01AAA1111111-1 wdc07 endurance_block_storage 45 - 2
-
ボリュームの詳細を取得します。
<volume_ID>
を、ステップ 6 で取得した Block storage ボリュームの ID に置き換えます。ibmcloud sl block volume-detail <volume_ID>
出力例
ID 11111111 User name IBM01AAA1111111-1 Type endurance_block_storage Capacity (GB) 45 LUN Id 2 IOPs 100 Datacenter wdc07 Target IP 10.XXX.XX.XXX # of Active Transactions 0 Replicant Count 0
-
クラスターにマウントするボリュームの
ID
、Capacity
、LUN Id
、Datacenter
、およびTarget IP
を控えておいてください。 注: 既存のストレージをクラスターにマウントするには、そのストレージと同じゾーンにワーカー・ノードが存在する必要があります。 ワーカー・ノードのゾーンを確認するには、ibmcloud oc worker ls --cluster <cluster_name_or_ID>
を実行します。
永続ボリューム (PV) および対応する永続ボリューム要求 (PVC) の作成
-
オプション:
retain
ストレージ・クラスを使用してプロビジョンしたストレージがある場合、PVC を削除しても、PV と物理ストレージ・デバイスは削除されません。 そのストレージをクラスターで再使用するには、まず PV を削除する必要があります。 既存の PV をリストし、対象の永続ストレージに属する PV を探します。 PV はreleased
状態になっています。oc get pv
-
PV を削除します。
oc delete pv <pv_name>
-
PV が削除されたことを確認します。
oc get pv
-
PV の構成ファイルを作成します。 前に取得したパラメーターを含めます。
apiVersion: v1 kind: PersistentVolume metadata: name: "block-storage-pv" # Enter a name for your PV. For example, my-static-pv. labels: failure-domain.beta.kubernetes.io/region: "<region>" # Example us-east. failure-domain.beta.kubernetes.io/zone: "<zone>" # Example: wdc04. See /docs/openshift?topic=openshift-regions-and-zones#zones-sz spec: capacity: storage: "<storage>" accessModes: - ReadWriteOnce flexVolume: driver: "ibm/ibmc-block" fsType: "<fs_type>" # Enter ext or xfs options: "Lun": "<Lun_ID>" "TargetPortal": "<TargetPortal>" "VolumeID": "<VolumeID>" "volumeName": "block-storage-pv" # Enter the same value as your PV name from metadata.name
name
- PV に名前を付けます。 例えば、
block-storage-pv
です。spec.FlexVolume.options
では、この値をvolumeName
としても入力する必要があることに注意してください。 labels
- 先ほど取得したリージョンとゾーンを入力します。 クラスターでストレージをマウントするには、永続ストレージと同じリージョンおよびゾーンに少なくとも 1 つのワーカー・ノードが存在していなければなりません。 ボリューム詳細を取得するには、
ibmcloud sl block volume-list
を実行してボリューム ID を取得してから、ibmcloud sl block volume-detail <volume_ID>
を実行してボリュームの詳細を取得します。 region
- Block Storage が配置されている領域を入力します。 クラスターと Block Storage は同じリージョンになければならないことに注意してください。 クラスターの場所を見つけるには、
ibmcloud oc cluster ls
を実行します。 使用可能な地域とゾーンについて詳しくは、地域とゾーンを参照してください。 例えば、us-east
などです。 zone
- ストレージ・ボリュームが配置されているゾーンを入力します。 ボリューム詳細を取得するには、
ibmcloud sl block volume-list
を実行してボリューム ID を取得してから、ibmcloud sl block volume-detail <volume_ID>
を実行してボリュームの詳細を取得します。 Block Storage をクラスターに接続するには、接続するボリュームと同じゾーンにワーカー・ノードがなければならないことに注意してください。 ワーカー・ノードのゾーンを見つけるには、ibmcloud oc worker ls -c <cluster>
を実行します。 例えば、wdc04
です。 storage
- クラスターに接続する既存の Block Storage ボリュームのストレージ・サイズを入力します。 このストレージ・サイズはギガバイト単位 (例えば、20Gi (20 GB) や 1000Gi (1 TB) など) で入力する必要があります。 ボリュームの詳細を取得するには、
ibmcloud sl block volume-list
を実行してボリューム ID を取得してから、ibmcloud sl block volume-detail <volume_ID>
を実行してボリュームの詳細を取得します。 fsType
- 既存のブロック・ストレージ用に構成されているファイル・システム・タイプを入力します。
ext4
またはxfs
のいずれかを選択します。 このオプションを指定しない場合、PV はデフォルトでext4
になります。 誤ったfsType
が定義された場合、PV の作成は成功しますが、PV のポッドへのマウントは失敗します。 ボリューム詳細を取得するには、ibmcloud sl block volume-list
を実行してボリューム ID を取得してから、ibmcloud sl block volume-detail <volume_ID>
を実行してボリュームの詳細を取得します。 Lun
- Block Storage ボリュームの LUN ID を入力します。 ボリューム詳細を取得するには、
ibmcloud sl block volume-list
を実行してボリューム ID を取得してから、ibmcloud sl block volume-detail <volume_ID>
を実行してボリュームの詳細を取得します。 TargetPortal
- Block Storage の IP アドレスを入力します。
TargetPortal
パラメーターを取得するには、ibmcloud sl block volume-list
を実行してボリューム ID を取得してから、ibmcloud sl block volume-detail <volume_ID>
を実行し、出力内のTarget IP
をメモします。 VolumeId
- Block Storage の ID を入力します。 ボリュームの詳細を取得するには、
ibmcloud sl block volume-list
を実行します。 volumeName
- PV 名と同じ値を入力します。 例えば、
block-storage-pv
です。
-
クラスターに PV を作成します。
oc apply -f pv.yaml
-
PV が作成されたことを確認します。
oc get pv
-
PVC を作成するために、別の構成ファイルを作成します。 PVC が、前の手順で作成した PV と一致するようにするには、
storage
およびaccessMode
に同じ値を選択する必要があります。storage-class
フィールドは空の文字列である必要があります。 これらのフィールドのいずれかが PV と一致しない場合は、代わりに新しい PV が自動的に作成されます。kind: PersistentVolumeClaim apiVersion: v1 metadata: name: block-storage-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: "20Gi" storageClassName: ""
-
PVC を作成します。
oc apply -f static-pvc.yaml
-
PVC が作成され、先ほど作成した PV にバインドされたことを確認します。 この処理には数分かかる場合があります。
oc describe pvc static-pvc
出力例
Name: static-pvc Namespace: default StorageClass: Status: Bound
-
オプション 以下のポッド構成の例を
pod.yaml
というファイルとして保存します。
apiVersion: v1
kind: Pod
metadata:
name: block-storage
labels:
app: block-storage
spec:
containers:
- name: block-storage
image: nginx
command: ["/bin/sh"]
args: ["-c", "while true; do date \"+%Y-%m-%d %H:%M:%S\"; sleep 3600; done"]
workingDir: /home
imagePullPolicy: Always
ports:
- containerPort: 80
volumeMounts:
- name: block-storage-pv
mountPath: /home
volumes:
- name: block-storage-pv
persistentVolumeClaim:
claimName: block-storage-pvc
- クラスター内にポッドを作成します。
oc create -f pod.yaml
- ポッドが
Running
ステータスになったら、ログを取得します。
oc logs
出力例
2022-01-21 16:11:00
PV が正常に作成され、PVC にバインドされました。 次に、その後、Block Storage を使用するアプリをデプロイしました。 クラスター・ユーザーは、デプロイメントに対して PVC のマウントを実行し、永続ボリュームの読み取りと書き込みを開始できるようになりました。
ステートフル・セットでのブロック・ストレージの使用
データベースなどのステートフルなアプリがある場合は、そのアプリのデータを保管するために、ブロック・ストレージを使用するステートフル・セットを作成することができます。 別の方法として、IBM Cloud Database as a Service を使用し、クラウドにデータを保管することもできます。
- ステートフル・セットにブロック・ストレージを追加する場合、何に注意する必要がありますか?
- ストレージをステートフル・セットに追加するには、ステートフル・セット YAML の
volumeClaimTemplates
セクションでストレージ構成を指定します。volumeClaimTemplates
は、PVC の基礎となるもので、プロビジョンするブロック・ストレージのストレージ・クラスとサイズ (または IOPS) を含めることができます。 ただし、volumeClaimTemplates
にラベルを含める場合、Kubernetes による PVC の作成時にそれらのラベルは組み込まれません。 その代わりに、自分で直接、それらのラベルをステートフル・セットに追加する必要があります。
2 つのステートフル・セットを同時にデプロイすることはできません。 1 つのステートフル・セットが完全にデプロイされる前に別のステートフル・セットを作成しようとすると、ステートフル・セットのデプロイメントが予期しない結果となる可能性があります。
- 特定のゾーンにステートフルセットを作成するには?
- 複数ゾーン・クラスターでは、ステートフル・セット YAML の
spec.selector.matchLabels
およびspec.template.metadata.labels
セクションで、ステートフル・セットを作成するゾーンとリージョンを指定することができます。 あるいは、それらのラベルをカスタマイズ・ストレージ・クラスに追加し、このストレージ・クラスをステートフル・セットのvolumeClaimTemplates
セクションで使用することもできます。 - PVとステートフル・ポッドのバインドを、ポッドの準備が整うまで遅らせることはできますか?
- はい。
volumeBindingMode: WaitForFirstConsumer
フィールドを含む PVC 用に 独自のストレージ・クラスを作成 できます。 - ステートフル・セットにブロック・ストレージを追加するには、どのようなオプションがありますか?
- ステートフル・セットを作成するときに PVC を自動的に作成する場合は、動的プロビジョニングを使用します。 また、ステートフル・セットで使用するために PVC を事前プロビジョンするか、既存の PVC を使用することもできます。
ステートフル・セットの作成時に動的プロビジョニングを使用して PVC を作成する
このオプションは、ステートフル・セットを作成するときに PVC を自動的に作成する場合に使用します。
始める前に、Red Hat OpenShift クラスターにアクセスします。
以下のステップを実行して、クラスター内のすべての既存のステートフル・セットが完全にデプロイされていることを確認します。 ステートフル・セットがまだデプロイされている場合は、ステートフル・セットの作成を開始できません。 予期しない結果が生じるのを避けるため、クラスター内のすべてのステートフル・セットが完全にデプロイされるまで待つ必要があります。
-
クラスター内の既存のステートフル・セットをリストします。
oc get statefulset --all-namespaces
出力例
NAME DESIRED CURRENT AGE mystatefulset 3 3 6s
-
ステートフル・セットのデプロイメントが完了していることを確かめるため、各ステートフル・セットの Pods Status を確認します。
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 ポッドの数と等しい場合は、ステートフル・セットが完全にデプロイ済みです。 ステートフル・セットがまだ完全にデプロイされていない場合は、デプロイメントが完了するまで待ってから、次に進んでください。
-
ステートフル・セットと、そのステートフル・セットを公開するために使用するサービスに関する、構成ファイルを作成します。 下記の例は、3 つのレプリカを伴うステートフル・セットとして NGINX をデプロイする方法を示しています。 レプリカごとに、
ibmc-block-retain-bronze
ストレージ・クラスで定義された仕様に基づいて、20 ギガバイトのブロック・ストレージ・デバイスがプロビジョンされます。 すべてのストレージ・デバイスはdal10
ゾーンでプロビジョンされます。 他のゾーンから Block Storage にアクセスすることはできないため、ステートフル・セットのすべてのレプリカも、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" # Enter the region where your cluster is located. zone: "dal10" template: metadata: labels: app: nginx billingType: "hourly" region: "us-south" zone: "dal10" spec: containers: - name: nginx image: nginx 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-block-retain-bronze
下記の例は、3 つのレプリカを伴うステートフル・セットとして NGINX をデプロイする方法を示しています。 このステートフル・セットでは、ブロック・ストレージの作成場所であるリージョンとゾーンは指定されません。 代わりに、このステートフル・セットではアンチアフィニティー・ルールを使用して、ポッドが複数のワーカー・ノードとゾーンにまたがって分散されるようにします。
topologykey: failure-domain.beta.kubernetes.io/zone
を定義すると、ワーカー・ノードがapp: nginx
ラベルを持つポッドと同じゾーンにある場合、Kubernetes スケジューラーはワーカー・ノード上のポッドをスケジュールできません。 各ステートフル・セット・ポッドについて、volumeClaimTemplates
セクション内の定義に従って 2 つの PVC が作成されますが、ブロック・ストレージ・インスタンスの作成は、そのストレージを使用するステートフル・セット・ポッドがスケジュールされるまで遅延されます。 この設定は、トポロジーを考慮したボリューム・スケジューリングと呼ばれる。apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ibmc-block-bronze-delayed parameters: billingType: hourly classVersion: "2" fsType: ext4 iopsPerGB: "2" sizeRange: '[20-12000]Gi' type: Endurance provisioner: ibm.io/ibmc-block 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: - ReadWriteOnce # access mode resources: requests: storage: 20Gi storageClassName: ibmc-block-bronze-delayed - metadata: name: myvol2 spec: accessModes: - ReadWriteOnce # access mode resources: requests: storage: 20Gi storageClassName: ibmc-block-bronze-delayed
name
- ステートフル・セットに対する名前を入力します。 入力した名前は、
<volume_name>-<statefulset_name>-<replica_number>
という形式で PVC の名前を作成するために使用されます。 serviceName
- ステートフル・セットを公開するために使用するサービスの名前を入力します。
replicas
- ステートフル・セットのレプリカの数を入力します。
podManagementPolicy
- ステートフル・セットで使用するポッド管理ポリシーを入力します。
- OrderedReady: このオプションを指定すると、ステートフル・セット・レプリカが 1 つずつデプロイされます。 例えば、3 つのレプリカを指定した場合、Kubernetes は 1 番目のレプリカの PVC を作成し、PVC がバインドされるまで待機し、ステートフル・セット・レプリカをデプロイし、PVC をレプリカにマウントします。 このデプロイメントが完了したら、2 番目のレプリカがデプロイされます。 このオプションの詳細については、「
OrderedReady
ポッド・マネジメントを参照のこと - Parallel: このオプションを指定すると、ステートフル・セット・レプリカのすべてのデプロイメントが同時に開始します。 アプリでレプリカの並行デプロイメントをサポートしている場合は、このオプションを使用して、PVC とステートフル・セット・レプリカをデプロイする時間を節約してください。
- OrderedReady: このオプションを指定すると、ステートフル・セット・レプリカが 1 つずつデプロイされます。 例えば、3 つのレプリカを指定した場合、Kubernetes は 1 番目のレプリカの PVC を作成し、PVC がバインドされるまで待機し、ステートフル・セット・レプリカをデプロイし、PVC をレプリカにマウントします。 このデプロイメントが完了したら、2 番目のレプリカがデプロイされます。 このオプションの詳細については、「
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 セクションで、アンチアフィニティー・ルールを指定して、ステートフル・セット・ポッドが複数のワーカー・ノードとゾーンにまたがって分散されるようにします。 この例では、
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 セクションで、ブロック・ストレージのサイズをギガバイト (Gi) 単位で入力します。
iops
- パフォーマンス・ストレージをプロビジョンする場合は、spec の volumeClaimTemplates の spec の resources の requests セクションで、IOPS 数を入力します。 エンデュランス・ストレージ・クラスを使用することにして IOPS 数を指定した場合は、IOPS 数が無視されます。 その代わりに、そのストレージ・クラスで指定されている IOPS が使用されます。
storageClassName
- spec の volumeClaimTemplates の spec セクションで、使用するストレージ・クラスを入力します。 既存のストレージ・クラスをリストアップするには、'
oc get sc | grep block
を実行する。 ストレージ・クラスを指定しない場合、クラスターに設定されているデフォルトのストレージ・クラスを使用して PVC が作成されます。 ブロック・ストレージを使用してステートフル・セットがプロビジョンされるようにするために、デフォルト・ストレージ・クラスでibm.io/ibmc-block
プロビジョナーが使用されていることを確認してください。
-
ステートフル・セットを作成します。
oc apply -f statefulset.yaml
-
ステートフル・セットがデプロイされるまで待ちます。
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 クラスターにアクセスします。
-
ステートフル・セットを作成する前に、そのステートフル・セット用の PVC を事前プロビジョンする場合は、アプリへのブロック・ストレージの追加のステップ 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-0
、nginxvol-nginx_statefulset-1
、nginxvol-nginx_statefulset-2
。既存のストレージ・デバイス用の PVC と PV を作成することを検討している場合は、 静的プロビジョニングを使用して PVC と PV を作成してください。
-
動的プロビジョニング: ステートフル・セット作成時の 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 が異なるゾーンにある場合は、ステートフル・セットにリージョン、またはゾーンのラベルを含めないでください。
-
クラスター内のポッドをリストして、ステートフル・セット・レプリカ・ポッドで PVC が使用されていることを確認します。 ステートフル・セットに属するポッドを確認します。
oc get pods
-
既存の 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 コンソールを使用してストレージを変更する手順を調べたい場合は、ブロック・ストレージ容量の拡張および IOPS の調整を参照してください。
コンソールから行った更新は、永続ボリューム (PV) には反映されません。 この情報を PV に追加するには、oc patch pv <pv_name>
を実行し、PV の Labels および Annotation セクションでサイズと IOPS を手動で更新します。
-
クラスターの PVC をリストし、VOLUME 列に表示される関連 PV の名前をメモします。
oc get pvc
出力例
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE myvol Bound pvc-01ac123a-123b-12c3-abcd-0a1234cb12d3 20Gi RWO ibmc-block-bronze 147d
-
ブロック・ストレージの IOPS とサイズを変更する場合は、まず PV の
metadata.labels.IOPS
セクションの IOPS を編集します。 IOPS 値は増減できます。 必ず、ご使用のストレージ・タイプでサポートされている IOPS を入力するようにしてください。 例えば、4 IOPS のエンデュランス・ブロック・ストレージがある場合は、IOPS を 2 または 10 に変更できます。 サポート対象の IOPS 値について詳しくは、 ブロック・ストレージ構成の決定を参照してください。oc edit pv <pv_name>
CLI から IOPS を変更するには、ブロック・ストレージのサイズを変更する必要もあります。 IOPS のみを変更し、サイズを変更しない場合は、コンソールから IOPS 変更を要求する必要があります。
-
PVC を編集し、PVC の
spec.resources.requests.storage
セクションに新しいサイズを追加します。 より大きなサイズに変更する場合は、ストレージ・クラスによって設定された最大容量までのみです。 既存のストレージを縮小することはできません。 ストレージ・クラスに使用可能なサイズを確認するには、ブロック・ストレージ構成の決定を参照してください。oc edit pvc <pvc_name>
-
ボリューム拡張が要求されていることを確認してください。 CLI 出力の
FileSystemResizePending
Conditions** セクションに ** メッセージが表示された場合、ボリューム拡張は正常に要求されています。oc describe pvc <pvc_name>
出力例
... Conditions: Type Status LastProbeTime LastTransitionTime Reason Message ---- ------ ----------------- ------------------ ------ ------- FileSystemResizePending True Mon, 01 Jan 0001 00:00:00 +0000 Thu, 25 Apr 2022 15:52:49 -0400 Waiting for user to (re-)start a pod to finish file system resize of volume on node.
-
PVC をマウントするすべてのポッドをリストします。 PVC がポッドによってマウントされている場合、ボリューム拡張は自動的に処理されます。 PVC がポッドによってマウントされていない場合は、ボリューム拡張を処理できるように、PVC をポッドにマウントする必要があります。
oc get pods --all-namespaces -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.volumes[*]}{.persistentVolumeClaim.claimName}{" "}{end}{end}' | grep "<pvc_name>"
マウントされたポッドは、
<pod_name>: <pvc_name>
という形式で返されます。 -
PVC がポッドによってマウントされていない場合は、ポッドまたはデプロイメントを作成し、PVC をマウントします。 PVC がポッドによってマウントされている場合は、次のステップに進みます。
-
CLI 出力の Labels セクションで、サイズと IOPS が変更されていることを確認します。 このプロセスは、完了まで数分かかることがあります。
oc describe pv <pv_name>
出力例
... Labels: CapacityGb=50 Datacenter=dal10 IOPS=500
-
PVC をマウントするポッドにログインします。
oc exec <pod-name> -it -- bash
-
以下のコマンドを実行して、ホスト・バイナリーを使用します。
chroot /host
-
ファイル・システムのサイズを変更します。
sudo resize2fs <filesystem-path>
コマンド例
sudo resize2fs /dev/vdg
-
ファイル・システムのサイズが変更されていることを確認します。
df -h
データのバックアップと復元
ブロック・ストレージは、クラスター内のワーカー・ノードと同じロケーションにプロビジョンされます。 サーバーがダウンした場合の可用性を確保するために、IBM は、クラスター化したサーバーでストレージをホストしています。 ただし、ブロック・ストレージは自動的にはバックアップされないため、ロケーション全体で障害が発生した場合はアクセス不能になる可能性があります。 データの損失や損傷を防止するために、定期バックアップをセットアップすると、必要時にバックアップを使用してデータをリストアできます。
ブロック・ストレージのバックアップとリストアのための以下のオプションを検討してください。
定期的なスナップショットをセットアップする
ブロック・ストレージの定期的なスナップショットをセットアップできます。スナップショットとは、特定の時点のインスタンスの状態をキャプチャーした読み取り専用のイメージです。
スナップショットを保管するには、ブロック・ストレージでスナップショット・スペースを要求する必要があります。 スナップショットは、同じゾーン内の既存のストレージ・インスタンスに保管されます。 ユーザーがボリュームから重要なデータを誤って削除した場合に、スナップショットからデータをリストアすることができます。 \n \n ** ボリュームのスナップショットを作成するには、以下の手順を実行します。
-
ibmcloud sl
CLI にログインします。ibmcloud sl init
-
クラスター内の既存の PV をリストします。
oc get pv
-
スナップショット・スペースを作成する PV の詳細を取得し、ボリューム ID、サイズ、および IOPS をメモします。 サイズと IOPS は CLI 出力の Labels セクションに表示されます。
oc describe pv <pv_name>
-
ボリューム ID は、CLI 出力の
ibm.io/network-storage-id
アノテーションで確認します。 -
前のステップで取得したパラメーターを使用して、既存のボリュームのスナップショット・サイズを作成します。
ibmcloud sl block snapshot-order <volume_ID> --size <size> --tier <iops>
-
スナップショット・サイズが作成されるまで待ちます。 CLI 出力の Snapshot Size (GB) が 0 から注文したサイズに変更されていれば、スナップショット・サイズは正常にプロビジョンされています。
ibmcloud sl block volume-detail <volume_ID>
-
ボリュームのスナップショットを作成し、作成されたスナップショットの ID をメモします。
ibmcloud sl block snapshot-create <volume_ID>
-
スナップショットが正常に作成されたことを確認します。
ibmcloud sl block snapshot-list <volume_ID>
-
スナップショット・スケジュールを設定します。 スナップショット・スケジュールで使用可能なオプションについて詳しくは、 CLI の資料 を参照してください。
ibmcloud sl block snapshot-enable VOLUME_ID <OPTIONS>
-
スナップショットのデータを既存のボリュームにリストアするには、次のコマンドを実行します。
ibmcloud sl block snapshot-restore <volume_ID> <snapshot_ID>
別のゾーンへのスナップショットのレプリケーション
ゾーンの障害からデータを保護するために、別のゾーンにセットアップしたブロック・ストレージのインスタンスにスナップショットをレプリケーションすることができます。
データは、1 次ストレージからバックアップ・ストレージにのみレプリケーションできます。 複製された Block Storage インスタンスをクラスターにマウントすることはできません。 1 次ストレージに障害が発生した場合には、レプリケーションされたバックアップ・ストレージを 1 次ストレージに手動で設定できます。 すると、そのファイル共有をクラスターにマウントできます。 1 次ストレージがリストアされたら、バックアップ・ストレージからデータをリストアできます。
ストレージの複製
元のストレージ・インスタンスと同じゾーンに、ブロック・ストレージ・インスタンスを複製できます。
複製インスタンスのデータは、それを作成した時点の元のストレージ・インスタンスと同じです。 レプリカとは異なり、複製インスタンスは、元のインスタンスから独立したストレージ・インスタンスとして使用します。 複製するには、まず、ボリュームのスナップショットをセットアップします。
IBM Cloud® Object Storage へのデータのバックアップ
Helm チャート ibm-backup-restore を使用して、バックアップとリストアのためのポッドをクラスター内で起動できます。
このポッドには、クラスター内の任意の永続ボリューム請求 (PVC) のために 1 回限りのバックアップまたは定期バックアップを実行するスクリプトが含まれています。 データは、ゾーンにセットアップした IBM Cloud® Object Storage インスタンスに保管されます。
ブロック・ストレージは、RWO アクセス・モードでマウントされます。 このアクセスでは、一度に 1 つのポッドしかブロック・ストレージにマウントできません。 データをバックアップするには、ストレージからアプリ・ポッドをアンマウントし、バックアップ・ポッドにマウントしてデータをバックアップしてから、アプリ・ポッドに再マウントする必要があります。
データの可用性をさらに高め、アプリをゾーン障害から保護するには、2 つ目の Object Storage インスタンスをセットアップして、ゾーン間でデータを複製します。 Object Storage インスタンスからデータをリストアする必要がある場合は、この Helm チャートで提供されるリストア・ポッドを使用します。
ポッドやコンテナーとの間のデータのコピー
oc cp
コマンドを使うと、クラスタ内のポッドや特定のコンテナとの間でファイルやディレクトリをコピーできる。
Red Hat OpenShift クラスターにアクセスします。
oc cp
コマンドを実行するときに、-c
でコンテナーを指定しない場合、コマンドはポッド内の最初の使用可能なコンテナーを使用します。
ローカル・マシンからクラスター内のポッドにデータをコピーする。
oc cp <local_filepath>/<filename> <namespace>/<pod>:<pod_filepath>
クラスター内のポッドからローカル・マシンにデータをコピーする。
oc cp <namespace>/<pod>:<pod_filepath>/<filename> <local_filepath>/<filename>
ローカル・マシンからクラスター内のポッドで実行される特定のコンテナーにデータをコピーする。
oc cp <local_filepath>/<filename> <namespace>/<pod>:<pod_filepath> -c CONTAINER
ストレージ・クラス・リファレンス
ブロンズ
- 名前
ibmc-block-bronze
ibmc-block-retain-bronze
- タイプ
- エンデュランス・ストレージ
- ファイル・システム
ext4
- IOPS/GB
- 2
- サイズの範囲 (ギガバイト単位)
- 20 から 12000 Gi
- ハード・ディスク
- SSD
- 再利用ポリシー
ibmc-block-bronze
: 削除ibmc-block-retain-bronze
: 保持
シルバー
- 名前
ibmc-block-silver
ibmc-block-retain-silver
- タイプ
- エンデュランス・ストレージ
- ファイル・システム
ext4
- IOPS/GB
- 4
- サイズの範囲 (ギガバイト単位)
- 20 から 12000 Gi
- ハード・ディスク
- SSD
- 再利用ポリシー
ibmc-block-silver
: 削除ibmc-block-retain-silver
: 保持
ゴールド
- 名前
ibmc-block-gold
ibmc-block-retain-gold
- タイプ
- エンデュランス・ストレージ
- ファイル・システム
ext4
- IOPS/GB
- 10
- サイズの範囲 (ギガバイト単位)
- 20 から 4000 Gi
- ハード・ディスク
- SSD
- 再利用ポリシー
ibmc-block-gold
: 削除ibmc-block-retain-gold
: 保持
カスタム
- 名前
ibmc-block-custom
ibmc-block-retain-custom
- タイプ
- パフォーマンス・ファイル・システム
ext4
- 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
- ハード・ディスク
- ギガバイトに対する IOPS の比率によって、プロビジョンされるハード・ディスクのタイプが決まります。 ギガバイトに対する IOPS の比率を求めるには、IOPS をストレージ・サイズで除算します。
- 例: 100 IOPS のストレージの 500Gi を選択したとします。 比率は 0.2 です (100 IOPS/500Gi)。
- 比率ごとのハード・ディスク・タイプの概要:
- 0.3 以下: SATA
- 0.3 より大: SSD
- 再利用ポリシー
ibmc-block-custom
: 削除ibmc-block-retain-custom
: 保持
ストレージ・クラスのカスタマイズ例
カスタマイズされたストレージ・クラスを作成し、PVC でそのストレージ・クラスを使用することができます。
Red Hat OpenShift on IBM Cloud では、特定の層と構成のブロック・ストレージをプロビジョンするための、事前定義ストレージ・クラスが用意されています。 状況に応じて、それらの事前定義ストレージ・クラスではカバーされない、異なる構成のストレージをプロビジョンすることができます。 このトピックの例では、カスタマイズ・ストレージ・クラスのサンプルを示します。
カスタマイズ・ストレージ・クラスを作成するには、ストレージ・クラスのカスタマイズを参照してください。 それから、カスタマイズ・ストレージ・クラスを PVC で使用します。
トポロジー対応ストレージの作成
マルチゾーン・クラスターでブロック・ストレージを使用するには、ブロック・ストレージ・インスタンスと同じゾーン内でポッドがスケジュールされる必要があります。その結果として、ボリュームの読み取りと書き込みが可能になります。 Kubernetes でトポロジー対応ボリューム・スケジューリングが導入される前は、ストレージの動的プロビジョニングによって、PVC の作成時にブロック・ストレージ・インスタンスが自動的に作成されていました。 その当時は、ポッドを作成したときに、Kubernetes スケジューラーはそのポッドをブロック・ストレージ・インスタンスと同じデータ・センターにデプロイしようとしていました。
ポッドの制約事項を知らずにブロック・ストレージ・インスタンスを作成すると、望ましくない結果が生じる可能性があります。 例えば、ご使用のストレージと同じワーカー・ノードに対してポッドをスケジュールできない場合があります。その理由は、そのワーカー・ノードのリソースが不十分であるか、そのワーカー・ノードにテイントが適用されているためそのワーカー・ノードではそのポッドのスケジューリングが許可されないからです。 トポロジー対応ボリューム・スケジューリングを使用すると、該当ストレージを使用する最初のポッドが作成されるまで、ブロック・ストレージ・インスタンスが遅延されます。
トポロジー対応ボリューム・スケジューリングを使用するためには、IBM Cloud Block Storage プラグイン・バージョン 1.2.0 以降をインストールしている必要があります。
次の例では、当該ストレージを使用する最初のポッドがスケジュール可能になるまで、ブロック・ストレージ・インスタンスの作成を遅延させるストレージ・クラスを作成する方法を示しています。 作成を遅延させるには、volumeBindingMode: WaitForFirstConsumer
オプションを含める必要があります。 このオプションを指定しない場合、volumeBindingMode
は自動的にImmediate
に設定され、PVC
の作成時に Block Storage インスタンスが作成されます。
エンデュランス・ブロック・ストレージの例。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ibmc-block-bronze-delayed
parameters:
billingType: hourly
classVersion: "2"
fsType: ext4
iopsPerGB: "2"
sizeRange: '[20-12000]Gi'
type: Endurance
provisioner: ibm.io/ibmc-block
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
パフォーマンス・ブロック・ストレージの例。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ibmc-block-performance-storageclass
labels:
kubernetes.io/cluster-service: "true"
provisioner: ibm.io/ibmc-block
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
ゾーンとリージョンの指定
特定のゾーン内でブロック・ストレージを作成する場合は、カスタマイズされたストレージ・クラス内でそのゾーンとリージョンを指定できます。
IBM Cloud Block Storage プラグインのバージョン 1.0.0 を使用する場合、または特定のゾーンでブロック・ストレージを静的にプロビジョンする場合には、カスタマイズ・ストレージ・クラスを使用します。 その他の場合は、PVC で直接ゾーンを指定してください。
次の .yaml
ファイルでカスタマイズしているストレージ・クラスは、非 retain の ibm-block-silver
ストレージ・クラスに基づいています。type
は "Endurance"
、iopsPerGB
は 4
、sizeRange
は "[20-12000]Gi"
、reclaimPolicy
の設定は "Delete"
です。 ゾーンは dal12
と指定しています。 別のストレージ・クラスをベースとして使用するには、ストレージ・クラス・リファレンスを参照してください。
ご使用のクラスターおよびワーカー・ノードと同じリージョンおよびゾーン内にストレージ・クラスを作成します。 クラスターのリージョンを取得するには、ibmcloud oc cluster get --cluster <cluster_name_or_ID>
を実行し、マスター URL でリージョンプレフィックス (https://c2.eu-de.containers.cloud.ibm.com:11111
のeu-de
など) を確認します。 ワーカー・ノードのゾーンを取得するには、ibmcloud oc worker ls --cluster <cluster_name_or_ID>
を実行します。
エンデュランス・ブロック・ストレージの例。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ibmc-block-silver-mycustom-storageclass
labels:
kubernetes.io/cluster-service: "true"
provisioner: ibm.io/ibmc-block
parameters:
zone: "dal12"
region: "us-south"
type: "Endurance"
iopsPerGB: "4"
sizeRange: "[20-12000]Gi"
reclaimPolicy: "Delete"
パフォーマンス・ブロック・ストレージの例。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ibmc-block-performance-storageclass
labels:
kubernetes.io/cluster-service: "true"
provisioner: ibm.io/ibmc-block
parameters:
zone: "dal12"
region: "us-south"
type: "Performance"
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]"
reclaimPolicy: "Delete"
XFS
ファイル・システムを使用してブロック・ストレージをマウントする
次の例では、XFS
ファイル・システムを使用するブロック・ストレージをプロビジョンするストレージ・クラスを作成します。
エンデュランス・ブロック・ストレージの例。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ibmc-block-custom-xfs
labels:
addonmanager.kubernetes.io/mode: Reconcile
provisioner: ibm.io/ibmc-block
parameters:
type: "Endurance"
iopsPerGB: "4"
sizeRange: "[20-12000]Gi"
fsType: "xfs"
reclaimPolicy: "Delete"
パフォーマンス・ブロック・ストレージの例。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ibmc-block-custom-xfs
labels:
addonmanager.kubernetes.io/mode: Reconcile
provisioner: ibm.io/ibmc-block
parameters:
classVersion: "2"
type: "Performance"
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]
fsType: "xfs"
reclaimPolicy: "Delete"
クラスターからの永続ストレージの削除
クラスターの永続ストレージをセットアップするときには、ストレージを要求する 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 アカウントから削除します。
始める前に
- 保持するデータをすべてバックアップしたことを確認します。
- Red Hat OpenShift クラスターにアクセスします。
永続データをクリーンアップするには、次の手順を実行します。
-
クラスターの PVC をリストし、PVC の
NAME
、STORAGECLASS
、および 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
-
ストレージ・クラスの
ReclaimPolicy
とbillingType
を確認します。oc describe storageclass <storageclass_name>
回収ポリシーが
Delete
の場合は、PVC を削除すると、PV と物理ストレージも削除されます。 回収ポリシーがRetain
の場合、またはストレージ・クラスを指定せずにストレージをプロビジョンした場合は、PVC を削除しても、PV と物理ストレージは削除されません。 PVC、PV、および物理ストレージを個別に削除する必要があります。ストレージの課金が月単位の場合は、課金サイクルの終了前にストレージを削除しても、その月の月額料金が課金されます。
-
PVC をマウントするすべてのポッドを削除します。 PVC をマウントするポッドをリストします。 CLI 出力でポッドが返されない場合は、PVC を使用するポッドがありません。
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
-
PVC を使用するポッドを削除します。 ポッドがデプロイメントの一部である場合は、デプロイメントを削除します。
oc delete pod <pod_name>
-
ポッドが削除されたことを確認します。
oc get pods
-
PVC を削除します。
oc delete pvc <pvc_name>
-
PV の状況を確認します。 先ほど取得した PV の名前を、
VOLUME
として使用します。 PVC を削除すると、PVC にバインドされている PV はリリースされます。 PV の状態は、ストレージをプロビジョンした方法に応じて、PV が自動的に削除された場合はDeleting
状態になり、PV を手動で削除する必要がある場合はReleased
状態になります。 注: 自動的に削除される PV の場合、削除が終わる前に一時的に状況がReleased
と表示されることがあります。 数分後にコマンドを再実行し、PV が削除されたことを確認してください。oc get pv <pv_name>
-
PV が削除されていない場合は、手動で PV を削除します。
oc delete pv <pv_name>
-
PV が削除されたことを確認します。
oc get pv
-
PV が指していた物理ストレージ・インスタンスをリストし、物理ストレージ・インスタンスの
id
をメモします。ibmcloud sl block volume-list --columns id --columns notes | grep <pv_name>
出力例
12345678 {"plugin":"ibmcloud-block-storage-plugin-689df949d6-4n9qg","region":"us-south","cluster":"aa1a11a1a11b2b2bb22b22222c3c3333","type":"Endurance","ns":"default","pvc":"block-storage-pvc","pv":"pvc-d979977d-d79d-77d9-9d7d-d7d97ddd99d7","storageclass":"ibmc-block-silver","reclaim":"Delete"}
Notes フィールドの情報について
"plugin":"ibm-file-plugin-5b55b7b77b-55bb7"
- クラスターが使用するストレージ・プラグイン。
"region":"us-south"
- クラスターが存在するリージョン。
"cluster":"aa1a11a1a11b2b2bb22b22222c3c3333"
- ストレージ・インスタンスに関連付けられているクラスター ID。
"type":"Endurance"
- ファイル・ストレージまたは Block Storage のタイプ (
Endurance
またはPerformance
)。 "ns":"default"
- ストレージ・インスタンスのデプロイ先の名前空間。
"pvc":"block-storage-pvc"
- ストレージ・インスタンスに関連付けられている PVC の名前。
"pv":"pvc-d979977d-d79d-77d9-9d7d-d7d97ddd99d7"
- ストレージ・インスタンスに関連付けられている PV。
"storageclass":"ibmc-file-gold"
- ストレージ・クラスのタイプ (ブロンズ、シルバー、ゴールド、またはカスタム)。
-
物理ストレージ・インスタンスを削除します。
ibmcloud sl block volume-cancel <classic_block_id>
-
物理ストレージ・インスタンスが削除されたことを確認します。
削除処理は、完了するまでに最大 72 時間かかることがあります。
ibmcloud sl block volume-list
limited
接続 PV のモニターのセットアップ
Block Storage for Classicを使用するポッドと PVC を作成すると、ストレージがマウントされている基礎の永続ボリューム (PV) に 2 つのターゲット・ポートが割り当てられます。 複数のターゲット・ポートを使用すると、1 つのポートがダウンした場合にフェイルオーバーを行うことができます。
以前のバージョンの Block Storage for Classic ドライバーでは、ロールアウト中に PV をマウントするときに 2 つのターゲット・ポートが見つからないため、デプロイメントが失敗しました。
ただし、場合によっては ( IaaS 保守期間中など)、永続ボリューム上の 1 つのターゲット・ポートのみを使用してポッドを正常にデプロイする必要が生じることがあります。
Block Storage for Classic ドライバーのバージョン 2.4.12
以降、PV によって割り当てることができるターゲット・ポートが 1 つのみであっても、ポッドは正常にデプロイされます。 この動作の変更に加えて、PV にネットワーク可用性を示す新しいラベルが追加されました。ラベル healthy
は 2 つのターゲット・ポートが割り当てられたことを意味し、 limited
はマウント時に
1 つのターゲット・ポートのみを割り当てることができることを意味します。
Block Storage for Classic へのポッド接続が制限されているインスタンスをモニターするために、 limited
ラベルを探すカスタム・アラートをセットアップできます。 次に、アラートしきい値を >0
に構成します。
-
IBM Cloud Monitoring ダッシュボードから、 「新規アラート」 > 「メトリック」 を選択します。
-
「Prom 照会」 を選択して、
kube_persistentvolume_labels{label_ibm_io_pv_connectivity_status='limited'}
と入力します。 -
しきい値を
>0
に設定し、このアラートに使用する重大度を設定します。 -
通知チャネルを選択し、アラートを保存します。