Kokil Thapa - Professional Web Developer in Nepal
Freelancer Web Developer in Nepal with 15+ Years of Experience

Kokil Thapa is an experienced full-stack web developer focused on building fast, secure, and scalable web applications. He helps businesses and individuals create SEO-friendly, user-focused digital platforms designed for long-term growth.

Tinkerbell: Bare-Metal Provisioning

By Kokil Thapa | Last reviewed: September 2026

Tinkerbell: bare-metal provisioning solves a problem every growing team hits eventually. You outgrow VPS instances, but you still need repeatable OS installs on physical machines. Cloud APIs do not exist on a rack in Kathmandu or a colo in Singapore. You need DHCP, network boot, disk imaging, and post-install configuration without clicking through a remote KVM for each server. Linux system administration at scale starts here. Tinkerbell gives you a workflow engine for that entire chain.

What Is Tinkerbell Bare-Metal Provisioning and How Does It Work?

Tinkerbell is an open-source bare-metal provisioning stack maintained under the CNCF. Equinix Metal created it to provision thousands of physical servers daily. The project treats each machine as a workflow target, not a snowflake you configure by hand.

The modern Tinkerbell Stack (v2.x) runs on Kubernetes. Four core services handle the boot chain and execution logic. You define what happens to each server in YAML templates. Tink schedules tasks. HookOS runs them on the bare metal itself.

Tinkerbell Stack ArchitectureKubernetes ClusterHosts Tinkerbell servicesSmeeDHCP + iPXETinkWorkflow engineHegelMetadata APIHookOSLive install envBare-Metal Server PoolPXE boot → workflow → OS installed
Tinkerbell bare-metal provisioning stack: Smee handles network boot, Tink runs workflows, Hegel serves metadata, HookOS executes install tasks on physical hardware.

Core Components Explained

  • Smee — Listens for DHCP requests and serves iPXE scripts. It tells each machine where to fetch HookOS and which workflow to run.
  • Tink — Stores hardware records, workflow templates, and task definitions. It is the control plane for provisioning logic.
  • Hegel — Exposes instance metadata over HTTP, similar to a cloud metadata service. HookOS and install scripts read config from here.
  • HookOS — A minimal Linux environment that boots over the network. It runs workflow actions like disk partitioning, image writes, and reboot commands.

In my experience maintaining production Linux servers, the shift from manual installs to workflow-driven provisioning cuts deployment errors sharply. A missed partition scheme or wrong SSH key no longer depends on who sat at the KVM console that day.

How Do You Install the Tinkerbell Stack on Kubernetes?

Tinkerbell Stack v2 expects a running Kubernetes cluster. That cluster can live on three small VMs while you bootstrap your first bare-metal nodes. Many teams deploy Tinkerbell onto an existing management cluster rather than bare metal itself.

The official Helm chart is the fastest path for a lab setup. You need Helm 3.x, kubectl access, and a namespace ready.

  1. Add the Tinkerbell Helm repository and update your local chart index.
  2. Create a dedicated namespace, for example tinkerbell.
  3. Configure Smee with your provisioning network CIDR and relay settings if DHCP crosses subnets.
  4. Install the stack chart and verify all pods reach Running state.
  5. Register your first hardware record in Tink before powering on the target server.
helm repo add tinkerbell https://tinkerbell.org/charts
helm repo update

kubectl create namespace tinkerbell

helm install tinkerbell tinkerbell/stack \
  --namespace tinkerbell \
  --set smee.hostIP=<PROVISIONING_IP> \
  --set smee.publicIP=<PROVISIONING_IP>

kubectl get pods -n tinkerbell

Smee typically needs host networking or a macvlan/CNI setup so it can answer DHCP on the same L2 segment as your bare-metal machines. This is the most common misconfiguration I see on real deployments. The pod runs fine, but no server ever PXE boots because DHCP packets never reach it.

For deeper Kubernetes networking on physical hosts, see our guide on Kubernetes on bare metal with MetalLB. Storage for workflow artifacts may also need a StorageClass with dynamic provisioning.

How Do You Define Tinkerbell Workflows for OS Installation?

Workflows are the heart of Tinkerbell bare-metal provisioning. A workflow binds a template to a specific hardware ID. The template lists actions executed in order inside HookOS.

You define three Kubernetes custom resources: a Template, a Workflow, and a Hardware record. The hardware record maps MAC addresses to machine identity and metadata.

Example Hardware and Workflow YAML

apiVersion: tinkbell.org/v1alpha1
kind: Hardware
metadata:
  name: worker-01
  namespace: tinkerbell
spec:
  metadata:
    instance:
      hostname: worker-01
      allow_pxe: "true"
  interfaces:
    - dhcp:
        mac: "b4:2e:99:3a:11:01"
        ip:
          address: 10.10.0.21
          netmask: 255.255.255.0
          gateway: 10.10.0.1
---
apiVersion: tinkbell.org/v1alpha1
kind: Template
metadata:
  name: ubuntu-2404-install
  namespace: tinkerbell
spec:
  data: |
    version: "5.4"
    name: ubuntu-2404
    global_timeout: 1800
    tasks:
      - name: os-install
        worker: "{{ .device_1 }}"
        volumes:
          - /dev:/dev
          - /dev/console:/dev/console
          - /lib/firmware:/lib/firmware:ro
        actions:
          - name: disk-wipe
            image: quay.io/tinkerbell-actions/disk-wipe:v1.0.0
          - name: image2disk
            image: quay.io/tinkerbell-actions/image2disk:v1.0.0
            timeout: 900
            environment:
              DEST_DISK: /dev/sda
              COMPRESSED: "true"
              IMG_URL: https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img.tar.gz
          - name: reboot
            image: quay.io/tinkerbell-actions/reboot:v1.0.0

After applying the hardware and template, create a Workflow resource that links them. Power-cycle the machine with PXE enabled in BIOS. Smee answers DHCP. The machine chainloads iPXE, pulls HookOS, and Tink dispatches each action container.

PXE Boot to Provisioned HostPower OnDHCP/iPXEHookOSWorkflowRebootWorkflow Actions Inside HookOSdisk-wipeimage2diskwritefilerebootEach action runs as an OCI container on bare metalHegel serves hostname, SSH keys, and network config
Tinkerbell bare-metal provisioning boot sequence: from PXE network boot through HookOS workflow actions to a fully installed operating system.

Custom actions are plain OCI images. If you already containerize tooling, you can wrap disk layout scripts, RAID setup, or firmware updates as Tinkerbell actions. Validate JSON workflow payloads with a JSON formatter before applying them to the cluster.

How Does Tinkerbell Compare to MAAS, cloud-init, and Terraform?

Teams evaluating bare-metal automation often compare three tools. Each solves a different slice of the problem. Tinkerbell focuses on the install moment. Other tools handle inventory, config, or VM creation.

ToolPrimary RoleTargetBest Fit
TinkerbellNetwork boot + workflow-based OS installPhysical serversKubernetes node farms, edge hardware, owned racks
MAAS (Metal as a Service)Full lifecycle bare-metal cloudPhysical serversUbuntu-centric shops wanting a GUI and IPAM
cloud-initFirst-boot configurationCloud VMs and some metal imagesPost-install user, package, and network setup
TerraformInfrastructure as code provisioningCloud APIs and some providersVPS and API-driven resources, not raw PXE

Tinkerbell and MAAS overlap most directly. MAAS bundles DHCP, DNS, IPAM, and Ubuntu image streaming into one product. Tinkerbell stays composable. You bring your own Kubernetes, storage, and observability stack.

cloud-init does not replace Tinkerbell. HookOS can write a cloud-init datasource to disk during workflow execution. The install workflow and the first-boot config layer work together cleanly.

For config after the OS exists, Ansible or cloud-init still apply. Read our comparison of Ansible vs Terraform for provisioning vs configuration and the follow-up on where each tool stops.

Bare-Metal Tool ChoicePhysical server to provision?YesCloud VPSNeed PXE install?Blank disk, no OSTerraform + APITinkerbellK8s-native workflowsMAASUbuntu all-in-oneOS already installed → cloud-init / AnsiblePost-install config only
Decision guide for Tinkerbell bare-metal provisioning: use Tinkerbell or MAAS for PXE installs, Terraform for cloud APIs, Ansible or cloud-init after the OS exists.

What Production Patterns Work for Tinkerbell Bare-Metal Provisioning?

Lab success with Tinkerbell differs from production reliability. These patterns come from common bare-metal operations practice and align with how I deploy Linux infrastructure for client workloads.

Separate Provisioning and Production Networks

Keep PXE traffic on a dedicated VLAN. Only BMC ports and NICs used for provisioning need access. Production traffic stays isolated. This limits blast radius if a malformed workflow wipes the wrong disk.

GitOps Workflow Templates

Store Template and Hardware YAML in Git. Use Argo CD or Flux to sync them to the management cluster. Pull requests become your change audit trail. Pair this with CI validation so broken templates never reach Smee.

Post-Install Configuration With Ansible

Tinkerbell installs the base OS. Ansible playbooks then harden SSH, install PHP-FPM 8.3 or 8.4, configure MySQL 9.7, and deploy your Laravel 13 application. See Ansible playbooks for PHP server provisioning for a concrete pattern on Ubuntu 24.04 hosts.

Observability From Day One

Export Tink workflow status to Prometheus. Alert when workflows stall in disk-write steps. Disk failures and bad image URLs show up as long-running workflows, not clean error messages. Add Alertmanager rules early. Our Prometheus Alertmanager guide covers routing those alerts.

Production Tinkerbell TopologyGit RepositoryTemplates + hardwareGitOps SyncArgo CD / FluxMgmt K8sTinkerbell StackProvisioning VLAN (PXE / DHCP)Isolated L2 segment for bare-metal bootWorker Node 1K8s / app hostWorker Node 2K8s / app hostWorker Node NK8s / app host
Production Tinkerbell bare-metal provisioning: GitOps-driven templates, a management Kubernetes cluster, and an isolated provisioning VLAN feeding worker nodes.

For Laravel or Symfony workloads on owned hardware, this stack removes manual OS installs before Deployer 7 or GitLab CI can even run. Several sister sites I maintain on shared EC2 today could move to bare-metal workers with the same CI pipeline once Tinkerbell delivers identical Ubuntu images every time.

Hardware costs in Nepal vary widely. A used enterprise 1U server might run Rs 80,000–150,000 (~USD 600–1,100). Colo power adds Rs 5,000–15,000 per month (~USD 37–110). Tinkerbell makes that capital expense worthwhile only if reprovisioning stays hands-off. Manual KVM work erodes the cost advantage fast.

Common Gotchas

  • UEFI vs BIOS boot mode — iPXE scripts differ. Pick one mode per hardware pool and enforce it in firmware settings.
  • Wrong MAC in Hardware CR — Tink ignores unknown machines. The server boots into an old local disk or loops PXE forever.
  • Image URL timeouts — Pulling large cloud images over a slow uplink exceeds default action timeouts. Mirror images locally or raise timeouts.
  • DHCP conflicts — An existing router handing DHCP prevents Smee from owning the boot chain. Disable rogue DHCP or use DHCP relay.

Official references: the Tinkerbell project documentation, the Tinkerbell GitHub repository, and the CNCF Tinkerbell project page for governance and roadmap status.

If you run mixed infrastructure, pair this with AIOps practices for modern infrastructure so provisioning failures surface before a capacity crunch. For ongoing hardening after install, testing and optimization services and support and maintenance cover the application layer above bare metal.

On a booking platform like Adventure Third Pole Trek, consistent server builds mean staging matches production. That reduces deployment surprises when Laravel 13, Livewire, and queue workers land on freshly provisioned hosts.

Key Takeaways

  • Tinkerbell bare-metal provisioning uses Smee, Tink, Hegel, and HookOS to PXE-boot physical servers and run install workflows as OCI actions.
  • Deploy the Stack on Kubernetes via Helm, isolate provisioning traffic on a dedicated VLAN, and register every machine by MAC address before boot.
  • Define install logic in Template YAML; combine disk-wipe, image2disk, and reboot actions for repeatable Ubuntu or custom OS images.
  • Tinkerbell handles the install moment; use cloud-init or Ansible afterward and Terraform only for API-driven cloud resources.
  • Store templates in Git with GitOps sync, export workflow metrics to Prometheus, and alert on stuck provisioning runs.
  • Validate UEFI/BIOS mode, DHCP ownership, and image mirror location before scaling beyond a lab—those four issues cause most production failures.

People Also Ask

Does Tinkerbell require Kubernetes?

Tinkerbell Stack v2 runs its control plane as services on Kubernetes. You need at least a small management cluster to host Smee, Tink, and Hegel. That cluster can itself run on VMs while you bootstrap your first bare-metal nodes.

Can Tinkerbell install Windows or only Linux?

Workflow actions are OCI containers, so Linux installs are the common path with prebuilt actions like image2disk. Windows is possible with custom actions that apply WIM images, but the ecosystem and examples skew heavily toward Linux cloud images.

How is Tinkerbell different from Cobbler or Foreman?

Cobbler and Foreman are traditional bare-metal tools tied to monolithic installs. Tinkerbell uses cloud-native patterns—Kubernetes CRDs, containerized actions, and GitOps-friendly templates—aimed at teams already running K8s infrastructure.

Is Tinkerbell production-ready in 2026?

Equinix Metal used Tinkerbell at scale for years, and the project lives under CNCF governance. Production readiness depends on your team's Kubernetes skills and network design. Start with a staging rack, harden observability, then expand.

Build Repeatable Bare-Metal Infrastructure

Tinkerbell bare-metal provisioning turns rack servers into workflow targets you can reprovision from zero in minutes. That matters when you run Kubernetes workers, database replicas, or dedicated Laravel hosts on hardware you actually own. Start with one machine, one Template, and a mirrored OS image. Expand only after DHCP, MAC registration, and post-install Ansible runs work without manual intervention every time.

Need help designing provisioning pipelines, Kubernetes on metal, or the application layer above it? Contact us or explore enterprise application development and Linux system administration services. For related reading, browse the blog, learn more about my infrastructure work, or review hosting and domain setup options for Nepal-based deployments.

Frequently Asked Questions

Tinkerbell is a CNCF open-source stack that PXE-boots physical servers, runs install tasks in HookOS, and drives everything from YAML workflows in Tink—no hypervisor and no per-server KVM sessions.

Yes. Tinkerbell Stack v2 runs Smee, Tink, Hegel, and related control-plane services on Kubernetes. Start with a small management cluster, even on VMs, before you bootstrap your first bare-metal nodes.

Smee listens for DHCP and serves iPXE scripts pointing each machine at HookOS and its workflow. Tink stores hardware records, templates, and task definitions as the control plane. Hegel exposes instance metadata over HTTP, similar to a cloud metadata service. HookOS is the minimal network-booted Linux environment that runs workflow actions like disk partitioning, image writes, and reboots directly on the physical hardware.

Add the official Tinkerbell Helm repository, create a dedicated namespace such as tinkerbell, and install the stack chart with Smee configured to your provisioning network IP. Verify all pods reach Running state, then register your first hardware record in Tink before powering on the target server. Smee typically needs host networking or a macvlan CNI setup so DHCP packets reach bare-metal machines on the same L2 segment. Workflow artifact storage may also require a StorageClass with dynamic provisioning.

You create three Kubernetes custom resources: a Hardware record mapping MAC addresses to machine identity, a Template listing ordered actions, and a Workflow binding that template to a specific hardware ID. A typical Ubuntu install template chains disk-wipe, image2disk pointing at a cloud image URL, and reboot actions running as OCI containers inside HookOS. After applying the resources, power-cycle the machine with PXE enabled. Smee answers DHCP, chainloads iPXE, pulls HookOS, and Tink dispatches each action in sequence until the OS is written to disk.

Tinkerbell and MAAS overlap most directly on PXE-based OS installs for physical servers. MAAS bundles DHCP, DNS, IPAM, and Ubuntu image streaming into one product with a GUI, which suits Ubuntu-centric shops wanting a full lifecycle bare-metal cloud. Tinkerbell stays composable: you bring your own Kubernetes cluster, storage, and observability stack. Both target owned racks, Kubernetes node farms, and edge hardware, but Tinkerbell fits teams already running cloud-native GitOps workflows rather than wanting a monolithic bare-metal manager.

No. cloud-init handles first-boot configuration such as users, packages, and network settings on cloud VMs and some metal images. Tinkerbell handles the install moment: network boot, disk imaging, and base OS placement. HookOS can write a cloud-init datasource to disk during workflow execution, so the two layers work together cleanly. After Tinkerbell delivers a consistent base image, Ansible or cloud-init still handles hardening, application runtimes, and service configuration on the running host.

Terraform excels at infrastructure-as-code provisioning through cloud APIs and provider plugins for VPS and API-driven resources. It does not perform raw PXE network boot or disk imaging on servers sitting in a rack with no hypervisor API. Use Tinkerbell or MAAS when you need to install an OS on physical hardware you own. Use Terraform when your infrastructure exposes a programmatic API. For many teams the split is clear: Tinkerbell installs the OS, then Ansible or cloud-init configures it, while Terraform manages cloud resources separately.

The most common cause is Smee never receiving DHCP packets from bare-metal machines. The Smee pod may show Running, but without host networking or a macvlan CNI on the provisioning VLAN, DHCP requests never reach it and servers boot from local disk or loop PXE forever. Other frequent blockers include an existing router handing DHCP instead of Smee, a wrong MAC address in the Hardware custom resource so Tink ignores the machine, and UEFI versus BIOS boot mode mismatches that break iPXE script delivery. Validate L2 connectivity and DHCP ownership before scaling beyond a lab.

Keep PXE traffic on a dedicated provisioning VLAN isolated from production networks, limiting blast radius if a workflow targets the wrong disk. Store Template and Hardware YAML in Git and sync with Argo CD or Flux so pull requests become your change audit trail, paired with CI validation of templates. After Tinkerbell installs the base OS, run Ansible playbooks for hardening and application setup. Export Tink workflow status to Prometheus and alert on stuck disk-write steps, because disk failures and bad image URLs appear as long-running workflows rather than clean error messages.

Used enterprise 1U servers in Nepal typically run Rs 80,000–150,000 (~USD 600–1,100). Colocation power adds Rs 5,000–15,000 per month (~USD 37–110) on top of hardware.

Workflow actions are OCI containers, so Linux installs are the common path using prebuilt actions like image2disk with cloud images. Windows is possible with custom actions that apply WIM images, but the ecosystem, documentation, and ready-made action images skew heavily toward Linux. Plan custom container development if Windows provisioning is a hard requirement.

Cobbler and Foreman are traditional bare-metal tools tied to monolithic installation workflows and older operational models. Tinkerbell adopts cloud-native patterns: Kubernetes custom resources for templates and hardware, containerized workflow actions, and GitOps-friendly YAML definitions. Teams already running Kubernetes infrastructure for application workloads can host Tinkerbell on the same management cluster rather than maintaining a separate provisioning appliance. The trade-off is you assemble networking, storage, and observability yourself instead of getting an integrated GUI and IPAM out of the box.

Equinix Metal used Tinkerbell at scale for years to provision thousands of physical servers daily, and the project now lives under CNCF governance with ongoing maintenance. Production readiness in your environment depends on Kubernetes operational skills, correct provisioning network design, and observability around workflow execution. Start with a staging rack, mirror OS images locally to avoid timeout failures on slow uplinks, harden alerting on stuck workflows, and expand only after DHCP, MAC registration, and post-install Ansible runs succeed without manual KVM intervention every time.

UEFI versus BIOS boot mode requires different iPXE scripts, so pick one mode per hardware pool and enforce it in firmware settings. Registering the wrong MAC in the Hardware CR means Tink ignores the machine entirely. Pulling large cloud images over a slow uplink exceeds default action timeouts unless you mirror images locally or raise timeouts. Rogue DHCP from an existing router prevents Smee from owning the boot chain unless you disable it or configure DHCP relay. These four issues cause most failures when teams move from lab success to production racks.

Share this article

0 Comments

Leave a comment

Your email is not published. Comments appear once they have been read. Sign in to have your details filled in.

Quick Contact Options
Choose how you want to connect me: