diff --git a/about/pricing.html.markerb b/about/pricing.html.markerb index 501c3b355b..7fbb66f497 100644 --- a/about/pricing.html.markerb +++ b/about/pricing.html.markerb @@ -208,13 +208,6 @@ Static egress IPs for Machines provide dedicated outbound IP addresses for your [Community support](https://community.fly.io/) is included for all customers, regardless of usage level. You can get access to a support plan by purchasing a Standard ($29/month), Premium ($199/month), or Enterprise (starting at $2500/month) package in the **Support** section of your dashboard. For more about Support, see [Support at Fly.io](/docs/about/support/). -## Fly Kubernetes - -[Fly Kubernetes](/docs/kubernetes/) (FKS) is a managed Kubernetes service that runs on Fly.io. - -* $75/month per cluster -* Plus the cost of [compute](#compute) and [Fly volumes](#persistent-storage-volumes) that you create - ## Extensions Fly.io offers managed services operated by third parties, such as [Tigris Object Storage](/docs/tigris) and [Upstash Redis](/docs/upstash/redis/). diff --git a/flyctl/cmd/fly_extensions_kubernetes.md b/flyctl/cmd/fly_extensions_kubernetes.md deleted file mode 100644 index 8261da469b..0000000000 --- a/flyctl/cmd/fly_extensions_kubernetes.md +++ /dev/null @@ -1,32 +0,0 @@ -Provision and manage Kubernetes clusters - - -## Usage -~~~ -fly extensions kubernetes [command] [flags] -~~~ - -## Available Commands -* [create](/docs/flyctl/extensions-kubernetes-create/) - Provision a Kubernetes cluster for an organization -* [destroy](/docs/flyctl/extensions-kubernetes-destroy/) - Permanently destroy a Kubernetes cluster -* [list](/docs/flyctl/extensions-kubernetes-list/) - List your Kubernetes clusters -* [save-kubeconfig](/docs/flyctl/extensions-kubernetes-save-kubeconfig/) - Save the kubeconfig file of your cluster - -## Options - -~~~ - -h, --help help for kubernetes -~~~ - -## Global Options - -~~~ - -t, --access-token string Fly API Access Token - --debug Print additional logs and traces - --verbose Verbose output -~~~ - -## See Also - -* [fly extensions](/docs/flyctl/extensions/) - Extensions are additional functionality that can be added to your Fly apps - diff --git a/flyctl/cmd/fly_extensions_kubernetes_create.md b/flyctl/cmd/fly_extensions_kubernetes_create.md deleted file mode 100644 index 825d7685da..0000000000 --- a/flyctl/cmd/fly_extensions_kubernetes_create.md +++ /dev/null @@ -1,30 +0,0 @@ -Provision a Kubernetes cluster for an organization - - -## Usage -~~~ -fly extensions kubernetes create [flags] -~~~ - -## Options - -~~~ - -h, --help help for create - -n, --name string The name of your cluster - -o, --org string The target Fly.io organization - --output string The output path to save the kubeconfig file - -r, --region string The target region (see 'flyctl platform regions') -~~~ - -## Global Options - -~~~ - -t, --access-token string Fly API Access Token - --debug Print additional logs and traces - --verbose Verbose output -~~~ - -## See Also - -* [fly extensions kubernetes](/docs/flyctl/extensions-kubernetes/) - Provision and manage Kubernetes clusters - diff --git a/flyctl/cmd/fly_extensions_kubernetes_destroy.md b/flyctl/cmd/fly_extensions_kubernetes_destroy.md deleted file mode 100644 index 3e0bd94ebe..0000000000 --- a/flyctl/cmd/fly_extensions_kubernetes_destroy.md +++ /dev/null @@ -1,26 +0,0 @@ -Permanently destroy a Kubernetes cluster - -## Usage -~~~ -fly extensions kubernetes destroy [name] [flags] -~~~ - -## Options - -~~~ - -h, --help help for destroy - -y, --yes Accept all confirmations (also --auto-confirm) -~~~ - -## Global Options - -~~~ - -t, --access-token string Fly API Access Token - --debug Print additional logs and traces - --verbose Verbose output -~~~ - -## See Also - -* [fly extensions kubernetes](/docs/flyctl/extensions-kubernetes/) - Provision and manage Kubernetes clusters - diff --git a/flyctl/cmd/fly_extensions_kubernetes_list.md b/flyctl/cmd/fly_extensions_kubernetes_list.md deleted file mode 100644 index bbdf02c50c..0000000000 --- a/flyctl/cmd/fly_extensions_kubernetes_list.md +++ /dev/null @@ -1,25 +0,0 @@ -List your Kubernetes clusters - -## Usage -~~~ -fly extensions kubernetes list [flags] -~~~ - -## Options - -~~~ - -h, --help help for list -~~~ - -## Global Options - -~~~ - -t, --access-token string Fly API Access Token - --debug Print additional logs and traces - --verbose Verbose output -~~~ - -## See Also - -* [fly extensions kubernetes](/docs/flyctl/extensions-kubernetes/) - Provision and manage Kubernetes clusters - diff --git a/flyctl/cmd/fly_extensions_kubernetes_save-kubeconfig.md b/flyctl/cmd/fly_extensions_kubernetes_save-kubeconfig.md deleted file mode 100644 index 09dd11820d..0000000000 --- a/flyctl/cmd/fly_extensions_kubernetes_save-kubeconfig.md +++ /dev/null @@ -1,26 +0,0 @@ -Save the kubeconfig file of your cluster - -## Usage -~~~ -fly extensions kubernetes save-kubeconfig [cluster name] [flags] -~~~ - -## Options - -~~~ - -h, --help help for save-kubeconfig - --output string The output path to save the kubeconfig file -~~~ - -## Global Options - -~~~ - -t, --access-token string Fly API Access Token - --debug Print additional logs and traces - --verbose Verbose output -~~~ - -## See Also - -* [fly extensions kubernetes](/docs/flyctl/extensions-kubernetes/) - Provision and manage Kubernetes clusters - diff --git a/index.html.md b/index.html.md index e8b443b7a0..27fe6d5107 100644 --- a/index.html.md +++ b/index.html.md @@ -35,7 +35,6 @@ brew install flyctl
  • Security
  • Networking
  • Managed Postgres
  • -
  • Fly Kubernetes
  • Database & Storage
  • Monitoring
  • diff --git a/kubernetes/clusters.html.markerb b/kubernetes/clusters.html.markerb deleted file mode 100644 index 1b0fc70e4a..0000000000 --- a/kubernetes/clusters.html.markerb +++ /dev/null @@ -1,65 +0,0 @@ ---- -title: Create an FKS cluster -layout: docs -toc: false -nav: firecracker ---- - -
    -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: - -```cmd -fly ext k8s create [--name | --org | --region ] -``` - -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: - -```yaml -apiVersion: v1 -clusters: - - name: fks-flyio-fksdemo - cluster: - certificate-authority-data: ... - server: https://fks-flyio-fksdemo.flycast:6443 - extensions: - ... - ... -contexts: - - context: - cluster: fks-flyio-fksdemo - user: default - name: default -current-context: default -kind: Config -preferences: {} -users: - - name: default - user: - ... - ... -``` - -Your cluster is accessible over your organization's [private WireGuard network](/docs/reference/private-networking). To connect to your cluster, you need a WireGuard configuration. - -Follow the [Private Network VPN instructions](/docs/networking/private-networking/#private-network-vpn) to set up a permanent WireGuard connection to your Fly.io IPv6 private network. - -Once set up, you can use `kubectl`: - -``` -> kubectl get ns -NAME STATUS AGE -kube-public Active 22d -kube-node-lease Active 22d -default Active 22d -kube-system Active 22d -``` - -## Related topics - -- [Connect to an FKS cluster](/docs/kubernetes/connect-clusters/) -- [Configure FKS Services](/docs/kubernetes/services) diff --git a/kubernetes/connect-clusters.html.markerb b/kubernetes/connect-clusters.html.markerb deleted file mode 100644 index 1f9736cc85..0000000000 --- a/kubernetes/connect-clusters.html.markerb +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: Connect to an FKS cluster -layout: docs -toc: false -nav: firecracker ---- - -
    -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. -
    - -Fly Kubernetes clusters are accessible over an organization's [private WireGuard network](/docs/reference/private-networking). To connect to a cluster, you need a WireGuard configuration. -Follow the [Private Network VPN instructions](/docs/networking/private-networking/#private-network-vpn) to set up a permanent WireGuard connection to your Fly.io IPv6 private network. - -To connect to your cluster, you need a kubeconfig file. These are generated when your [cluster is created](/docs/kubernetes/clusters/). They can also be retrieved using `flyctl`. -First, we need our cluster name: - -``` -> fly ext k8s ls -NAME ORG PRIMARY REGION -fks-flyio-fksdemo flyio iad -``` - -Then, we can use `flyctl` to save our kubeconfig to disk. It is automatically saved with the name `kubeconfig` in the current directory - -``` -> fly ext k8s save-kubeconfig -> ls -kubeconfig somefile.txt -``` - -With the kubeconfig file, you can connect to your cluster. To make life easier, you can move the kubeconfig file to the default location kubectl searches for it, `$HOME/.kube`, under the name `config`. -Alternatively set the environment variable `KUBECONFIG` to the path to the kubeconfig file - -``` -export KUBECONFIG=/path/to/kubeconfig -``` - -Once set up, you can use `kubectl`: - -``` -> kubectl get ns -NAME STATUS AGE -kube-public Active 22d -kube-node-lease Active 22d -default Active 22d -kube-system Active 22d -``` - -## Related topics - -- [Create an FKS cluster](/docs/kubernetes/clusters/) -- [Configure FKS Services](/docs/kubernetes/services) diff --git a/kubernetes/fks-features.html.markerb b/kubernetes/fks-features.html.markerb deleted file mode 100644 index 9377cfb73e..0000000000 --- a/kubernetes/fks-features.html.markerb +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: Fly Kubernetes features -layout: docs -nav: firecracker ---- - -
    - Illustration by Annie Ruygt of a ship's wheel -
    - -Fly Kubernetes benefits from the features of the Fly.io platform. - -## Fly.io infrastructure - -FKS is built on top of Fly.io infrastructure: - -* Compute is backed by [Fly Machines](/docs/machines/), our fast-launching VMs built with Firecracker. -* Volumes are handled with [Fly Volumes](/docs/volumes/); local, fast NVMe drives. -* Networking is built on our [internal WireGuard mesh](/docs/networking/private-networking/#private-network-vpn) with routing performed by Fly Proxy. - -## Cluster scalability - -Pods are scheduled across our fleet of bare-metal servers, not limited to a specific node. Workloads are automatically distributed across the fleet, enabling a cluster to scale with ease. - -## Security - -With Fly Kubernetes, you get all the security benefits of our platform. - - * Private network traffic flows over our internal WireGuard mesh, ensuring it is encrypted. - * FKS clusters are secured within a private VPN. - * Compute is built on Firecracker microVMs — lightweight and secure virtual machines. This provides improved isolation guarantees ensuring your application code is safe. - * Volumes are encrypted at rest for additional protection of the data on the volume. - * Secrets are automatically stored in an encrypted vault. - -## Simple and secure client authentication - -Connect to your cluster using kubectl. Clients are authenticated with our API tokens. They expire after an hour and are rotated automatically after expiration. - -## Not supported - -There are a few features we don't support yet but are part of the roadmap: - - * Sidecars and init processes - * EmptyDir volumes - * Horizontal pod autoscaling - * Network policies - * CronJob - -Features we don't support: - - * Node affinity - * Inter-pod (anti) affinity - * DaemonSets - -## Pricing - -See the [pricing page](/docs/about/pricing/#fly-kubernetes) for information on FKS pricing. diff --git a/kubernetes/fks-quickstart.html.markerb b/kubernetes/fks-quickstart.html.markerb deleted file mode 100644 index 1b02c5c670..0000000000 --- a/kubernetes/fks-quickstart.html.markerb +++ /dev/null @@ -1,162 +0,0 @@ ---- -title: Fly Kubernetes Quickstart -layout: docs -nav: firecracker ---- - -
    - 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: - -```cmd -fly ext k8s create -``` -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: - -```yaml -apiVersion: v1 -clusters: - - name: fks-flyio-fksdemo - cluster: - certificate-authority-data: ... - server: https://fks-flyio-fksdemo.flycast:6443 - extensions: - ... - ... -contexts: - - context: - cluster: fks-flyio-fksdemo - user: default - name: default -current-context: default -kind: Config -preferences: {} -users: - - name: default - user: - ... - ... -``` - -We're going to save the output into a file named `kubeconfig` and create an environment variable `KUBECONFIG` that points to the file: - -```cmd -export KUBECONFIG=/path/to/kubeconfig/file -``` - -Our cluster is accessible over our organization's [private WireGuard network](/docs/reference/private-networking). To connect to our cluster, we need a WireGuard configuration. - -Follow the [Private Network VPN instructions](/docs/networking/private-networking/#private-network-vpn) 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](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#creating-a-deployment): - -```yaml -apiVersion: apps/v1 -kind: Deployment -metadata: - name: nginx-deployment - labels: - app: nginx -spec: - replicas: 3 - selector: - matchLabels: - app: nginx - template: - metadata: - labels: - app: nginx - spec: - containers: - - name: nginx - image: nginx:1.14.2 - ports: - - containerPort: 80 -``` - -This creates a `ReplicaSet` with 3 nginx pods. Using kubectl, we can apply this: - -```cmd -kubectl apply -f https://k8s.io/examples/controllers/nginx-deployment.yaml -``` -```output -deployment.apps/nginx-deployment created -``` - -We can see our deployment: - -```cmd -kubectl get deployments -``` -```output -NAME READY UP-TO-DATE AVAILABLE AGE -nginx-deployment 3/3 3 3 7s -``` - -We can view the logs of all the pods in the deployment: - -```cmd -kubectl logs -l app=nginx -``` -```output -Pulling container image registry-1.docker.io/library/nginx:1.14.2 -Pulling container image registry-1.docker.io/library/nginx:1.14.2 -Pulling container image registry-1.docker.io/library/nginx:1.14.2 -Successfully prepared image registry-1.docker.io/library/nginx:1.14.2 (1.597714717s) -Successfully prepared image registry-1.docker.io/library/nginx:1.14.2 (1.493016957s) -Successfully prepared image registry-1.docker.io/library/nginx:1.14.2 (1.604003393s) -Configuring firecracker -Configuring firecracker -Configuring firecracker -... -``` - -## 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. - -## Related topics - -- [Create an FKS cluster](/docs/kubernetes/clusters/) -- [Connect to an FKS cluster](/docs/kubernetes/connect-clusters/) -- [Configure FKS Services](/docs/kubernetes/services) diff --git a/kubernetes/index.html.markerb b/kubernetes/index.html.markerb deleted file mode 100644 index d1fa72a4eb..0000000000 --- a/kubernetes/index.html.markerb +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Fly Kubernetes -layout: docs -toc: false -nav: firecracker ---- - -
    -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. -
    - -Fly Kubernetes (FKS) is a fully managed Kubernetes service built on the Fly.io platform. Deploy Kubernetes clusters without the hassle of managing and operating the control plane. Learn more about [why and how we made FKS](https://fly.io/blog/fks/) in our blog. - -- **[Fly Kubernetes quickstart](/docs/kubernetes/fks-quickstart/):** Get up and running right away with our quickstart guide. - -- **[Fly Kubernetes features](/docs/kubernetes/fks-features/):** An overview of FKS benefits and supported features. - -- **[Create an FKS cluster](/docs/kubernetes/clusters/):** Create an FKS cluster with flyctl. - -- **[Connect to an FKS cluster](/docs/kubernetes/connect-clusters/):** Connect to an FKS cluster on your private network. - -- **[Configure FKS Services](/docs/kubernetes/services):** Configure ClusterIP and LoadBalancer services. - -- **[Use volumes with FKS](/docs/kubernetes/using-volumes/):** Use Fly Volumes for PersistentVolumes in FKS. diff --git a/kubernetes/services.html.markerb b/kubernetes/services.html.markerb deleted file mode 100644 index 27ace4ef68..0000000000 --- a/kubernetes/services.html.markerb +++ /dev/null @@ -1,184 +0,0 @@ ---- -title: Configure FKS Services -layout: docs -toc: false -nav: firecracker ---- - -
    -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. -
    - -A [Kubernetes Service](https://kubernetes.io/docs/concepts/services-networking/service/+external) exposes applications running on your cluster. -Fly Kubernetes supports ClusterIP and LoadBalancer Services. - -You can create a Service with a service configuration file. Here's an example ClusterIP service: - -```yaml -apiVersion: v1 -kind: Service -metadata: - name: fksdemo-service -spec: - selector: - app: fksdemo - ports: - - name: http - protocol: TCP - port: 80 - targetPort: 8080 -``` - -Using kubectl, create the service: - -``` -> kubectl apply -f service.yaml -``` - -To view your service: - -``` -> kubectl get svc -NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE -kubernetes ClusterIP fdaa:3:dde8:0:1::3a 443/TCP 32h -fksdemo-service ClusterIP fdaa:3:dde8:0:1::3b 80/TCP 11s -``` - -## Exposing Services publicly - -Services can be exposed to the public internet with a Service of type LoadBalancer. - -``` -apiVersion: v1 -kind: Service -metadata: - name: fksdemo-service-public -spec: - selector: - app: fksdemo - ports: - - name: http - protocol: TCP - port: 80 - targetPort: 8080 - type: LoadBalancer -``` - -The domain name and IP address to access the Service over the internet can be found using kubectl. In the below output, the values are found -under the `EXTERNAL-IP` column. - -``` -> kubectl get svc -NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE -kubernetes ClusterIP fdaa:3:dde8:0:1::3a 443/TCP 32h -fksdemo-service ClusterIP fdaa:3:dde8:0:1::3b 80/TCP 26m -fksdemo-service-public LoadBalancer fdaa:3:dde8:0:1::3c fksdemo-service-public.svc.fks-default-vz5dlqz7v4ylrnpq.fly.dev,2a09:8280:1::31:ab8:0,137.66.25.254 80/TCP 8s -``` - -## Fly.io connection Handlers - -Fly.io connection handlers modify your connection before it reaches your application. -Learn more about [connection handlers](/docs/networking/services/#connection-handlers). - -Connection handlers are supported with a custom annotation to a Service object. The annotations have the form: - -```yaml -"service.fly.io/-handlers": "" -``` - -The example below adds an HTTP and TLS handler for port 443. - -```yaml -apiVersion: v1 -kind: Service -metadata: - name: fksdemo-service - annotations: - "service.fly.io/https-handlers": "http,tls" # can replace https with 443 -spec: - selector: - app: fksdemo - ports: - - name: http - protocol: TCP - port: 80 - targetPort: 8080 - - name: https - protocol: TCP - port: 443 - targetPort: 8080 -``` - -### TLS Options - -[TLS options](https://fly.io/docs/reference/configuration/#services-ports-tls_options) are used to configure the TLS settings -of a service with a TLS connection handler. Fly's edge will use these settings to terminate TLS for your application. Refer -to the [documentation](https://fly.io/docs/reference/configuration/#services-ports-tls_options) for details. - -TLS options are set using custom annotations. There are 3 annotations, one for each setting: - - - * `service.fly.io/-tls-alpn` - Sets the ALPN for negotiation with clients. Values must be comma-separated. - * `service.fly.io/-tls-versions` - Sets which TLS versions are allowed. Values must be comma-separated. - * `service.fly.io/-tls-default-self-signed` - If true, serves a self-signed certificate if none exists. - -The most common use case for TLS options is to support gRPC. For example: - -```yaml -apiVersion: v1 -kind: Service -metadata: - name: fksdemo-service - annotations: - "service.fly.io/https-handlers": "tls" - "service.fly.io/https-tls-alpn": "h2" -spec: - selector: - app: fksdemo - ports: - - name: http - protocol: TCP - port: 80 - targetPort: 8080 - - name: https - protocol: TCP - port: 443 - targetPort: 8080 -``` - -## Concurrency limits - -[Concurrency limits](/docs/reference/configuration/#services-concurrency) are used to limit the load on your application. -By default, the soft limit is set to 20 and the hard limit is set to 25. -Learn more about [concurrency limits](/docs/reference/configuration/#services-concurrency). - -They can be configured on your Services using custom annotations. There are 3 annotations used to configure the limits: - - * `service.fly.io/concurrency-kind` - sets the metric used to measure concurrency - * `service.fly.io/concurrency-limit-soft` - sets the concurrency soft limit - * `service.fly.io/concurrency-limit-hard` - sets the concurrency hard limit - -Below is an example of setting this in your Service - -```yaml -apiVersion: v1 -kind: Service -metadata: - name: fksdemo-service - annotations: - "service.fly.io/concurrency-kind": "connections" - "service.fly.io/concurrency-limit-soft": 20 - "service.fly.io/concurrency-limit-hard": 25 -``` - -## Not supported - -We currently do not support: - -* NodePort Services -* UDP protocol - -## Related topics - -- [Create an FKS cluster](/docs/kubernetes/clusters/) -- [Connect to an FKS cluster](/docs/kubernetes/connect-clusters/) diff --git a/kubernetes/using-gpus.html.markerb b/kubernetes/using-gpus.html.markerb deleted file mode 100644 index 77d0cb160a..0000000000 --- a/kubernetes/using-gpus.html.markerb +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: Using GPUs with FKS -layout: docs -toc: false -nav: firecracker ---- - -
    -**GPUs are deprecated and will be unavailable after August 1.** -
    - -
    -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. -
    - -GPUs are available on Fly Kubernetes. Information about our GPUs can be found in our [Fly GPUs documentation](https://fly.io/docs/gpus/#what-can-i-use-fly-gpus-for). - -GPUs are consumed by requesting a GPU resource, similarly to requesting `cpu` or `memory`. There is a custom resource `gpu.fly.io/` that is used to request -GPUs. Note that: - -* The available GPU types are: `a10`, `l40s`, `a100-pcie-40gb` and `a100-sxm4-80gb`. Check the [documentation](https://fly.io/docs/gpus/#regions-with-gpus) for which regions they are available in. -* Pods are deployed in the same region as your cluster. You can place your Pod in a particular region by adding a `fly.io/region: ` annotation to your Pod's metadata. -* GPU resource requests should only specify the `limits` section. -* You can specify CPU and memory resources alongside GPU resources. The minimum number of cores supported is 2 and the minimum amount of memory is 4096 MiB. The VMs -deployed will always be performance Machines. -* The valid number of GPUs you can request are: 1, 2, 4 and 8. -* You can only request one type of GPU at a time - -Below is an example of a Pod with a GPU: - -```yaml -apiVersion: v1 -kind: Pod -metadata: - name: ollama - annotations: - fly.io/region: ams # optional -spec: - containers: - - name: ollama - image: ollama/ollama:latest - resources: - limits: - gpu.fly.io/a100-80gb: 1 -``` - -This will deploy a GPU Machine with the size `a100-80gb` with 1 GPU core in the region `ams`. diff --git a/kubernetes/using-volumes.html.markerb b/kubernetes/using-volumes.html.markerb deleted file mode 100644 index 9198fb3e21..0000000000 --- a/kubernetes/using-volumes.html.markerb +++ /dev/null @@ -1,167 +0,0 @@ ---- -title: Using volumes with FKS -layout: docs -toc: true -nav: firecracker ---- - -
    -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. -
    - -Fly Kubernetes supports [persistent volumes](https://kubernetes.io/docs/concepts/storage/persistent-volumes/+external) and -[generic ephemeral volumes](https://kubernetes.io/docs/concepts/storage/ephemeral-volumes/#generic-ephemeral-volumes+external). -There are general considerations to keep in mind when using volumes in Fly Kubernetes: - -* Volumes are built on top of [Fly Volumes](/docs/volumes/). They are local NVME drives and require your Pod to be deployed in the same region as the volume. -* Only one persistent or ephemeral volume can be mounted at a time. -* The maximum storage size available is 500GB. - -## Persistent Volumes - -PersistentVolumes are managed through PersistentVolumeClaims (PVCs). PersistentVolumes (PVs) are tied to the lifecycle of a -PersistentVolumeClaim. By default, creating a PVC creates an underlying PV and deleting a PVC deletes the PV bound to it. - -Below is an example of configuring a PersistentVolume to use with a Pod: - -```yaml -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - name: myclaim -spec: - selector: - matchLabels: - region: iad - storageClassName: flyio-volume - accessModes: - - ReadWriteOncePod - resources: - requests: - storage: 5Gi ---- -apiVersion: v1 -kind: Pod -metadata: - name: nginx -spec: - containers: - - name: nginx - image: nginx:latest - volumeMounts: - - mountPath: "/var/www/html" - name: mypd - resources: - limits: - memory: "512Mi" - cpu: "1" - volumes: - - name: mypd - persistentVolumeClaim: - claimName: myclaim -``` - -In our configuration: - -* The `storageClassName` must be set to either `flyio-volume` or `flyio-volume-retain`. You can view the available storage classes with `kubectl get sc`. The default StorageClass is `flyio-volume`. -* `selector` is optional. It serves a dual purpose. First, it ensures that a PVC is bound to a PV in the region specified in the selector. -Second, if a PVC requires dynamic provisioning of the underlying Fly Volume, it is provisioned in the specified region. If not set, the -volume is created in the region of the cluster. -* `accessModes` only supports `ReadWriteOncePod`. - -After applying the configuration, you can view the PVC and PV generated by the definition using `kubectl`. - -``` -> kubectl get pvc -NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE -myclaim Bound pvc-r1plo75g59d25l0r 5Gi RWOP flyio-volume 9s -``` - -``` -> kubectl get pv -NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE -pvc-r1plo75g59d25l0r 5Gi RWOP Delete Bound default/myclaim flyio-volume 55s -``` - -### Reclaim policy - -Fly Kubernetes supports both the `Delete` and `Retain` policy for PersistentVolumes. - -* StorageClass `flyio-volume` has a reclaim policy set to `Delete` -* StorageClass `flyio-volume-retain` has a reclaim policy set to `Retain` - -By default, `flyio-volume` is used. - -When using the `flyio-volume-retain` StorageClass, you are responsible for deleting the PersistentVolume object and its underlying Fly Volume. -The details of the underlying storage are found in the annotations of the PersistentVolume. Using the PV from above - -``` -> kubectl describe pv pvc-r1plo75g59d25l0r -Name: pvc-r1plo75g59d25l0r -Labels: region=iad -Annotations: fly.io/app: fks-default-vz5dlqz7v4ylrnpq - fly.io/region: iad - pv.kubernetes.io/provisioned-by: volume.csi.fly.io - volume.fly.io/id: vol_r1plo75g59d25l0r -Finalizers: [kubernetes.io/pv-protection] -StorageClass: flyio-volume -Status: Bound -Claim: default/myclaim -Reclaim Policy: Delete -Access Modes: RWOP -VolumeMode: Filesystem -Capacity: 5Gi -Node Affinity: -Message: -Source: - Type: CSI (a Container Storage Interface (CSI) volume source) - Driver: volume.csi.fly.io - FSType: ext4 - VolumeHandle: vol_r1plo75g59d25l0r - ReadOnly: false - VolumeAttributes: -Events: -``` - -The annotation `fly.io/app` specifies which Fly app the volumes belongs to. The annotation `volume.fly.io/id` gives you the ID of the volume. -You can delete the Fly Volume using `flyctl` - -``` -fly vol rm pvc-r1plo75g59d25l0r -a fks-default-vz5dlqz7v4ylrnpq -``` - -## Generic ephemeral volumes - -Fly Kubernetes supports ephemeral volumes through generic ephemeral volumes. It uses the same underlying PVC and PV machinery. Kubernetes -handles creating the PVC and its corresponding PV and deleting both objects when the Pod is deleted. Below is an example of creating a Pod -with a generic ephemeral volume: - -```yaml -apiVersion: v1 -kind: Pod -metadata: - name: nginx -spec: - containers: - image: nginx:latest - volumeMounts: - - mountPath: "/var/www/html" - name: scratch-volume - resources: - limits: - memory: "512Mi" - cpu: "1" - volumes: - - name: scratch-volume - ephemeral: - volumeClaimTemplate: - spec: - accessModes: - - ReadWriteOncePod - storageClassName: "flyio-volume" - resources: - requests: - storage: 5Gi -``` - -For generic ephemeral volumes to work as expected, `storageClassName` must be set to `flyio-volume`. diff --git a/machines/api/apps-resource.html.markerb b/machines/api/apps-resource.html.markerb index e37edd6a5f..21d38cd1c5 100644 --- a/machines/api/apps-resource.html.markerb +++ b/machines/api/apps-resource.html.markerb @@ -73,7 +73,7 @@ Machines must be associated with a Fly App. App names must be unique. | Property | Type | Required | Description | |-------------|---------|----------|----------------------------| | `app_name` | string | yes | Name of the app to create | - | `enable_subdomains` | boolean | no | Used for Fly Kubernetes. | + | `enable_subdomains` | boolean | no | | | `org_slug` | string | yes | Slug of the org in which to create the app | | `network` | string | no | Name for an IPv6 private network to segment the app onto. | <% end %> diff --git a/machines/api/machines-resource.html.markerb b/machines/api/machines-resource.html.markerb index 34dce42672..60c2a16746 100644 --- a/machines/api/machines-resource.html.markerb +++ b/machines/api/machines-resource.html.markerb @@ -1141,9 +1141,9 @@ Properties of the `config` object for Machine configuration. See [Machine proper **`dns`:** - - `nameservers`: Used for Fly Kubernetes. - - `searches`: Used for Fly Kubernetes. - - `options`: Used for Fly Kubernetes. + - `nameservers`: Nameservers option in resolve.conf, used to set the nameservers for DNS queries + - `searches`: Space-separated list of domains appended to unqualified hostnames until a lookup succeeds + - `options`: DNS resolver options. See [resolv.conf man page](https://www.man7.org/linux/man-pages/man5/resolv.conf.5.html) - `dns_forward_rules`: Used for dedicated hosts. - `skip_registration`: boolean - If true, do not register the Machine's 6PN IP with the internal DNS system. @@ -1228,7 +1228,7 @@ You cannot change which volume a Machine is attached to by updating the Machine' - `entrypoint`: An array of strings. The process that will run. - `cmd`: An array of strings. The arguments passed to the entrypoint. - `env`: An object filled with key/value pairs to be set as environment variables. - - `env_from` : An array of objects that define environment variables from Machine fields. Used for Fly Kubernetes. + - `env_from` : An array of objects that define environment variables from Machine fields. - `exec`: An array of strings. The command to run for Machines in this process group on startup. - `user`: string (nil) - An optional user that the process runs under. - `ignore_app_secrets`: boolean - If true, only use the secrets provided at the process level. Default false. diff --git a/partials/_firecracker_nav.html.erb b/partials/_firecracker_nav.html.erb index 42fadff232..f95aa7dd4e 100644 --- a/partials/_firecracker_nav.html.erb +++ b/partials/_firecracker_nav.html.erb @@ -112,20 +112,6 @@ { text: "Volume States", path: "/docs/volumes/volume-states/" } ] }, - { - title: "Fly Kubernetes", - path: "/docs/kubernetes/fks-quickstart", - open: false, - links: [ - { text: "Fly Kubernetes Quickstart", path: "/docs/kubernetes/fks-quickstart/" }, - { text: "Fly Kubernetes Features", path: "/docs/kubernetes/fks-features/" }, - { text: "Create an FKS Cluster", path: "/docs/kubernetes/clusters/" }, - { text: "Connect to an FKS Cluster", path: "/docs/kubernetes/connect-clusters/" }, - { text: "Configure FKS Services", path: "/docs/kubernetes/services/" }, - { text: "Use GPUs with FKS", path: "/docs/kubernetes/using-gpus/" }, - { text: "Use Volumes with FKS", path: "/docs/kubernetes/using-volumes/" } - ] - }, { title: "Networking", path: "/docs/networking/",