workload-rebalancing
Orchestrate cross-cluster workload rebalancing using the kanban board with the validation-then-declare pattern. Use when fleet utilization shows one cluster overutilized and another with headroom and a workload should move.
- License 许可
- Apache-2.0
- 最近更新
- 2026-11-13
- Stars
- ★ 126
- Forks
- 44
01 前言 Front Matter
- name
- workload-rebalancing
- description
- Orchestrate cross-cluster workload rebalancing using the kanban board with the validation-then-declare pattern. Use when fleet utilization shows one cluster overutilized and another with headroom and a workload should move.
03 SKILL.md 正文
Workload Rebalancing Skill (validation-then-declare)
When live cluster utilization — checked via the read-only gke MCP / kubectl top on each cluster — shows a cluster overutilized / under pressure and another with headroom, you may relocate a workload. You act as an orchestrator: cluster agents validate feasibility (read-only); you declare the change as a single GitOps PR; KCC reconciles the actual move. Never issue imperative start/stop.
When to use vs. do-it-yourself
Delegating is optional. Use this fan-out when you want per-cluster local validation and a single aggregated decision. For a trivial single-cluster change, act directly.
The card graph (fan-out validation → decide on your own card)
Resolve each cluster's profile name first with the get_cluster_profile_name(project, cluster, location) tool, and assign a card only to a profile it reports as existing (for a cluster with none, validate it yourself — SOUL.md §6 step 1), then:
- Card A — can clusterA host it?
kanban_create(assignee="<clusterA-profile>", title="Validate can-host <workload>", body="Can you host <ns/workload> (needs ~<cpu>/<mem>)? Check capacity, affinity/taints, quotas. Do NOT mutate.") - Card B — is clusterB safe to evacuate?
kanban_create(assignee="<clusterB-profile>", title="Validate safe-to-evacuate <workload>", body="Is it safe to evacuate <ns/workload>? Check PDBs, statefulness/local PVs, in-flight work. Do NOT mutate.") - Wait on your own card: poll A and B with
kanban_show(<id>)(terminal(command="sleep 60", timeout=90)between rounds) until both are settled, then read theirmetadata.
Cards A and B are created with no parents so they run in parallel immediately (independent read-only checks) while you wait. Do not add your own currently-running card to A or B's parents — parents means "runs after", and that would stop them being claimed at all (SOUL.md §0). Do not complete your card while A or B is unfinished: your card's result is what the requester receives, and the image refuses a kanban_complete over unfinished fan-out cards (#1010). (The actual make-before-break ordering of the move is handled by KCC when it reconciles the PR, not by the agents.)
Expected validation metadata
Card A (clusterA):
{
"can_host": true,
"workload": { "namespace": "...", "name": "..." },
"headroom_after": { "cpu_vcpu": 54, "memory_gib": 194 },
"constraints": [],
"confidence": "high"
}
Card B (clusterB):
{
"safe_to_evacuate": true,
"workload": { "namespace": "...", "name": "..." },
"blockers": [],
"pdb_ok": true,
"stateful": false,
"in_flight_work": false,
"notes": "..."
}
Decide & declare (your card, once A and B settle)
- Both green → generate the relocation change (move the workload's manifest from clusterB's overlay to clusterA's, or flip its target-cluster field) and open one PR via
submit-suggestion. KCC/Config Sync performs the move. Report the decision and the PR URL inkanban_complete(result=...), and record the machine-readable form alongside it:metadata={"decision":"proceed","from":"clusterB","to":"clusterA","pr_url":"...","rationale":"..."}. - Either red → do not declare. Report blockers to the user, or
kanban_block(kind="needs_input")if a human must decide.
Safety
The change is a PR, so rollback is a revert. A failed validation aborts the declaration (no partial move). Escalate ambiguity via needs_input. You never mutate clusters directly — cluster agents are read-only and you emit declarative artifacts only.
04 同仓库更多 Skills
kube-agents-feedback
File a bug report, feature request, or question about kube-agents itself on the user's behalf, through the project's public feedback form, exactly once, after the user has confirmed the exact text in chat, and render the install's audited usage summary for a card that asks only for that, filing nothing. A submission becomes a public GitHub issue on gke-labs/kube-agents. Not for telling a user where to report — the persona bullet owns that answer without a skill.
cluster-agent-lifecycle
暂无简介
review-preflight
Runs the pre-PR review passes — adversarial and docs-drift on every change, plus chat UX whenever chat output changes — each in a context that did not write the change, and merges what they return into one disposition list.
gce-compute-fleet-audit
Audits standalone GCE virtual machines, Managed Instance Groups (MIGs), serial console boot failures, sole-tenant node group headroom, and orphaned disk snapshots.
fleet-audit
Publish the findings of an autonomous fleet audit as one continuously-rewritten issue per audit stream per install on the GitOps repository's forge, and propose fixes as narrow remediation pull requests (merge requests on GitLab).
gke-rightsizing-checks
Five required checks, and the arithmetic, before any proposal to lower a workload's CPU or memory requests or limits, or to change a node pool's machine type or size, and before any claim of capacity freed. Read-only. For "lower the requests of X", "right-size this deployment", "can this pool use a smaller machine type", and any answer that claims nodes, CPU, memory or a percentage freed.