# Kubernetes StorageClass

Eine StorageClass wird benutzt um einen Datenspeicher für die Pods zur Verfügung zu stellen.

Es gibt verschiedene Provider über die die Speicherung durchgeführt werden kann.

## Eine StorageClass als `default` festlegen

Um für einen Cluster einen Storage als Voreinstellung zu haben wird in der Regel die erste angelegte StorageClass als `default` definiert.

Wird nun Storage angefordert, dann wird diese Klasse als StorageClass benutzt.

In der StorageClass Liste erscheint die StorageClass dann mit der Kennzeichnung `(default)`.

```bash
$ kubectl get StorageClass
NAME                 PROVISIONER          RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
longhorn (default)   driver.longhorn.io   Retain          Immediate           true                   24m
longhorn-static      driver.longhorn.io   Delete          Immediate           true                   24m
```

### StorageClass als nicht-`default` setzen

Mittels eines Patches lässt sich eine StorageClass als nicht-`default` setzen. Ist kein `default` definiert und eine Resource benötigt ein Volume, dann muss eine StorageClass explizit angegeben sein.

```
kubectl patch StorageClass longhorn -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
```

### StorageClass als `default` setzen

Sobald es keine `default` StorageClass gibt, kann eine StorageClass als `default` festgelgt werden. Dies geschieht analog zum Entfernen der `default` Definition.

```
kubectl patch StorageClass longhorn -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
```
