Container Storage Interface driver for Hetzner Cloud
This is a Container Storage Interface driver for Hetzner Cloud enabling you to use ReadWriteOnce Volumes within Kubernetes & other Container Orchestrators. Please note that this driver requires Kubernetes 1.19 or newer.
Getting Started
Depending on your Container Orchestrator you need to follow different steps to get started with the Hetzner Cloud csi-driver. You can also find other docs relevant to that Container Orchestrator behind the link:
Kubernetes
Docker Swarm️ ⚠ Not officially supported
Tests
Integration Tests
Requirements: Docker
The core operations like publishing and resizing can be tested locally with Docker.
go test $(go list ./... | grep integration) -v
E2E Tests
⚠️ Kubernetes E2E Tests were recently refactored and the docs are now outdated. See the GitHub Actions workflow for an up-to-date script to run the e2e tests.
The Hetzner Cloud CSI Driver was tested against the official k8s e2e tests for a specific version. You can run the tests with the following commands. Keep in mind, that these tests run on real cloud servers and will create volumes that will be billed.
Test Server Setup:
1x CPX21 (Ubuntu 18.04)
Requirements: Docker and Go 1.17
- Configure your environment correctly
export HCLOUD_TOKEN=<specifiy a project token> export K8S_VERSION=1.21.0 # The specific (latest) version is needed here export USE_SSH_KEYS=key1,key2 # Name or IDs of your SSH Keys within the Hetzner Cloud, the servers will be accessible with that keys
- Run the tests
go test $(go list ./... | grep e2e) -v -timeout 60m
The tests will now run, this will take a while (~30 min).
If the tests fail, make sure to clean up the project with the Hetzner Cloud Console or the hcloud cli.
Local test setup
⚠️ Local Kubernetes Dev Setup was recently refactored and the docs are now outdated. Check out the scripts dev-up.sh & dev-down.sh for an automatic dev setup.
This repository provides skaffold to easily deploy / debug this driver on demand
Requirements
- Install hcloud-cli
- Install k3sup
- Install cilium
- Install docker
You will also need to set a HCLOUD_TOKEN
in your shell session
Manual Installation guide
- Create an SSH key
Assuming you already have created an ssh key via ssh-keygen
hcloud ssh-key create --name ssh-key-csi-test --public-key-from-file ~/.ssh/id_rsa.pub
- Create a server
hcloud server create --name csi-test-server --image ubuntu-20.04 --ssh-key ssh-key-csi-test --type cx11
- Setup k3s on this server
k3sup install --ip $(hcloud server ip csi-test-server) --local-path=/tmp/kubeconfig --cluster --k3s-channel=v1.23 --k3s-extra-args='--no-flannel --no-deploy=servicelb --no-deploy=traefik --disable-cloud-controller --disable-network-policy --kubelet-arg=cloud-provider=external'
- The kubeconfig will be created under
/tmp/kubeconfig
- Kubernetes version can be configured via
--k3s-channel
- Switch your kubeconfig to the test cluster
export KUBECONFIG=/tmp/kubeconfig
- Install cilium + test your cluster
cilium install
- Add your secret to the cluster
kubectl -n kube-system create secret generic hcloud --from-literal="token=$HCLOUD_TOKEN"
- Install hcloud-cloud-controller-manager + test your cluster
kubectl apply -f https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm.yaml
kubectl config set-context default
kubectl get node -o wide
- Deploy your CSI driver
SKAFFOLD_DEFAULT_REPO=naokiii skaffold dev
docker login
required- Skaffold is using your own dockerhub repo to push the CSI image.
On code change, skaffold will repack the image & deploy it to your test cluster again. Also, it is printing all logs from csi components.
License
MIT license