With Portainer Business Edition, pricing is on a "per-node" basis. But what constitutes a node?
A "node" can be simply described as a "server" (whether this is an actual physical server, a VM, a Raspberry Pi, your desktop or laptop, an industrial computer, or an embedded compute device) that is capable of running containers (via Docker, Kubernetes or another orchestrator) which is either running the Portainer Server or is under the management of a Portainer Server installation.
Node pricing is also dependent on the type of node you are using.
Docker
If you are managing a Swarm cluster without using the Portainer Agent, those nodes will still count toward the number of licensed nodes. If it runs Docker-CE, is a Kubelet, or is a serverless endpoint and you manage it with Portainer, it counts as a node.
Docker Swarm
If a node is running both the Portainer Server and the Portainer Agent, this is only counted as one node for licensing purposes.
An easy way to tell how many nodes are in your Docker Swarm cluster is to run
docker node ls
on your Swarm manager node. This should give you something like the following:
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
081e4818wwmrecufr58jggndi * swarm01 Ready Active Leader 20.10.21
mnnf958tj5c1w1tij6mpm129u swarm02 Ready Active 20.10.21
ucrrkaqs549b4kfva3zwdtx1t swarm03 Ready Active 20.10.21
Each entry in the list counts as one node.
Kubernetes
Kubernetes by nature works differently to Docker, so licensing does too. Let's consider a Kubernetes cluster with one master node and two worker nodes:
With Kubernetes, the Portainer Agent has the ability to access the Kubernetes API in order to manage the entire cluster. This access is used to determine the number of nodes in the cluster (three in this case) which then gives you the required number of licenses (three).
An easy way to tell how many nodes are in your Kubernetes cluster is to run:
kubectl get nodes
on a server in your Kubernetes cluster. This should return something like the following:
NAME STATUS ROLES AGE VERSION
kube01 Ready <none> 273d v1.23.14-2+55c3aa5b608650
kube02 Ready <none> 273d v1.23.14-2+55c3aa5b608650
kube03 Ready <none> 273d v1.23.14-2+55c3aa5b608650
Each entry in the list counts as one node.
Multiple Environments
But what if you're running multiple environments? Let's combine what we have above into something more complex: one "management" server (running Docker Standalone) that manages a three node Docker Swarm and a three node Kubernetes cluster: