Why running Apache NiFi on Kubernetes is harder than deploying a container
Running a NiFi 2 cluster on Kubernetes is not a matter of packaging NiFi in a container and scaling the replica count. The work is about making NiFi's cluster state, leader election and repositories behave correctly on Kubernetes, so that a pod restart, reschedule or node drain does not corrupt flow state, lose data in flight or leave the cluster without a coordinator. A platform team that treats NiFi as a stateless web service will find the gaps only when a node fails in production.
NiFi was designed around a small set of long-lived nodes with stable hostnames and local disks. Each node keeps its FlowFile, content, provenance and database repositories on the local file system, and the cluster relies on a coordinator that is elected and tracked through shared state. On Kubernetes, pods receive new names and IP addresses when they are recreated, and volumes may follow or not follow them depending on the storage class and access mode. Each of these assumptions needs an explicit decision: how nodes find each other, where cluster state lives (ConfigMaps or Leases, or an external ZooKeeper if your design uses one), and which volumes are bound to which node.
Leader election and cluster state are the first place where defaults matter. The NiFi administration guide describes Kubernetes-based coordination through ConfigMaps or Leases as an alternative to ZooKeeper. Your team needs to confirm the exact configuration keys, RBAC permissions and lease timing for the NiFi version you deploy, and to test what happens when the leader pod is deleted during active flows. Ask the implementation partner to show the failover test results, not only the steady-state cluster view.
Repositories are the second area. NiFi writes continuously to its repositories, and a pod that restarts with an empty or mismatched volume can rejoin the cluster with a different view of the flow. Decide before go-live whether each node gets a dedicated persistent volume, how volumes are retained when a StatefulSet is scaled down, what the backup and restore procedure covers, and how sensitive properties keys are stored and reused across restarts. Storage performance also affects throughput, so the storage class should be chosen with the expected provenance and content volume in mind, and confirmed against your cloud or data center storage offering.
Which NiFi and Kubernetes pieces carry cluster state
NiFi on Kubernetes keeps its cluster roles, dataflow definition and data in a few places that must outlive any single pod. The cards cover the roles that move between nodes, the Kubernetes objects used for election, the flow file, the addresses in nifi.properties, and the repositories. Review each one before the first deployment, because a pod restart should change which node is active, never the flow definition or the data it holds.
Cluster coordinator and primary node
NiFi elects one node as cluster coordinator, which manages membership and heartbeats, and one node as primary, which runs processors configured to execute only on the primary node. On Kubernetes, these roles move to other pods when a pod restarts or is rescheduled. Check that your monitoring shows which pod holds each role, and test how primary-only processors behave during a failover so that a short gap in the primary role does not cause missed or duplicated work.
Leader election state in ConfigMaps or Leases
According to the NiFi administration guide, NiFi can coordinate a cluster on Kubernetes using ConfigMaps or Leases for state and leader election. Confirm which option your NiFi version and deployment use, the namespace and object names it creates, and the RBAC permissions the service account needs to read and update them. Missing permissions here can stop elections without an obvious error in the NiFi UI.
The flow.json.gz flow configuration file
NiFi 2 stores the flow definition in flow.json.gz, which replaces the flow.xml.gz file used in version 1. Each node loads this file at startup and keeps its own copy on its own volume, with the cluster keeping those copies consistent. Keep the file on a persistent volume, never on ephemeral container storage. Check its location, backup schedule and file ownership, and confirm how a change made in the UI reaches every node's copy.
Cluster and web addresses in nifi.properties
The nifi.properties file holds the addresses NiFi uses for cluster traffic, the web UI and the REST API. When no security configuration is provided, NiFi binds to 127.0.0.1, so pods need the web host set explicitly to be reachable. Cluster addresses must resolve to a name other nodes can reach, often the pod's stable DNS name through a headless service. Check these values, the proxy host names used by ingress, and whether they are populated from values each pod knows at startup.
Flowfile, content, provenance and database repositories
NiFi writes four repositories to local disk on each node. The flowfile repository tracks queued work, the content repository holds the data payloads, the provenance repository records event history, and the database repository stores internal NiFi state. Each must persist across pod restarts, so back each with its own persistent volume, sized and monitored separately. Confirm the storage class, reclaim policy and the procedure for removing a node's volumes from the cluster.
Which coordination and storage choices fit your cluster
This table compares coordination, repository storage and ingress options for a NiFi 2 cluster on Kubernetes. Read each row against your RBAC policy, backup ownership and certificate renewal process. The main takeaway is that Leases add the fewest components, while per-node volumes and the edge TLS decision shape day-two work more than the initial install.
| Option | When it fits | Operational cost | Watch for |
|---|---|---|---|
| Leases for state and leader election | Clusters that run only on Kubernetes and want the fewest moving parts. | RBAC to create and update Lease objects in the NiFi namespace. No extra service to run. | Confirm that your NiFi version and deployment method support Lease-based election. |
| ConfigMaps for state and leader election | Teams that accept ConfigMap writes as cluster state and already monitor them. | RBAC to read and write ConfigMaps, which widens namespace permissions. | Frequent updates to one shared object can contend. Test node failover in staging first. |
| External ZooKeeper ensemble | Organizations that already run ZooKeeper or need one coordination layer for several tools. | A separate ensemble to deploy, patch, back up and monitor, with its own network rules. | Quorum rules and ensemble sizing add debugging effort. Confirm the supported ZooKeeper version. |
| StatefulSet with per-pod persistent volumes | Clusters where each node keeps its own content, flowfile and provenance repositories. | One volume claim per node to size, snapshot and restore. Backups must cover every claim. | Scaling and node replacement need a clear rule for which claim belongs to which pod. |
| Shared storage for repositories | Teams with a validated storage class that they must mount from every node. | The storage team owns the backend. Write semantics and lock behavior need vendor confirmation. | NiFi nodes normally write repositories locally, so justify and confirm any shared layout. |
| TLS terminated at the ingress | Teams that manage certificates centrally and accept plain HTTP between the ingress and NiFi. | Certificate lifecycle at the edge. Node-to-node and cluster TLS still need separate settings. | Confirm the proxy host and headers NiFi expects, or login and redirects can fail. |
| TLS passed through to NiFi | Environments that require encryption from the client to the NiFi UI and API. | You own the NiFi keystore and truststore lifecycle, including renewal and rotation. | The ingress must support TLS passthrough. Handshake failures need node-level log review. |
How to build a NiFi 2 cluster on Kubernetes, step by step
This sequence takes a NiFi 2 cluster from a verified container image to a set of nodes that share cluster state through Kubernetes, with per-pod repository storage, TLS and ingress. Each step ends with a check, so the team can confirm the layer works before adding the next one. Run the sequence in a non-production namespace first.
Confirm the NiFi 2 image and Java 21 runtime
Choose a NiFi 2 release from the Apache NiFi download page, such as the 2.12.0 release listed there. Build or pull a container image that bundles Java 21, which the administration guide lists as the minimum runtime. If the flows need the optional Python-based processors, confirm the image includes Python 3.10, 3.11 or 3.12, and plan for that feature as beta. This step closes when the container starts and its logs show the expected NiFi version and a Java 21 runtime.
Define the StatefulSet and repository volumes
Create a StatefulSet so each pod keeps a stable name and DNS identity, which NiFi depends on when it records node addresses in cluster state. Attach a separate persistent volume claim to each pod for the flowfile, content, provenance and database repositories, the state directory and the configuration directory. Do not share a volume between pods. This step closes when you delete one test pod, Kubernetes recreates it with the same name and volumes, and a marker file written before the delete is still present.
Set clustering properties in nifi.properties
Enable clustering in nifi.properties and set the node address properties to each pod's stable DNS name, so peers can reach it. Select the Kubernetes leader election method and the Kubernetes-based cluster state provider, using either ConfigMaps or Leases as described in the administration guide. Confirm the exact class names against the guide for your NiFi release. For NiFi 2, set the flow configuration file to flow.json.gz. This step closes when the rendered file in a running pod shows the intended values and the startup log reports clustering enabled with the chosen coordination method.
Grant the service account RBAC for coordination
Create a Role in the NiFi namespace that allows the verbs NiFi needs on the resource type you chose, either ConfigMaps or Leases, such as get, list, watch, create, update and patch. Bind that Role to the service account the StatefulSet uses. Keep the scope to the namespace rather than granting cluster-wide access. Your platform team should confirm the exact verbs against the NiFi release you are deploying. This step closes when a permission check for the service account returns allowed for each required verb in the namespace and denied for resources outside it.
Configure TLS and ingress for the UI
Issue certificates for the NiFi nodes and the UI hostname, then configure the keystore, truststore and sensitive properties key. Without a security configuration, NiFi binds to 127.0.0.1, so the UI will not answer through ingress until the HTTPS host settings are changed. Choose an authentication method from single-user, LDAP, OpenID Connect, SAML 2.0 or X.509 and set the proxy host values that ingress requires. Your security team decides whether ingress terminates TLS or passes it through to NiFi. This step closes when the UI loads over HTTPS through the ingress hostname and a test login succeeds.
Start one node and confirm it connects
Scale the StatefulSet to a single pod and let that node start with the full configuration from the earlier steps. Confirm that it takes the leader role and that its coordination record exists in the ConfigMap or Lease you selected. Check the startup logs for errors about storage, RBAC or certificates before adding any other node. This step closes when the node appears as connected in the cluster view and its coordination record shows it as the active member.
Scale out and verify the cluster
Increase the StatefulSet replica count in small steps, adding one node at a time and waiting for each to join and finish syncing the flow. Each new pod should get its own volumes and show up under its stable DNS name. Confirm that the flow on every node matches, and run a simple test flow to check that work is distributed across nodes. Load-balanced connections need to be configured in the flow itself, so confirm them with your flow designers. This step closes when every node reports as connected, the flow versions match across nodes and the test flow runs on the cluster.
How to test that the NiFi cluster recovers from pod loss
Run four checks, each tied to one way a NiFi node can leave the cluster. Start by identifying which pod holds the Primary Node and Cluster Coordinator roles. The NiFi cluster view shows node status and the roles assigned to each node, and nifi-app.log records role changes. Before you delete anything, record the pod names, the node status and the queued flowfile counts on a test process group. Then delete the pod holding the Primary Node role with kubectl delete pod and watch whether another node takes over both roles. The expected result is that leadership moves within the cluster, the flow keeps moving data through the nodes still connected, and the deleted pod returns to the cluster. Write down how long the handover took so you can compare results across reruns.
Next, delete a node that holds no leadership role. A StatefulSet recreates the pod under the same ordinal name and reattaches the PersistentVolumeClaim with the same name, so the question is whether the new pod picks up the old repositories. Before deletion, note the PVC name, the volume it is bound to and the contents of the flowfile, content and provenance repository directories. After the pod returns, confirm that it reconnects to the cluster, that the claim is still bound to the same volume and that queued flowfiles are processed again. An empty repository after reattachment is a failure, even if the pod shows Ready. Also check the destination for duplicate deliveries of the test data.
The third check restarts the whole StatefulSet, which is the closest test to a planned maintenance window or a node pool replacement. Confirm that the flow.json.gz file and the flow state survive the restart, and that the cluster returns to a state where all nodes are connected and a single Primary Node is elected. Query provenance for events recorded before the restart to confirm the provenance repository still answers queries. Then isolate one pod from the others, for example with a Kubernetes NetworkPolicy that blocks cluster traffic to it, and observe whether the node disconnects and stops processing as part of the cluster. Remove the isolation and confirm the node rejoins. Check the exact disconnection and reconnection behavior in the documentation for your NiFi version before you set expectations for this step.
A failed test shows up in a few places. Nodes that stay in a disconnected or connecting state after the pod reports Ready, leadership that does not move, queues that stop draining, or repositories that appear empty after reattachment are all failures. Check the NiFi cluster view and node heartbeats, nifi-app.log and nifi-user.log on the affected pod and on the surviving pods, and startup output for configuration errors. On the Kubernetes side, run kubectl describe on the pod to read its events, check the PVC binding, and inspect the Lease or ConfigMap your deployment uses for leader election, since its holder should change during a handover. Save logs from before and after each deletion so the timeline can be reconstructed.
This test checks recovery. It is not a load test, and passing it does not show throughput, latency under pressure or how the cluster behaves at the data volumes you expect in production. Those need a separate performance test with your own flows and data. Run the sequence on a non-production cluster that uses the same NiFi version, storage class and resource settings as production, and repeat it after each upgrade or change to the StatefulSet. Ask any implementation partner to list these four checks, the evidence each one produces and the acceptance criteria in the written scope before work starts.
How the Kubernetes setup changes across cloud, on-premises and air-gapped clusters
In a managed cloud cluster, the provider runs the control plane and usually offers default storage classes backed by block volumes. NiFi's repositories (content, FlowFile, provenance and database) are write-heavy and sensitive to latency, so the main work is choosing and testing the storage class rather than accepting the default.
- Storage classes: Confirm the available block storage classes, their binding mode, whether they support volume expansion, and the sustained IOPS and throughput each one delivers under your expected flow load.
- Load balancers and ingress: Confirm whether the cloud controller provisions a load balancer for the NiFi Service and whether the ingress or gateway supports the long-lived connections the NiFi UI and site-to-site traffic use.
- Image supply: Confirm whether images come from a private registry in the same cloud account, that node pools can authenticate to it, and that scanning runs before an image is promoted.
- TLS certificates: Confirm whether certificates come from a managed certificate service or an ACME issuer such as cert-manager, who holds the private key, and whether a rotation reloads the NiFi keystore or requires a rolling restart.
Before you sign off the storage design, run a load test with a representative flow on the chosen storage class and record the results.
On-premises clusters run on hardware and networks your organization owns, so storage, load balancing and certificate authority are choices you make and operate. The NiFi configuration stays largely the same, but the platform components underneath it become your responsibility to select, support and patch.
- Storage: Confirm which CSI driver backs the persistent volumes, whether it supports volume expansion, and the latency of the disks behind it. Local volumes can offer strong performance but pin a pod to a node, which changes how node failure is handled.
- Load balancing: Confirm whether the cluster uses a software load balancer that advertises a virtual IP through layer 2 or BGP, or an external hardware load balancer, and who owns the failover behavior.
- Image supply: Confirm the internal registry, the team that builds and signs the NiFi image, and how custom processor NAR files enter that build.
- TLS certificates: Confirm whether the internal CA is the corporate PKI or a cert-manager issuer, how long issuance takes, how trust bundles reach each node's truststore, and the rotation schedule.
Before go-live, confirm who receives certificate expiry alerts and who approves a storage class change.
Air-gapped clusters have no route to public container registries, package indexes or certificate authorities, so every artifact must be transferred in, checked and recorded. Storage and load balancing follow the on-premises pattern, but the supply chain and certificate processes change the most, and they add a transfer step to every update.
- Image transfer: Build or mirror the NiFi image and its dependencies on a connected side, export them with checksums, import them into an internal registry, and log each transfer for audit.
- Storage: Apply the same CSI and latency checks as on-premises, and confirm that backups can be restored without any external service.
- Ingress and DNS: Confirm that the ingress controller chart and its images arrive through the transfer process, and that internal DNS records exist for the NiFi endpoint, since public DNS and cloud load balancers are not available.
- TLS certificates: Confirm the offline root or internal CA, how certificate revocation is checked without internet access, and the approved channel for moving renewed certificates into the cluster.
Confirm the transfer cadence for NiFi and NAR updates, including the Python package index for any optional Python processors, before you agree on an update schedule.
What drives NiFi on Kubernetes effort and cost
This table lists the factors that change the amount of work when moving Apache NiFi onto Kubernetes, and what keeps each one manageable. Read each row as a question to answer before asking for a fixed-scope quote. The main takeaway is that flow count, integrations and compliance evidence usually matter more than the Kubernetes setup itself.
| Driver | How it raises effort | What keeps it down |
|---|---|---|
| Number of flows and processors | Every flow and processor group must be re-validated after the move, including the Java 21 runtime, Kubernetes state handling and any flow.json.gz conversion. Effort grows with both count and complexity of branching logic. | Inventory flows first and group them by pattern. Reuse standard parameter contexts and test a representative set thoroughly instead of every flow equally. |
| Number of environments | Development, test and production each need their own manifests, secrets, persistent volumes, ingress and TLS certificates, and each must be verified separately. | Template manifests with one values set per environment, and promote the same images and flow versions through each stage. |
| External integrations | Each source or sink, such as databases, message brokers or SaaS APIs, can need new network paths, egress rules, DNS entries and certificates that the cluster must trust. | Keep a written list of every endpoint with its protocol, owner and certificate authority, and confirm network changes with the platform team before the build starts. |
| Identity provider integration | Choosing OpenID Connect, SAML 2.0, LDAP or X.509 client certificates means configuring the provider, mapping groups to NiFi policies and testing login paths in each environment. Single-user mode must be retired. | Agree the provider and group model early. Confirm which authentication option your identity team will support, since the Kerberos provider is deprecated. |
| Compliance evidence requirements | Assessors may ask for records of configuration, access, TLS settings, backups and change history. Collecting this evidence from Kubernetes objects and NiFi logs takes deliberate work. DeployOpen prepares evidence but does not issue audit reports. | Define the evidence list with your assessor before build. Use declarative manifests, version-controlled configuration and documented restore tests so evidence is produced as a by-product. |
| Custom processor NARs | Each custom NAR must be compiled against the target NiFi 2 version, tested, and built into the container image. Every NiFi upgrade can require rebuilding and retesting these archives. | Limit custom code to what standard processors cannot do, pin the NiFi version in the build, and automate image builds so a new NAR rolls out through the same pipeline. |
Securing ingress, secrets and node traffic on Kubernetes
A NiFi cluster on Kubernetes exposes a web UI, cluster protocol traffic and sensitive key material, and each of these needs a deliberate control. The cards below cover the security decisions that differ from a standard NiFi install, starting with how the UI is bound and published, then how secrets, cluster coordination objects and pod-to-pod traffic are restricted.
Replace the loopback-only default
When no security configuration is provided, NiFi binds to 127.0.0.1, so the UI is reachable only through the loopback interface. A Kubernetes deployment has to set a deliberate web address and TLS configuration so that the Service and probes can reach the UI. Check that the bind address, HTTPS port and host header settings match the Service definition, and that the HTTP port is not left open alongside HTTPS. Follow the security configuration section of the NiFi administration guide for the exact properties.
Keep key material in Kubernetes Secrets
The sensitive properties key, keystore and truststore material should live in Kubernetes Secrets and be mounted into the NiFi pods, not baked into images or ConfigMaps. Confirm who can read these Secrets, since anyone with get access to them can recover the keystore and the key that protects sensitive flow properties. Restrict RBAC so that only the NiFi service account and the operators who manage certificates can read them, and plan how rotation of the keystore and key will be applied across all nodes.
Scope Lease and ConfigMap permissions
Kubernetes-based leader election and cluster state use Leases and ConfigMaps, so the NiFi service account needs permission to read and write them. Limit these permissions to the NiFi namespace with a Role and RoleBinding rather than a ClusterRole, and list the resource names the cluster actually uses. Review the rules after each chart or manifest change, because a broad grant on Leases or ConfigMaps lets any workload in the namespace take over cluster coordination.
Restrict pod-to-pod ports with network policies
NiFi nodes exchange cluster protocol traffic, site-to-site connections and load-balanced connection data, and the web UI and API run on separate ports. Network policies should allow only the ports and sources that these paths need, such as the cluster and site-to-site ports from other NiFi pods and the HTTPS port from the ingress controller. Verify the policy with a test pod outside the namespace, and confirm the chosen ports against the NiFi documentation for your version before applying the policy.
Require authentication before public ingress
The NiFi UI must never be published through a public ingress unless an authentication provider is configured and enforced. Single-user, LDAP, OpenID Connect, SAML 2.0 and X.509 client certificate options are supported, while the Kerberos provider is deprecated. Before an ingress resource is created, check that the chosen provider works, that initial admin identities are set, and that the ingress does not bypass the login path through a second route. Treat the ingress as a release gate, not a later hardening step.
What to monitor, back up and document after go-live
After go-live, the platform team should watch four signals that show whether the NiFi cluster is healthy before flows start failing. The first is pod restarts and volume health. Repeated restarts of a NiFi pod often point to memory pressure, a failing readiness check or a problem with the node it runs on. A PersistentVolumeClaim that stays pending, or a volume that reports I/O errors, puts repository data at risk, so alert on both. The second is cluster membership. Confirm that every expected node is connected and that exactly one node holds the coordinator role, using the cluster view in the UI or the NiFi REST API. Alert when a node drops out and does not rejoin within the window your team agrees. The third is repository disk usage. The content, FlowFile and provenance repositories grow with traffic and with the retention settings you chose, so alert early enough to add capacity or adjust retention before a volume fills. The fourth is ingress certificate expiry. Track the expiry dates of the ingress certificate and the NiFi node certificates, and agree who renews them and how far ahead.
Back up what the container image cannot rebuild. The first item is the flow definition. In NiFi 2 this is the flow.json.gz file on the persistent volume. If you also version flows in Git through a Flow Registry Client, the repository is a second copy, but it does not capture every running setting, so keep both. The second item is nifi.properties and the key material held outside the image, delivered through Kubernetes Secrets. This includes the sensitive properties key, the TLS keystores and truststores, and the login identity and authorizer configuration. Store the sensitive properties key separately from the flow backup, with access limited to the people who may restore the cluster. The third item is the state needed to rebuild: the Lease or ConfigMap objects used for leader election and cluster state, parameter context values, and the list of controller services and their settings. For each repository, decide with the business owner whether its contents must be restored or whether losing them is acceptable, because provenance and content data can be very large.
A backup that has never been restored is an assumption. Rehearse a restore at least once before go-live and again after any major change to the cluster. Run the rehearsal in a separate namespace with its own volumes. Restore the manifests from version control, restore the Secrets, restore the flow definition onto a fresh volume, then start one node before scaling to the full node count. Check that the flows load, that controller services start, and that sensitive parameters decrypt. Without the original sensitive properties key, encrypted values in the flow cannot be read, so this check is the most important one. Record which steps needed manual work, which items were missing from the backup and how long each step took in your environment. Treat each gap as a defect to fix before the next rehearsal. Ask any partner you engage to confirm in writing which restore steps they will perform and which ones your team must perform.
The handover should leave the next operator with three documents. The first is the manifests: the Helm values or Kustomize overlays, the pinned container image tag, resource requests and limits, storage classes, and the ingress definition, all kept in version control with a record of who approved each change. The second is the upgrade runbook for the Kubernetes layer. It should describe how to perform rolling cluster changes such as node pool upgrades or pod disruption events: drain one node at a time, wait for the NiFi node to rejoin the cluster and for its queues to clear, then continue. The runbook covers only the Kubernetes layer. Changes to the NiFi version, including the steps for moving between releases, belong to the upgrade and support topic and should be planned separately. The third document is the list of integrations. For each external system NiFi connects to, record the endpoint, where its credentials are stored, the team that owns it, the certificate expiry date, and which flows depend on it. This list drives both the monitoring checks and the restore rehearsal.
Questions teams ask before running NiFi on Kubernetes
What does running Apache NiFi on Kubernetes cost?
The NiFi software is free under Apache-2.0, so the cost is the work to build the platform and the infrastructure and people to run it. No figure is given here because the total depends on scope. One-time costs include design, cluster build, storage and certificate setup, identity integration and flow testing. Recurring costs include cloud or data center capacity for nodes and persistent volumes, monitoring, backups, upgrades and staff time or a support retainer. Costs rise with the number of flows, node count, security requirements and environments. Ask any provider for a quote that lists each item, who is paid for it, and which items recur every year.
How long does a NiFi on Kubernetes project take?
The duration depends on scope, so no figure is given here. Time is driven by how many environments must be built, whether the cluster must connect to an existing identity provider, how many certificates and storage classes must be provisioned, how many flows must be inventoried and tested, and whether the work includes a migration from NiFi 1.x. A single-environment build with a settled flow inventory takes far less time than a multi-environment build that also includes migration. Ask for a written plan with phases, the dependencies each phase waits on, and the inputs the client must supply, because delays usually come from access and approvals rather than the install itself.
Can an in-house platform team run NiFi on Kubernetes?
Yes, if the team already operates Kubernetes workloads with persistent storage and can own NiFi's configuration. The main skills are cluster administration, storage and backup design, TLS and certificate management, identity integration, and NiFi operation itself, including flow changes and upgrades. Gaps usually appear at the first upgrade, when a rolling cluster change, a deprecated component or a custom processor needs handling. Before deciding, check who performs each task at go-live and each quarter afterward, who covers on-call, and whether the team can test flows outside production. A partner can fill specific gaps in a fixed-scope engagement or provide ongoing support under a retainer.
What must our team provide before NiFi on Kubernetes work starts?
Prepare these inputs before work begins:
- Cluster access: a namespace or cluster role with rights to create workloads, services, secrets, config maps and leases.
- Storage classes: classes for the repositories, with the performance and expansion behavior confirmed in writing.
- Certificates: the certificate authority, server certificates, any client certificates, and the renewal process.
- Identity provider details: for OpenID Connect or SAML 2.0, client registration and group claims; for LDAP, bind details and group structure.
- Flow inventory: every flow, its processors, external connections, parameter values and owners.
Also provide network paths, DNS names and change approval contacts. Confirm that the storage class supports the access mode your design needs.
Do Kubernetes Leases remove the need for ZooKeeper in NiFi?
On Kubernetes, the NiFi administration guide lists ConfigMaps or Leases as options for cluster state and leader election, so an external ZooKeeper ensemble is not required for those functions in a Kubernetes deployment. Confirm the exact configuration for your NiFi 2 version in the administration guide, because the required RBAC permissions, object names and fallback behavior must match your cluster policy. Leases do not remove the other clustering design work. Load-balanced connections, node failure handling, repository storage and flow state still need planning. Check with your platform team whether the Kubernetes API server and RBAC rules allow NiFi pods to manage the objects they need.
Does the Apache-2.0 license mean NiFi has no fees?
The Apache License 2.0 lets you use, modify and deploy NiFi without a license fee, and the Apache NiFi project offers no paid edition. Costs still exist: infrastructure in your cloud or data center, storage for repositories, staff time, monitoring, backup, support and any vendor or partner services you buy. Also check the license terms of custom processors, third-party NAR files and any commercial NiFi-based product you consider, since those carry their own terms. Confirm with your legal team how the license applies to your use and any distribution. Ask any partner to show the license line separately from service fees in its quote.
Which NiFi version should a new Kubernetes deployment use?
Deploy the NiFi 2 line. The downloads page lists NiFi 2.12.0 as released on September 13, 2026, with NiFi Registry 2.12.0 and MiNiFi Java 2.12.0 released alongside it. NiFi 1.28 is the last minor release of the 1.x series, and the page lists an end-of-support date of December 8, 2024 for 1.28.1. The project states that 1.x cannot be maintained further because it depends on Jetty 9.4, Spring Framework 5.3 and AngularJS 1.8, which cannot be upgraded in that line. NiFi 2 requires Java 21 as the minimum runtime. Confirm the latest patch release on the downloads page before you build, and plan for NiFi Registry deprecation if you rely on it for flow versioning.
How DeployOpen scopes, builds and hands over a NiFi on Kubernetes deployment
DeployOpen plans, implements, hardens, documents and supports self-hosted open-source platforms inside your own cloud accounts, data centers or air-gapped networks. For Apache NiFi on Kubernetes, the work follows a written scope, a staged build and a handover your platform team can operate without us.
How we scope
- Confirm the target NiFi 2 release line, Java 21 runtime and Kubernetes distribution your platform supports.
- Map flow inventory, expected node count, repository volume needs and ingress hostnames before any build starts.
- Agree in writing which state and leader election option, identity provider and TLS approach the cluster will use.
How we build
- Deploy the cluster with persistent volumes for the content, provenance, flowfile and database repositories.
- Configure Kubernetes-based leader election and state, then test node join, failover and scale-in behavior in your environment.
- Set up ingress and TLS, replace loopback-only defaults safely, and run the agreed flows through a staged test before cutover.
How we hand over
- Deliver the manifests or charts, configuration files and secret handling notes in your own version control.
- Provide runbooks for node scaling, rolling restarts, certificate rotation and rebuilding a failed node.
- Walk your operators through the cluster and record test results, open items and the upgrade approach in writing.
How we support
- Engagements are fixed-scope, with scope, deliverables and timelines agreed in writing before work starts.
- Ongoing support, NiFi upgrades and continuous testing are available as a retainer, scoped to your cluster.
- Confirm with us during scoping which upgrade, rebuild and response activities a retainer would cover for your setup.

