Machine-controller supports multiple operating systems across various cloud providers, allowing you to choose the best OS for your workload requirements.
Ubuntu is the most widely supported and recommended operating system for machine-controller.
Flatcar is a minimal, container-optimized Linux distribution designed for running containerized workloads.
Enterprise-grade Linux distribution from Red Hat.
Community-driven enterprise OS, 100% bug-for-bug compatible with RHEL.
| Ubuntu | Flatcar | RHEL | Rocky Linux | |
|---|---|---|---|---|
| AWS | ✓ | ✓ | ✓ | ✓ |
| Azure | ✓ | ✓ | ✓ | ✓ |
| DigitalOcean | ✓ | ✗ | ✗ | ✓ |
| Google Cloud Platform | ✓ | ✓ | ✗ | ✗ |
| Hetzner Cloud | ✓ | ✗ | ✗ | ✓ |
| KubeVirt | ✓ | ✓ | ✓ | ✓ |
| Nutanix | ✓ | ✗ | ✗ | ✗ |
| OpenStack | ✓ | ✓ | ✓ | ✓ |
| VMware Cloud Director | ✓ | ✓ | ✗ | ✗ |
| vSphere | ✓ | ✓ | ✓ | ✓ |
Legend: ✓ = Supported, ✗ = Not supported
The operating system is set via machine.spec.providerConfig.operatingSystem:
spec:
template:
spec:
providerSpec:
value:
operatingSystem: "ubuntu" # or: flatcar, rhel, rockylinux
operatingSystemSpec:
# OS-specific configuration
distUpgradeOnBoot: false
disableAutoUpdate: true
ubuntu - Ubuntu Linuxflatcar - Flatcar Container Linuxrhel - Red Hat Enterprise Linuxrockylinux - Rocky LinuxCommon options across operating systems:
operatingSystemSpec:
# Perform distribution upgrade on first boot
distUpgradeOnBoot: false
# Disable automatic updates (recommended for production)
disableAutoUpdate: true
# Provisioning utility (flatcar specific)
provisioningUtility: "ignition" # or "cloud-init"
# RHEL subscription (RHEL only)
rhelSubscriptionManagerUser: ""
rhelSubscriptionManagerPassword: ""
The table below lists the OS versions validated in our automated tests. Machine-controller may work with other OS versions, but official support is only provided for these versions.
| Supported Versions | |
|---|---|
| Ubuntu | 24.04 LTS |
| Flatcar | Stable, Beta, Alpha channels |
| RHEL | 9.x |
| Rocky Linux | 9.x |
Most operating systems use cloud-init for provisioning:
Cloud-init handles:
Flatcar primarily uses Ignition for provisioning:
Consider the following factors:
apiVersion: cluster.k8s.io/v1alpha1
kind: MachineDeployment
metadata:
name: ubuntu-workers
namespace: kube-system
spec:
replicas: 3
selector:
matchLabels:
name: ubuntu-workers
template:
metadata:
labels:
name: ubuntu-workers
spec:
providerSpec:
value:
cloudProvider: "aws"
cloudProviderSpec:
region: "us-east-1"
instanceType: "t3.medium"
# ... cloud provider config
operatingSystem: "ubuntu"
operatingSystemSpec:
distUpgradeOnBoot: false
disableAutoUpdate: true
versions:
kubelet: "<YOUR-KUBERNETES-VERSION>"
To migrate from one OS to another:
See individual OS guides for specific migration instructions.
See the Troubleshooting Guide for detailed solutions.