Miksi Kubernetes-kustannusten optimointi on kriittistä vuonna 2026?
Kubernetes on vakiinnuttanut asemansa konttien orkestrointistandardina — siitä ei ole kahta sanaa. Mutta sen kustannustehokas käyttö? Se on edelleen yllättävän vaikeaa valtaosalle organisaatioista. Tuoreimmat tutkimukset osoittavat, että 68 prosenttia organisaatioista ylimitoittaa Kubernetes-työkuormansa 20–40 prosentilla. Käytännössä klustereihin varataan prosessori- ja muistikapasiteettia, jota kukaan ei koskaan käytä — ja lasku tulee silti maksettavaksi.
Tilanne kärjistyy vuonna 2026. Tekoäly- ja koneoppimistyökuormat lisäävät GPU-instanssien kysyntää, ja pilvipalveluiden kokonaismenot ylittävät ensimmäistä kertaa biljoonan dollarin rajan. Onneksi Kubernetes-ekosysteemiin on samalla tullut tehokkaita työkaluja — Karpenter, VPA ja KEDA — jotka mahdollistavat jopa 74 prosentin kustannussäästöt, kun niitä käytetään oikein.
Tässä oppaassa käydään läpi konkreettiset askeleet klusterisi kustannusten leikkaamiseen. Jokainen strategia sisältää toimivia konfiguraatioesimerkkejä, jotka voit ottaa käyttöön omassa ympäristössäsi heti.
Podien resurssipyyntöjen oikea mitoitus — suurin yksittäinen säästökeino
Resurssien oikea mitoitus (rightsizing) on ehdottomasti Kubernetes-kustannusten optimoinnin peruskivi. Tämä on se kohta, jossa suurimmat rahat menevät hukkaan.
Kun kehittäjät deployvat työkuormia, he asettavat resurssipyynnöt tyypillisesti reilusti todellista tarvetta suuremmiksi — "varmuuden vuoksi". Ymmärrettävää, mutta kallista. Kubernetes nimittäin aikatauluttaa podit varattujen resurssipyyntöjen, ei todellisen käytön perusteella. Tästä syntyy mittava ero varatun ja käytetyn kapasiteetin välille.
CPU ja muisti: kaksi eri maailmaa
Yksi asia, joka kannattaa sisäistää heti alkuun, on se miten Kubernetes käsittelee prosessori- ja muistiresursseja täysin eri tavoin:
- CPU on pakattava resurssi (compressible) — jos kontti ylittää CPU-limiitin, Kubernetes throttlaa eli hidastaa sitä. Sovellus ei kaadu, mutta hidastuu. Ikävää, muttei katastrofaalista.
- Muisti on pakkaamaton resurssi (incompressible) — jos kontti ylittää muistilimiitin, Kubernetes tappaa sen OOMKilled-virheellä. Tämä on kriittinen ero, joka pitää ehdottomasti huomioida mitoituksessa.
Käytännön suositus: aseta resurssipyynnöt todellisen käytön p95-arvon perusteella ja lisää 20–30 prosentin puskuri. Harkitse myös CPU-limiittien poistamista kokonaan — tämä parantaa bin-packingia ja vähentää throttlingia. Muistilimiitit sen sijaan kannattaa aina pitää paikallaan muistivuotojen hallitsemiseksi.
# Tarkista podin todellinen resurssien käyttö
kubectl top pods -n production --sort-by=cpu
# Yksityiskohtaisempi näkymä requests vs. käyttö
kubectl get pods -n production -o custom-columns=\
"NAME:.metadata.name,\
CPU_REQ:.spec.containers[0].resources.requests.cpu,\
MEM_REQ:.spec.containers[0].resources.requests.memory,\
CPU_LIM:.spec.containers[0].resources.limits.cpu,\
MEM_LIM:.spec.containers[0].resources.limits.memory"
Esimerkki: oikein mitoitettu deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-server
namespace: production
spec:
replicas: 3
selector:
matchLabels:
app: api-server
template:
metadata:
labels:
app: api-server
spec:
containers:
- name: api
image: my-api:latest
resources:
requests:
cpu: 250m # p95-käytön perusteella
memory: 384Mi # p95 + 25% puskuri
limits:
# CPU-limiittiä ei aseteta — vähentää throttlingia
memory: 512Mi # Suojaa muistivuodoilta
Jo pelkästään podien oikealla mitoituksella organisaatiot raportoivat tyypillisesti 30–60 prosentin säästöjä klusterin kokonaiskustannuksissa. Syy on yksinkertainen: kun podit varaavat vain tarvitsemansa resurssit, Kubernetes pakkaa ne tiiviimmin olemassa oleviin solmuihin ja tarvittavien solmujen kokonaismäärä pienenee. Rehellisesti sanottuna tämä on usein se "low-hanging fruit", josta kannattaa aina aloittaa.
ResourceQuotas ja LimitRanges — hallintaa nimiavaruustasolla
ResourceQuotas rajoittaa nimiavaruuden (namespace) kokonaisresurssien käyttöä, kun taas LimitRanges asettaa rajat yksittäisille konteille. Yhdessä ne estävät sen turhan tutun tilanteen, jossa yksittäinen tiimi tai sovellus monopolisoi klusterin resurssit.
# ResourceQuota — rajoittaa development-namespacen kokonaisresurssit
apiVersion: v1
kind: ResourceQuota
metadata:
name: dev-quota
namespace: development
spec:
hard:
requests.cpu: "8"
requests.memory: 16Gi
limits.cpu: "16"
limits.memory: 32Gi
pods: "50"
---
# LimitRange — oletusarvot konteille, joille ei ole asetettu resursseja
apiVersion: v1
kind: LimitRange
metadata:
name: default-limits
namespace: development
spec:
limits:
- default:
memory: 256Mi
cpu: 250m
defaultRequest:
memory: 128Mi
cpu: 100m
max:
memory: 2Gi
cpu: "2"
min:
memory: 64Mi
cpu: 50m
maxLimitRequestRatio:
memory: "4"
cpu: "4"
type: Container
maxLimitRequestRatio on erityisen tärkeä asetus kustannusten hallinnassa. Se estää tilanteet, joissa kehittäjä asettaa pienen requestin (nopea aikataulutus) mutta valtavan limiitin ("varmuuden vuoksi"), mikä johtaa arvaamattomaan resurssien käyttöön ja noisy neighbor -ongelmiin. Näitä tapauksia näkee yllättävän usein.
Vertikaalinen autoskaalaus VPA:lla — automaattinen resurssien mitoitus
Vertical Pod Autoscaler (VPA) analysoi podien historiallista resurssien käyttöä ja suosittelee — tai automaattisesti säätää — CPU- ja muistipyyntöjä. Erityisen hyödyllinen työkuormille, joiden resurssitarve vaihtelee ajan myötä.
Aloita suositustilassa
Tuotantoympäristöissä kannattaa aina, ihan aina, aloittaa VPA:n Off-tilasta (suositustila). Tässä tilassa VPA laskee suositukset mutta ei tee muutoksia. Näin saat aikaa validoida suositukset rauhassa ennen niiden käyttöönottoa.
# VPA suositustilassa — turvallinen aloituspiste
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: api-server-vpa
namespace: production
spec:
targetRef:
apiVersion: apps/v1
kind: Deployment
name: api-server
updatePolicy:
updateMode: "Off" # Vain suositukset, ei muutoksia
resourcePolicy:
containerPolicies:
- containerName: api
minAllowed:
cpu: 100m
memory: 128Mi
maxAllowed:
cpu: "4"
memory: 8Gi
controlledResources: ["cpu", "memory"]
# Tarkista VPA:n suositukset
kubectl describe vpa api-server-vpa -n production
# Esimerkkitulos:
# Recommendation:
# Container Recommendations:
# Container Name: api
# Lower Bound: Cpu: 100m, Memory: 200Mi
# Target: Cpu: 250m, Memory: 384Mi
# Upper Bound: Cpu: 1, Memory: 1Gi
Siirtyminen automaattiseen tilaan
Kun suositukset on validoitu ja ne näyttävät järkeviltä, voit siirtyä Recreate-tilaan. Siinä VPA päivittää resurssipyynnöt automaattisesti luomalla podit uudelleen. Hyvä uutinen: vuonna 2026 VPA tukee myös InPlaceOrRecreate-tilaa, joka yrittää päivittää resurssit ilman podin uudelleenkäynnistystä.
# VPA automaattisessa tilassa
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: api-server-vpa
namespace: production
spec:
targetRef:
apiVersion: apps/v1
kind: Deployment
name: api-server
updatePolicy:
updateMode: "Recreate"
minReplicas: 2 # Vähintään 2 podia aina käynnissä
resourcePolicy:
containerPolicies:
- containerName: api
minAllowed:
cpu: 100m
memory: 128Mi
maxAllowed:
cpu: "4"
memory: 8Gi
controlledResources: ["cpu", "memory"]
controlledValues: RequestsAndLimits
Huom: VPA:n Auto-tila on vanhentunut VPA-versiosta 1.4.0 alkaen. Käytä sen sijaan eksplisiittisiä tiloja kuten Recreate tai InPlaceOrRecreate.
Horisontaalinen autoskaalaus HPA:lla — skaalaa replikoiden määrää
Horizontal Pod Autoscaler (HPA) säätää podien replikoiden määrää kuorman mukaan. Se on yleensä turvallisempi vaihtoehto kuin VPA liikennettä käsitteleville palveluille — vikatilanteessa on yksinkertaisesti parempi, että käytössä on kymmenen pientä podia kuin yksi jättimäinen.
# HPA CPU- ja muistipohjaisella skaalauksella
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: api-server-hpa
namespace: production
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: api-server
minReplicas: 2
maxReplicas: 20
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
behavior:
scaleDown:
stabilizationWindowSeconds: 300 # 5 min viive ennen alaskaalausta
policies:
- type: Percent
value: 25 # Max 25% kerrallaan alas
periodSeconds: 60
scaleUp:
stabilizationWindowSeconds: 30
policies:
- type: Percent
value: 100 # Tuplaa tarvittaessa
periodSeconds: 60
HPA ja VPA yhdessä — vältä ristiriidat
HPA:ta ja VPA:ta voi käyttää samalle deploymentille, mutta ne eivät saa kontrolloida samaa metriikkaa. Tämä on kohta, jossa monet kompastuvat. Tyypillinen (ja toimiva) ratkaisu:
- HPA skaalaa CPU:n perusteella (replikoiden määrä)
- VPA säätää muistipyynnöt (yksittäisen podin resurssit)
Jos molemmat yrittävät kontrolloida CPU:ta, ne ajautuvat ristiriitaan: VPA pienentää CPU-pyyntöä, mikä nostaa CPU-käyttöastetta prosentteina, mikä saa HPA:n luomaan lisää replikoita — ja lopputuloksena kustannukset nousevat eikä laskevat. Ei siis hyvä juttu.
Karpenter — seuraavan sukupolven solmujen provisiointi
Karpenter on AWS:n kehittämä avoimeen lähdekoodiin perustuva solmujen autoskaalausratkaisu, joka on monessa tuotantoympäristössä korvannut perinteisen Cluster Autoscalerin. Ja syystäkin. Vuonna 2026 Karpenter v1 GA on vakiinnuttanut asemansa — sitä käyttävät tuotannossa jopa Salesforcen kaltaiset suuryritykset yli tuhannessa klusterissa.
Karpenter vs. Cluster Autoscaler — keskeiset erot
| Ominaisuus | Karpenter | Cluster Autoscaler |
|---|---|---|
| Provisiointi | Tapahtumapohjainen, ~45–60 sekuntia | Ajastettu, 3–4 minuuttia |
| Instanssivalinta | Dynaaminen, tuhansia tyyppejä | Ennalta määritetyt node-ryhmät |
| Spot-tuki | Natiivi, dynaaminen vaihto | Vaatii ennakkokonfiguraation |
| Konsolidointi | Proaktiivinen | Reaktiivinen — vain tyhjät solmut |
| Kustannussäästö | 20–74 % Cluster Autoscaleriin verrattuna | Peruslinja |
Karpenterin suurin etu on proaktiivinen konsolidointi: se etsii jatkuvasti halvempia tai vajaakapasiteettisia solmuja, siirtää podit ja vapauttaa kalliimmat instanssit. Cluster Autoscaler puolestaan poistaa solmuja vasta kun ne ovat täysin tyhjiä. Ero käytännön säästöissä on merkittävä.
Karpenter NodePool — Spot-instanssit käytännössä
# NodePool spot-työkuormille — maksimaaliset säästöt
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
name: spot-workers
spec:
template:
metadata:
labels:
node-type: spot
cost-tier: economical
spec:
nodeClassRef:
group: karpenter.k8s.aws
kind: EC2NodeClass
name: default
expireAfter: 168h # Solmut uusitaan viikon välein
taints:
- key: karpenter.sh/capacity-type
value: spot
effect: NoSchedule
requirements:
- key: karpenter.sh/capacity-type
operator: In
values: ["spot"]
# Laaja instanssivalikoima — kriittistä spot-saatavuudelle
- key: node.kubernetes.io/instance-type
operator: In
values:
- m6i.large
- m6i.xlarge
- m6a.large
- m6a.xlarge
- m5.large
- m5.xlarge
- c6i.large
- c6i.xlarge
- c5.large
- c5.xlarge
- r6i.large
- r5.large
- key: kubernetes.io/arch
operator: In
values: ["amd64"]
limits:
cpu: "500"
memory: 1000Gi
disruption:
consolidationPolicy: WhenEmptyOrUnderutilized
# EC2NodeClass — vaadittu AWS-kohtainen konfiguraatio
apiVersion: karpenter.k8s.aws/v1
kind: EC2NodeClass
metadata:
name: default
spec:
amiFamily: AL2023
amiSelectorTerms:
- alias: al2023@latest
role: "KarpenterNodeRole-my-cluster"
subnetSelectorTerms:
- tags:
karpenter.sh/discovery: my-cluster
securityGroupSelectorTerms:
- tags:
karpenter.sh/discovery: my-cluster
Karpenter käyttää Price Capacity Optimized (PCO) -strategiaa spot-instanssien valinnassa: se valitsee ensin kapasiteetiltaan vakaimmat spot-poolit (eli vähemmän keskeytyksiä) ja sitten edullisimmat hinnat. Spot-to-spot-konsolidointia varten tarvitaan vähintään 15 instanssityyppiä — tämä on hyvä pitää mielessä NodePooleja suunnitellessa.
Tuotantosuojaus: On-demand-fallback
Kriittisille työkuormille kannattaa ehdottomasti konfiguroida erillinen on-demand NodePool, joka aktivoituu kun spot-kapasiteettia ei ole saatavilla:
# On-demand fallback kriittisille palveluille
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
name: on-demand-critical
spec:
template:
spec:
nodeClassRef:
group: karpenter.k8s.aws
kind: EC2NodeClass
name: default
requirements:
- key: karpenter.sh/capacity-type
operator: In
values: ["on-demand"]
- key: node.kubernetes.io/instance-type
operator: In
values:
- m6i.large
- m6i.xlarge
- m6i.2xlarge
limits:
cpu: "100"
memory: 200Gi
weight: 10 # Pienempi prioriteetti kuin spot-pool
disruption:
consolidationPolicy: WhenEmptyOrUnderutilized
KEDA — tapahtumapohjainen skaalaus nollasta äärettömään
KEDA (Kubernetes Event-Driven Autoscaling) laajentaa HPA:ta mahdollistamalla skaalauksen ulkoisten lähteiden perusteella: SQS-jono, Kafka-topic, Prometheus-metriikka tai vaikka cron-aikataulu. Erityisen tehokas yhdistelmä on KEDA + Karpenter + Spot, ja tässä on käytännön esimerkki miksi:
- KEDA monitoroi SQS-jonon syvyyttä
- Jono täyttyy → KEDA skaalaa deploymentin 0:sta 50 replikaan
- Karpenter havaitsee 50 pending-podia ja provisioi spot-instanssit
- Jono tyhjenee → KEDA skaalaa takaisin nollaan
- Karpenter näkee tyhjät solmut ja vapauttaa ne (konsolidointi)
# KEDA ScaledObject — SQS-jonopohjainen skaalaus
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: order-processor
namespace: production
spec:
scaleTargetRef:
name: order-processor
pollingInterval: 15
cooldownPeriod: 120
idleReplicaCount: 0 # Skaalaa nollaan kun jono on tyhjä
minReplicaCount: 0
maxReplicaCount: 100
triggers:
- type: aws-sqs-queue
metadata:
queueURL: https://sqs.eu-north-1.amazonaws.com/123456789012/orders
queueLength: "5" # 1 replica per 5 viestiä
awsRegion: eu-north-1
identityOwner: operator
Tämä yhdistelmä tuottaa huomattavia säästöjä eräajo- ja tapahtumapohjaisten työkuormien kohdalla. Resursseja varataan vain silloin kun työtä on tehtävänä — ja vielä spot-hinnalla. Parhaimmillaan puhutaan lähes nollakustannuksista hiljaisina aikoina.
Tallennus- ja verkkoliikenteen optimointi
Kubernetes-kustannuksissa laskenta saa yleensä eniten huomiota, mikä on ymmärrettävää. Mutta tallennus- ja verkkoliikennekulut voivat yllättää ikävästi. Tässä muutama käytännön strategia, jotka ovat tuottaneet hyviä tuloksia.
Tallennusluokkien optimointi
- Käytä oikeaa StorageClassia: SSD-pohjaiset PersistentVolumet (gp3, pd-balanced) ovat usein oletusvalinta, mutta monet työkuormat — kuten lokitiedostot ja varmuuskopiot — toimivat mainiosti HDD-pohjaisella tallennuksella murto-osalla hinnasta.
- Suosi objektitallennusta: Lokit, staattiset tiedostot ja varmuuskopiot kannattaa ohjata S3:een, GCS:ään tai Azure Blobiin PersistentVolumeiden sijaan. Objektitallennus skaalautuu rajattomasti ja laskuttaa vain käytetystä kapasiteetista.
- Poista käyttämättömät PersistentVolumeClaimit: Deploymentien poiston jälkeen PVC:t jäävät usein roikkumaan ja kerryttävät kustannuksia hiljaa taustalla. Tämä on yllättävän yleistä.
# Etsi käyttämättömät PersistentVolumet
kubectl get pv --no-headers | awk '$5 == "Released" {print $1}'
# Etsi PVC:t, joihin ei viittaa yksikään pod
kubectl get pvc -A --no-headers -o custom-columns=\
"NS:.metadata.namespace,NAME:.metadata.name" | while read ns name; do
if ! kubectl get pods -n "$ns" -o json | \
grep -q "\"claimName\":\"$name\""; then
echo "Käyttämätön PVC: $ns/$name"
fi
done
Verkkoliikenteen kustannukset
Vyöhyketietoinen aikataulutus vähentää cross-zone-dataliikennettä merkittävästi. Kun keskenään kommunikoivat palvelut sijaitsevat samassa saatavuusvyöhykkeessä, vyöhykkeiden välinen liikenne — ja sen kustannukset — pienenevät tuntuvasti.
# Topology-aware scheduling — suosi samaa vyöhykettä
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-server
spec:
template:
spec:
topologySpreadConstraints:
- maxSkew: 1
topologyKey: topology.kubernetes.io/zone
whenUnsatisfiable: ScheduleAnyway
labelSelector:
matchLabels:
app: api-server
Kustannusten näkyvyys — OpenCost ja Kubecost
Optimointi ilman näkyvyyttä on käytännössä mahdotonta. Et voi leikata kustannuksia, joita et näe. Kubernetes-kustannusten seurantaan on kaksi johtavaa työkalua.
OpenCost — avoimeen lähdekoodiin perustuva ratkaisu
OpenCost on CNCF:n incubating-projekti, joka mittaa ja kohdistaa pilvikustannuksia reaaliajassa. Se on ilmainen ja toimittajariippumaton — erinomainen lähtökohta. Vuonna 2026 OpenCost tukee myös MCP-palvelinta (Model Context Protocol), joka mahdollistaa tekoälyagenttien suoran pääsyn kustannusdataan.
# OpenCostin asennus Helmillä
helm repo add opencost https://opencost.github.io/opencost-helm-chart
helm repo update
helm install opencost opencost/opencost \
--namespace opencost \
--create-namespace
# kubectl-cost-lisäosa — nopea CLI-näkymä kustannuksiin
kubectl cost namespace --show-cpu --show-memory --show-efficiency
Kubecost — yritystason ominaisuudet
Kubecost rakentuu OpenCostin päälle ja lisää yritystason ominaisuuksia: tarkennetun laskun täsmäytyksen, hallinnan, hälytykset ja moniklusterituen. Kubecost v3 (2026) on siirtynyt ClickHouse-tietokantaan, mikä tarjoaa merkittävästi nopeammat kyselyt ja paremman suorituskyvyn suuressa mittakaavassa.
# Kubecostin asennus
helm repo add kubecost https://kubecost.github.io/cost-analyzer/
helm repo update
helm install kubecost kubecost/cost-analyzer \
--namespace kubecost \
--create-namespace \
--set kubecostToken="your-token"
Oma suositukseni: aloita OpenCostilla. Se riittää mainiosti alkuun. Siirry Kubecostiin sitten, kun tarvitset tarkkaa laskutäsmäytystä, moniklusteritukea tai edistyneitä hallintaominaisuuksia.
Käytännön polku optimointiin — kolme vaihetta
Kubernetes-kustannusten optimointi voi tuntua ylivoimaiselta kokonaisuudelta, mutta se kannattaa ehdottomasti tehdä vaiheittain. Tässä on toimivaksi havaittu kolmen vaiheen malli:
Vaihe 1: Näkyvyys (viikko 1–2)
- Asenna OpenCost tai Kubecost klusteriisi
- Tunnista suurimmat kustannuserät nimiavaruuksittain ja työkuormittain
- Analysoi resurssipyyntöjen ja todellisen käytön välinen ero
Vaihe 2: Oikea mitoitus ja hallinta (viikko 3–6)
- Ota VPA käyttöön suositustilassa kaikille tuotantotyökuormille
- Aseta ResourceQuotat ja LimitRanget kaikille nimiavaruuksille
- Päivitä resurssipyynnöt VPA:n suositusten perusteella
- Konfiguroi HPA liikennettä käsitteleville palveluille
Vaihe 3: Edistynyt automaatio (viikko 7–12)
- Migroi Cluster Autoscalerista Karpenteriin (AWS-ympäristöissä)
- Konfiguroi spot-instanssi NodePoolit ei-kriittisille työkuormille
- Ota KEDA käyttöön eräajo- ja tapahtumapohjaisille työkuormille
- Rakenna kustannushälytykset ja kuukausiraportointi
Usein kysytyt kysymykset
Voinko käyttää HPA:ta ja VPA:ta samalle deploymentille?
Kyllä voit, mutta ne eivät saa kontrolloida samaa metriikkaa. Toimiva yhdistelmä on HPA CPU:lle (replikoiden skaalaus) ja VPA muistille (resurssipyyntöjen optimointi). Jos molemmat yrittävät säätää samaa resurssia, syntyy ristiriitoja jotka voivat itse asiassa nostaa kustannuksia.
Kuinka paljon Karpenter säästää verrattuna Cluster Autoscaleriin?
Tuotantoympäristöissä raportoidut säästöt vaihtelevat 20–74 prosentin välillä riippuen työkuormien profiilista. Suurimmat säästöt syntyvät Karpenterin proaktiivisesta konsolidoinnista ja dynaamisesta instanssivalinnasta — erityisesti yhdistettynä spot-instansseihin.
Onko spot-instanssien käyttö Kubernetesissa turvallista?
Kyllä, kunhan työkuorma kestää keskeytyksiä. Karpenter käsittelee spot-keskeytykset automaattisesti: se vastaanottaa varoituksen kahden minuutin ennakkoajalla, cordonoi solmun ja siirtää podit toisaalle. Kriittisille palveluille kannattaa aina olla on-demand-varasolmupooli (kuten edellä näytettiin).
Mikä on Kubernetes-kustannusten suurin piilokulu?
Kokemukseni mukaan suurin piilokulu on vyöhykkeiden välinen verkkoliikenne (cross-zone data transfer). Pilvipalveluntarjoajat laskuttavat saatavuusvyöhykkeiden välisestä liikenteestä, ja mikropalveluarkkitehtuurissa palveluiden välinen kommunikaatio tuottaa yllättävän suuria verkkoliikennekuluja. Topology-aware scheduling auttaa tähän merkittävästi.
Mistä aloittaa, jos Kubernetes-kustannukset ovat jo karanneet käsistä?
Ensimmäinen askel on aina näkyvyys: asenna OpenCost ja analysoi, mitkä nimiavaruudet ja työkuormat kuluttavat eniten. Suurimmat pikavoitot löytyvät lähes poikkeuksetta ylimitoitetuista resurssipyynnöistä — jo pelkkä podien oikea mitoitus tuottaa tyypillisesti 30–60 prosentin säästöt ilman sovelluksen suorituskyvyn heikkenemistä.