6.11. Azure File CSI Driver Operator
6.11.1. 概要 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform は、Microsoft Azure File Storage の Container Storage Interface (CSI) ドライバーを使用して、永続ボリューム (PV) をプロビジョニングできます。
CSI Operator およびドライバーを使用する場合は、永続ストレージ および CSI ボリュームの設定 を理解しておくことが推奨されます。
Azure File ストレージアセットにマウントする CSI でプロビジョニングされた永続ボリューム (PV) を作成するには、OpenShift Container Platform は、デフォルトで Azure File CSI Driver Operator および Azure File CSI ドライバーを openshift-cluster-csi-drivers
namespace にインストールします。
-
Azure File CSI Driver Operator: 永続ボリューム要求 (PVC) の作成に使用できる
azurefile-csi
というストレージクラスを提供します。必要に応じて、このデフォルトのストレージクラスを無効にできます (デフォルトストレージクラスの管理 を参照)。 - Azure File CSI ドライバー を使用すると、Azure File PV を作成し、マウントできます。Azure File CSI ドライバーは、ストレージボリュームをオンデマンドで作成できるようにし、クラスター管理者がストレージを事前にプロビジョニングする必要がなくすことで、動的ボリュームのプロビジョニングをサポートします。
Azure File CSI Driver Operator は以下をサポートしません。
- 仮想ハードディスク (VHD)
- Server Message Block (SMB) ファイル共有に対して連邦情報処理標準 (FIPS) モードが有効になっているノードで実行。ただし、Network File System (NFS) は FIPS モードをサポートします。
サポートされる機能の詳細は、サポートされる CSI ドライバーおよび機能 を参照してください。
6.11.2. CSI について リンクのコピーリンクがクリップボードにコピーされました!
ストレージベンダーはこれまで Kubernetes の一部としてストレージドライバーを提供してきました。Container Storage Interface (CSI) の実装では、サードパーティーのプロバイダーは、コア Kubernetes コードを変更せずに標準のインターフェイスを使用してストレージプラグインを提供できます。
CSI Operator は、インツリーボリュームプラグインでは不可能なボリュームスナップショットなどのストレージオプションを OpenShift Container Platform ユーザーに付与します。
6.11.3. NFS のサポート リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform 4.14 以降では、Network File System (NFS) を備えた Azure File Container Storage Interface (CSI) Driver Operator がサポートされていますが、次の注意事項があります。
コントロールプレーンノードにスケジュールされている Azure File NFS ボリュームを含む Pod を作成すると、マウントが拒否されます。
この問題を回避するには、コントロールプレーンノードがスケジュール可能で、Pod がワーカーノードで実行できる場合は、
nodeSelector
または Affinity を使用してワーカーノードで Pod をスケジュールします。FS グループポリシーの動作:
重要NFS を使用した Azure File CSI は、Pod によって要求された fsGroupChangePolicy を受け入れません。NFS を使用した Azure File CSI は、Pod によって要求されたポリシーに関係なく、デフォルトの OnRootMismatch FS グループポリシーを適用します。
Azure File CSI Operator は、NFS のストレージクラスを自動的に作成しません。手動で作成する必要があります。次のようなファイルを使用します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.11.4. Azure File のクロスサブスクリプションサポート リンクのコピーリンクがクリップボードにコピーされました!
クロスサブスクリプションサポートにより、1 つの Azure サブスクリプションに OpenShift Container Platform クラスターを配置し、Azure File Container Storage Interface (CSI) ドライバーを使用して、別の Azure サブスクリプションに Azure ファイル共有をマウントできるようになります。
OpenShift Container Platform クラスターと Azure File 共有 (プロビジョニング済みまたはプロビジョニング予定) は両方とも同じテナント内にある必要があります。
6.11.4.1. Azure File のサブスクリプション間での動的プロビジョニング リンクのコピーリンクがクリップボードにコピーされました!
前提条件
- 1 つのサブスクリプション (サブスクリプション A とします) で、サービスプリンシパルまたはマネージドアイデンティティーを Azure アイデンティティーとして使用して、Azure に OpenShift Container Platform クラスターをインストールした。
- クラスターと同じテナント内にあるストレージを持つ別のサブスクリプション (Subscription B とする) へのアクセス
- Azure CLI にログイン済み
手順
サブスクリプション間で Azure File の動的プロビジョニングを使用するには、以下を実行します。
以下から該当するコマンドを実行して、Azure アイデンティティー (サービスプリンシパルまたはマネージドアイデンティティー) を記録します。Azure アイデンティティーは後の手順で必要になります。
クラスターのインストール時に サービスプリンシパル を Azure アイデンティティーとして使用する場合は、以下を実行します。
sp_id=$(oc -n openshift-cluster-csi-drivers get secret azure-file-credentials -o jsonpath='{.data.azure_client_id}' | base64 --decode) az ad sp show --id ${sp_id} --query displayName --output tsv
$ sp_id=$(oc -n openshift-cluster-csi-drivers get secret azure-file-credentials -o jsonpath='{.data.azure_client_id}' | base64 --decode) $ az ad sp show --id ${sp_id} --query displayName --output tsv
Copy to Clipboard Copied! Toggle word wrap Toggle overflow クラスターのインストール時に マネージドアイデンティティー を Azure アイデンティティーとして使用する場合は、以下を実行します。
mi_id=$(oc -n openshift-cluster-csi-drivers get secret azure-file-credentials -o jsonpath='{.data.azure_client_id}' | base64 --decode) az identity list --query "[?clientId=='${mi_id}'].{Name:name}" --output tsv
$ mi_id=$(oc -n openshift-cluster-csi-drivers get secret azure-file-credentials -o jsonpath='{.data.azure_client_id}' | base64 --decode) $ az identity list --query "[?clientId=='${mi_id}'].{Name:name}" --output tsv
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次のいずれかの方法で、Azure File 共有のプロビジョニング先である Subscription B 内のリソースグループにアクセスするためのアクセスパーミッションを Azure アイデンティティー (サービスプリンシパルまたはマネージドアイデンティティー) に付与します。
次の Azure CLI コマンドを実行します。
az role assignment create \ --assignee <object-id-or-app-id> \ --role <role-name> \ --scope /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account-name>
az role assignment create \ --assignee <object-id-or-app-id> \ --role <role-name> \ --scope /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account-name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
<object-id-or-app-id>
: 前の手順で取得したサービスプリンシパルまたはマネージドアイデンティティー (sp_id
またはmi_id
)。<role-name>
: ロール名。コントリビューター、または必要なパーミッションを持つ独自のロール。<subscription-id>
: Subscription B の ID。<resource-group-name>
: Subscription B のリソースグループ名。または、以下を実行します。
Azure ポータルにログインし、左側のメニューで Resource groups をクリックします。
-
Subscription B で、ロールを割り当てるリソースグループを選択します。そのためには、resource group
Access control (IAM) Role assignments タブをクリックして現在の割り当てを表示し、Add > Add role assignment をクリックします。 - Role タブで、割り当てるコントリビューターロールを選択し、Next をクリックします。必要なパーミッションを持つ独自のロールを作成し、それを選択することもできます。
Members タブで次の操作を行います。
- 割り当て先のタイプ (ユーザー、グループ、サービスプリンシパル (またはマネージドアイデンティティー)) を選択して、割り当て先を選択します。
- Select members をクリックします。
- 前の手順で記録したサービスプリンシパルまたはマネージドアイデンティティーを検索して選択します。
- Select をクリックして確定します。
- Review + assign タブで設定を確認します。
Review + assign をクリックしてロールの割り当てを完了します。
注記特定のストレージアカウントのみを使用して Azure File 共有をプロビジョニングする場合は、同様の手順で、ストレージアカウントにアクセスするための Azure アイデンティティー (サービスプリンシパルまたはマネージドアイデンティティー) のアクセス権を取得することもできます。
-
Subscription B で、ロールを割り当てるリソースグループを選択します。そのためには、resource group
次のような設定を使用して、Azure File ストレージクラスを作成します。
Azure File ストレージクラスの YAML ファイルの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のような設定を使用して、前の手順で作成した Azure File ストレージクラスを指定する永続ボリューム要求 (PVC) を作成します。
PVC YAML ファイルの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.11.4.2. PV と PVC を作成して、Azure File のサブスクリプション間で静的にプロビジョニングする場合: リンクのコピーリンクがクリップボードにコピーされました!
前提条件
- 1 つのサブスクリプション (サブスクリプション A とします) で、サービスプリンシパルまたはマネージドアイデンティティーを Azure アイデンティティーとして使用して、Azure に OpenShift Container Platform クラスターをインストールした。
- クラスターと同じテナント内にあるストレージを持つ別のサブスクリプション (Subscription B とする) へのアクセス
- Azure CLI にログイン済み
手順
- Azure File 共有のリソースグループ、ストレージアカウント、ストレージアカウントキー、Azure File 名を記録します。これらの値は次のステップで使用されます。
次のコマンドを実行して、永続ボリュームパラメーター
spec.csi.nodeStageSecretRef.name
のシークレットを作成します。oc create secret generic azure-storage-account-<storageaccount-name>-secret --from-literal=azurestorageaccountname="<azure-storage-account-name>" --from-literal azurestorageaccountkey="<azure-storage-account-key>" --type=Opaque
$ oc create secret generic azure-storage-account-<storageaccount-name>-secret --from-literal=azurestorageaccountname="<azure-storage-account-name>" --from-literal azurestorageaccountkey="<azure-storage-account-key>" --type=Opaque
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この場合の
<azure-storage-account-name>
と<azure-storage-account-key>
は、ステップ 1 でそれぞれ記録した Azure ストレージアカウントの名前とキーです。次のサンプルファイルと同様の設定を使用して、永続ボリューム (PV) を作成します。
PV YAML ファイルの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のような設定を使用して、ステップ 1 で参照された既存の Azure File 共有を指定する永続値要求 (PVC) を作成します。
PVC YAML ファイルの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
ストレージクラスの使用を推奨
前述のサブスクリプション間の静的プロビジョニング例では、静的プロビジョニングを達成するためにストレージクラスは必要ないため、PV および PVC で参照されるストレージクラスは厳密には必要ありません。しかし、手動で作成された PVC が手動で作成された PV と意図せず一致しないために、新しい PV の動的プロビジョニングがトリガーされる可能性を回避するために、ストレージクラスを使用することが推奨されます。この問題の別の回避方法としては、provisioner: kubernetes.io/no-provisioner
を使用してストレージクラスを作成するか、存在しないストレージクラスを参照できます。どちらの場合も、動的プロビジョニングは確実に実行されません。これらのストラテジーのいずれかを使用する場合、PV と PVC の不一致が発生すると PVC は保留状態のままになるため、エラーを修正できます。
6.11.5. Azure File の静的プロビジョニング リンクのコピーリンクがクリップボードにコピーされました!
静的プロビジョニングの場合、クラスター管理者は、実際のストレージの詳細を定義する永続ボリューム (PV) を作成します。その後、クラスターユーザーは、これらの PV を消費する永続ボリューム要求 (PVC) を作成できます。
前提条件
- 管理者権限を持つ OpenShift Container Platform クラスターへのアクセス
手順
Azure File の静的プロビジョニングを使用する場合:
Azure ストレージアカウントのシークレットをまだ作成していない場合は、ここで作成します。
このシークレットには、次の 2 つのキーと値のペアを含む非常に特殊な形式の Azure ストレージアカウント名とキーが含まれている必要があります。
-
azurestorageaccountname
: <storage_account_name> azurestorageaccountkey
: <account_key>azure-secret という名前のシークレットを作成するには、次のコマンドを実行します。
oc create secret generic azure-secret -n <namespace_name> --type=Opaque --from-literal=azurestorageaccountname="<storage_account_name>" --from-literal=azurestorageaccountkey="<account_key>"
oc create secret generic azure-secret -n <namespace_name> --type=Opaque --from-literal=azurestorageaccountname="<storage_account_name>" --from-literal=azurestorageaccountkey="<account_key>"
1 2 Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
次の YAML サンプルファイルを使用して PV を作成します。
PV YAML ファイルの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ボリュームサイズ:
- 2
- アクセスモード: 読み取り/書き込みおよびマウントパーミッションを定義します。詳細は、関連情報 の アクセスモード を参照してください。
- 3
- 回収ポリシー: ボリュームが解放された後にボリュームをどのように処理するかをクラスターに指示します。受け入れられる値は、
Retain
、Recycle
、またはDelete
です。 - 4
- ストレージクラス名: この名前は、この特定の PV にバインドするために PVC によって使用されます。静的プロビジョニングの場合、
StorageClass
オブジェクトが存在する必要はありませんが、PV と PVC 内の名前は一致する必要があります。 - 5
- セキュリティーを強化したい場合は、このパーミッションを変更してください。
- 6
- キャッシュモード: 受け入れられる値は
none
、strict
、loose
です。デフォルトはstrict
です。 - 7
- 再接続時の競合が発生する確率を低減させるために使用します。
- 8
- CIFS クライアントがサーバーから属性情報を要求する前に、ファイルまたはディレクトリーの属性をキャッシュする時間 (秒単位)。
- 9
- サーバーへのバイト範囲ロック要求の送信を無効化し、POSIX ロックの扱いに課題を持つアプリケーションに対応します。
- 10
volumeHandle
がクラスター全体で一意であることを確認します。resource-group-name
は、ストレージアカウントが存在する Azure リソースグループです。- 11
- ファイル共有名: ファイル共有名のみを使用し、フルパスは使用しないでください。
- 12
- この手順のステップ 1 で作成したシークレットの名前を指定します。この例では、azure-secret です。
- 13
- シークレットが作成された namespace: これは、PV が消費される namespace である必要があります。
次のサンプルファイルを使用して、PV を参照する PVC を作成します。
PVC YAML ファイルの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- PVC の名前。
- 2
- PVC の namespace。
- 3
- 前のステップで作成した PV の名前。
- 4
- ストレージクラス名: この名前は、この特定の PV にバインドするために PVC によって使用されます。静的プロビジョニングの場合、
StorageClass
オブジェクトが存在する必要はありませんが、PV と PVC 内の名前は一致する必要があります。 - 5
- アクセスモード: PVC に対して要求された読み取り/書き込みアクセスを定義します。要求は、特定のアクセスモードのストレージを要求する際にボリュームと同じ規則を使用します。詳細は、関連情報 の アクセスモード を参照してください。
- 6
- PVC サイズ。
次のコマンドを実行して、PVC が作成され、しばらくしてから
Bound
ステータスになっていることを確認します。oc get pvc <pvc-name>
$ oc get pvc <pvc-name>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- PVC の名前。
出力例
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pvc-name Bound pv-azurefile 5Gi ReadWriteMany my-sc 7m2s
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pvc-name Bound pv-azurefile 5Gi ReadWriteMany my-sc 7m2s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow