5.21. CIFS/SMB CSI Driver Operator
OpenShift Container Platform は、Common Internet File System (CIFS) ダイアレクト/Server Message Block (SMB) プロトコル用の Container Storage Interface (CSI) ドライバーを使用して永続ボリューム (PV) をプロビジョニングできます。
CIFS/SMB CSI Driver Operator は、テクノロジープレビュー機能としてのみ提供されます。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
CSI Operator およびドライバーを使用する場合は、永続ストレージ および CSI ボリュームの設定 を理解しておくことが推奨されます。
CIFS/SMB CSI Driver Operator をインストールした後、OpenShift Container Platform は、Operator とドライバーに対応する Pod をデフォルトで openshift-cluster-csi-drivers
namespace にインストールします。これにより、CIFS/SMB CSI ドライバーは、CIFS/SMB 共有にマウントされる CSI プロビジョニングされた永続ボリューム (PV) を作成できるようになります。
-
CIFS/SMB CSI Driver Operator をインストールしても、永続ボリューム要求 (PVC) の作成に使用するストレージクラスがデフォルトで作成されません。ただし、動的プロビジョニング用の CIFS/SMB
StorageClass
を手動で作成できます。CIFS/SMB CSI Driver Operator は、ストレージボリュームをオンデマンドで作成できるようにすることで、動的なボリュームプロビジョニングをサポートします。クラスター管理者がストレージを事前にプロビジョニングする必要がなくすことで、動的ボリュームのプロビジョニングをサポートします。 - CIFS/SMB CSI ドライバー を使用すると、CIFS/SMB PV の作成およびマウントが可能です。
5.21.1. CSI について
ストレージベンダーはこれまで Kubernetes の一部としてストレージドライバーを提供してきました。Container Storage Interface (CSI) の実装では、サードパーティーのプロバイダーは、コア Kubernetes コードを変更せずに標準のインターフェイスを使用してストレージプラグインを提供できます。
CSI Operator は、インツリーボリュームプラグインでは不可能なボリュームスナップショットなどのストレージオプションを OpenShift Container Platform ユーザーに付与します。
5.21.2. 制限
次の制限は、Common Internet File System (CIFS)/Server Message Block (SMB) Container Storage Interface (CSI) Driver Operator に適用されます。
FIPS モードはサポートされていません。
Federal Information Processing Standards (FIPS) モードが有効になっている場合、md4 および md5 の使用は無効になり、ユーザーは ntlm、ntlmv2、または ntlmssp 認証を使用できなくなります。また、署名は md5 を使用しているため、使用できません。FIPS モードが有効になっていると、これらのメソッドを使用する CIFS マウントは失敗します。
HTTP プロキシー設定を使用してクラスター SMB サーバーの外部に接続することは、CSI ドライバーではサポートされていません。
CIFS/SMB は LAN プロトコルであり、サブネットにルーティングすることはできますが、WAN 経由で拡張するようには設計されておらず、HTTP プロキシー設定はサポートされていません。
5.21.3. CIFS/SMB CSI Driver Operator のインストール
CIFS/SMB CSI Driver Operator (Red Hat Operator) は、デフォルトでは OpenShift Container Platform にインストールされません。以下の手順を使用して、クラスター内で CIFS/SMB CSI Driver Operator をインストールおよび設定します。
前提条件
- OpenShift Container Platform Web コンソールにアクセスできる。
手順
Web コンソールから CIFS/SMB CSI Driver Operator をインストールするには、以下を実行します。
- Web コンソールにログインします。
CIFS/SMB CSI Operator をインストールします。
-
Operators
OperatorHub をクリックします。 - フィルターボックスに CIFS/SMB CSI と入力して、CIFS/SMB CSI Operator を見つけます。
- CIFS/SMB CSI Driver Operator ボタンをクリックします。
- CIFS/SMB CSI Driver Operator ページで、Install をクリックします。
Install Operator のページで、以下のことを確認してください。
- All namespaces on the cluster (default) が選択されている。
- Installed Namespace が openshift-cluster-csi-drivers に設定されている。
Install をクリックします。
インストールが終了すると、CIFS/SMB CSI Operator が Web コンソールの Installed Operators に表示されます。
-
Operators
5.21.4. CIFS/SMB CSI ドライバーのインストール
CIFS/SMBContainer Storage Interface (CSI) ドライバー Operator をインストールした後、CIFS/SMB CSI ドライバーをインストールします。
前提条件
- OpenShift Container Platform Web コンソールにアクセスできる。
- CIFS/SMB CSI Driver Operator がインストールされている。
手順
-
Administration
CustomResourceDefinitions ClusterCSIDriver をクリックします。 - Instances タブで Create ClusterCSIDriver をクリックします。
以下の YAML ファイルを使用します。
apiVersion: operator.openshift.io/v1 kind: ClusterCSIDriver metadata: name: smb.csi.k8s.io spec: managementState: Managed
- Create をクリックします。
以下の条件が "True" に変わるのを待ちます。
-
SambaDriverControllerServiceControllerAvailable
-
SambaDriverNodeServiceControllerAvailable
-
5.21.5. 動的プロビジョニング
Common Internet File System (CIFS) ダイアレクト/Server Message Block (SMB) プロトコルボリュームの動的プロビジョニング用のストレージクラスを作成できます。ボリュームをプロビジョニングすると、ストレージクラスで定義された source
の下に永続ボリューム (PV) 名を持つサブディレクトリーが作成されます。
前提条件
- CIFS/SMB CSI Driver Operator およびドライバーがインストールされている。
- 実行中の OpenShift Container Platform クラスターにログインしている。
SMB サーバーをインストールしており、サーバーに関する次の情報を把握している。
- Hostname
- 共有名
- ユーザー名およびパスワード
手順
動的プロビジョニングを設定するには、以下を行います。
以下のコマンドと次のサンプル YAML ファイルを使用して、Samba サーバーにアクセスするためのシークレットを作成します。
$ oc create -f <file_name>.yaml
シークレット YAML ファイルの例
apiVersion: v1 kind: Secret metadata: name: smbcreds 1 namespace: samba-server 2 stringData: username: <username> 3 password: <password> 4
次のサンプル YAML ファイルを使用して次のコマンドを実行して、ストレージクラスを作成します。
$ oc create -f <sc_file_name>.yaml 1
- 1
- ストレージクラス YAML ファイルの名前。
ストレージクラスのサンプル YAML ファイル
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: <sc_name> 1 provisioner: smb.csi.k8s.io parameters: source: //<hostname>/<shares> 2 csi.storage.k8s.io/provisioner-secret-name: smbcreds 3 csi.storage.k8s.io/provisioner-secret-namespace: samba-server 4 csi.storage.k8s.io/node-stage-secret-name: smbcreds 5 csi.storage.k8s.io/node-stage-secret-namespace: samba-server 6 reclaimPolicy: Delete volumeBindingMode: Immediate mountOptions: - dir_mode=0777 - file_mode=0777 - uid=1001 - gid=1001
PVC を作成します。
次のサンプル YAML ファイルを使用して次のコマンドを実行し、PVC を作成します。
$ oc create -f <pv_file_name>.yaml 1
- 1
- PVC YAML ファイルの名前。
PVC YAML ファイルの例
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: <pvc_name> 1 spec: accessModes: - ReadWriteMany resources: requests: storage: <storage_amount> 2 storageClassName: <sc_name> 3
次のコマンドを実行して、PVC が作成され、"バインド" ステータスになっていることを確認します。
$ oc describe pvc <pvc_name> 1
- 1
- 前の手順で作成した PVC の名前。
出力例
Name: pvc-test Namespace: default StorageClass: samba Status: Bound 1 ...
- 1
- PVC のステータスは Bound です。
5.21.6. 静的プロビジョニング
静的プロビジョニングを使用して、永続ボリューム (PV) と永続ボリューム要求 (PVC) を作成し、既存のサーバーメッセージブロックプロトコル (SMB) 共有を使用することができます。
前提条件
- OpenShift Container Platform Web コンソールにアクセスできる。
- CIFS/SMB CSI Driver Operator およびドライバーがインストールされている。
SMB サーバーをインストールしており、サーバーに関する次の情報を把握している。
- Hostname
- 共有名
- ユーザー名およびパスワード
手順
静的プロビジョニングを設定するには以下を実行します。
以下のコマンドと次のサンプル YAML ファイルを使用して、Samba サーバーにアクセスするためのシークレットを作成します。
$ oc create -f <file_name>.yaml
シークレット YAML ファイルの例
apiVersion: v1 kind: Secret metadata: name: smbcreds 1 namespace: samba-server 2 stringData: username: <username> 3 password: <password> 4
次のサンプル YAML ファイルを使用して次のコマンドを実行し、PV を作成します。
$ oc create -f <pv_file_name>.yaml 1
- 1
- PV YAML ファイルの名前。
PV YAML ファイルの例
apiVersion: v1 kind: PersistentVolume metadata: annotations: pv.kubernetes.io/provisioned-by: smb.csi.k8s.io name: <pv_name> 1 spec: capacity: storage: 100Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain storageClassName: "" mountOptions: - dir_mode=0777 - file_mode=0777 csi: driver: smb.csi.k8s.io volumeHandle: smb-server.default.svc.cluster.local/share/ 2 volumeAttributes: source: //<hostname>/<shares> 3 nodeStageSecretRef: name: <secret_name_shares> 4 namespace: <namespace> 5
PVC を作成します。
次のサンプル YAML ファイルを使用して次のコマンドを実行し、PVC を作成します。
$ oc create -f <pv_file_name>.yaml 1
- 1
- PVC YAML ファイルの名前。
PVC YAML ファイルの例
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: <pvc_name> 1 spec: accessModes: - ReadWriteMany resources: requests: storage: <storage_amount> 2 storageClassName: "" volumeName: <pv_name> 3
次のコマンドを実行して、PVC が作成され、"バインド" ステータスになっていることを確認します。
$ oc describe pvc <pvc_name> 1
- 1
- 前の手順で作成した PVC の名前。
出力例
Name: pvc-test Namespace: default StorageClass: Status: Bound 1 ...
- 1
- PVC のステータスは Bound です。
次のサンプル YAML ファイルを使用して次のコマンドを実行し、Linux 上にデプロイメントを作成します。
注記前の手順で作成した PV と PVC を使用する場合、次のデプロイメントは必須ではありません。これらはどのように使用できるかの例です。
$ oc create -f <deployment_file_name>.yaml 1
- 1
- デプロイメント YAML ファイルの名前。
デプロイメント YAML ファイルの例
apiVersion: apps/v1 kind: Deployment metadata: labels: app: nginx name: <deployment_name> 1 spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx name: <deployment_name> 2 spec: nodeSelector: "kubernetes.io/os": linux containers: - name: <deployment_name> 3 image: quay.io/centos/centos:stream8 command: - "/bin/bash" - "-c" - set -euo pipefail; while true; do echo $(date) >> <mount_path>/outfile; sleep 1; done 4 volumeMounts: - name: <vol_mount_name> 5 mountPath: <mount_path> 6 readOnly: false volumes: - name: <vol_mount_name> 7 persistentVolumeClaim: claimName: <pvc_name> 8 strategy: rollingUpdate: maxSurge: 0 maxUnavailable: 1 type: RollingUpdate
コンテナーで
df -h
コマンドを実行して、設定を確認します。$ oc exec -it <pod_name> -- df -h 1
- 1
- Pod の名前。
出力例
Filesystem Size Used Avail Use% Mounted on ... /dev/sda1 97G 21G 77G 22% /etc/hosts //20.43.191.64/share 97G 21G 77G 22% /mnt/smb ...
この例では、Common Internet File System (CIFS) ファイルシステムとしてマウントされた
/mnt/smb
ディレクトリーがあります。