Open source
spot-readiness: quais workloads do seu cluster podem rodar em Spot
CLI em Go, Apache-2.0, que lê seus manifests ou o cluster (somente leitura) e diz quais workloads Kubernetes toleram interrupção de Spot, o que corrigir primeiro e em que ordem.
O que ele faz
19 regras de workload
Réplicas, probes, PodDisruptionBudget, desligamento gracioso, Jobs e flexibilidade de capacidade. Cada workload recebe uma nota e um veredito: pronto, pronto com ressalvas ou não pronto.
Plano de migração
Agrupa o que mover agora, o que mover depois de mudanças, o que pede revisão manual e o que manter em On-Demand, com a vCPU de cada grupo.
Correção para cada achado
Com --suggest, cada achado traz um trecho de YAML para adaptar, já com os nomes do seu workload.
Cluster e Karpenter
Lê pods e nós, avalia o tratamento de interrupção e, com --karpenter, confere NodePools, NodeClaims e EC2NodeClasses.
Feito para CI
Saída em tabela, JSON, CSV, Markdown e SARIF, baseline para falhar só em problemas novos e uma GitHub Action que comenta no pull request.
Instalação
Binários para Linux, macOS e Windows (amd64 e arm64), com checksums.
brew install robertasolimandonofreo/tap/spot-readinessA imagem Docker só lê os arquivos que você monta. Para o modo cluster, use o binário se o seu kubeconfig depende de aws eks get-token ou gcloud.
Como usar
Comece por uma pasta de manifests. Nada é alterado nos seus arquivos.
spot-readiness scan ./k8s # a directory of manifests
helm template my-release ./chart | spot-readiness scan -
spot-readiness scan --context prod -n shop # the cluster (read-only)
spot-readiness scan --suggest ./k8s # a suggested fix for every finding
spot-readiness plan ./k8s # what to move now, after changes, or never
spot-readiness scan --fail-on not-ready ./k8s # exit 1 in CIExemplo de saída
$ spot-readiness scan ./k8s
VERDICT SCORE WORKLOAD REPLICAS CPU SPOT FINDINGS
not-ready 15 shop/statefulset/db 1 2000m - SR001,SR006,SR007,SR009
not-ready 35 shop/deployment/worker 2 2000m - SR003,SR004,SR005,SR006,SR009
ready 100 shop/deployment/web 3 1500m -
3 workloads: 1 ready, 0 with caveats, 2 not ready
Spot potential: 27% of requested CPU (workloads ready or with caveats).Saída ilustrativa, com workloads fictícios.
Na sua pipeline
O repositório também é uma GitHub Action: ela escaneia os manifests, comenta no pull request e pode falhar o job.
- uses: actions/checkout@v4
- uses: robertasolimandonofreo/spot-readiness@v0.8.2
with:
path: ./k8s
comment: "true" # one comment, updated on every push
fail-on-regression: "true" # fail only on new findingsO que ele não faz
- Pronto não é seguro: ele lê configuração e não sabe se a aplicação trata SIGTERM ou guarda estado em memória.
- As regras são heurísticas. Leia os achados em vez de seguir só a nota.
- Não mede custo real. Para isso existem o OpenCost e o Kubecost.
- AWS primeiro: as regras de workload valem para qualquer cluster, mas Spot do GKE e do AKS ainda não são reconhecidos.
Depois do diagnóstico
Quer ajuda para ler o resultado no seu cluster?
Eu reviso o seu ambiente e monto um plano priorizado de migração para Spot.