Skip to content

Getting Started with kOps on Hetzner Cloud

WARNING: Hetzner Cloud support on kOps is currently in beta, which means it is in good shape and could be used for production. However, it is not as rigorously tested as the stable cloud providers and there are some features that might be missing.


  • kOps version >= 1.24
  • kubectl version >= 1.23
  • Hetzner Cloud account
  • Hetzner Cloud token
  • SSH public and private keys
  • S3 compatible object storage (like MinIO)

Environment Variables

It is important to set the following environment variables:

export HCLOUD_TOKEN=<token>
export S3_ENDPOINT=<endpoint>
export S3_ACCESS_KEY_ID=<acces-key>
export S3_SECRET_ACCESS_KEY=<secret-key>
export KOPS_STATE_STORE=s3://<bucket-name>

Some S3 compatible stores may also require to set the region:

export S3_REGION=<region>

Creating a Single Master Cluster

In the following examples, example.k8s.local is a gossip-based DNS cluster name.

# create a ubuntu 20.04 + calico cluster in fsn1
kops create cluster --name=my-cluster.example.k8s.local \
  --ssh-public-key=~/.ssh/ --cloud=hetzner --zones=fsn1 \
  --image=ubuntu-20.04 --networking=calico --network-cidr= 
kops update cluster my-cluster.example.k8s.local --yes

# create a ubuntu 20.04 + calico cluster in fsn1 with CPU optimized servers
kops create cluster --name=my-cluster.example.k8s.local \
  --ssh-public-key=~/.ssh/ --cloud=hetzner --zones=fsn1 \
  --image=ubuntu-20.04 --networking=calico --network-cidr= \
  --node-size cpx31
kops update cluster --name=my-cluster.example.k8s.local --yes

# update a cluster
kops update cluster --name=my-cluster.example.k8s.local
kops update cluster --name=my-cluster.example.k8s.local --yes
kops rolling-update cluster --name=my-cluster.example.k8s.local
kops rolling-update cluster --name=my-cluster.example.k8s.local --yes

# validate a cluster
kops validate cluster --name=my-cluster.example.k8s.local

# delete a cluster
kops delete cluster --name=my-cluster.example.k8s.local
kops delete cluster --name=my-cluster.example.k8s.local --yes

# export kubecfg
# See 

# update a cluster
# See

Features Still in Development

kOps for Hetzner Cloud currently does not support the following features:

Next steps

Now that you have a working kOps cluster, read through the recommendations for production setups guide to learn more about how to configure kOps for production workloads.