Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,6 @@ In case the script encountered an error and shows a message prefixed with `[ERR]

You can fix these errors and then re-run the script.

In case something else goes wrong, the script makes backups of all resources in the directory`./hcloud-csi-fix-topology/$PERSITENT_VOLUME_NAME`, as logged by the script. You can use these to manually re-create the `PersistentVolume`.
In case something else goes wrong, the script makes backups of all resources in the directory `./hcloud-csi-fix-topology/$PERSITENT_VOLUME_NAME`, as logged by the script. You can use these to manually re-create the `PersistentVolume`.

If you have any issues, please feel free to open an issue on the [GitHub Repository](https://github.com/hetznercloud/csi-driver) or through the [Hetzner Ticket System](https://console.hetzner.cloud/support).
16 changes: 16 additions & 0 deletions docs/kubernetes/guides/importing-volumes.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,19 @@
<!--
---
date: "2026-09-07"
date_changed: "2026-09-07"
title: "Import"
tags: []
language: "en"
description: ""
docs_type: ["how_to"]
product_category: ["Integrations"]
translation: ["Integrations", "CSI driver", "How-To: Volumes", "Import"]
scrape_type: "whole"
priority: 100
---
-->

# Importing Volumes

This guide explains how to import an existing Hetzner Volume into your Kubernetes cluster with the csi-driver installed.
Expand Down
16 changes: 16 additions & 0 deletions docs/kubernetes/guides/monitoring.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,19 @@
<!--
---
date: "2026-09-07"
date_changed: "2026-09-07"
title: "Monitoring"
tags: []
language: "en"
description: ""
docs_type: ["how_to"]
product_category: ["Integrations"]
translation: ["Integrations", "CSI driver", "How-To: Administration", "Monitoring"]
scrape_type: "whole"
priority: 100
---
-->

# Monitoring

Monitoring is an important part of managing any system, and the csi-driver components are no exception. To help you keep an eye on how the components are performing, we've exposed Prometheus-compatible metrics on port 9189. You can configure the endpoint for these metrics by setting the `METRICS_ENDPOINT` environment variable to the appropriate value for your system.
Expand Down
20 changes: 18 additions & 2 deletions docs/kubernetes/guides/quickstart.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,24 @@
<!--
---
date: "2026-09-07"
date_changed: "2026-09-07"
title: "Installing the CSI driver"
tags: []
language: "en"
description: ""
docs_type: ["getting_started"]
product_category: ["Integrations"]
translation: ["Integrations", "CSI driver", "Getting Started", "Installing the CSI driver"]
scrape_type: "whole"
priority: 90
---
-->

# Quick start

1. Create a read+write API token in the [Hetzner Cloud Console](https://console.hetzner.cloud/) as described in [this document](https://docs.hetzner.com/cloud/api/getting-started/generating-api-token/).
1. Create a read+write API token in the [Hetzner Console](https://console.hetzner.com/) as described in [this document](https://docs.hetzner.com/cloud/api/getting-started/generating-api-token/).

2. Create a secret containing your Hetzner Cloud API token:
2. Create a secret containing your Hetzner Console API token:

```bash
kubectl -n kube-system create secret generic hcloud --from-literal=token=<hcloud API token>
Expand Down
22 changes: 19 additions & 3 deletions docs/kubernetes/guides/troubleshooting.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,19 @@
<!--
---
date: "2026-09-07"
date_changed: "2026-09-07"
title: "Common issues"
tags: []
language: "en"
description: ""
docs_type: ["faq/troubleshooting"]
product_category: ["Integrations"]
translation: ["Integrations", "CSI driver", "Troubleshooting", "Common issues"]
scrape_type: "whole"
priority: 100
---
-->

# Troubleshooting

This guide helps you diagnose and fix the most common problems with the hcloud-csi-driver. Start with [Gathering diagnostics](#gathering-diagnostics) to collect the information you need, then jump to the section that matches your symptom.
Expand Down Expand Up @@ -142,7 +158,7 @@ If your PVC has no `storageClassName` and there is no default StorageClass, it w

### Volume limit or quota reached

If your project has reached its volume limit or quota, the Hetzner Cloud API rejects new volumes and the controller logs the API error. Check your limits in the [Hetzner Cloud Console](https://console.hetzner.cloud/) and delete unused volumes or request a limit increase via the [Support Center](https://console.hetzner.cloud/support).
If your project has reached its volume limit or quota, the Hetzner Cloud API rejects new volumes and the controller logs the API error. Check your limits in the [Hetzner Console](https://console.hetzner.com/) and delete unused volumes or request a limit increase via the [Support Center](https://console.hetzner.com/support).

## Pod is stuck in `ContainerCreating`

Expand Down Expand Up @@ -183,10 +199,10 @@ To grow a volume:
1. The StorageClass must have `allowVolumeExpansion: true`.
2. Increase `spec.resources.requests.storage` on the **PVC** (not the PV).

The controller resizes the underlying Hetzner Cloud volume, and the filesystem is expanded the next time it is mounted. Watch the controller and node logs if the new size does not appear. Note that volumes can only **grow**, never shrink.
The controller resizes the underlying Hetzner Cloud Volume, and the filesystem is expanded the next time it is mounted. Watch the controller and node logs if the new size does not appear. Note that Volumes can only **grow**, never shrink.

## Volumes do not work on Robot / dedicated servers

The hcloud-csi-driver provisions **Hetzner Cloud** volumes, which are only available on Hetzner Cloud servers. Dedicated Robot servers cannot attach Cloud volumes.
The hcloud-csi-driver provisions **Hetzner Cloud** Volumes, which are only available on Hetzner Cloud servers. Dedicated Robot servers cannot attach Cloud volumes.

If you run a mixed cluster, see [Integration with Robot servers](../explanation/integration-with-robot-servers.md) for what is and isn't supported.
16 changes: 16 additions & 0 deletions docs/kubernetes/guides/upgrading.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,19 @@
<!--
---
date: "2026-09-07"
date_changed: "2026-09-07"
title: "General"
tags: []
language: "en"
description: ""
docs_type: ["how_to"]
product_category: ["Integrations"]
translation: ["Integrations", "CSI driver", "How-To: Upgrade", "General"]
scrape_type: "whole"
priority: 100
---
-->

# Upgrading

For most upgrades — patch and minor versions within the same major version
Expand Down
18 changes: 17 additions & 1 deletion docs/kubernetes/guides/volumes-encrypted-with-luks.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,19 @@
<!--
---
date: "2026-09-07"
date_changed: "2026-09-07"
title: "Encrypted with LUKS"
tags: []
language: "en"
description: ""
docs_type: ["how_to"]
product_category: ["Integrations"]
translation: ["Integrations", "CSI driver", "How-To: Volumes", "Encrypted with LUKS"]
scrape_type: "whole"
priority: 90
---
-->

# Volumes Encrypted with LUKS

To add encryption with LUKS you have to create a dedicate secret containing an encryption passphrase and duplicate the default `hcloud-volumes` storage class with added parameters referencing this secret:
Expand Down Expand Up @@ -25,4 +41,4 @@ parameters:
csi.storage.k8s.io/node-publish-secret-namespace: kube-system
```

Your nodes might need to have `cryptsetup` installed to mount the volumes with LUKS.
Your nodes might need to have `cryptsetup` installed to mount the Volumes with LUKS.
Original file line number Diff line number Diff line change
@@ -1,3 +1,19 @@
<!--
---
date: "2026-09-07"
date_changed: "2026-09-07"
title: "Setting up a cluster with a Volume"
tags: []
language: "en"
description: ""
docs_type: ["getting_started"]
product_category: ["Integrations"]
translation: ["Integrations", "CSI driver", "Getting Started", "Setting up a cluster with a Volume"]
scrape_type: "whole"
priority: 90
---
-->

# Setting up a cluster and creating your first Volume

In this tutorial, you will learn how to set up a lightweight Kubernetes cluster on **Hetzner Cloud** using **k3s**, install the **Hetzner Cloud csi-driver**, and create a Deployment with a PersistentVolumeClaim.
Expand Down Expand Up @@ -217,9 +233,9 @@ kubectl apply -f pvc-app.yaml

---

## 6. Verify the volume
## 6. Verify the Volume

Watch the PVC move from `Pending` to `Bound`. This happens as soon as the Deployment's Pod is scheduled and the csi-driver has provisioned the volume:
Watch the PVC move from `Pending` to `Bound`. This happens as soon as the Deployment's Pod is scheduled and the csi-driver has provisioned the Volume:

```bash
kubectl get pvc csi-pvc -w
Expand All @@ -237,7 +253,7 @@ Confirm that the Pod is running:
kubectl get pods -l app=my-csi-app
```

You can also see the newly created volume in Hetzner Cloud. Its name starts with `pvc-` and matches the volume bound above:
You can also see the newly created Volume in Hetzner Cloud. Its name starts with `pvc-` and matches the Volume bound above:

```bash
hcloud volume list
Expand All @@ -247,14 +263,14 @@ hcloud volume list

## 7. Write data and confirm it persists

Write a file into the mounted volume:
Write a file into the mounted Volume:

```bash
kubectl exec deploy/my-csi-app -- sh -c 'echo "Hello from Hetzner Cloud Volumes" > /data/hello.txt'
kubectl exec deploy/my-csi-app -- cat /data/hello.txt
```

To prove the data lives on the volume and not inside the Pod, delete the Pod. The Deployment recreates it, the same volume is re-attached, and the file is still there:
To prove the data lives on the Volume and not inside the Pod, delete the Pod. The Deployment recreates it, the same Volume is re-attached, and the file is still there:

```bash
kubectl delete pod -l app=my-csi-app
Expand All @@ -274,7 +290,7 @@ Delete the workload and the claim. Because the StorageClass uses `reclaimPolicy:
kubectl delete -f pvc-app.yaml
```

Verify the volume is gone:
Verify the Volume is gone:

```bash
hcloud volume list
Expand Down
Loading