Skip to content

Ecosystem comparison ​

CCattler is a container orchestrator. It makes scheduling decisions and runs workloads directly on machines, placing it in the same category as Kubernetes, Docker Swarm, and HashiCorp Nomad -- not management layers like Portainer or Rancher.

Where CCattler fits ​

What it isMakes scheduling decisions?Runs workloads?
PortainerManagement UI / control layerNoNo
RancherKubernetes management layerNoNo
KubernetesOrchestratorYesYes
Docker SwarmOrchestratorYesYes
NomadOrchestratorYesYes
CCattlerOrchestratorYesYes

Portainer and Rancher provide operational interfaces over existing orchestrators. The underlying orchestrator still makes scheduling and lifecycle decisions. CCattler replaces that underlying orchestrator entirely.

Orchestrator comparison ​

KubernetesDocker SwarmNomadCCattler
Primary abstractionAPI objectsServices / tasksJobs / allocationsFacts / relations
ConfigurationYAMLCompose / CLIHCLCCattler DSL
ReconciliationMultiple independent controllersManager reconciliationScheduler + client modelUnified reconciliation engine
NetworkingCNI plugins + NetworkPolicyBuilt-in overlayConsul integrationIdentity-based policies via facts
StorageCSI driver ecosystemDocker volume pluginsPlugin systemStorage controller + fact model
AutoscalingHPA + VPA + KEDA (3 systems)LimitedAutoscaler pluginUnified scaling engine
Multi-tenancyNamespaces + third-party policiesLimitedNamespaces + ACLsBuilt-in tenants, quotas, isolation
Security modelRBAC + ecosystem add-onsSwarm mutual TLSACLs + ConsulRBAC + ABAC + mTLS + identity policies
Configuration languageYAML serializing internal objectsYAML / ComposeHCLDomain language expressing intent

The key architectural difference ​

Objects vs facts ​

Kubernetes represents the world as typed API objects organized in a hierarchy:

Deployment → ReplicaSet → Pod → Container

Each layer has its own controller. A Deployment controller manages ReplicaSets. A ReplicaSet controller manages Pods. The scheduler places Pods on nodes. This creates a chain of resources and controllers.

CCattler represents the world as facts about desired and observed reality:

desired/service/web/instances = "3"
observed/instance/web-1/state = "running"
observed/instance/web-2/state = "running"

The gap between desired and observed is the work. There is no object hierarchy -- controllers read facts, compute what's missing, and write new facts.

Kubernetes says: "The cluster is a collection of typed resources and controllers operating on those resources."

CCattler says: "The cluster is a collection of facts about desired and observed reality, and rules derive what needs to happen."

One reconciliation engine ​

Kubernetes is deliberately modular. The scheduler, networking, storage, autoscaling, and policy are all separate controllers with separate APIs, separate configuration, and separate failure modes. Production use requires assembling 10+ tools.

          Kubernetes API
               |
     +---------+---------+
     |         |         |
  Scheduler  Controllers  Operators
     |         |         |
     +----+----+---------+
          |
    separate subsystems:
    networking / storage /
    autoscaling / policy / ...

CCattler routes all capabilities through a single reconciliation engine. Scheduling, scaling, networking, storage, and policy are all controllers watching facts in the same store, executed in the same loop.

            Facts
              |
        +-----------+
        | Reconcile |
        |  engine   |
        +-----+-----+
              |
    +---------+---------+
    |         |         |
scheduling networking storage
    |         |         |
    +---------+---------+
              |
           Actions

This means there is no gap between "core CCattler" and "production CCattler." The production capabilities -- autoscaling, mTLS, secrets, network policy, multi-tenancy -- are the core.

Management layers vs orchestrators ​

A common question is how CCattler compares to Portainer or Rancher. The answer is: it doesn't. They solve different problems.

Portainer / Rancher ask: "How can I manage Kubernetes, Swarm, or other orchestrators more easily?"

Kubernetes / Swarm / Nomad ask: "How do I orchestrate workloads across machines?"

CCattler asks: "What if we redesigned the orchestration engine itself around facts, declarative intent, and a unified reconciliation loop?"

    Portainer / Rancher              CCattler
          |                             |
    +-----+-----+              +-------+-------+
    |     |     |              | facts + rules  |
    K8s  Swarm Podman          | + reconcile    |
    |     |     |              +-------+-------+
  workloads  workloads                 |
                               node agents
                                       |
                              +--------+--------+
                              |        |        |
                            host     host     host

Portainer layers on top of an existing orchestrator. CCattler is the orchestrator.

Released under the GPL-3.0 License.