Se il conteggio delle repliche è impostato su 100 e la domanda è troppo bassa, anche allora i 100 pod saranno attivi e funzionanti. Ciò si traduce in uno spreco di CPU e risorse di memoria. Sì, offre affidabilità, nel senso che se un nodo si blocca e i pod al suo interno muoiono, il controller del set di repliche proverebbe a riportare il numero di pod a 100 generando pod in altri nodi. L'applicazione rimane online.
In un senso più astratto, il set di repliche cercherebbe di ottenere un stato desiderato del cluster e guarderebbe il stato attuale e scopri come può raggiungere lo stato desiderato.
Tuttavia, vorremmo qualcosa di un po' più sensibile alla domanda del mondo reale. accedere Autoscaler pod orizzontale. È compito di Horizontal Pod Autoscaler ridimensionare l'applicazione quando è necessario e quindi ridimensionarla nuovamente una volta che il carico di lavoro diminuisce.
Perché utilizzare un Autoscaler Pod orizzontale??
Come suggerisce il nome, questo componente scalerebbe automaticamente la tua applicazione. Nel cloud, questo può davvero aiutarti a ridurre le risorse di calcolo e di memoria che ti verranno addebitate. Poiché l'Autoscaler è sensibile all'utilizzo delle risorse, quando vede che molti pod sono semplicemente inattivi, ridimensiona l'applicazione e quando la domanda su quei pod aumenta, ridimensiona l'applicazione creando nuovi pod e il carico viene distribuito su quelli.
Può farti risparmiare tempo prezioso e risorse di calcolo. Non dovrai preoccuparti di quale dovrebbe essere il conteggio delle repliche per i tuoi pod quando scrivi una distribuzione, l'autoscaler lo gestirà per te.
Configurazione iniziale
Il primo requisito è che tu abbia un cluster Kubernetes in esecuzione. Usa Katacoda Playground, perfetto per sperimentare e conoscere Kubernetes. La prossima cosa di cui avrai bisogno è un server di metriche.
Questo componente aggiuntivo per il tuo sistema Kubernetes (spazio dei nomi del sistema kube) raccoglierebbe metriche come l'utilizzo della CPU e della memoria da due diverse prospettive:
- Risorsa utilizzata da ciascun pod
- Risorsa consumata in ogni nodo
Le metriche da entrambi i punti di vista sono cruciali per aiutare Autoscaler a decidere quale dovrebbe essere la sua prossima mossa. Per aggiungere il metric server al tuo cluster Kubernetes, segui questa guida. Ora siamo pronti per vedere il Pod Autoscaler orizzontale in azione.
Utilizzo dell'Autoscaler
Per vedere l'Autoscaler funzionante, abbiamo bisogno di un'applicazione di prova test. Creiamo un semplice server php-apache ed esponiamolo come servizio.
$ kubectl esegui php-apache --image=k8s.gcr.io/hpa-example --requests=cpu=200m --expose--porta=80
L'immagine utilizzata qui è una delle immagini di esempio fornite dal progetto Kubernetes. Esegue alcune attività che richiedono molta CPU e in questo modo rende il processo molto più evidente.
Per scalare automaticamente questa distribuzione, dobbiamo informare il programma di scalabilità automatica quale sono il numero minimo e massimo di pod che consentiremo e la percentuale di CPU che possono utilizzare. Ci sono molti altri fattori che puoi considerare come la memoria, l'archiviazione e anche la rete.
$ kubectl scala automaticamente le distribuzioni/php-apache --cpu-percent=50 --min=1 --max=10Allo stato attuale, poiché nessuno sta consumando questo servizio, preferirà rimanere al valore minimo. Puoi controllare lo stato di tutta la distribuzione con scalabilità automatica nello spazio dei nomi predefinito eseguendo:
$ kubectl ottieni hpaNOME RIFERIMENTO TARGET MINPODS MAXPODS REPLICHE ETÀ
php-apache Deployment/php-apache 0%/50% 1 10 1 2 m
Generazione del carico e test della funzione di scalabilità automatica
Puoi vedere che il numero di repliche è ancora solo uno e il carico della CPU è insignificantemente basso. Possiamo creare un carico aggiuntivo e vedere come risponde l'autoscaler. Il servizio che espone i nostri pod php-apache non è esposto al mondo esterno, quindi creeremo un pod temporaneo e apriremo una sessione di shell interattiva in quel pod.
Questo ci permetterà di comunicare con tutti i servizi disponibili nel cluster, incluso il servizio php-apache.
$ kubectl run -i --tty busybox --image=busybox --restart=Mai -- sh/ #
Noterai che il prompt cambierà indicando che siamo all'interno di questo contenitore. Ora proviamo a caricare un po' il nostro servizio facendo ripetutamente richieste. Nel nuovo prompt, eseguiamo il seguente ciclo while:
/ # mentre è vero; do wget -q -O- http://php-apache.predefinito.svc.grappolo.Locale; fattoApri un nuovo terminale, poiché non possiamo ancora terminare questo ciclo. Dopo aver ispezionato l'autoscaler vedrai l'utilizzo della CPU e dopo aver elencato i pod vedrai che ora ci sono più istanze del server php-apache,
$ kubectl ottieni hpaNOME RIFERIMENTO TARGET MINPODS MAXPODS REPLICHE ETÀ
php-apache Deployment/php-apache 121%/50% 1 10 4 1h
$ kubectl ottieni pod
NOME PRONTO STATO RIPARTI ETÀ
busybox 1/1 Corsa 0 6 m
php-apache-8699449574-7qwxd 1/1 In esecuzione 0 28 secondi
php-apache-8699449574-c9v54 1/1 In esecuzione 0 10h
php-apache-8699449574-h9s5f 1/1 In esecuzione 0 28 secondi
php-apache-8699449574-sg4hz 1/1 In esecuzione 0 28 secondi
Termina il ciclo while e il numero di pod diminuirà a uno in pochi minuti.
Conclusione
Quindi questa è una semplice dimostrazione di Horizontal Pod Autoscaler. Ricorda di avere un server delle metriche funzionale per il tuo cluster e durante la creazione di una distribuzione mantieni il conteggio delle repliche a 1. Il pod autoscaler orizzontale si occuperà del resto.