Skip to main content


Install and configure a Foxglove edge site.


Create a site

Create an edge site from the Sites settings page:

  • "Create site" – Name and create your edge site
  • "Automatically delete recordings after (days)" – Enable garbage collection for your edge site; files past the expiration period are no longer eligible for import

You're now ready to set up your cluster.

Configure cluster resources

Configure cluster resources required by the deployment – these are specific to your cluster and site setup.

Create a foxglove namespace in your cluster.

$ kubectl create namesapce foxglove

Recording storage

Your deployment needs access to storage containing your edge recordings. You can use a Kubernetes Persistent Volume or any S3-compatible object storage to store your recordings.

If storing recordings in an S3-compatible object store, you must set these config values:

  • recordingStorage.provider: Should be set to s3_compatible.
  • recordingStorage.bucketName: The bucket name where recordings will be stored.
  • recordingStorage.s3CompatibleServiceUrl: The URL of your S3-compatible service.
  • recordingStorage.s3CompatibleServiceRegion: The region of your service. If your service is not configured with a region, leave this unconfigured.

Configure credentials for your edge site to access these recordings.

Install a Secret named recording-storage-credentials into the foxglove namespace. This secret should contain an HMAC ID/secret pair to access your S3-compatible object store.

Check out the following example secret configuration file:

apiVersion: v1
kind: Secret
name: recording-storage-credentials
type: Opaque
Persistent Volume

If storing recordings in a Persistent Volume, the recordingStorage.provider config value should be left unset. You will need a pre-configured Persistent Volume Claim.

The default claim name is edge-controller-storage-claim however you can override this with the edge_controller.storageClaim config value.

Example claim manifest:

apiVersion: v1
kind: PersistentVolumeClaim
name: edge-controller-storage-claim
- ReadWriteMany
storageClassName: "..."
volumeName: your-volume-name
storage: ...

Index Storage

You will need a pre-configured Persistent Volume Claim for storing database data. The default claim name is edge-controller-index-claim however you can override this with the edge_controller.indexClaim config value.

The index claim should be backed by block storage rather than network storage, for optimal performance.

Example claim manifest:

apiVersion: v1
kind: PersistentVolumeClaim
name: edge-controller-index-claim
- ReadWriteOnce
storageClassName: "..."
volumeName: your-volume-name
storage: ...

Create secret with site token

Install a Secret named foxglove-site-token into the foxglove namespace containing your site token:

$ kubectl create secret generic foxglove-site-token --from-literal=FOXGLOVE_SITE_TOKEN='fox_sk_...' --namespace foxglove

There are multiple other ways to create secrets that may be preferable. See Create a Secret for more info.

Additionally, your edge site will need cloud credentials to import data to the self-hosted Primary Site. See Configure cloud credentials for more details.

Install the release

Install your Foxglove edge site deployment to your current Kubernetes context using Helm.

Prepare a values file

Create a values.yaml file to configure the installation. You'll need your edge site's site token, which can be found on the Sites settings page, and the name of your inbox bucket.

Accepted values for provider are: aws, azure, or google_cloud.

provider: azure
bucketName: foxglove-inbox


$ helm repo add foxglove
$ helm repo update
$ helm upgrade --install foxglove-edge-site foxglove/edge-site \
--values ./values.yaml \
--namespace foxglove \

To view info about the deployment, run $ helm list -n foxglove.

To test that the service is up, forward the service port to your machine with $ kubectl port-forward -n foxglove service/edge-controller 8888:8888 and open http://localhost:8888/v1/liveness.

Create an Ingress

The edge controller exposes a REST API service (edge-controller) for notifications of new recordings. To access this API outside of your cluster, you must create an Ingress.

The edge site service name is edge-controller and is available on TCP port 8888.

Visit http://<cluster ip>:<port>/v1/liveness in a web browser to confirm connectivity to the edge controller service via the Ingress.

Next steps

To add recordings to your site, see Manage Data.