Met de Kubernetes Cluster Autoscaler laat je het aantal Kubernetes worker nodes in een nodepool automatisch aanpassen aan de behoefte van je workloads. Je stelt per nodepool een minimum- en maximumaantal nodes in. De Cluster Autoscaler voegt binnen deze grenzen nodes toe of verwijdert ze. Autoscaling is beschikbaar vanaf Kubernetes 1.35. Oudere Kubernetes-versies worden niet ondersteund.
In onze handleiding ‘Hoe gebruik ik de Kubernetes Cluster Autoscaler’ leggen we uit hoe je de Cluster Autoscaler gebruikt voor jouw Kubernetes-cluster. De autoscaler kan in- en uitgeschakeld worden via de API en het TransIP-controlepaneel.
Automatisch toegevoegde nodes worden tegen het normale tarief in rekening gebracht zolang ze actief zijn. Kies daarom bewust een maximum aantal nodes.
Hoe werkt de Kubernetes Autoscaler?
De autoscaler schaalt een nodepool op wanneer pods niet ingepland kunnen worden door een tekort aan beschikbare resources en een extra node uit de nodepool dit kan oplossen.
De nodepool wordt afgeschaald wanneer nodes gedurende langere tijd niet nodig zijn en de pods op die nodes veilig op andere nodes kunnen draaien. Het aantal nodes blijft daarbij tussen minNodeCount en maxNodeCount. De autoscaler reageert dus niet rechtstreeks op het gemeten CPU- of geheugengebruik. Kubernetes kijkt onder andere naar de resource requests en planningsvoorwaarden van pods. Stel daarom passende CPU- en geheugenrequests in voor je workloads.
Hoe werkt Horizontal Pod Autoscaler samen met Cluster Autoscaler?
Horizontal Pod Autoscaler (HPA) past het aantal replica's van een deployment of replicaset aan op basis van de huidige CPU-belasting. Als de belasting toeneemt, maakt HPA nieuwe replica's aan, waarvoor mogelijk niet voldoende ruimte in het cluster beschikbaar is. Als er onvoldoende resources zijn, probeert Cluster Autoscaler (CA) extra nodes op te starten, zodat de door HPA aangemaakte pods een plek hebben om te draaien. Als de belasting afneemt, stopt HPA een aantal replica's. Hierdoor kunnen sommige nodes onderbenut raken of volledig leeg komen te staan, waarna CA deze onnodige nodes beëindigt.
Hoe kan ik de Kubernetes Cluster Autoscaler monitoren?
Cluster Autoscaler biedt metrics en livenessProbe-eindpunten. Standaard zijn deze beschikbaar op poort 8085 (configureerbaar met de vlag --address), respectievelijk onder /metrics en /health-check. De metrics worden geleverd in Prometheus-formaat en een gedetailleerde beschrijving ervan is hier beschikbaar.
Hoe worden nodes verwijderd bij een scale-down?
Autoscalers voor Kubernetes-clusters markeren nodes automatisch als niet-planbaar (cordon) voordat ze deze tijdens het afschalen beëindigen, om workloads veilig te verplaatsen zonder nieuwe pods te plannen.
- Cordon: Markeert een node als SchedulingDisabled, waardoor er geen nieuwe pods op worden geplaatst, terwijl lopende workloads ongestoord kunnen doordraaien.
- Drain: Verplaatst bestaande workloads op gecontroleerde wijze (graceful eviction) en houdt daarbij rekening met PodDisruptionBudgets (PDB's), voordat de instance bij de cloudprovider uiteindelijk wordt verwijderd.
Hoe wordt bepaald of een scale-up van de node pool wordt uitgevoerd?
Dit hangt in eerste plaats af van of er ruimte is op je bestaande nodes en de instellingen van de autoscaler. Voor wat betreft de technische specificaties van de autoscaler gebruiken wij de officiële standaard die je terugvindt op https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/FAQ.md#when-does-cluster-autoscaler-change-the-size-of-a-cluster.
Hoe verhoudt desiredNodeCount zich tot een ingeschakelde autoscaler?
Wanneer de `desiredNodeCount` wordt bijgewerkt terwijl de autoscaler actief is, wordt het opgegeven aantal aangehouden. De waarde wordt echter begrensd door de gespecificeerde `minNodeCount` en `maxNodeCount`. Elke daaropvolgende wijziging die via de autoscaler zelf wordt doorgevoerd, zal de `desiredNodeCount` dienovereenkomstig aanpassen (dus bij acties om nodes toe te voegen of te verwijderen).