Kubernetes with the local rocket storage

gridscale Managed Kubernetes (GSK) is a secure and fully-managed Kubernetes solution. All you need to do is to configure how powerful you wish your cluster to be. We take care of upgrades and OS maintenance.

GSK releases 1.26 and upward supports local rocket storage, which provides nodes with an additional high performance I/O storage, as described in the storage performance classes.

Management of local rocket storage in GSK:

  • Adding or removing the rocket storage:
    • impacts the workloads (e.g., rescheduling pods) as worker nodes will be replaced
  • Increasing the size of the rocket storage:
    • expands the rocket storage on-the-fly
    • preserves data
    • has no impact (e.g., rescheduling pods) on workloads that are not using the rocket storage
  • Decreasing the size of the rocket storage:
    • in order to decrease the size of the rocket storage, you MUST delete all workloads and PVCs that use the rocket storage
    • recreates the rocket storage
    • causes data loss
    • has no impact (e.g., rescheduling pods) on workloads that are not using the rocket storage
  • updating the worker nodes’ resources (e.g., ram, core, and the boot storage) preserves data of the rocket storage

How to use the local rocket storage to provision local PVCs

kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/v0.0.24/deploy/local-path-storage.yaml
  • Patch the configmap of local-path-config where the local rocket storage is mounted to /gs-pvc-data path in the worker node
cat <<EOF>configmap_batch.yaml
data:
  config.json: |-
    {
      "nodePathMap":[
        {
          "node":"DEFAULT_PATH_FOR_NON_LISTED_NODES",
          "paths":["/gs-pvc-data"]
        }
      ]
    }
EOF
kubectl -n local-path-storage patch  cm local-path-config --patch-file configmap_batch.yaml
  • Print the supported StorageClasses, and you should see local-path included in StorageClasses
kubectl get StorageClasses
NAME                      PROVISIONER                          RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
block-storage (default)   bs.csi.gridscale.io   Delete          WaitForFirstConsumer   true                   83m
block-storage-high        bs.csi.gridscale.io   Delete          WaitForFirstConsumer   true                   83m
block-storage-insane      bs.csi.gridscale.io   Delete          WaitForFirstConsumer   true                   83m
local-path                rancher.io/local-path                Delete          WaitForFirstConsumer   false                  33m
  • When the locally provisioned PVC reaches the maximum size of the local rocket storage, you might get output: I/O error in your pods
    • I/O error
      kubectl logs -f cronjob-logs-28102376-f8qzk
      head: standard output: I/O error
      
    • you can expand the local rocket storage by increasing the value of k8s_worker_node_rocket_storage. Then, the pods recover.

Limitations

  • When decreasing the size of the rocket storage, all worker node rocket storages will be recreated. as such, you need to delete all workloads and PVCs that use the rocket storage first.
  • As the rocket storage is local, it is bound to both the worker node and the underlying server’s compute node. As such
    • your workloads using a local-path-provisioner PVC cannot be rescheduled to other worker nodes.
    • your worker node cannot be recovered, while the compute node is not available.
  • The maximum supported size of the rocket storage is 5960GB
  • Take care to only use the local-path-provisioner deployment (as described above) if local rocket storage is enabled. otherwise, the local-path-provisioner will store its PVCs on the boot disk of the worker nodes.
  • The local-path-provisioner does not enforce volume capacity limits. The capacity limit will be ignored.
  • Although ALLOWVOLUMEEXPANSION is disabled, local volume PVCs can grow to the rocket storage size.