クラシック・クラスターへの OpenShift Data Foundation のデプロイ
OpenShift Data Foundation は、Red Hat® OpenShift® on IBM Cloud® クラスターで、コンテナー化されたワークロードの永続ストレージを管理するために使用できる高可用性ストレージ・ソリューションです。
IBM Cloud クラスターでは、OperatorHub からの OpenShift Data Foundation のインストールはサポートされていません。 ODF をインストールするには、以下の手順を実行して、クラスター・アドオンをデプロイします。
セットアップの計画
クラスターに ODF をインストールする前に、以下の前提条件が満たされていることを確認する必要があります。
OpenShift Data Foundation をクラシック・クラスターにインストールするには、アカウントで VRF を有効にする必要があります。
ocCLI の インストール または更新- アカウントで Virtual Routing and Forwarding (VRF) を有効にしていない場合は、VRF を有効にします。
- VRF を有効にしたら、 サービス・エンドポイント を有効にします。
- SDS ワーカー・ノード・フレーバーを確認します。 各都市部の表では、SDSのフレーバーはベアメタルのタブにあり、
.ssdで終わっている。 - 3 つのゾーンの各ゾーンにワーカー・ノードが 1 台以上存在するクラシック・クラスターを作成します。 ODF のために必要なローカル・ディスクを備えたフレーバー・タイプ
mb4c.32x384.3.8tb.ssdまたはmb4c.20x64.2x1.9tb.ssdのワーカー・ノードを選択します。 - クラシック・クラスターを準備します。
オプション: IBM Cloud Object Storage サービス・インスタンスのセットアップ
IBM Cloud Object Storage をストレージ・クラスターのデフォルトのバッキング・ストアとしてセットアップする場合は、IBM Cloud Object Storage のインスタンスを作成します。 その後、HMAC 資格情報のセットと、Object Storage HMAC 資格情報を使用する Kubernetes シークレットを作成します。 インストール時に IBM Cloud Object Storage の資格情報を指定しない場合、ストレージ・クラスターのデフォルトのバッキング・ストアは、クラスターの PV を使用して作成されます。 ODF のデプロイ後に追加の補助ストレージをセットアップできますが、デフォルトの補助ストレージを変更することはできません。
Red Hat OpenShift クラスターにアクセスします。
- クラスター内に
openshift-storage名前空間を作成します。 ドライバー・ポッドは、この名前空間にデプロイされます。 以下の YAML をコピーし、os-namespace.yamlという名前でローカル・マシンに保存します。apiVersion: v1 kind: Namespace metadata: labels: openshift.io/cluster-monitoring: "true" name: openshift-storage - 保存した YAML ファイルを使用して、
openshift-storage名前空間を作成します。oc create -f os-namespace.yaml - 名前空間が作成されたことを確認します。
oc get namespaces | grep storage - IBM Cloud Object Storage サービス・インスタンスを作成します。
ibmcloud resource service-instance-create noobaa-store cloud-object-storage standard global - HMAC 資格情報を作成します。 自分の資格情報を書き留めてください。
ibmcloud resource service-key-create cos-cred-rw Writer --instance-name noobaa-store --parameters '{"HMAC": true}' ibm-cloud-cos-creds名前空間に、Object Storage HMAC 資格情報を使用する Kubernete シークレットを、openshift-storageという名前で作成します。 このコマンドを実行するときには、Object Storage HMAC のアクセス・キー ID とシークレット・アクセス・キーを指定します。 シークレットの名前はibm-cloud-cos-credsにする必要があります。oc -n 'openshift-storage' create secret generic 'ibm-cloud-cos-creds' --type=Opaque --from-literal=IBM_COS_ACCESS_KEY_ID=<access_key_id> --from-literal=IBM_COS_SECRET_ACCESS_KEY=<secret_access_key>- シークレットが作成されたことを確認します。
oc get secrets -A | grep cos
オプション: Hyper Protect Crypto Services を使用した暗号化のセットアップ
暗号化をセットアップする場合は、 Hyper Protect Crypto Services または Key Protectのインスタンスを作成します。 次に、ルートキーと、 Hyper Protect Crypto Services または Key Protect の認証情報を使用する「 Kubernetes 」のシークレットを作成します。
IBM Cloudは、専用鍵管理サービスをHyper Protect Crypto ServicesからKey Protect Dedicatedに変更します。
- Hyper Protect Crypto Services または Key Protect の API キーには、少なくとも以下の権限が必要です。
ReaderReader Plus- クラスター全体の暗号化とストレージ・クラスの暗号化を使用する場合は、API キーに以下の必要な許可がなければなりません。
ReaderReader PlusWriter
-
Hyper Protect Crypto Services または Key Protect サービス・インスタンスを作成します。
-
ルート鍵の作成
-
インスタンスとルートキーを作成したら、「 Hyper Protect Crypto Services 」または「 Key Protect 」のインスタンス名、インスタンスID、ルートキーID、およびパブリックエンドポイントをメモしておいてください。
-
Hyper Protect Crypto Services と Red Hat OpenShift on IBM Cloud または Key Protect と Red Hat OpenShift on IBM Cloudのいずれかへのアクセスを許可する サービス ID、 API キー、および アクセス・ポリシー を作成します。 作成した API をメモします。
Red Hat OpenShift クラスターにアクセスします。
- 名前空間をリストして、
openshift-storage名前空間があるかどうかを判別します。openshift-storage名前空間がない場合は、作成します。oc get namespaces | grep openshift-storage- クラスター内に
openshift-storage名前空間を作成します。 ドライバー・ポッドは、この名前空間にデプロイされます。 以下の YAML をコピーし、os-namespace.yamlという名前でローカル・マシンに保存します。
apiVersion: v1 kind: Namespace metadata: labels: openshift.io/cluster-monitoring: "true" name: openshift-storage ``` 1. 保存した YAML ファイルを使用して、`openshift-storage` 名前空間を作成します。 ```sh {: pre} oc create -f os-namespace.yaml ``` 1. 名前空間が作成されたことを確認します。 ```sh {: pre} oc get namespaces | grep storage ``` - クラスター内に
- ルート鍵の ID と、base64 に対して作成したサービス ID の API キーの両方をエンコードします。
printf "ROOT-KEY-ID" | base64printf "SERVICE-ID-API-KEY" | base64 - Hyper Protect Crypto Services 資格情報を使用する
openshift-storage名前空間に Kubernetes シークレットを作成します。- 以下のシークレットを
ibm-hpcs-secret.yamlという YAML ファイルとして保存します。
apiVersion: v1 data: IBM_KP_CUSTOMER_ROOT_KEY: AaAAAaZAAAAy11AAAyAAkaAaQtAAk0AAA2AzY5AjYaaa67aa # your base64 encoded root key ID IBM_KP_SERVICE_API_KEY: AAAaaajAAAAAncmAAaaaaAAAAdAAId1AtVjBJRU1aAAaAeTh1aEw=AaaaA # your base64 encoded API kind: Secret metadata: name: ibm-hpcs-secret namespace: openshift-storage type: Opaque ``` 1. クラスター内にシークレットを作成します。 ```sh {: pre} oc apply -f ibm-hpcs-secret.yaml ``` - 以下のシークレットを
- シークレットが作成されたことを確認します。
oc get secrets -A | grep ibm-hpcs-secret
OpenShift Data Foundation をインストールするためのクラスターの準備
OpenShift Data Foundation をインストールする前に、クラスターを準備します。
Red Hat OpenShift クラスターにアクセスします。
-
oc debugコマンドを使用してクラスターの各ワーカー・ノードにログインし、以下の手順を実行します。- ワーカー・ノードにログインします。
<worker_node_IP>を、お使いのワーカーノードの名前に置き換えてください。 ワーカーノードの名前を取得するには、oc get nodesコマンドを実行してください。
oc debug node/<node name> -- chroot /host rm -rvf /var/lib/rook /mnt/local-storage ``` - ディスク・パーティションごとに、ワーカー・ノード上の`xfs`ファイル・システムをクリアします。 ファイル・システムをクリアしないと、OSD は作成されません。 ```sh {: pre} file -sL /dev/<partition> wipefs -a /dev/<partition> ``` - `/etc/kubernetes/kubelet.conf` ファイルを編集して、 `EnableControllerAttachDetach` パラメーターの値を `true` に変更します。 ```sh {: pre} nano /etc/kubernetes/kubelet.conf ``` - `ctrl + X`を使用して保存して終了します。 - kubelet を再始動します。 ```sh {: pre} systemctl restart kubelet ``` - ワーカー・ノードからログアウトします。 ```sh exit ``` - ワーカー・ノードにログインします。
-
上記のステップを繰り返して、ODF デプロイメントで使用するワーカー・ノードごとにファイル・システムをワイプします。
デバイスの詳細の取得
自動ディスク・ディスカバリーを使用して、ODF に使用可能なデバイスを見つけることができます。 ただし、ODF のストレージ・デバイスを手動で指定する場合は、以下のステップを実行してストレージ・デバイスの詳細を取得します。
ODF をインストールする前に、ワーカー・ノードのローカル・ディスクの詳細を取得します。
-
クラスターにログインし、使用可能なワーカー・ノードのリストを取得します。 OCS デプロイメントで使用するワーカー・ノードをメモします。
oc get nodes -
ODF で使用する各ワーカー・ノードにログインします。
oc debug node/<node-name> -
ワーカー・ノードにデバッグ・ポッドをデプロイした後に、以下のコマンドを実行してホストのバイナリーを許可します。
chroot /host -
ワーカー・ノードで使用可能なディスクをリスト表示します。
lsblk -
コマンド出力で使用可能なディスクを確認します。 ODF デプロイメントに使用できるのは、アンマウントされたディスクだけです。例えば、以下の例では
sdcのディスクです。 ODF デプロイメントの初期ストレージ容量は、osd-device-pathとして指定したディスクのサイズと等しくなることに注意してください。 この例では、sdcディスクはアンマウントされ、sdc1とsdc2の 2 つの使用可能なパーティションがあります。NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 931G 0 disk |-sda1 8:1 0 256M 0 part /boot |-sda2 8:2 0 1G 0 part -sda3 8:3 0 929.8G 0 part / sdb 8:16 0 744.7G 0 disk -sdb1 8:17 0 744.7G 0 part /disk1 sdc 8:32 0 744.7G 0 disk |-sdc1 8:33 0 18.6G 0 part -sdc2 8:34 0 260.8G 0 part -
デプロイメントで使用するアンマウント・ディスクごとに、ディスク ID を確認します。 以下の例では、
sdc1パーティションの ID はscsi-3600605b00d87b43027b3bc310a64c6c9-part1、sdc2パーティションの ID はscsi-3600605b00d87b43027b3bc310a64c6c9-part2です。ls -l /dev/disk/by-id/出力例
total 0 lrwxrwxrwx. 1 root root 9 Feb 9 04:15 scsi-3600605b00d87b43027b3bbb603150cc6 -> ../../sda lrwxrwxrwx. 1 root root 10 Feb 9 04:15 scsi-3600605b00d87b43027b3bbb603150cc6-part1 -> ../../sda1 lrwxrwxrwx. 1 root root 10 Feb 9 04:15 scsi-3600605b00d87b43027b3bbb603150cc6-part2 -> ../../sda2 lrwxrwxrwx. 1 root root 10 Feb 9 04:15 scsi-3600605b00d87b43027b3bbb603150cc6-part3 -> ../../sda3 lrwxrwxrwx. 1 root root 9 Feb 9 04:15 scsi-3600605b00d87b43027b3bbf306bc28a7 -> ../../sdb lrwxrwxrwx. 1 root root 10 Feb 9 04:15 scsi-3600605b00d87b43027b3bbf306bc28a7-part1 -> ../../sdb1 lrwxrwxrwx. 1 root root 9 Feb 9 04:17 scsi-3600605b00d87b43027b3bc310a64c6c9 -> ../../sdc lrwxrwxrwx. 1 root root 10 Feb 11 03:14 scsi-3600605b00d87b43027b3bc310a64c6c9-part1 -> ../../sdc1 lrwxrwxrwx. 1 root root 10 Feb 11 03:15 scsi-3600605b00d87b43027b3bc310a64c6c9-part2 -> ../../sdc2 -
OpenShift Data Foundation デプロイメントで使用するワーカー・ノードごとに上記の手順を繰り返します。
CLI からのアドオンのインストール
ibmcloud oc cluster addon enable コマンドを使用して、アドオンをインストールできます。
IBM Cloud Object Storage サービス・インスタンスをデフォルトのバッキング・ストアとして使用する場合は、サービス・インスタンスを作成したこと、また、クラスターに Kubernetes シークレットを作成したことを確認してください。 ODF の CRD をクラスターに作成すると、ODF が ibm-cloud-cos-creds という名前のシークレットを検索し、Object
Storage の HMAC 資格情報を使用してデフォルトのバッキング・ストアをセットアップします。
-
パラメーター・リファレンス を確認してください。 アドオンを有効にした場合、上書きしたい各パラメータに対して
--param "key=value"オプションを指定することで、デフォルト値を上書きすることができます。 -
アドオンを有効にする前に、変更ログで最新バージョン情報を確認してください。 アドオンは
n+1のクラスター・バージョンをサポートすることに注意してください。 たとえば、アドオンのバージョン4.10.0を、OCP 4.9 または 4.11 クラスターにデプロイすることができます。 デフォルト以外のクラスタバージョンを使用している場合は、アドオンを有効にする際に--versionオプションを指定する必要があります。- デプロイするアドオンのバージョンに対応するアドオン・オプションを確認します。
ibmcloud oc cluster addon options --addon openshift-data-foundation --version 4.15.0最高のパフォーマンスを得るには、
resourceProfileオプションをperformanceとして指定することをお勧めします。 このオプションは、展開時のリソースの可用性に基づいて、より高いパフォーマンスレベルの達成に役立ちます。 「resourceProfile」オプションの詳細については、『 Red Hat OpenShift ODF』ドキュメントの「 パフォーマンスプロファイル」 の項を参照してください。monStorageClassNameおよびosdStorageClassNameのデフォルトのストレージ・クラスは、Block Storage for VPC ストレージ・クラスであることに注意してください。4.15.0のアドオンオプションの例
Add-on Options Option Default Value osdStorageClassName ibmc-vpc-block-metro-10iops-tier ocsUpgrade false billingType advanced autoDiscoverDevices false hpcsBaseUrl <Please provide the KMS Base (public) URL> taintNodes false enableNFS false resourceProfile performance useCephRBDAsDefaultStorageClass false clusterEncryption false hpcsEncryption false hpcsSecretName <Please provide the KMS secret name> encryptionInTransit false disableNoobaaLB false osdSize 512Gi numOfOsd 1 ignoreNoobaa true addSingleReplicaPool false prepareForDisasterRecovery false workerPool - odfDeploy true osdDevicePaths <Please provide IDs of the disks to be used for OSD pods if using local disks or standard classic cluster> workerNodes all hpcsServiceName <Please provide the KMS Service instance name> hpcsInstanceId <Please provide the KMS Service instance ID> hpcsTokenUrl <Please provide the KMS token URL> -
openshift-data-foundationアドオンを有効にします。 ODFアドオンのみを展開したい場合は、"odfDeploy=false"オプションを指定できます。 デフォルトのパラメータのいずれかを上書きしたい場合は、上書きしたいパラメータごとに--param "key=value"オプションを指定してください。 アドオンを有効にするときにストレージ・クラスターを作成しない場合は、まずアドオンを有効にしてから、後で CRD を作成してストレージ・クラスターを作成することができます。アドオンを有効にし、ローカルボリュームを自動的に検出するコマンドの例、
performanceリソースプロファイルオプションを有効にするコマンドの例、および Hyper Protect Crypto Services または Key Protect による暗号化を有効にするコマンドの例。ibmcloud oc cluster addon enable openshift-data-foundation -c CLUSTER_NAME --version VERSION --param "odfDeploy=true" --param "resourceProfile=performance" --param "osdSize=250" --param "autoDiscoverDevices=true" --param "hpcsTokenUrl=https://iam.cloud.ibm.com/identity/token" --param "hpcsEncryption=true" --param "hpcsBaseUrl=HPCS_INSTANCE_PUBLIC_ENDPOINT" --param "hpcsInstanceId=HPCS_INSTANCE_ID" --param "hpcsServiceName=HPCS_INSTANCE_NAME" --param "hpcsSecretName=HPCS_SECRET_NAME" -
アドオンが
Ready状態であることを確認します。ibmcloud oc cluster addon ls -c CLUSTER_NAME -
ibm-ocs-operator-controller-manager-*****ポッドがkube-system名前空間で実行されていることを確認します。oc get pods -A | grep ibm-ocs-operator-controller-manager -
アドオンを有効にして
odfDeploy=falseオプションを設定した場合は、 ODF カスタム・リソースの作成 の手順に従います。
コンソールからの OpenShift Data Foundation アドオンのインストール
クラスターに ODF をインストールするには、以下の手順を実行します。
バージョン 4.11 は現在、新しいクラスタでのみ利用可能です。 4.10 の配置を 4.11 にアップグレードすることはできません。 ただし、ODFのバージョン 4.10。
- アドオンを有効にする前に、変更ログで最新バージョン情報を確認してください。 アドオンは
n+1のクラスター・バージョンをサポートすることに注意してください。 - パラメーター・リファレンスを確認します。
- コンソールから、アドオンをインストールするクラスターを選択してください。
- 「 OpenShift Data Foundation」カードで、「 インストール 」をクリックします。 **「ODF のインストール (Install ODF)」**パネルが開きます。
- **「ODF のインストール (Install ODF)」**パネルで、ODF デプロイメントに使用する構成パラメーターを入力します。
- 請求プランとして**「基本」または「拡張」**を選択します。
- クラシック・クラスターの場合、ワーカー・ノード上のローカル・ボリュームを使用するには、**「ローカル・ストレージ」**を選択します。
- ワーカー・ノード上の使用可能なストレージ・デバイスを自動的にディスカバーして ODF で使用する場合は、**「ローカル・ディスク・ディスカバリー」**を選択します。
- ODF で使用するワーカー・ノード上のストレージ・デバイスを手動で指定する場合は、使用するディスク ID のコンマ区切りリストを入力します。 これらのディスク ID を確認するには、デバイス詳細の収集を参照してください。
- **「ワーカー・ノード」**フィールドに、ODF をデプロイするワーカー・ノードのノード名を入力します。 少なくとも 3 つのワーカー・ノード名を入力する必要があります。 ノード名を確認するには、クラスターで
oc get nodesコマンドを実行します。 すべてのワーカー・ノードに ODF をデプロイする場合は、このフィールドをブランクのままにします。 Node の名前は、名前の間にスペースを入れずにコンマで区切る必要があります。 例えば、10.240.0.24,10.240.0.26,10.240.0.25などです。 - **「必要な OSD ディスクの数」**フィールドに、各ワーカー・ノードにプロビジョンする OSD ディスク (アプリ・ストレージ) の数を入力します。
- アドオンを再度有効にしてアドオンのバージョンをアップグレードする場合は、**「ODF のアップグレード」**オプションを選択します。
- ODF システム・ポッドによって使用されるボリュームを暗号化する場合は、**「クラスター暗号化の有効化」**を選択します。
- OSD ボリューム (アプリ・ストレージ) で暗号化を有効にする場合は、**「ボリューム暗号化の有効化」**を選択します。
- [ インスタンス名 ] フィールドに、 Hyper Protect Crypto Services または Key Protect のインスタンス名を入力してください。 例:
Hyper-Protect-Crypto-Services-eugb。 - [ インスタンス ID ] フィールドに、 Hyper Protect Crypto Services または Key Protect のインスタンス ID を入力してください。 例:
d11a1a43-aa0a-40a3-aaa9-5aaa63147aaa。 - 「 シークレット名 」フィールドに、 Hyper Protect Crypto Services または Key Protect の認証情報を使用して作成したシークレットの名前を入力してください。 例:
ibm-hpcs-secret。 - [ Base URL ] フィールドに、 Hyper Protect Crypto Services または Key Protect インスタンスのパブリックエンドポイントを入力してください。 例:
https://api.eu-gb.hs-crypto.cloud.ibm.com:8389。 - **「トークン URL」**フィールドに、
https://iam.cloud.ibm.com/identity/tokenを入力します。
- [ インスタンス名 ] フィールドに、 Hyper Protect Crypto Services または Key Protect のインスタンス名を入力してください。 例:
ストレージ・クラスターの作成
クラシック・クラスターに ODF をデプロイするには、ストレージ・デバイスの詳細を指定するカスタム・リソース定義を作成します。
IBM Cloud Object Storage サービス・インスタンスをデフォルトのバッキング・ストアとして使用する場合は、サービス・インスタンスを作成したこと、また、クラスターに Kubernetes シークレットを作成したことを確認してください。 ODF の CRD をクラスターに作成すると、ODF が ibm-cloud-cos-creds という名前のシークレットを検索し、Object
Storage の HMAC 資格情報を使用してデフォルトのバッキング・ストアをセットアップします。
-
OcsClusterという名前のカスタム・リソースを作成します。 以下のカスタム・リソース定義を保存して編集し、事前に取得しておいたローカル・ディスクのデバイス・パスを指定します。 オプションのworkerNodesパラメーターを指定しない場合は、クラスターのすべてのワーカー・ノードが ODF デプロイメントに使用されます。 ストレージ・デバイスを指定するときには、必ず/dev/disk/by-id/パスを含めてください。- ワーカー・ノードにパーティションを持つロー・ディスクがある場合、各ワーカー・ノードで、OSD 用に 1 つのパーティションおよび MON 用に 1 つのパーティションが必要です。 ベスト・プラクティスとしては、パーティション化されたディスクのストレージ容量を最大限に利用するために、小さいほうのパーティションまたはディスクを MON 用に指定し、大きいほうのパーティションまたはディスクを OSD 用に指定します。 ODF 構成の初期ストレージ容量は、構成の作成時に
osd-device-pathとして指定したディスクのサイズと等しくなることに注意してください。 - デバイスがパーティション化されていない場合は、使用する各ワーカー・ノードで、MON 用に 1 つ、OSD 用に 1 つのロー・ディスクを指定する必要があります。
自動ディスク・ディスカバリーを使用してバージョン 4.8 クラスター内のすべてのワーカー・ノードに ODF をインストールするためのカスタム・リソースの例です。
apiVersion: ocs.ibm.io/v1 kind: OcsCluster metadata: name: ocscluster-classic spec: osdStorageClassName: localblock osdSize: "1" autoDiscoverDevices: trueパーティション・ディスクを使用するバージョン 4.8 クラスターのすべてのワーカー・ノードに ODF をインストールするためのカスタム・リソースの例です。
apiVersion: ocs.ibm.io/v1 kind: OcsCluster metadata: name: ocscluster # Kubernetes resource names can't contain capital letters or special characters. Specify a name for your resource that uses only lowercase letters, numbers, `-` or `.` spec: osdStorageClassName: localblock osdSize: "1" numOfOsd: 1 billingType: advanced ocsUpgrade: false osdDevicePaths: - <device-by-id> # Example: /dev/disk/by-id/scsi-0000000a00a00a00000a0aa000a00a0a0-part2 - <device-by-id> # Example: /dev/disk/by-id/scsi-1111111a11a11a11111a1aa111a11a1a1-part2 - <device-by-id> # Example: dev/disk/by-id/scsi-2222222a22a22a22222a2aa222a22a2a2-part2 - ワーカー・ノードにパーティションを持つロー・ディスクがある場合、各ワーカー・ノードで、OSD 用に 1 つのパーティションおよび MON 用に 1 つのパーティションが必要です。 ベスト・プラクティスとしては、パーティション化されたディスクのストレージ容量を最大限に利用するために、小さいほうのパーティションまたはディスクを MON 用に指定し、大きいほうのパーティションまたはディスクを OSD 用に指定します。 ODF 構成の初期ストレージ容量は、構成の作成時に
-
ファイルを保存し、クラスターに
OcsClusterカスタム・リソースを作成します。oc create -f <ocs_cluster_filename> -
OcsClusterカスタム・リソースが実行中であることを確認します。oc describe OcsCluster ocscluster
制限
ibmcloud-block-storage-plugin アドオンと ODF アドオンの両方を同時に使用することはできません。 ODF をインストールするには、まず /etc/kubernetes/kubelet.conf ファイルを編集し、 EnableControllerAttachDetach パラメーターの値を true に変更する必要があります。これにより、クラスターのデフォルトのボリューム接続動作が変更されます。
つまり、 ibmc-block-* ストレージ・クラスを使用してボリュームを動的にプロビジョニングすることはできません。 代わりに、 ODF ストレージ・クラス を使用してボリュームを作成する必要があります。