HINWEIS : (14. Oktober 2021) Linode hat nun den Kubernetes -Autoscaler an alle LKES veröffentlicht. Obwohl dieser Autoscaler noch einige Verwendung hat (insbesondere wenn Sie aggressiv und im Voraus autoskalieren möchten), wird er nicht mehr aktiv aufrechterhalten.
===
Dies ist ein einfaches Autosprogramm für das autoscaling -Dienstprogramm für horizontal Skalierung von Linden in einem LKE -Clusterpool basierend auf Speicher oder CPU -Verwendung. Dies bedeutet effektiv, dass Sie Kubernetes 'horizontale Pod -Autoscaling verwenden können, um Ihre Pods und dieses Dienstprogramm zu skalieren, um Ihre Linodes zu skalieren. Sie können diese so einrichten und Ihre Cluster nach Bedarf nach oben oder unten skalieren lassen.
Jede Instanz dieses Dienstprogramms basiert auf dem Speicher oder der CPU. Um beide zu verwenden, können Sie 2 Instanzen dieses Dienstprogramms bereitstellen (normalerweise ist 1 ausreichend).
Es ist vollständig dokiert (aber in PHP geschrieben) und verfügt über einen Fußabdruck mit niedriger Ressourcen, sodass Sie es lokal oder auf dem Cluster selbst bereitstellen können.
Das Bild für dieses Dienstprogramm wird @ Docker Hub als meezaan/linode-k8s-autoscaler (https://hub.docker.com/r/meezaan/linode-k8s-autoscaler) veröffentlicht.
Das neueste Tag hat immer den neuesten Code. Außerdem sind Docker Hub -Tags als Veröffentlichungen an die Tags in diesem Git -Repository gebunden.
Der Docker -Container nimmt alle seine Konfiguration über Umgebungsvariablen vor. Hier ist eine Liste dessen, was jeder tut:
| Umgebungsvariablenname | Beschreibung |
|---|---|
| Linode_personal_access_token | Ihr persönlicher Zugangs -Token mit LKE Scope |
| Linode_lke_cluster_id | Die ID des LKE -Clusters nach Autoscale |
| LINODE_LKE_CLUSTER_POOL_ID | Die Knotenpool -ID innerhalb des LKE -Clusters nach autoscale |
| Linode_lke_cluster_pool_minimum_nodes | Die minimalen Knoten, die Sie im Cluster halten können. Der Cluster wird nicht darunter abgebaut. |
| Autoscale_trigger | 'CPU' oder 'Speicher'. Standardeinstellungen zu Memmory. |
| Autoscale_trigger_type | 'angefordert' oder 'benutzt'. Standardeinstellungen zu Anfrage. Dies fordert dem Autoscaler mit, dass er entweder den angeforderten oder den aktuell verwendeten Speicher oder die derzeit verwendete CPU verwenden, um nach oben oder unten zu skalieren, wenn er gegen den Threshehold verstößt. |
| Autoscale_up_percentage | Zu welchem Prozentsatz von "CPU" oder "Speicher" zum Skalieren des Knotenpools. Beispiel: 65 |
| Autoscale_down_percentage | Zu welchem Prozentsatz von "CPU" oder "Speicher", um den Knotenpool zu skalieren. Beispiel: 40 |
| Autoscale_resource_request_up_percentage | Zu welchem Prozentsatz von "CPU" oder "Speicher" des angeforderten / verfügbaren Umschlusses, um den Cluster zu skalieren. Standard: 80 |
| Autoscale_resource_request_down_percentage | Zu welchem Prozentsatz von "CPU" oder "Speicher" des angeforderten / verfügbaren Umfangs, um den Cluster zu skalieren. Standard: 70 |
| Autoscale_query_interval | Wie viele Sekunden, um vor jedem Anruf bei der Kubernetes -API zu warten, um die CPU und den Speicherverbrauch zu überprüfen. Beispiel: 10 |
| Autoscale_threshold_count | Nach wie vielen aufeinanderfolgenden Übereinstimmungen von autoscale_up_percentage oder autoscale_down_percentage, um den Cluster nach oben oder unten zu skalieren. |
| Autoscale_number_of_nodes | Wie viele Knoten, die Sie beim Skalieren des Clusters einmal hinzufügen müssen. Beispiel: 1 oder 2 oder 3 oder n |
| Autoscale_wait_time_after_scaling | Wie viele Sekunden, um zu warten, nachdem sie nach oben oder nach unten skaliert werden müssen, um die CPU und den Speicher zu überprüfen. Dies sollte festgelegt werden, um dem Cluster genügend Zeit zu geben, um sich an die aktualisierte Anzahl von Knoten anzupassen. Beispiel: 150 |
Um die oben genannte Annahme zu verstehen, haben wir die folgenden Werte festgelegt.
Mit diesem Setup wird das Autoscaler -Dienstprogramm die Kuberenetes -API alle 10 Sekunden abfragen. Wenn mit 3 aufeinanderfolgenden Aufrufen der API (effektiv über 30 Sekunden) überschreitet der angeforderte Speicher 80% des im Cluster verfügbaren Gesamtspeichers, werden 2 weitere Knoten zum angegebenen Knotenpool hinzugefügt. Das Dienstprogramm wird 180 Sekunden warten und dann wieder alle 10 Sekunden die API abfragen.
Wenn mit 3 aufeinanderfolgenden Aufrufen der API (effektiv über 30 Sekunden), der angeforderte Speicher unter 70% des im Cluster verfügbaren Gesamtspeichers liegt, wird 1 Knoten entfernt ( Knoten werden immer einzeln entfernt, um sicherzustellen, dass Sie nicht plötzlich aus dem angegebenen Knotenpool ausgelaufen sind . Das Dienstprogramm wird 180 Sekunden warten und dann wieder alle 10 Sekunden die API abfragen.
Gleiches Beispiel mit einem anderen Triggertyp.
Mit diesem Setup wird das Autoscaler -Dienstprogramm die Kuberenetes -API alle 10 Sekunden abfragen. Wenn mit 3 aufeinanderfolgenden Aufrufen der API (effektiv über 30 Sekunden) die Speicherverwendung höher als 65% des im Cluster verfügbaren Gesamtspeichers ist, werden 2 weitere Knoten zum angegebenen Knotenpool hinzugefügt. Das Dienstprogramm wird 180 Sekunden warten und dann wieder alle 10 Sekunden die API abfragen.
Wenn mit 3 aufeinanderfolgenden Aufrufen der API (effektiv über 30 Sekunden) die Speicherverwendung unter 30% des auf dem Cluster verfügbaren Gesamtspeichers liegt, wird 1 Knoten entfernt ( Knoten werden immer einzeln entfernt, um sicherzustellen, dass Sie nicht plötzlich aus dem angegebenen Knotenpool ausgehen . Das Dienstprogramm wird 180 Sekunden warten und dann wieder alle 10 Sekunden die API abfragen.
Sie müssen das Docker -Bild mit Env -Variablen und der Kubectl -Konfiguration konfigurieren.
Lokal laufen:
docker run -v ~/.kube/config:/root/.kube/config
-e LINODE_PERSONAL_ACCCESS_TOKEN='xxxx'
-e LINODE_LKE_CLUSTER_ID='xxxx'
-e LINODE_LKE_CLUSTER_POOL_ID='xxxx'
-e LINODE_LKE_CLUSTER_POOL_MINIMUM_NODES='3'
-e AUTOSCALE_TRIGGER='cpu'
-e AUTOSCALE_UP_PERCENTAGE='60'
-e AUTOSCALE_DOWN_PERCENTAGE='30'
-e AUTOSCALE_RESOURCE_REQUEST_UP_PERCENTAGE='70'
-e AUTOSCALE_RESOURCE_REQUEST_DOWN_PERCENTAGE='70'
-e AUTOSCALE_QUERY_INTERVAL='10'
-e AUTOSCALE_THRESHOLD_COUNT='3'
-e AUTOSCALE_NUMBER_OF_NODES='1'
-e AUTOSCALE_WAIT_TIME_AFTER_SCALING='180' meezaan/linode-k8s-autoscaler
Für die Produktion können Sie ein privates Docker -Image erstellen und eine Kubectl -Konfigurationsdatei mit den Anmeldeinformationen eines Dienstkontos in das Bild bringen. Ihre Dockerfile sieht also so aus wie:
FROM meezaan/linode-k8s-autoscaler
COPY configfile /root/.kube/config
Sobald Sie das Bild erstellt haben (und annehmen, dass es IhrPace/K8S-Autoscaler: Last) genannt wird, können Sie es mit dem folgenden Manifest bereitstellen:
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: k8s-autoscaler
namespace: name-of-namespace ####### Change this to the actual namespace
spec:
replicas: 1
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
selector:
matchLabels:
app: k8s-autoscale
template:
metadata:
labels:
app: k8s-autoscale
spec:
imagePullSecrets:
- name: regcred ####### Docker registry credentials secret
containers:
- name: k8s-autoscale
image: yourspace/k8s-autoscaler:latest ####### CHANGE THIS TO YOUR ACTUAL DOCKER IMAGE
env:
- name: LINODE_PERSONAL_ACCCESS_TOKEN
valueFrom:
secretKeyRef:
name: linode-personal-access-token-k8s-autoscaler ####### LINODE PERSONAL ACCESS TOKEN SECRET
key: token
- name: LINODE_LKE_CLUSTER_ID
value: ""
- name: LINODE_LKE_CLUSTER_POOL_ID
value: ""
- name: AUTOSCALE_TRIGGER
value: "memory"
- name: AUTOSCALE_UP_PERCENTAGE
value: "60"
- name: AUTOSCALE_DOWN_PERCENTAGE
value: "30"
- name: AUTOSCALE_QUERY_INTERVAL
value: "30"
- name: AUTOSCALE_THRESHOLD_COUNT
value: "3"
- name: AUTOSCALE_NUMBER_OF_NODES
value: "1"
- name: AUTOSCALE_WAIT_TIME_AFTER_SCALING
value: "150"
resources:
requests:
memory: 32Mi
limits:
memory: 32Mi
Das obige Manifest verwendet ein Geheimnis für Ihr Linode Personal Access Token und Docker Registry -Anmeldeinformationen.
Sie müssen diese erstellen.
Der obige Pod benötigt 0,01 CPU und 15 MB Speicher. Der Speicher kann aufgrund der Größe der API -Antwort zunehmen, aber er gibt JSON zurück. Selbst wenn Sie mehr als 100 Server in Ihrem Cluster haben, schauen Sie immer noch nur 30 MB.
Dieser Dienstprogramm ist nicht mit Linode verbunden.