Questa pagina mostra come eseguire carichi di lavoro a tolleranza di errore a costi inferiori utilizzando Spot pod nel tuo Google Kubernetes Engine (GKE) Pilota automatico cluster.
Panoramica
Nei cluster GKE Autopilot, i pod spot sono pod che vengono eseguiti su nodi basati su VM spot di Compute Engine. I pod Spot hanno un prezzo inferiore rispetto ai pod Autopilot standard, ma può essere rimosso GKE ogni volta che sono necessarie risorse di computing per eseguire pod standard.
I pod spot sono ideali per l'esecuzione di pod stateless, batch o a tolleranza di errore a costi inferiori rispetto all'esecuzione di questi carichi di lavoro come pod standard. Per utilizzare i pod spot nei cluster Autopilot, modifica il manifest con la specifica del pod per richiedere pod Spot.
Puoi eseguire pod spot nell'ambiente Autopilot predefinito di Compute Engine nonché su classi di computing specializzate che soddisfano specifiche requisiti hardware. Per informazioni su queste classi di computing, consulta a Classi di calcolo in Autopilot.
Per scoprire di più sui prezzi dei pod Spot in Autopilot di cluster, consulta i prezzi di Google Kubernetes Engine.
I pod Spot sono esclusi dal livello di servizio Autopilot Contratto.
Vantaggi
L'utilizzo dei pod Spot nei cluster Autopilot offre i seguenti vantaggi:
- Prezzi inferiori rispetto all'esecuzione degli stessi carichi di lavoro su Autopilot standard i pod.
- GKE gestisce automaticamente la scalabilità automatica e la pianificazione.
- GKE è in esecuzione incompatibilità nodi in esecuzione Individua i pod per assicurarti che i pod standard, come i pod di carichi di lavoro non sono pianificati su quei nodi. I deployment che utilizzano Gli Spot pod vengono aggiornati automaticamente tolleranza.
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:
- Attiva l'API Google Kubernetes Engine. Abilita l'API Google Kubernetes Engine .
- Se vuoi utilizzare Google Cloud CLI per questa attività,
install e poi
inizializzare
con gcloud CLI. Se hai già installato gcloud CLI, scarica la versione più recente
eseguendo
gcloud components update
.
Richiedi pod spot nei carichi di lavoro Autopilot
Per richiedere che i tuoi pod vengano eseguiti come pod spot, utilizza
Etichetta cloud.google.com/gke-spot=true
in un
nodeSelector
o nodo
affinità
nella specifica del pod. GKE esegue automaticamente il provisioning dei nodi
in grado di eseguire pod spot.
I pod spot possono essere rimossi e terminati in qualsiasi momento, ad esempio se
le risorse di computing sono richieste altrove in Google Cloud. Quando una chiusura
i pod spot sul nodo in fase di terminazione possono richiedere fino a 15 secondi
il periodo di tolleranza prima della risoluzione, che viene concesso secondo il criterio del "best effort", tramite
che specifica il campo terminationGracePeriodSeconds
.
Il periodo di tolleranza massimo concesso ai pod Spot durante il prerilascio è pari a 15
secondi. Richiesta di più di 15 secondi in terminationGracePeriodSeconds
non concede più di 15 secondi durante il prerilascio. Durante l'eliminazione, il pod
ha inviato il modulo SIGTERM
segnale,
e dovrebbe eseguire l'arresto durante il periodo di tolleranza.
Per Autopilot, GKE incompatibile anche automaticamente i nodi creati per eseguire i pod Spot e modifica questi carichi di lavoro con la tolleranza corrispondente. L'incompatibilità impedisce la pianificazione dei pod standard sui nodi in esecuzione Spot pod.
Usa un nodeSelector per richiedere i pod spot
Puoi utilizzare un nodeSelector per richiedere pod spot in un deployment. Aggiungi l'etichetta cloud.google.com/gke-spot=true
al deployment, come nell'esempio seguente:
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
metadata:
labels:
app: pi
spec:
nodeSelector:
cloud.google.com/gke-spot: "true"
terminationGracePeriodSeconds: 15
containers:
- name: pi
image: perl:5.34.0
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
backoffLimit: 4
Usa l'affinità nodo per richiedere i pod spot
In alternativa, puoi utilizzare l'affinità dei nodi per richiedere pod spot. L'affinità dei nodi offre una maggiore estensibile per selezionare i nodi su cui eseguire i carichi di lavoro. Ad esempio, puoi combinare più per avere un controllo più preciso su dove vengono eseguiti i pod. Quando utilizzi affinità nodo per richiedere pod Spot, puoi specificare il tipo affinità da utilizzare, come segue:
requiredDuringSchedulingIgnoredDuringExecution
: deve usare pod spot.preferredDuringSchedulingIgnoredDuringExecution
: utilizza i pod Spot su una secondo il criterio del "best effort".
Per utilizzare l'affinità dei nodi per richiedere pod Spot in un deployment, aggiungi la classe
seguente regola nodeAffinity
al manifest di deployment:
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
metadata:
labels:
app: pi
spec:
terminationGracePeriodSeconds: 15
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: cloud.google.com/gke-spot
operator: In
values:
- "true"
containers:
- name: pi
image: perl:5.34.0
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
backoffLimit: 4
Richiesta di pod Spot secondo il criterio del "best effort"
Per utilizzare l'affinità dei nodi per richiedere pod Spot secondo il criterio del "best effort", usa
preferredDuringSchedulingIgnoredDuringExecution
Quando richiedi pod Spot in base alle tue preferenze, GKE
pianifica i pod in base al seguente ordine:
- Nodi esistenti che possono eseguire pod spot con capacità allocabile disponibile.
- Nodi standard esistenti che hanno una capacità allocabile disponibile.
- Nuovi nodi che possono eseguire pod spot, se le risorse di calcolo sono disponibili.
- Nuovi nodi standard.
Perché GKE preferisce i nodi standard esistenti con capacità allocabile. rispetto alla creazione di nuovi nodi per i pod spot, potresti notare in esecuzione come pod standard rispetto ai pod spot, ti impedisce di sfruttare appieno il prezzo più basso Spot pod.
Richieste per pod prerilasciabili
I cluster Autopilot supportano le richieste per i pod prerilasciabili mediante
Selettore cloud.google.com/gke-preemptible
. I pod che utilizzano questo selettore
la migrazione automatica ai pod Spot e il selettore viene modificato
cloud.google.com/gke-spot
.
Trova ed elimina pod terminati
Durante la terminazione controllata dei pod, il kubelet assegna uno stato Failed
e un
Shutdown
motivo ai pod terminati. Quando il numero di pod terminati
raggiunge la soglia di 1000, la sanzione
raccolta
ripulisce i pod. Puoi anche eliminare manualmente i pod arrestati
seguente comando:
kubectl get pods --all-namespaces | grep -i shutdown | awk '{print $1, $2}' | xargs -n2 kubectl delete pod -n
Passaggi successivi
- Scopri di più sull'architettura dei cluster Autopilot.
- Scopri di più sul ciclo di vita dei pod.
- Scopri di più sulle VM spot nei cluster GKE Standard.