Akka management
Akka Management (Scala+Java) — the suite of operational tools for running Akka Clusters, exposing a central HTTP management endpoint plus extensions for Cluster Bootstrap (automatic cluster formation via Akka Discovery, replacing static seed-nodes), health checks (Kubernetes readiness/liveness probes), Cluster HTTP Management (inspect/manage membership over REST), and Kubernetes rolling-update helpers (Pod Deletion Cost, AppVersionRevision). Use when deploying an Akka Cluster to Kubernetes or the cloud, forming a cluster automatically instead of hardcoding seed nodes, wiring readiness/liveness probes, doing graceful rolling updates, or inspecting cluster membership over HTTP — even if "management" isn't named but cluster bootstrap, health checks, or k8s cluster ops are involved. Complements akka-cluster and akka-discovery.From its SKILL.md
npx -y skills add vezril/claude-toolkit --skill akka-managementAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
5.8 KB, as published. Nobody here has run it
Akka Management
A suite of operational tools for Akka Clusters. The core akka-management module provides a single central HTTP management endpoint to which extensions register routes; you add only the extensions you need. The most important are Cluster Bootstrap (form a cluster automatically via [[akka-discovery]]) and health checks (Kubernetes probes). This is what makes [[akka-cluster]] practical to run on Kubernetes/cloud.
Cross-links: [[akka]] (meta), [[akka-cluster]], [[akka-discovery]]. Dependencies under com.lightbend.akka.management; pin all akka-* to one Akka version.
Starting it
Management does not auto-start (so you can prepare before exposing routes):
import akka.management.scaladsl.AkkaManagement
AkkaManagement(system).start() // Future[Done]; HTTP endpoint on akka.management.http.port (default 8558)
AkkaManagement.get(system).start();
akka.management.http {
hostname = "127.0.0.1" # bind-hostname/bind-port for NAT/Docker
port = 8558
route-providers-read-only = true # set false to expose mutating cluster endpoints
}
No security by default — don't expose management publicly; add HTTPS/basic-auth via start(_.withHttpsConnectionContext(...).withAuth(...)).
Cluster Bootstrap — automatic cluster formation
Replaces static akka.cluster.seed-nodes in dynamic environments (Kubernetes, AWS) by using [[akka-discovery]] to find peers. Start both Akka Management and Bootstrap on every node:
AkkaManagement(system).start()
ClusterBootstrap(system).start()
akka.management.cluster.bootstrap.contact-point-discovery {
service-name = "my-service"
discovery-method = kubernetes-api # or akka-dns, aws-api, consul; falls back to akka.discovery.method
required-contact-point-nr = 3 # ideally the exact initial node count
}
How it works: each node exposes /bootstrap/seed-nodes; nodes query discovery until they find the required contact points, then probe them — if a cluster exists they join it, otherwise the node with the lowest address self-joins and forms a new cluster, and the rest join it. Don't set seed-nodes (it takes precedence and disables bootstrap). For deploy safety, flip new-cluster-enabled = off after the first formation, and add akka.cluster.shutdown-after-unsuccessful-join-seed-nodes = 30s + akka.coordinated-shutdown.exit-jvm = on so a pod that can't join is restarted. Enable the [[akka-cluster]] Split Brain Resolver for hard failures.
Health checks (Kubernetes probes)
Two kinds, mirroring k8s probes: readiness (/ready, should receive traffic — e.g. joined the cluster) and liveness (/alive, should keep running). Returns 200 only when all checks of that kind pass. A cluster-membership readiness check ships by default; add custom checks (a () => Future[Boolean] / Supplier<CompletionStage<Boolean>>) under akka.management.health-checks.{readiness-checks,liveness-checks}.
Cluster HTTP Management & rolling updates
Detail in references/bootstrap-healthchecks-k8s.md — the discovery methods (kubernetes-api RBAC, DNS, AWS), the full health-check config and custom checks, Cluster HTTP Management REST endpoints (/cluster/members, domain-events SSE, shard info; GETs by default, mutations only when route-providers-read-only = false), graceful shutdown via SIGTERM + Coordinated Shutdown, and the Kubernetes rolling-update helpers — start rolling redeploys from the newest node (singletons run on the oldest), plus akka-rolling-update-kubernetes extensions Pod Deletion Cost (keep the oldest pod alive longest) and AppVersionRevision (correct app-version on rollback).
Always-apply defaults
- Use Cluster Bootstrap, not static seed-nodes, in Kubernetes/cloud; start both Management and Bootstrap on every node; don't set
seed-nodes. - Wire
/readyand/aliveto k8s probes (management port, commonly namedmanagement/8558); keep the default cluster-membership readiness check. - Don't expose the management endpoint publicly; keep
route-providers-read-only = trueunless you specifically need mutating endpoints, and secure with HTTPS/auth if exposed. - Shut down with SIGTERM (not SIGKILL) so Coordinated Shutdown leaves the cluster gracefully (fast singleton/shard handover); start rolling updates from the newest node.
- Pair with [[akka-cluster]] SBR and set
required-contact-point-nrto the initial node count for safe formation.
Anti-patterns (flag in review)
- Mixing
seed-nodeswith Bootstrap (Bootstrap silently won't run); exposing management to the internet; leaving mutating endpoints on. - SIGKILL instead of SIGTERM (crash-style exit blocks graceful handover); rolling updates from the oldest node (singletons thrash); no SBR.
Related
- [[akka-cluster]] (the cluster being formed/operated) · [[akka-discovery]] (powers Bootstrap) · [[akka]] (meta).
- Source: https://doc.akka.io/libraries/akka-management/current/