Get Rewarded! We will reward you with up to €50 credit on your account for every tutorial that you write and we publish!

Deploy production-ready Kubernetes on Hetzner with Edka

profile picture
Author
Edka
Published
2025-08-20
Time to read
7 minutes reading time

About the author- Edka | Provision, scale, and manage Kubernetes clusters on Hetzner with GitOps workflows, one-click apps and add-ons.

Introduction

This tutorial shows the simplest way to deploy a Kubernetes cluster on Hetzner using Edka.
You’ll not only create a cluster but also turn it into your own Platform-as-a-Service (PaaS), ready for your applications.

Edka simplifies Kubernetes operations by organizing them into layers:

  • Layer 1: Cluster provisioning – A simple UI to provision a k3s-based cluster. You can create a cluster in one click using the default values.
  • Layer 2: Add-ons - One-click deploy for metrics-server, cert-manager, and various operators; preconfigured for Hetzner, no extra setup required.
  • Layer 3: Applications - Minimal config UIs for apps built on top of add-ons. - Example: Need PostgreSQL? Fill a few fields → platform installs CloudNativePG → provisions HA PostgreSQL with PITR → gives ready to use endpoints. Backups can be restored to any point in time with a single click.
  • Layer 4: Deployments - Connect your CI to push container images to a public/private registry. - Edka updates deployments automatically (with semantic versioning rules), supports instant rollbacks, autoscaling, persistent volumes, secrets/env imports, and quick public exposure.

Prerequisites

  • A Hetzner Cloud account
  • A Hetzner Cloud API token with read/write permissions
  • A free Edka account
  • kubectl (optional if you want to access your cluster from the command line, for advanced operations)
  • A domain name to link it to your cluster ingress (optional)

What you will learn

  • How to deploy a Kubernetes cluster on Hetzner using Edka and extend it with add-ons and applications
  • How to provision an HA PostgreSQL cluster with point-in-time recovery
  • How to connect, deploy, update, and auto-scale your applications

Step 1 - Create your cluster in Edka

Go to Edka and create a new cluster:

  • Set a cluster name
  • Provide your Hetzner API token
  • Optionally adjust location, size, node type, etc.
  • Click Create Cluster

Note: If you choose not to store the Hetzner API token, you’ll need to re-enter it whenever making changes (including deletion).

A 3 node cluster is usually ready in 2–3 minutes. Edka cluster creation

Once ready, access it from the Edka dashboard: Edka cluster dashboard

To use the cluster via kubernetes CLI, download the kubeconfig file under Settings → Access.

Important: for security reasons, kubeconfig can only be downloaded once.

Step 2 - Install the required add-ons

For this tutorial, install:

  • cert-manager – automatically provision and manage TLS certificates
  • ingress-nginx – expose applications to the internet
  • letsencrypt-issuer – use Let’s Encrypt as the certificate authority

After installing ingress-nginx, get the Load Balancer’s public IP from the "Cluster Overview" and set it as a DNS record for your domain or subdomain. We recommend using a wildcard A record, if you plan to serve multiple subdomains. You can link any number of domains or subdomains to it.

Step 3 - Deploy a PostgreSQL cluster

Edka provides a UI to deploy PostgreSQL with high availability and PITR.
Configure name, node count, storage size, etc.

Important: Copy the user and superuser passwords; you’ll need them to connect your apps and manage the database.

Edka PostgreSQL cluster Credentials are injected into the cluster, never stored in Edka.

External backups: Enable automatic backups to external providers like S3 and GCS and set the retention period from 1 to 35 days.

Edka PostgreSQL cluster

Once the PostgreSQL cluster is ready, you can retrieve the endpoints and connect your application to the database.

Edka PostgreSQL cluster

If you require to access the database directly, you can use the kubectl command to forward the port to your local machine. Make sure you set the service name correctly, as displayed in the PostgreSQL cluster details. In this example, the service name is production-rw.

kubectl port-forward -n postgres svc/production-rw 5432:5432

Restore from backup You can restore a backup to any point in time with a single click. It will create a new PostgreSQL cluster with the restored data and the same configuration as the original cluster, including backups enabled.

Edka PostgreSQL cluster

Step 4 - Deploy your application

We’ll deploy a sample Go app, available on GitHub. Go to the "Deployments" section and click on "Create Deployment".

Container image We have to provide the following information:

  • The name of the deployment: startmeup
  • The container image URL and tag: ghcr.io/edkadigital/startmeup-app:0.0.31
  • The container port: 8000

Edka application deployment

Environment variables and secrets This app requires a PostgreSQL connection string to connect to the database and an encryption key to encrypt the data. It also requires setting the environment as a non sensitive value.

ENV=production
DATABASE_URL=postgresql://app:YOUR_POSTGRES_PASSWORD@production-rw.postgres.svc.cluster.local:5432/app?sslmode=require
ENCRYPTION_KEY=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6
>
  • Variables can be stored as plain values or Kubernetes secrets
  • Imported from .env, JSON, or YAML files
  • Directly provisioned into your cluster (not stored in Edka)

Edka application deployment

Storage Persistent volumes can be attached if needed (omitted in this example).

Networking We'll expose the application to the internet using the ingress-nginx controller with a TLS certificate provided by Let's Encrypt.

Edka application deployment

Automatic Updates

Edka supports automatic updates for your deployments. You can set the desired update strategy to "SemVer" to automatically update your deployment when a new version is released. In this example, we'll set the update strategy to "Patch version only" and the scan frequency to "Every minute".

Note: If you want to deploy from a private registry, you'll need to set the integration first, in the "Integrations" section and apply the registry as default in the cluster settings.

Auto-scaling

Edka supports auto-scaling based on CPU or memory usage. Your deployment will scale automatically once usage exceeds the configured threshold.

Edka application deployment

Deploy your application

Once you've filled all the fields, you can deploy your application by clicking on "Create Deployment".

In the deployment dropdown details, you can see the status of the deployment, the exposed endpoint, the number of replicas, latest updates, stream realtime logs, and more.

Edka application deployment

Rollbacks

All updates are audited and you can rollback to any previous version.

Edka application deployment

Step 5 - Clean up

  • Delete the PostgreSQL cluster from the Apps section.
  • Uninstall the ingress-nginx add-on to deprovision the Hetzner Load Balancer.
  • Delete the cluster from the Settings section.
  • Make sure all resources were deleted from your Hetzner Cloud account, including volumes, networks, etc.

Conclusion

In this tutorial, we walked through the process of deploying a Kubernetes cluster on Hetzner Cloud and transforming it into your own Platform-as-a-Service, ready to run your applications.

Next Steps

  • Edka provides more capabilities, including GitOps deployments, various apps and add-ons easy to deploy and manage.
  • Check out the Edka website for more information.
License: MIT
Want to contribute?

Get Rewarded: Get up to €50 in credit! Be a part of the community and contribute. Do it for the money. Do it for the bragging rights. And do it to teach others!

Report Issue
Try Hetzner Cloud

Get €20/$20 free credit!

Valid until: 31 December 2025 Valid for: 3 months and only for new customers
Get started
Want to contribute?

Get Rewarded: Get up to €50 credit on your account for every tutorial you write and we publish!

Find out more