カスタム StorageClass をワークロードで使用する
GKE on Azure は、Azure Disk CSI ドライバと Azure File CSI ドライバを自動的にデプロイします。
Azure Disk CSI ドライバと Azure File CSI ドライバのバージョンは、GKE on Azure Kubernetes バージョンに関連付けられています。ドライバは通常、GKE がリリースされた時点で入手可能な最新バージョンになります。クラスタがアップグレードされると、ドライバも自動的に更新されます。
カスタム 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: true
CLASS_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=dev
CSI ドライバ
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-rwo
StorageClass の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 クラスタにストレージ ドライバをインストールする。
クイックスタートで最初のワークロードをデプロイする。