Skip to content
HN On Hacker News ↗

Kubernetes on Oxide: How Customer Needs Shaped Our Integrations | Oxide Computer Company

▲ 199 points 99 comments by stevehipwell 1w ago HN discussion ↗

Pangram verdict · v3.3

We believe that this text is a mix of AI, AI-assisted, and human-written content.

39 %

AI likelihood · overall

Mixed
65% human-written 27% AI-generated
SEGMENTS · HUMAN 3 of 13
SEGMENTS · AI 3 of 13
WORD COUNT 1,328
PEAK AI % 73% · §6
Analyzed
Aug 13
backend: pangram/v3.3
Segments scanned
13 windows
avg 102 words each
Distribution
65 / 27%
human / AI fraction
Verdict
Mixed
Pangram v3.3

Article text · 1,328 words · 13 segments analyzed

Human AI-generated
§1 Mixed · 37%

In late 2024, customers and prospects were eager to run Kubernetes on Oxide, but we had no supported integrations to help them do it.Kubernetes and Oxide are a natural fit. Kubernetes defines the infrastructure behavior it expects through standard extension points, while Oxide exposes the primitives needed to implement that behavior through APIs. The foundation for integration was there. What was missing was the software and an understanding of which integrations customers actually needed.That was the situation when I joined Oxide as its first Solutions Software Engineer,[1] focused on building software to solve customer problems. My first assignment was to make it easier to deploy and operate Kubernetes on Oxide.In my first week, I was handed two resources to help me get started:A customer-submitted pull request for a Rancher node driverAn early draft of RFD 493 Initial Kubernetes IntegrationsWhat began with those two resources grew into a team effort shaped by a feedback loop.

§2 AI · 73%

Rather than design integrations in the abstract, we followed the problems customers encountered as they moved from provisioning clusters to operating workloads.This post follows those problems across the Kubernetes lifecycle rather than in strict chronological order. Different provisioning workflows led us to Rancher, Omni, and Cluster API. Running clusters required infrastructure reconciliation, exposing applications revealed networking gaps, and stateful workloads exposed storage constraints. At each stage, customer workflows exposed the next gap, shaping both the integrations we built and the platform work still ahead.How do I provision a Kubernetes cluster on Oxide?The first gap we tackled was provisioning.

§3 Mixed · 52%

Our immediate goal was to unblock the customer who had submitted the Rancher node driver pull request. Working through their use case would also give us firsthand experience creating Kubernetes clusters on Oxide and help us uncover the next problems to solve.No single provisioning approach fit all customers' workflows, so we ended up publishing three integrations.Rancher Node DriverBefore we could maintain the customer-submitted integration, we needed to understand the workflow it supported. I had never used Rancher or worked with a node driver, so reviewing the contribution meant learning both.A Rancher node driver is an executable plugin that teaches Rancher how to create and manage virtual machines on a particular infrastructure platform. The Oxide Rancher node driver translates those operations into Oxide API requests. Once installed in Rancher, it lets customers provision Oxide instances as nodes in Rancher-managed Kubernetes clusters.Testing confirmed that the customer’s implementation worked.

§4 Human · 12%

I merged the pull request, added CI/CD and documentation improvements, and published the initial release. Oxide officially had its first Kubernetes integration—and a customer was already using it successfully in production!If you’re a Rancher shop looking to run Kubernetes on Oxide, see our Rancher guide to get started.Omni Infrastructure ProviderCustomers expressed interest in using Sidero Labs' Omni to provision Kubernetes clusters running Talos Linux. Omni connects to infrastructure platforms through infrastructure providers, programs that create Talos Linux instances and register them with Omni.With KubeCon North America 2025 a few months away, we saw an opportunity to partner with Sidero Labs to build and showcase an Oxide infrastructure provider for Omni. We had seven weeks to complete it before our Oxide+Sidero event.[2] Building against a second provisioning platform would also test Oxide’s APIs across distinct customer workflows.The integration work uncovered several issues across Omni and Talos Linux. I brought those issues to Sidero Labs in siderolabs/omni#1633, where their team was eager to work with us—a lovely reminder of RFD 68 Partnership as Shared Values.The most memorable issue was siderolabs/talos#11948.

§5 Mixed · 33%

Oxide uses a FAT12 filesystem for cloud-init user-data, not ISO 9660, but Talos’s filesystem probe only attempted to read an ISO 9660 superblock from the NoCloud configuration disk.

§6 AI · 73%

When that read failed, the probe stopped instead of trying other formats such as VFAT or MS-DOS. As a result, Talos never read the Oxide user-data containing the configuration needed to join Omni.

§7 Human · 2%

The fix would not be released in time for KubeCon, leaving us with a rather funny workaround.The workaround right now is to pad the user-data with comments to increase its size enough that it uses an ISO 9660 superblock.KubeCon arrived and we hosted an Oxide+Sidero event to showcase the Oxide infrastructure provider for Omni. Customers could now use this infrastructure provider to provision Oxide instances running Talos Linux as nodes in Omni-managed Kubernetes clusters.If you’re an Omni or Talos Linux shop looking to run Kubernetes on Oxide, see our Omni guide to get started.Cluster API ProviderWe knew we wanted to build an infrastructure provider for Kubernetes Cluster API (CAPI) when we first wrote RFD 493 Initial Kubernetes Integrations.

§8 Mixed · 54%

Cluster API offered something our first two integrations did not—an upstream, provider-extensible API for managing clusters without requiring a third-party platform like Rancher or Omni.CAPI lets operators declaratively create, scale, upgrade, and delete Kubernetes clusters through Kubernetes custom resources.

§9 AI · 72%

Infrastructure providers handle the platform-specific work, such as creating and deleting virtual machines. Building one is a significant investment. At the time, customer demand and engineering capacity did not yet justify that investment, so the project was deferred.Eventually, both changed. Customers began asking for a CAPI provider, and the Solutions Software Engineering team grew.

§10 Human · 27%

My teammates Josh and Brandon took ownership of the work and released Cluster API Provider Oxide (CAPOx), giving customers a Kubernetes-native way to provision clusters on Oxide.The Cluster API workflow also exercises several of our other integrations, allowing us to dogfood[3] the end-to-end cluster workflow. The Kubernetes Image Builder uses our Packer plugin to create CAPI-ready Oxide VM images, which CAPOx uses when provisioning instances. Clusters provisioned with CAPOx also use the separately installed Oxide cloud controller manager (CCM) to integrate Kubernetes with Oxide at runtime.If you want to provision Kubernetes clusters on Oxide with Cluster API, see our Cluster API guide to get started.How does Kubernetes track Oxide instances?Provisioning integrations create and manage Oxide instances, but they do not reconcile those instances with Kubernetes Node objects.

§11 Mixed · 68%

Without that reconciliation, a cluster could not reliably determine whether an unreachable Kubernetes node was temporarily unavailable or whether its backing Oxide instance had been deleted.We needed a component that ran in each cluster, spoke to the Oxide API, and continuously reconciled Oxide infrastructure with Kubernetes state. Kubernetes provides a standard extension point for this purpose: the cloud controller manager (CCM). A CCM lets infrastructure-specific controllers integrate Kubernetes resources with an infrastructure provider’s API without adding provider-specific code to Kubernetes itself.We built the Oxide cloud controller manager to connect Kubernetes with Oxide. Its node controller keeps Kubernetes Node objects synchronized with their backing Oxide instances, recording details such as instance IDs and network addresses, and reporting whether each instance is running, shut down, or no longer exists. Kubernetes uses this information to initialize nodes and safely remove them when their backing instances are deleted.The CCM does not create instances or provision clusters. That remains the job of provisioning integrations such as the Rancher node driver, the Omni infrastructure provider, and CAPOx. Instead, it provides a runtime integration shared across those provisioning workflows.Importantly, building the CCM gave us a durable extension point inside each cluster. As Oxide evolves, we can add new infrastructure-aware controllers to the CCM rather than update every provisioning integration.With that runtime extension point in place, we could address another layer of the Kubernetes experience: exposing applications.

§12 Mixed · 37%

The CCM architecture also defines a service controller for Kubernetes LoadBalancer services, giving us a place to address the next customer problem.How do I use LoadBalancer services?One of the capabilities customers expect from cloud-integrated Kubernetes is support for Service objects of type LoadBalancer. When a user creates one, Kubernetes asks the cloud provider’s service controller to provision the necessary infrastructure and publish its address in the Service status. There was just one problem: Oxide did not yet offer a native load balancer.Oxide did, however, have floating IPs.

§13 Mixed · 61%

Floating IPs are addresses from a rack’s external IP pools that can be attached to and detached from instances, making those instances reachable from outside their VPCs. Using floating IPs offered a way to unblock LoadBalancer services.