Benutzerdefinierte StorageClass für Arbeitslasten verwenden
Wenn Sie bestimmte Speicherverhaltensweisen für Ihre containerisierten Arbeitslasten in der Google Kubernetes Engine (GKE) in Azure definieren möchten, erstellen und verwenden Sie benutzerdefinierte StorageClasses. Durch das Anpassen von StorageClasses können Sie die Speicherleistung und -kosten für Ihre Anwendungen optimieren, indem Sie verschiedene Azure-Laufwerktypen, Dateisystemtypen und andere Parameter für Ihre PersistentVolumes auswählen. Mit dieser Funktion können Sie effiziente Dienste ausführen, indem Sie den Speicher genau an die Anforderungen Ihrer Arbeitslast anpassen.
GKE in Azure stellt automatisch den Azure Disk CSI-Treiber und den Azure File CSI-Treiber bereit und verwaltet sie. Diese sind für die Bereitstellung von Speicher unerlässlich. Die Versionen dieser Treiber sind an Ihre GKE-Kubernetes-Version in Azure gebunden und werden bei Clusterupgrades automatisch aktualisiert. So wird eine nahtlose Kompatibilität für Ihre benutzerdefinierten StorageClasses gewährleistet.
Benutzerdefinierte StorageClass verwenden
Sie können zusätzliche StorageClasses für Volumes erstellen oder CSI-Treiber (Container Storage Interface) verwenden.
Wählen Sie aus, ob Sie ein Azure-Laufwerk-Volume oder einen anderen CSI-Treiber verwenden.
Azure Disk-Volume
Sie können Ihre eigene benutzerdefinierte StorageClass erstellen, die einen Azure Disk-Volume-Typ, einen Dateisystemtyp und andere Parameter angibt. Weitere StorageClass-Parameter finden Sie auf der GitHub-Seite des Azure Disk CSI-Treibers für GKE in Azure .
Zum Konfigurieren einer benutzerdefinierten StorageClass kopieren Sie das folgende YAML-Manifest in eine Datei mit dem Namen
my-custom-class.yaml.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: CLASS_NAME provisioner: disk.csi.azure.com volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: trueErsetzen Sie CLASS_NAME durch den Namen Ihrer neuen StorageClass.
Mit der folgenden YAML-Datei wird beispielsweise eine neue StorageClass erstellt, die Volumes in einem bestimmten Speicherkonto bereitstellt und ein Tag von
group=devauf jedes neue Volume anwendet.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-Treiber
Sie können im Feld
provisionereinen anderen CSI-Treiber angeben.Zum Erstellen einer StorageClass mit einem anderen CSI-Treiber können Sie das folgende YAML-Beispiel verwenden:
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: CLASS_NAME provisioner: CSI_DRIVER_NAME volumeBindingMode: WaitForFirstConsumer parameters: ...Ersetzen Sie die folgenden Werte:
- CLASS_NAME ist der Name der StorageClass, z. B.
my-custom-class. - CSI_DRIVER_NAME ist der Name des CSI-Treibers, z. B.
csi.example.com.
Konfigurieren Sie als Nächstes Unterfelder unter
parametersentsprechend der Dokumentation Ihres CSI-Treibers.- CLASS_NAME ist der Name der StorageClass, z. B.
Wenden Sie die YAML-Datei auf Ihren Cluster an.
kubectl apply -f my-custom-class.yamlErstellen Sie einen PersistentVolumeClaim mit einer benutzerdefinierten StorageClass.
Nachdem Sie eine benutzerdefinierte StorageClass erstellt haben, können Sie sie in einem PVC angeben. Im folgenden Beispiel wird einen PVC namens
my-pvcerstellt, der auf die StorageClassmy-custom-classverweist.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 30Gi storageclassName: my-custom-class
Standard-StorageClass festlegen
GKE in Azure verwendet eine Standard-StorageClass namens standard-rwo, die
standardmäßige Azure-SSD-Laufwerke mit
LRS bereitstellt. Sie können diese Standardeinstellung in eine andere StorageClass ändern.
So ändern Sie die Standard-StorageClass:
Aktualisieren Sie die Annotation
is-default-classfür die StorageClassstandard-rwomitkubectl patch.kubectl patch storageclass standard-rwo -p \ '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'Erstellen Sie eine neue StorageClass mit der Annotation
storageclass.kubernetes.io/is-default-class: true.Die folgende Beispiel-StorageClass nutzt den Treiber
disk.csi.azure.com. Weitere Informationen zur Installation eines anderen Speichertreibers finden Sie unter CSI-Treiber installieren.Kopieren Sie das folgende YAML-Manifest in eine Datei mit dem Namen
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_TYPEDabei gilt:
- CLASS_NAME ist der Name Ihrer neuen StorageClass.
- VOLUME_TYPE: der von der StorageClass erstellte Azure Disk Volume-Typ.
Mit der folgenden YAML-Datei wird beispielsweise eine neue Standard-StorageClass erstellt, die provisions Premium SSD Azure Disk-Volumes bereitstellt.
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_LRSWenden Sie die neue benutzerdefinierte Klasse auf Ihren Cluster an.
kubectl apply -f my-custom-class.yaml
Nach der Anwendung dieses Manifests verwendet GKE in Azure die StorageClass my-custom-default-class für neue Speicheranfragen.
Auf StorageClass in einem StatefulSet verweisen
Verweisen Sie auf die StorageClass im volumeClaimTemplates eines StatefulSet, um sie zu verwenden.
Wenn Sie in der Spezifikation volumeClaimTemplates eines StatefulSet auf eine StorageClass verweisen, bietet Kubernetes stabilen Speicher mit PersistentVolumes (PVs).
Kubernetes ruft den in der StorageClass definierten Bereitsteller auf, um ein neues Speicher-Volume zu erstellen. Nachdem das Volume bereitgestellt wurde, erstellt Kubernetes automatisch eine Produktversion.
Das folgende StatefulSet verweist auf die StorageClass my-custom-class und stellt ein 1-Gibibyte-Volume bereit:
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
Nächste Schritte
Lesen Sie die Dokumentation zum Azure Disk CSI-Treiber oder zum Azure File CSI-Treiber.
Mehr über nichtflüchtige Volumes in GKE erfahren
Installieren Sie Speichertreiber auf Ihrem GKE-Cluster in Azure.
Stellen Sie Ihre erste Arbeitslast mit der Kurzanleitung bereit.