Skip to main content
Illustration by Annie Ruygt of a figure sailing a ship with a balloon overhead
Fly Kubernetes is in closed beta and not recommended for critical production usage. To report issues or provide feedback, email us at beta@fly.io.
To create a Kubernetes cluster, run:
This will start the provisioning process. You’ll be asked for a cluster name, the organization, and the region in which to create the cluster. Once a cluster is provisioned, it will return a kubeconfig that can be used to connect to your cluster’s Kubernetes API server using kubectl. For example:
We’re going to save the output into a file named kubeconfig and create an environment variable KUBECONFIG that points to the file:
Our cluster is accessible over our organization’s private WireGuard network. To connect to our cluster, we need a WireGuard configuration. Follow the Private Network VPN instructions to set up a permanent WireGuard connection to your Fly.io IPv6 private network. From there, you can use standard YAML configuration to drive Kubernetes. Here’s a simple deployment example from the Kubernetes official documentation:
This creates a ReplicaSet with 3 nginx pods. Using kubectl, we can apply this:
We can see our deployment:
We can view the logs of all the pods in the deployment:

What we don’t support

  • Multi-container pods (coming soon)
  • Network policies
  • Horizontal pod autoscaling
  • Gateway API
  • Daemon sets
  • EmptyDir volumes
  • Interactive pods (kubectl run --interactive --tty)
On container specs, we don’t support the following fields:
  • workingDir
  • ports
  • livenessProbe
  • readinessProbe
  • startupProbe
  • resizePolicy
  • stdin
  • stdinOnce
  • tty
  • EnvVarSource.fieldRef
  • EnvVarSource.resourceFieldRef
  • volumeDevices
  • lifecycle
  • terminationMessagePath
  • terminationMessagePolicy
  • imagePullPolicy
  • securityContext

Other caveats

Right now we don’t get logs from a single pod. If you try to get logs from a single pod, you’ll get the logs from every pod in the namespace.