StorageClasses für Arbeitslasten nutzen

Anthos-Cluster in AWS (GKE on AWS) stellen automatisch den Container Storage Interface-Treiber (CSI) für Amazon Elastic Block Store (EBS) bereit, um Amazon EBS-Volumes in Ihren Clustern bereitzustellen und zu verwalten.

Die EBCS-CSI-Treiberversion von Anthos-Cluster in AWS ist an eine Kubernetes-Version von Anthos-Cluster in AWS gebunden. Die Treiberversion ist in der Regel die neueste Version, die bei der Veröffentlichung der GKE-Version verfügbar war. Bei einem Upgrade des Clusters werden die Treiber automatisch aktualisiert.

Standard-StorageClass verwenden

Wenn Sie einen PersistentVolumeClaim ohne das Feld spec.storageClassName erstellen, wird ein gp2-Volume mit der standardmäßigen EBS-CSI-Treiber-StorageClass von GKE on AWS bereitgestellt.

Mit der folgenden YAML-Datei wird ein PersistentVolumeClaim (PVC) mit dem Namen mypvc mit einer Größe von 30 Gibibyte erstellt.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mypvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 30Gi

Andere vorinstallierte StorageClass verwenden

Die Anthos-Cluster des CSE-CSI-Treibers von AWS enthalten auch die StorageClass premium-rwo, die io1-Volumes mit höherem Durchsatz bereitstellt.

Geben Sie sie im spec.storageclassName des PVC an, um sie zu verwenden.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mypvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 30Gi
  storageclassName: premium-rwo

Benutzerdefinierte StorageClass verwenden

Sie können zusätzliche StorageClasses für EBS-Volumes erstellen oder CSI-Treiber (Container Storage Interface) verwenden.

  1. Wählen Sie aus, ob Sie ein EBS-Volume oder einen bestimmten CSI-Treiber verwenden möchten.

    EBS-Volume

    Sie können Ihre eigene benutzerdefinierte StorageClass erstellen, die einen EBS-Volume-Typ, einen Dateisystemtyp und andere Parameter angibt. Weitere StorageClass-Parameter finden Sie auf der GitHub-Seite zum EBS-CSI-Treiber von Anthos-Cluster in AWS.

    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: ebs.csi.aws.com
    volumeBindingMode: WaitForFirstConsumer
    

    Ersetzen Sie dabei CLASS_NAME durch den Namen Ihrer neuen StorageClass.

    Mit der folgenden YAML-Datei wird beispielsweise eine neue StorageClass erstellt, die mit dem XFS-Dateisystem Durchsatz-optimierte HDD-EBS-Volumes bereitstellt.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: my-custom-class
    provisioner: ebs.csi.aws.com
    volumeBindingMode: WaitForFirstConsumer
    parameters:
      csi.storage.k8s.io/fsType: xfs
      type: st1
    

    CSI-Treiber

    Sie können im Feld provisioner einen 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:
      ...
    

    Dabei gilt:

    • CSI_DRIVER_NAME durch den Namen des CSI-Treibers, z. B. csi.example.com
    • CLASS_NAME durch den Namen der StorageClass, z. B. my-custom-class

    Konfigurieren Sie die untergeordneten Felder unter parameters gemäß Ihrem CSI-Treiber.

  2. Wenden Sie die YAML-Datei auf Ihren Cluster an.

    kubectl apply -f my-custom-class.yaml
    

PersistentVolumeClaim mit einer benutzerdefinierten StorageClass erstellen

  1. Nachdem die benutzerdefinierte StorageClass erstellt wurde, können Sie sie in einem PVC angeben. Im folgenden Beispiel wird ein PVC namens my-pvc erstellt, das auf die StorageClass my-custom-class verweist.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: my-pvc
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 30Gi
      storageclassName: my-custom-class
    

Standard-StorageClass festlegen

Anthos-Cluster in AWS verwenden die Standard-StorageClass standard-rwo, die gp2 EBS-Volumes bereitstellt. Sie können diese Standardeinstellung in eine andere StorageClass ändern.

So ändern Sie die Standard-StorageClass:

  1. Aktualisieren Sie die Annotation is-default-class für die StorageClass standard-rwo mit kubectl patch.

    kubectl patch storageclass standard-rwo -p \
    '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
    
  2. Erstellen Sie eine neue StorageClass mit der Annotation storageclass.kubernetes.io/is-default-class: true.

    Die folgende Beispiel-StorageClass nutzt den Treiber ebs.csi.aws.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: ebs.csi.aws.com
    volumeBindingMode: WaitForFirstConsumer
    parameters:
      type: EBS_VOLUME_TYPE
    

    Dabei gilt:

    • EBS_VOLUME_TYPE ist der von der StorageClass erstellte AWS EBS-Volume-Typ.
    • CLASS_NAME durch den Namen Ihrer neuen StorageClass

    Mit der folgenden YAML-Datei wird beispielsweise eine neue Standard-StorageClass erstellt, die mit dem XFS-Dateisystem Durchsatz-optimierte HDD-EBS-Volumes bereitstellt.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: my-custom-default-class
      annotations:
        storageclass.kubernetes.io/is-default-class: "true"
    provisioner: ebs.csi.aws.com
    volumeBindingMode: WaitForFirstConsumer
    parameters:
      csi.storage.k8s.io/fsType: xfs
      type: st1
    
  3. Wenden Sie die neue benutzerdefinierte Klasse auf Ihren Cluster an.

    kubectl apply -f my-custom-class.yaml
    

Nachdem Sie dieses Manifest angewendet haben, verwenden Anthos-Cluster in AWS 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