カスタム StorageClass をワークロードで使用する
Azure 上の Google Kubernetes Engine(GKE)でコンテナ化されたワークロードの特定のストレージ動作を定義するには、カスタム StorageClass を作成して使用します。StorageClass をカスタマイズすることで、PersistentVolume に異なる Azure ディスクタイプ、ファイル システム タイプ、その他のパラメータを選択して、アプリケーションのストレージ パフォーマンスと費用を最適化できます。この機能を使用すると、ワークロードの正確なニーズに合わせてストレージを調整することで、効率的なサービスを実行できます。
GKE on Azure は、ストレージ プロビジョニングの処理に不可欠な Azure Disk CSI ドライバと Azure File CSI ドライバを自動的にデプロイして管理します。これらのドライバのバージョンは GKE on Azure の Kubernetes バージョンに関連付けられており、クラスタのアップグレードとともに自動的に更新されるため、カスタム StorageClass のシームレスな互換性が確保されます。
カスタムの StorageClass を使用する
ボリュームに追加の StorageClass を作成したり、Container Storage Interface(CSI)ドライバを使用したりできます。
Azure Disk ボリュームまたは別の CSI ドライバを使用するかどうかを選択します。
Azure Disk ボリューム
Azure Disk ボリューム タイプ、ファイル システムのタイプ、その他のパラメータを指定する独自のカスタム StorageClass を作成できます。追加の StorageClass パラメータについては、GKE on Azure の Azure Disk CSI ドライバの GitHub ページで確認できます。
カスタム StorageClass を構成するには、次の YAML マニフェストを
my-custom-class.yamlという名前のファイルにコピーします。apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: CLASS_NAME provisioner: disk.csi.azure.com volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: trueCLASS_NAME を新しい StorageClass の名前に置き換えます。
たとえば、次の YAML では、特定のストレージ アカウント内のボリュームをプロビジョニングする新しい StorageClass が作成され、それぞれの新しいボリュームに
group=devのタグが適用されます。apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: my-custom-class provisioner: disk.csi.azure.com volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true parameters: storageAccount: my-storage-account tags: group=devCSI ドライバ
provisionerフィールドに別の CSI ドライバを指定できます。別の CSI ドライバを使用して StorageClass を作成するには、次の YAML の例を使用します。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: CLASS_NAME provisioner: CSI_DRIVER_NAME volumeBindingMode: WaitForFirstConsumer parameters: ...次の値を置き換えます。
- CLASS_NAME: StorageClass の名前(例:
my-custom-class)。 - CSI_DRIVER_NAME: CSI ドライバの名前(例:
csi.example.com)。
次に、CSI ドライバのドキュメントの説明に従って、
parametersのサブフィールドを構成します。- CLASS_NAME: StorageClass の名前(例:
YAML をクラスタに適用します。
kubectl apply -f my-custom-class.yamlカスタム StorageClass を使用して PersistentVolumeClaim を作成します。
カスタム StorageClass を作成したら、それを PVC で指定できます。次の例では、StorageClass
my-custom-classを参照するmy-pvcという名前の PVC を作成します。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 30Gi storageclassName: my-custom-class
デフォルトの StorageClass を設定する
GKE on Azure は、LRS を含む標準の SSD Azure Disk をプロビジョニングする standard-rwo というデフォルトの StorageClass を使用します。デフォルトを別の StorageClass に変更できます。
デフォルトの StorageClass を変更するには:
standard-rwoStorageClass のis-default-classアノテーションをkubectl patchで更新します。kubectl patch storageclass standard-rwo -p \ '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'アノテーション
storageclass.kubernetes.io/is-default-class: trueを持つ新しい StorageClass を作成します。次の例の StorageClass は、
disk.csi.azure.comドライバを使用しています。別のストレージ ドライバをインストールするには、CSI ドライバのインストールをご覧ください。次の YAML を
my-custom-class.yamlというファイルにコピーします。apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: CLASS_NAME annotations: storageclass.kubernetes.io/is-default-class: true provisioner: disk.csi.azure.com volumeBindingMode: WaitForFirstConsumer parameters: skuName: VOLUME_TYPE以下を置き換えます。
- CLASS_NAME: 新しい StorageClass の名前。
- VOLUME_TYPE: StorageClass が作成する Azure Disk ボリューム タイプ。
たとえば、次の YAML では、Premium SSD Azure Disk ボリュームをプロビジョニングする新しいデフォルトの StorageClass が作成されます。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: my-custom-default-class annotations: storageclass.kubernetes.io/is-default-class: "true" provisioner: disk.csi.azure.com volumeBindingMode: WaitForFirstConsumer parameters: skuName: Premium_LRS新しいカスタムクラスをクラスタに適用します。
kubectl apply -f my-custom-class.yaml
このマニフェストを適用すると、GKE on Azure は新しいストレージ リクエストに my-custom-default-class StorageClass を使用します。
StatefulSet で StorageClass を参照する
新しい StorageClass を使用するには、StatefulSet の volumeClaimTemplates で参照します。
StatefulSet の volumeClaimTemplates 仕様で StorageClass を参照すると、Kubernetes は PersistentVolume(PV)を使用して安定したストレージを提供します。Kubernetes は、StorageClass で定義されたプロビジョナーを呼び出して新しいストレージ Volume を作成します。Volume がプロビジョニングされると、Kubernetes が自動的に PV を作成します。
次の StatefulSet は、my-custom-class StorageClass を参照し、1 GiB のボリュームをプロビジョニングします。
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: registry.k8s.io/nginx-slim:0.8
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates: # This is the specification in which you reference the StorageClass
- metadata:
name: www
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
storageClassName: my-custom-class # This field references the existing StorageClass
次のステップ
Azure Disk CSI ドライバまたは Azure File CSI ドライバのドキュメントを読む。
GKE の永続ボリュームについて学習する。
GKE on Azure クラスタにストレージ ドライバをインストールする。
クイックスタートで最初のワークロードをデプロイする。