🟡 Intermediate

FinOps — Cloud Cost Optimization

FinOps je operačný framework, ktorý spája financie, technológiu a biznis s cieľom maximalizovať hodnotu cloud investícií. Nejde len o šetrenie — ide o informované rozhodovanie o tom, kde a ako míňať peniaze na cloud.


Čo je FinOps?

FinOps (Financial Operations) je kultúrna prax a disciplína, ktorá prináša finančnú zodpovednosť do variabilného modelu cloud výdavkov. Vznikla ako odpoveď na nekontrolovaný rast cloud nákladov v organizáciách.

Tri piliere FinOps

  1. Inform (Informovať) — viditeľnosť nákladov, kto čo míňa
  2. Optimize (Optimalizovať) — identifikácia a realizácia úspor
  3. Operate (Prevádzkovať) — kontinuálne riadenie a governance

FinOps lifecycle

┌─────────────┐     ┌──────────────┐     ┌─────────────┐
│   INFORM    │────▶│   OPTIMIZE   │────▶│   OPERATE   │
│             │     │              │     │             │
│ Viditeľnosť│     │ Right-sizing │     │ Governance  │
│ Alokácia   │     │ Reservations │     │ Automatizá. │
│ Benchmarky │     │ Waste detect │     │ Policies    │
└─────────────┘     └──────────────┘     └─────────────┘
        ▲                                       │
        └───────────────────────────────────────┘

Tagging stratégia

Tagging je základ FinOps. Bez správneho taggovania nedokážete priradiť náklady k tímom, projektom alebo prostrediam.

Povinné tagy

Tag Príklad Účel
team backend, data Vlastníctvo
environment prod, staging, dev Prostredie
project e-shop, analytics Projekt/produkt
cost-center CC-1234 Finančné stredisko
managed-by terraform, helm Spôsob správy

Vynucovanie tagov v Terraform

# Povinné tagy pre všetky zdroje
variable "required_tags" {
  type = map(string)
  default = {
    team        = "platform"
    environment = "production"
    project     = "core-infra"
    managed-by  = "terraform"
  }
}

resource "aws_instance" "app" {
  ami           = "ami-0123456789"
  instance_type = "t3.medium"
  tags          = merge(var.required_tags, {
    Name = "app-server"
  })
}

OPA policy pre Kubernetes labels

package kubernetes.admission

deny[msg] {
  input.request.kind.kind == "Deployment"
  required := {"team", "environment", "project"}
  provided := {label | input.request.object.metadata.labels[label]}
  missing := required - provided
  count(missing) > 0
  msg := sprintf("Chýbajúce povinné labels: %v", [missing])
}

Nástroje

Kubecost — náklady v Kubernetes

Kubecost poskytuje granulárny prehľad nákladov na úrovni namespace, deployment, pod:

# Inštalácia
helm install kubecost cost-analyzer \
  --repo https://kubecost.github.io/cost-analyzer/ \
  --namespace kubecost --create-namespace \
  --set kubecostToken="your-token"

Čo Kubecost ukáže:

  • Náklady per namespace, deployment, label
  • Idle resources (platíte, ale nevyužívate)
  • Right-sizing odporúčania
  • Network cost allocation
  • Savings recommendations

Infracost — náklady pred deployom

Infracost ukazuje cenu infraštruktúrnych zmien ešte v pull requeste:

# V CI pipeline
infracost breakdown --path=terraform/

# Výstup
# NAME                     MONTHLY COST
# aws_instance.app         $30.37
# aws_rds_instance.db      $147.20
# aws_s3_bucket.assets     $2.30
# TOTAL                    $179.87

Integrácia do GitHub PR

# .github/workflows/infracost.yml
name: Infracost
on: [pull_request]
jobs:
  infracost:
    runs-on: ubuntu-latest
    steps:
      - uses: infracost/actions/setup@v3
        with:
          api-key: ${{ secrets.INFRACOST_API_KEY }}

      - name: Generate cost estimate
        run: |
          infracost diff --path=terraform/ \
            --format=json --out-file=/tmp/infracost.json

      - name: Post PR comment
        run: |
          infracost comment github \
            --path=/tmp/infracost.json \
            --repo=${{ github.repository }} \
            --pull-request=${{ github.event.pull_request.number }} \
            --github-token=${{ secrets.GITHUB_TOKEN }}

OpenCost — CNCF open-source

OpenCost je CNCF sandbox projekt pre Kubernetes cost monitoring:

helm install opencost opencost/opencost \
  --namespace opencost --create-namespace

Showback vs Chargeback

Showback

Tímy vidia svoje náklady, ale neplatia za ne priamo. Motivácia je cez transparentnosť a peer pressure.

  • Jednoduchšia implementácia
  • Vhodné pre začiatok FinOps cesty
  • Dashboard s cost per team/project

Chargeback

Tímy platia za svoje cloud náklady z vlastného rozpočtu. Každý tím má cloud budget.

  • Silnejšia motivácia optimalizovať
  • Vyžaduje presné tagging a cost allocation
  • Komplexnejšia implementácia

Odporúčanie: Začnite so showback, prejdite na chargeback keď máte zrelý tagging a procesy.


Waste Detection — Detekcia plytvania

Typické zdroje plytvania

Typ Príklad Úspora
Idle resources Dev prostredia bežiace 24/7 60-70%
Over-provisioned 4 CPU alokované, 0.5 využité 50-75%
Unattached storage EBS volumes bez EC2 100%
Old snapshots Snapshoty staršie ako 90 dní 100%
Unused load balancers LB bez healthy targets 100%

Automatický shutdown dev prostredí

# Kubernetes CronJob — shutdown dev o 19:00
apiVersion: batch/v1
kind: CronJob
metadata:
  name: scale-down-dev
  namespace: dev
spec:
  schedule: "0 19 * * 1-5"  # Po-Pia o 19:00
  jobTemplate:
    spec:
      template:
        spec:
          serviceAccountName: scaler
          containers:
            - name: kubectl
              image: bitnami/kubectl:latest
              command:
                - /bin/sh
                - -c
                - |
                  kubectl scale deployment --all --replicas=0 -n dev
          restartPolicy: Never
---
# Scale up o 7:00
apiVersion: batch/v1
kind: CronJob
metadata:
  name: scale-up-dev
  namespace: dev
spec:
  schedule: "0 7 * * 1-5"
  jobTemplate:
    spec:
      template:
        spec:
          serviceAccountName: scaler
          containers:
            - name: kubectl
              image: bitnami/kubectl:latest
              command:
                - /bin/sh
                - -c
                - |
                  kubectl scale deployment --all --replicas=1 -n dev
          restartPolicy: Never

Praktické tipy na úsporu

  1. Reserved Instances / Savings Plans — 30-60% úspora pre predvídateľné workloady
  2. Spot Instances — 60-90% úspora pre fault-tolerant workloady (CI/CD, batch processing)
  3. Right-sizing — pravidelne kontrolujte využitie CPU/RAM a prispôsobte veľkosť
  4. Auto-scaling — škálujte podľa skutočného zaťaženia, nie podľa odhadu
  5. Storage tiering — presúvajte dáta do lacnejších úložísk (S3 Glacier, Archive)
  6. Cleanup politiky — automaticky mazajte staré artefakty, snapshoty a logy
  7. Multi-cloud porovnanie — porovnajte ceny medzi AWS, GCP a Azure

FinOps metriky

Metrika Popis Cieľ
Unit cost Náklad per transakcia/request Klesajúci trend
Coverage % workloadov s commitment >70%
Utilization Využitie reserved kapacity >80%
Waste ratio % nevyužitých zdrojov <10%
Tag compliance % zdrojov so správnymi tagmi >95%

Záver

FinOps nie je jednorazový projekt — je to kontinuálna prax. Začnite s viditeľnosťou (tagging + dashboard), identifikujte najväčšie zdroje plytvania a postupne budujte kultúru finančnej zodpovednosti. Najdôležitejšie: FinOps nie je o šetrení za každú cenu, ale o maximalizácii hodnoty z každého eura investovaného do cloudu.