Skip to content

Install and license

An air-gapped cluster has no connection to the Polars control plane, so it takes its license from inside your infrastructure. It needs an Enterprise license. Contact us to get one. The Polars team sends a JSON license file (and, for the license-server option, a TLS bundle). A license file looks like this:

{
  "params": { "expiry": "2026-01-31T23:59:59Z", "name": "Company" },
  "signature": "..."
}

EULA

Polars Nanook Enterprise is licensed under the End User License Agreement (EULA) embedded in the polars-nanook-compute package. A cluster with a license file only starts once the EULA is accepted, and each tab under Install shows how to accept it. To print the EULA:

polars-nanook-compute print-eula

Install

An air-gapped cluster uses the same polars-inc/polars Helm chart as a connected cluster, on a provisioned Kubernetes cluster with kubectl and Helm installed. The license comes from a license file you store in a Kubernetes Secret, or from an offline license server deployed from its own chart.

Setting acceptEula=true accepts the EULA. Without it, the chart refuses to install with a license file. Use a prebuilt worker image and pull the chart's images from your own registry, because the default runtime installs packages from PyPI at every worker start.

helm repo add polars-inc https://polars-inc.github.io/helm-charts
helm repo update

Run this and helm pull polars-inc/polars (and helm pull polars-inc/license-server for the license server) on a machine with internet access, then install from the downloaded .tgz file in place of polars-inc/polars below.

With a license file, store it in a Secret and point the chart at it:

kubectl create secret generic polars-nanook-enterprise-license \
  --from-file=license.json=license.json
helm upgrade --install polars polars-inc/polars \
  --set acceptEula=true \
  --set license.onPremEnterprise.enabled=true \
  --set license.onPremEnterprise.secretName=polars-nanook-enterprise-license \
  --set license.onPremEnterprise.secretProperty=license.json

For several clusters, or to rotate licenses without redeploying each cluster, run the Polars license server inside the Kubernetes cluster. Install it with the license file and TLS bundle you received from Polars:

helm upgrade --install license-server polars-inc/license-server \
  --namespace polars --create-namespace \
  --set-file license.content=license.json \
  --set-file tlsBundle.content=bundle.pem

Then point each Polars cluster at it:

helm upgrade --install polars polars-inc/polars \
  --set acceptEula=true \
  --set license.licenseServer.enabled=true \
  --set license.licenseServer.uri="https://license-server.polars.svc.cluster.local:50051"

The license-server chart's README covers its other values.

Follow Get started on bare-metal, installing the polars-nanook-compute package from PyPI or from your organization's package mirror. That page is written for a connected cluster, so make two changes:

  1. Skip the service account. The cluster needs none.
  2. Replace the [license.on_prem] section with the path to the license file, at the top level of the configuration file:

    license.on_prem_enterprise.license_path = "./license.json"
    

    Accept the EULA by setting POLARS_EULA_ACCEPTED=1 in the service's environment. If the variable is not set, the service prints the EULA and exits.