Skip to content

English version of the article "Installing Single-Node OpenShift on a Hetzner Dedicated Server" - #1492

Open
tomazb wants to merge 4 commits into
hetzneronline:masterfrom
tomazb:setup-openshift-single-node
Open

English version of the article "Installing Single-Node OpenShift on a Hetzner Dedicated Server"#1492
tomazb wants to merge 4 commits into
hetzneronline:masterfrom
tomazb:setup-openshift-single-node

Conversation

@tomazb

@tomazb tomazb commented Jun 26, 2026

Copy link
Copy Markdown

Introduction

Hetzner dedicated servers are a good place to run a single-node OpenShift (SNO) lab. You get plenty of CPU, memory, and fast local NVMe storage, and the monthly cost is predictable. The awkward part is the install. On a dedicated server in Robot, you do not get the same easy ISO boot workflow you have with a VM or with Hetzner Cloud. OpenShift normally expects either a discovery ISO or PXE boot, and neither is especially convenient here.

The approach in this tutorial is to use the Hetzner Rescue System as a temporary working environment. Once the server is in rescue mode, you can build the OpenShift Agent-based Installer PXE artifacts there and then use kexec to jump straight into the Red Hat CoreOS (RHCOS) installer kernel. That avoids extra manual boot steps and works well for this kind of one-node setup.

I cover the manual path first and keep every command in the article so you can see exactly what is happening. There is also an optional shortcut later if you want to automate the preparation steps. What you get out of this:

  • A running single-node OpenShift cluster on one Hetzner dedicated server.
  • A kubeconfig and kubeadmin password on your workstation so that you can manage it remotely.
  • A Robot firewall in front of the node so it isn't wide open to the internet the moment it boots.

It is best suited for labs, testing, or edge use where you understand the risks. A single-node OpenShift is a single point of failure. Also, kexec does not always behave the same way as a full reboot on every hardware model. If the server does not boot cleanly into RHCOS, use a KVM console to see what is happening. If you need a supported installation path, use the Agent-based Installer with standard boot media.

`I have read and understood the Contributor's Certificate of Origin available at the end of https://raw.githubusercontent.com/hetzneronline/community-content/master/tutorial-template.md and I hereby certify that I meet the contribution criteria described in it.

Signed-off-by: Tomaž Borštnar tomaz@sama-navitas.si`

Copilot AI review requested due to automatic review settings June 26, 2026 14:39

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a new English tutorial that walks readers through installing Single-Node OpenShift (SNO) on a Hetzner dedicated server by using the Hetzner Rescue System to generate Agent-based Installer PXE artifacts and then booting into the installer via kexec.

Changes:

  • Introduces a full step-by-step guide covering prerequisites, Robot firewall rules, Rescue System preparation, asset generation, and kexec boot.
  • Documents both a manual workflow and an optional helper-script shortcut.
  • Provides example configuration snippets for install-config.yaml and agent-config.yaml.

Comment thread tutorials/setup-openshift-single-node/01.en.md
Comment thread tutorials/setup-openshift-single-node/01.en.md Outdated
Comment thread tutorials/setup-openshift-single-node/01.en.md Outdated
Comment thread tutorials/setup-openshift-single-node/01.en.md Outdated
Comment thread tutorials/setup-openshift-single-node/01.en.md Outdated
Comment thread tutorials/setup-openshift-single-node/01.en.md Outdated
Comment thread tutorials/setup-openshift-single-node/01.en.md Outdated
@maximilianfeix
maximilianfeix self-requested a review June 26, 2026 17:23

@maximilianfeix maximilianfeix left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, @tomazb

Please edit the pull request and add:
`I have read and understood the Contributor's Certificate of Origin available at the end of https://raw.githubusercontent.com/hetzneronline/community-content/master/tutorial-template.md and I hereby certify that I meet the contribution criteria described in it.

Signed-off-by: `

@tomazb

tomazb commented Jun 30, 2026

Copy link
Copy Markdown
Author

Updated also the PR body.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 2 comments.

Comment thread tutorials/setup-openshift-single-node/01.en.md Outdated
Comment thread tutorials/setup-openshift-single-node/01.en.md Outdated
@maximilianfeix

Copy link
Copy Markdown
Collaborator

Hello @tomazb ,
I'll review your pull request in the coming days.

@tomazb

tomazb commented Jul 27, 2026

Copy link
Copy Markdown
Author

@maximilianfeix Any update on this? Thank you.

@svenja11

svenja11 commented Jul 28, 2026

Copy link
Copy Markdown
Collaborator

Thank you for your contribution @tomazb! Sorry for the delay in the review. I tested your tutorial and noticed the following:

  • The installation failed when I had a wildcard DNS entry, so I added a note at the top

  • In step 2, you include this command for the script method:

    ./hetzner-sno-prepare-pxe.sh --dry-run \
      --disk-serial <disk-serial> \
      <ocp-version> /root/pull-secret.json <base-domain> <cluster-name>

    For me, it returned an error message:

    root@rescue ~/hetzner-sno-provision-host # ./hetzner-sno-prepare-pxe.sh --dry-run \
      --disk-serial <disk-serial> \
      <ocp-version> /root/pull-secret.json <base-domain> <cluster-name>
    ERROR: Missing node hostname. Use --hostname <name>.
    root@rescue ~/hetzner-sno-provision-host # ./hetzner-sno-prepare-pxe.sh --dry-run \
      --disk-serial <disk-serial> \
      --hostname <name> \
      <ocp-version> /root/pull-secret.json <base-domain> <cluster-name>
    ERROR: Missing SSH public key. Use --ssh-public-key-file <path> or set SSH_PUB_KEY.
    root@rescue ~/hetzner-sno-provision-host #
  • In step 3, you include the following command:

    grep nameserver /etc/resolv.conf

    For me, this returned the wrong nameserver and the installation failed. I used this instead:

    resolvectl status | grep -oE '([0-9a-fA-F]{0,4}:){2,}[0-9a-fA-F:.]+|([0-9]{1,3}\.){3}[0-9]{1,3}' | sort -u
  • After the installation is complete, I get the following error:
    image
    I had this issue with both installation methods, manual and script.
    The domain console-openshift-console.apps.sno.example.com is forwarded to oauth-openshift.apps.sno.example.comso I added a DNS record for that domain to see if that changes anything but it didn't.

  • In step 10, you link to LVM Storage. The page does not seem to exist.

    Can you please look the issues mentioned above?

@svenja11 svenja11 added the needs action Something has to be updated label Aug 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs action Something has to be updated

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants