Met de Kubernetes Cluster Autoscaler laat je het aantal worker nodes in een nodepool automatisch aanpassen aan de behoefte van je workloads. Je stelt per nodepool een minimum- en maximumaantal nodes in. De autoscaler voegt binnen deze grenzen nodes toe of verwijdert ze. In deze handleiding laten we zien hoe je gebruik maakt van de Kubernetes Cluster Autoscaler op een Kubernetes-cluster bij TransIP.
- De Cluster Autoscaler is beschikbaar vanaf Kubernetes 1.35 (zie ook ‘hoe update ik mijn Kubernetes-versie?’). Oudere Kubernetes-versies worden niet ondersteund.
- De functie staat standaard uit en is momenteel alleen via de TransIP API in te stellen. Ondersteuning in het controlepaneel volgt later.
- De Kubernetes Cluster Autoscaler schaalt worker nodes en niet het aantal pods. Wil je het aantal pods automatisch aanpassen, gebruik dan bijvoorbeeld de Horizontal Pod Autoscaler (HPA). Beide functies kunnen naast elkaar worden gebruikt.
- De gebruikte endpoints van de TransIP API zijn in de documentatie als experimenteel gemarkeerd en kunnen nog wijzigen.
- Heb je meerdere nodepools, dan stel je autoscaling voor iedere gewenste nodepool afzonderlijk in.
- De Cluster Autoscaler volgt de specificaties van de Cluster Autoscaler zoals beschreven op Github.
Voorwaarden voor de Kubernetes Cluster Autoscaler
Voor het instellen van autoscaling heb je het volgende nodig:
- Een TransIP Kubernetes-cluster met Kubernetes 1.35 of nieuwer.
- Een geldig token voor de TransIP API.
- De naam van het Kubernetes-cluster: deze vind je terug in het TransIP-controlepaneel in het overzicht van je cluster en ziet er bijvoorbeeld uit als ‘k818x’.
De Kubernetes Cluster Autoscaler gebruiken
Gebruik een API PUT-request om op een specifieke nodepool de Cluster Autoscaler in te schakelen en een minimum en maximum aantal nodes te configureren.
- Als het maximum aantal nodes is bereikt, kunnen pods die niet meer in het cluster passen in de status ‘Pending’ blijven staan.
- PodDisruptionBudgets, lokale opslag, strikte node selectors of affinityregels en de annotatie cluster-autoscaler.kubernetes.io/safe-to-evict: "false" kunnen voorkomen dat een node automatisch wordt verwijderd door de Cluster Autoscaler.
Stap 1 - achterhaal de nodepool UUIDs
Vraag eerst de nodepools van het cluster op. Vervang [token] en [clusternaam] door je eigen gegevens:
curl --request GET \
--header "Content-Type: application/json" \
--header "Authorization: Bearer [token]" \
"https://api.transip.nl/v6/kubernetes/clusters/[clusternaam]/node-pools" In de uitvoer vind je per nodepool het veld uuid. Je hebt deze UUID in de volgende stap nodig.
Stap 2 - schakel autoscaling in
Schakel autoscaling in met een PUT-request naar de gewenste nodepool. Pas in het commando de volgende gegevens aan:
-
"minNodeCount": <x>bepaalt het minimum aantal nodes (twee in het voorbeeld hieronder) -
"maxNodeCount": <x>bepaalt het maximum aantal nodes in te stellen (vijf in het voorbeeld hieronder) -
[clusternaam]: vervang door de naam van je Kubernetes-cluster -
[nodepool-uuid]: vervang door het UUID van de nodepool waarop de Cluster Autoscaler is ingeschakeld, zie stap 1 uit de vorige paragraaf.
curl --request PUT \
--header "Content-Type: application/json" \
--header "Authorization: Bearer [token]" \
--data '{ "nodePool": { "autoscalingEnabled": true, "minNodeCount": 2, "maxNodeCount": 5 } }' \
"https://api.transip.nl/v6/kubernetes/clusters/[clusternaam]/node-pools/[nodepool-uuid]"Bij een geslaagde wijziging antwoordt de API met statuscode 204 No Content.
Stap 3 - controleer je aangepaste nodepool
Controleer vervolgens of de Cluster Autoscaler correct is ingesteld.
curl --request GET \
--header "Content-Type: application/json" \
--header "Authorization: Bearer [token]" \
"https://api.transip.nl/v6/kubernetes/clusters/[clusternaam]/node-pools/[nodepool-uuid]"In het antwoord zie je onder meer de volgende velden:
{
"autoscalingEnabled": true,
"minNodeCount": 2,
"maxNodeCount": 5
}
De Kubernetes Cluster Autoscaler uitschakelen
De Cluster Autoscaler schakel je eenvoudig uit via de TransIP API met een PUT-request naar de gewenste nodepool. Hierbij zet je de optie ‘autoscalingEnabled’ op ‘false’.
Pas in het commando de volgende gegevens aan:
-
"minNodeCount": <x>bepaalt het minimum aantal nodes (twee in het voorbeeld hieronder) -
"maxNodeCount": <x>bepaalt het maximum aantal nodes in te stellen (vijf in het voorbeeld hieronder) -
[clusternaam]: vervang door de naam van je Kubernetes-cluster -
[nodepool-uuid]: vervang door het UUID van de nodepool waarop de Cluster Autoscaler is ingeschakeld, zie stap 1 uit de vorige paragraaf.
De opties ‘autoscalingEnabled’, ‘minNodeCount’ en ‘maxNodeCount’ zijn altijd vereist. Ontbreekt een van deze velden, dan weigert de API de wijziging.
curl --request PUT \
--header "Content-Type: application/json" \
--header "Authorization: Bearer [token]" \
--data '{ "nodePool": { "autoscalingEnabled": false, "minNodeCount": 2, "maxNodeCount": 5 } }' \
"https://api.transip.nl/v6/kubernetes/clusters/[clusternaam]/node-pools/[nodepool-uuid]"Bij een geslaagde wijziging antwoordt de API met statuscode 204 No Content.
Daarmee zijn we aan het eind gekomen van deze handleiding over het gebruik van de Cluster Autoscaler in een Kubernetes-cluster bij TransIP. Meer technische informatie over de schaalbeslissingen vind je in de FAQ van Kubernetes Cluster Autoscaler. Meer informatie over de in de API beschikbare velden en endpoints voor Kubernetes vind je in de TransIP API-documentatie.