5.10. Azure Disk CSI Driver Operator
5.10.1. 概要
OpenShift Container Platform は、Microsoft Azure Disk Storage の Container Storage Interface (CSI) ドライバーを使用して永続ボリューム (PV) をプロビジョニングできます。
CSI Operator およびドライバーを使用する場合は、永続ストレージ および CSI ボリュームの設定 を理解しておくことが推奨されます。
Azure Disk ストレージアセットにマウントする CSI でプロビジョニングされた永続ボリューム (PV) を作成するには、OpenShift Container Platform は、デフォルトで Azure Disk CSI Driver Operator および Azure Disk CSI ドライバーを openshift-cluster-csi-drivers
namespace にインストールします。
-
Azure Disk CSI Driver Operator: 永続ボリューム要求 (PVC) の作成に使用できる
managed-csi
というストレージクラスを提供します。Azure Disk CSI ドライバー Operator は、ストレージボリュームをオンデマンドで作成できるようにし、クラスター管理者がストレージを事前にプロビジョニングする必要がなくすことで、動的ボリュームのプロビジョニングをサポートします。 - Azure Disk CSI ドライバー を使用すると、Azure Disk PV を作成し、マウントできます。
5.10.2. CSI について
ストレージベンダーはこれまで Kubernetes の一部としてストレージドライバーを提供してきました。Container Storage Interface (CSI) の実装では、サードパーティーのプロバイダーは、コア Kubernetes コードを変更せずに標準のインターフェイスを使用してストレージプラグインを提供できます。
CSI Operator は、インツリーボリュームプラグインでは不可能なボリュームスナップショットなどのストレージオプションを OpenShift Container Platform ユーザーに付与します。
OpenShift Container Platform は、Azure Disk インツリーボリュームプラグインを同等の CSI ドライバーに自動的に移行します。詳細は、CSI 自動移行を参照してください。
5.10.3. ストレージアカウントタイプを使用したストレージクラスの作成
ストレージクラスを使用すると、ストレージのレベルや使用状況を区別し、記述することができます。ストレージクラスを定義することで、動的にプロビジョニングされた永続ボリュームを取得できます。
ストレージクラスを作成するときに、ストレージアカウントの種類を指定できます。これは、Azure ストレージアカウントの SKU の層に対応します。有効なオプションは、Standard_LRS
、Premium_LRS
、StandardSSD_LRS
、UltraSSD_LRS
、Premium_ZRS
、および StandardSSD_ZRS
です。Azure SKU レベルを見つける方法は、SKU Types を参照してください。
ZRS には、リージョン制限があります。これらの制限については、ZRS の制限 を参照してください。
前提条件
- 管理者権限を持つ OpenShift Container Platform クラスターへのアクセス
手順
次の手順を使用して、ストレージアカウントの種類でストレージクラスを作成します。
次のような YAML ファイルを使用して、ストレージアカウントの種類を指定するストレージクラスを作成します。
$ oc create -f - << EOF apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: <storage-class> 1 provisioner: disk.csi.azure.com parameters: skuName: <storage-class-account-type> 2 reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true EOF
ストレージクラスを一覧表示して、ストレージクラスが作成されたことを確認します。
$ oc get storageclass
出力例
$ oc get storageclass NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE azurefile-csi file.csi.azure.com Delete Immediate true 68m managed-csi (default) disk.csi.azure.com Delete WaitForFirstConsumer true 68m sc-prem-zrs disk.csi.azure.com Delete WaitForFirstConsumer true 4m25s 1
- 1
- ストレージアカウントタイプを使用する新しいストレージクラス。
5.10.4. PVC を使用して Ultra ディスクと共にマシンをデプロイするマシンセット
Ultra ディスクと共にマシンをデプロイする Azure で実行されるマシンセットを作成できます。Ultra ディスクは、最も要求の厳しいデータワークロードでの使用を目的とした高性能ストレージです。
in-tree プラグインおよび CSI ドライバーの両方が、Ultra ディスクを有効にするための PVC の使用をサポートします。PVC を作成せずに、データディスクとしての Ultra デイスクと共にマシンをデプロイすることもできます。
関連情報
5.10.4.1. マシンセットを使用した Ultra ディスクを持つマシンの作成
マシンセットの YAML ファイルを編集することで、Azure 上に Ultra ディスクと共にマシンをデプロイできます。
前提条件
- 既存の Microsoft Azure クラスターがある。
手順
既存の Azure
MachineSet
カスタムリソース (CR) をコピーし、次のコマンドを実行して編集します。$ oc edit machineset <machine-set-name>
ここで、
<machine-set-name>
は、Ultra ディスクとともにマシンをプロビジョニングするマシンセットです。示された位置に次の行を追加します。
apiVersion: machine.openshift.io/v1beta1 kind: MachineSet spec: template: spec: metadata: labels: disk: ultrassd 1 providerSpec: value: ultraSSDCapability: Enabled 2
次のコマンドを実行して、更新された設定を使用してマシンセットを作成します。
$ oc create -f <machine-set-name>.yaml
以下の YAML 定義が含まれるストレージクラスを作成します。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ultra-disk-sc 1 parameters: cachingMode: None diskIopsReadWrite: "2000" 2 diskMbpsReadWrite: "320" 3 kind: managed skuname: UltraSSD_LRS provisioner: disk.csi.azure.com 4 reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer 5
以下の YAML 定義が含まれる、
ultra-disk-sc
ストレージクラスを参照する永続ボリューム要求 (PVC) を作成します。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: ultra-disk 1 spec: accessModes: - ReadWriteOnce storageClassName: ultra-disk-sc 2 resources: requests: storage: 4Gi 3
以下の YAML 定義が含まれる Pod を作成します。
apiVersion: v1 kind: Pod metadata: name: nginx-ultra spec: nodeSelector: disk: ultrassd 1 containers: - name: nginx-ultra image: alpine:latest command: - "sleep" - "infinity" volumeMounts: - mountPath: "/mnt/azure" name: volume volumes: - name: volume persistentVolumeClaim: claimName: ultra-disk 2
検証
次のコマンドを実行して、マシンが作成されていることを確認します。
$ oc get machines
マシンは
Running
状態になっているはずです。実行中でノードが接続されているマシンの場合、次のコマンドを実行してパーティションを検証します。
$ oc debug node/<node-name> -- chroot /host lsblk
このコマンドでは、
oc debug node/<node-name>
がノード<node-name>
でデバッグシェルを開始し、--
を付けてコマンドを渡します。渡されたコマンドchroot /host
は、基盤となるホスト OS バイナリーへのアクセスを提供し、lsblk
は、ホスト OS マシンに接続されているブロックデバイスを表示します。
次のステップ
Pod 内から Ultra ディスクを使用するには、マウントポイントを使用するワークロードを作成します。次の例のような YAML ファイルを作成します。
apiVersion: v1 kind: Pod metadata: name: ssd-benchmark1 spec: containers: - name: ssd-benchmark1 image: nginx ports: - containerPort: 80 name: "http-server" volumeMounts: - name: lun0p1 mountPath: "/tmp" volumes: - name: lun0p1 hostPath: path: /var/lib/lun0p1 type: DirectoryOrCreate nodeSelector: disktype: ultrassd
5.10.4.2. Ultra ディスクを有効にするマシンセットのリソースに関するトラブルシューティング
このセクションの情報を使用して、発生する可能性のある問題を理解し、回復してください。
5.10.4.2.1. Ultra ディスクがサポートする永続ボリューム要求をマウントできない
Ultra ディスクでサポートされる永続ボリューム要求のマウントに問題がある場合、Pod は ContainerCreating
状態のままになり、アラートがトリガーされます。
たとえば、additionalCapabilities.ultraSSDEnabled
パラメーターが Pod をホストするノードをサポートするマシンで設定されていない場合、以下のエラーメッセージが表示されます。
StorageAccountType UltraSSD_LRS can be used only when additionalCapabilities.ultraSSDEnabled is set.
この問題を解決するには、以下のコマンドを実行して Pod を記述します。
$ oc -n <stuck_pod_namespace> describe pod <stuck_pod_name>