> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nikaplanet.com/llms.txt
> Use this file to discover all available pages before exploring further.

# NIKA GeoEngine for Kubernetes

> Run Python and R geoprocessing workers on your own Kubernetes cluster with GPU and high-memory pools, batch fan-out, role-based access and run metrics.

NIKA GeoEngine, previously called NIKA Worker, is geoprocessing orchestration for your own Kubernetes cluster. Bring Python or R workers; NIKA GeoEngine runs them on the right machine, fans big jobs out in parallel, keeps sensitive analyses to cleared roles and measures every run.

> [!NOTE]
>
> **Two complementary products, one worker format.** [GeoEngine CLI](https://docs.nikaplanet.com/nika-geoengine/overview.md) builds and tests workers on a laptop. NIKA GeoEngine runs the same workers at scale in your Kubernetes cluster.

## Why geoprocessing breaks ordinary clusters

> [card] Rasters outgrow fixed servers
>
> ![A 96 GB raster overflows a 64 GB server but fits a 128 GB high-memory worker](https://mintcdn.com/nika/joaiHPqbHOs4tvpR/images/geoengine/problem-memory-light.svg?fit=max\&auto=format\&n=joaiHPqbHOs4tvpR\&q=85\&s=acf4f5b1dcafbcfc4dfba13fe934080e)
>
> Size each worker to the job. No 64 GB ceiling.

> [card] Hundreds of scenes, one at a time
>
> ![Scenes processed one at a time versus fanned out in parallel](https://mintcdn.com/nika/joaiHPqbHOs4tvpR/images/geoengine/problem-fanout-light.svg?fit=max\&auto=format\&n=joaiHPqbHOs4tvpR\&q=85\&s=49e6eef0ddedca950ced5e9263f47da2)
>
> One batch job fans out to parallel pods: 200 × 15 min becomes \~75 min on 40 pods.

> [card] GDAL, CUDA and Python packages keep clashing
>
> ![Conflicting GDAL, CUDA and Python package versions snapping into one managed runtime](https://mintcdn.com/nika/joaiHPqbHOs4tvpR/images/geoengine/problem-stack-light.svg?fit=max\&auto=format\&n=joaiHPqbHOs4tvpR\&q=85\&s=f07a3e679dc9b75ccc5c0aa8e75a7720)
>
> PyTorch, rasterio, numpy and GDAL pin each other's versions. One managed geo runtime under every worker, with your extra packages resolved against it.

> [card] Not everyone should run everything
>
> ![Cleared analysts pass the gate to a sensitive worker; everyone else is blocked](https://mintcdn.com/nika/joaiHPqbHOs4tvpR/images/geoengine/problem-gate-light.svg?fit=max\&auto=format\&n=joaiHPqbHOs4tvpR\&q=85\&s=4676614adbdcaccd66e8cf4b7e28ccea)
>
> Restricted workers run only for roles you clear.

**NIKA GeoEngine takes on all four, so your engineers write processing code, not plumbing.**

## Architecture at a glance

A **control plane** decides who may run what, where and when. An **execution plane** of pods does the work. Both run in your cluster, against storage you own.

![NIKA GeoEngine architecture: clients call the gateway; access control checks roles against preset, custom and restricted workers; the orchestrator places tasks on CPU, high-memory and GPU pools that share storage](https://mintcdn.com/nika/2mmXjfN-1irnNztR/images/geoengine/architecture-light.svg?fit=max\&auto=format\&n=2mmXjfN-1irnNztR\&q=85\&s=d472b96cb3c3eb256fcfc7e1dae8134e)

![](https://mintcdn.com/nika/2mmXjfN-1irnNztR/images/geoengine/architecture-dark.svg?fit=max\&auto=format\&n=2mmXjfN-1irnNztR\&q=85\&s=4bd0903f23350c43a1166d9a56698aa4)

![](https://mintcdn.com/nika/2mmXjfN-1irnNztR/images/geoengine/architecture-tall-light.svg?fit=max\&auto=format\&n=2mmXjfN-1irnNztR\&q=85\&s=06f3b7e1eaea29f549ffaf9e7fa990f2)

![](https://mintcdn.com/nika/2mmXjfN-1irnNztR/images/geoengine/architecture-tall-dark.svg?fit=max\&auto=format\&n=2mmXjfN-1irnNztR\&q=85\&s=fd71a1e3bb50588e1a937f172828acaf)

Solid arrows carry requests and work. Dashed arrows carry roles, versions, metrics and scaling signals. Boxes are functional roles, not an inventory of pods.

| Component | Job |
| - | - |
| **Gateway** | Single entry point. Authenticates every caller. |
| **Access control** | Checks the caller's roles against the worker before anything is scheduled. |
| **Orchestrator** | Queues jobs, fans batches out into tasks, places each task on its pool, tracks state. |
| **Worker catalogue** | Every published worker version: preset, your own, and restricted. |
| **Observability** | Runtime and CPU, GPU and RAM use for every run. |
| **Pools and storage** | Your CPU, high-memory and GPU nodes, and the storage every task reads and writes. |

## Three kinds of worker, one gate

Every worker is **preset** (ready-made by NIKA), **your own** Python or R, or **restricted**: a sensitive analysis that only the roles you clear can run.

![Cleared analysts can run every worker; all other users can run the open workers and are blocked from restricted ones](https://mintcdn.com/nika/joaiHPqbHOs4tvpR/images/geoengine/access-light.svg?fit=max\&auto=format\&n=joaiHPqbHOs4tvpR\&q=85\&s=357e785161dffb17c2f5476c99be0e9b)

![](https://mintcdn.com/nika/joaiHPqbHOs4tvpR/images/geoengine/access-dark.svg?fit=max\&auto=format\&n=joaiHPqbHOs4tvpR\&q=85\&s=5c0e7374ec58422dc9d91587ea47efe3)

![](https://mintcdn.com/nika/joaiHPqbHOs4tvpR/images/geoengine/access-tall-light.svg?fit=max\&auto=format\&n=joaiHPqbHOs4tvpR\&q=85\&s=f38e5f3c4eae6cc156dbe13e2585c09a)

![](https://mintcdn.com/nika/joaiHPqbHOs4tvpR/images/geoengine/access-tall-dark.svg?fit=max\&auto=format\&n=joaiHPqbHOs4tvpR\&q=85\&s=b5bc304d789984ba3148ed731c027bc2)

## What you get

> [card] Fan-out and autoscaling
>
> One request, many parallel tasks. Nodes follow the queue.

> [card] No memory ceiling
>
> CPU, high-memory or GPU, sized per worker.

> [card] GPU-ready, no setup
>
> CUDA and GDAL managed for you.

> [card] Role-based access
>
> Sensitive workers stay with cleared roles.

> [card] Every run measured
>
> Runtime, CPU, GPU and RAM. Right-size from evidence.

> [card] Plugs into your stack
>
> Your pipelines and scripts, FME Flow, imagery servers, any HTTPS client.

> [card] AI-ready
>
> Workers are plain Python or R, which AI assistants write well.

> [card] Months saved
>
> Skip building and maintaining a geo platform on Kubernetes.

## Concepts

| Term | Meaning |
| - | - |
| **Worker** | One versioned, containerised processing unit, such as conversion, cloud removal or your own script. It declares typed inputs and outputs. |
| **Worker version** | A semantic version such as `1.2.0`. Immutable once published. Jobs name the exact version, so results stay reproducible. |
| **Job** | One request to run a worker version on some inputs, with an ID, an owner, a status and a resource record. |
| **Batch job and task** | A batch job covers many items, such as 200 scenes, and fans out into tasks: one pod per item. |
| **Machine class** | CPU, high-memory or GPU. Each class maps to a node pool in your cluster. |
| **Restricted worker** | A worker that only granted roles may run. Every other worker is open. |
| **Geo runtime** | The managed base under every worker: GDAL, PROJ, CUDA and the core geospatial libraries. |
| **Shared storage** | The volume or object store you own, where inputs are read and results are written. |

## The life of a job

![Seven steps in the life of a job: submit, authorise, accept and fan out, place, run, write results, record](https://mintcdn.com/nika/joaiHPqbHOs4tvpR/images/geoengine/job-lifecycle-light.svg?fit=max\&auto=format\&n=joaiHPqbHOs4tvpR\&q=85\&s=ca8fb69c6eb88acd4381a32bdf8dc4e0)

![](https://mintcdn.com/nika/joaiHPqbHOs4tvpR/images/geoengine/job-lifecycle-dark.svg?fit=max\&auto=format\&n=joaiHPqbHOs4tvpR\&q=85\&s=0aab0c30b4b5d95457a3124364ee34ec)

![](https://mintcdn.com/nika/joaiHPqbHOs4tvpR/images/geoengine/job-lifecycle-tall-light.svg?fit=max\&auto=format\&n=joaiHPqbHOs4tvpR\&q=85\&s=70c2bbc6bd48b9a2494bd1dc89feb564)

![](https://mintcdn.com/nika/joaiHPqbHOs4tvpR/images/geoengine/job-lifecycle-tall-dark.svg?fit=max\&auto=format\&n=joaiHPqbHOs4tvpR\&q=85\&s=ae12be636a6116d9ded986b1b7c81e6f)

* **Access is checked before capacity is spent.** A denied request never creates a pod.
* **Tasks are independent.** One failed scene does not stop the others, and results are written per task.
* **Capacity is elastic but bounded** by the limits you set on each pool.

## Where it fits in your stack

Pipeline tools decide *what runs after what*. NIKA GeoEngine runs each heavy step on the right machine, for the right people, and writes results that maps and imagery servers read directly.

![Map apps, FME Flow, your pipelines and scripts submit work to NIKA GeoEngine; it writes results to storage that imagery servers and maps read; everything runs on Kubernetes](https://mintcdn.com/nika/2mmXjfN-1irnNztR/images/geoengine/stack-fit-light.svg?fit=max\&auto=format\&n=2mmXjfN-1irnNztR\&q=85\&s=30f4167a660c073f0222810925981a48)

![](https://mintcdn.com/nika/2mmXjfN-1irnNztR/images/geoengine/stack-fit-dark.svg?fit=max\&auto=format\&n=2mmXjfN-1irnNztR\&q=85\&s=51c643fbb39a8d528b99dee836eb65df)

![](https://mintcdn.com/nika/2mmXjfN-1irnNztR/images/geoengine/stack-fit-tall-light.svg?fit=max\&auto=format\&n=2mmXjfN-1irnNztR\&q=85\&s=7b5204e144ffb08a3a538b7061d36083)

![](https://mintcdn.com/nika/2mmXjfN-1irnNztR/images/geoengine/stack-fit-tall-dark.svg?fit=max\&auto=format\&n=2mmXjfN-1irnNztR\&q=85\&s=189c3d64e5526cd44f43d940ed5a5ffa)

## Is it right for you?

> [card] A good fit
>
> * Raster pipelines and imagery analysis
> * Jobs that need GPUs or more memory than general nodes have
> * Many scenes, same logic
> * Data that must stay in your cluster, with some analyses limited to certain roles

> [card] Probably not
>
> * One small script that runs fine on a laptop
> * General ETL or ML-lifecycle needs with no geoprocessing
> * No Kubernetes cluster to run it on

## Next steps

> [card] [Deploy and operate](https://docs.nikaplanet.com/geoengine/deploy.md)
>
> Licence, prepare the cluster, install, verify, scale.

> [card] [Workers and jobs](https://docs.nikaplanet.com/geoengine/workers.md)
>
> Build workers, run batches, restrict access.

> [card] [Observability](https://docs.nikaplanet.com/geoengine/observability.md)
>
> See what each run used, then right-size it.

> [card] [Integrations](https://docs.nikaplanet.com/geoengine/integrations.md)
>
> Your pipelines, FME Flow, ArcGIS Image Server.

> [card] [Build fullstack map processing with OnlyMapJS](https://docs.nikaplanet.com/geoengine/onlymap-fullstack.md)
>
> A map front end on a geoprocessing backend.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.