Questa pagina mostra come eseguire carichi di lavoro batch, stateless o a tolleranza di errore a costi inferiori utilizzando le VM spot nei cluster e nei pool di nodi Google Kubernetes Engine (GKE).
Panoramica
Le VM spot sono macchine virtuali (VM) di Compute Engine che hanno un prezzo inferiore rispetto alle VM standard predefinite e non offrono alcuna garanzia di disponibilità. Le Spot VM offrono gli stessi tipi di macchine e le stesse opzioni delle VM di Compute Engine standard. Compute Engine può recuperare le VM spot in qualsiasi momento a causa di eventi di sistema, ad esempio quando le risorse sono necessarie per le VM standard.
Per saperne di più sulle VM spot in GKE, consulta VM spot.
Le VM spot sostituiscono la necessità di utilizzare le VM prerilasciabili per eseguire workload stateless, batch o a tolleranza di errore. A differenza delle VM preemptible, che scadono dopo 24 ore, le VM spot non hanno un tempo di scadenza. Le VM spot vengono terminate quando Compute Engine richiede le risorse per eseguire le VM standard.
Le VM spot sono supportate anche sui cluster GKE Autopilot tramite i pod spot. Con i pod Spot, Autopilot pianifica e gestisce automaticamente i carichi di lavoro sulle VM spot.
Limitazioni
- Le VM spot non supportano i node pool Windows Server.
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:
- Attiva l'API Google Kubernetes Engine. Attiva l'API Kubernetes Engine
- Se vuoi utilizzare Google Cloud CLI per questa attività,
installala e poi
inizializza
gcloud CLI. Se hai già installato gcloud CLI, scarica l'ultima
versione eseguendo il comando
gcloud components update. Le versioni precedenti di gcloud CLI potrebbero non supportare l'esecuzione dei comandi in questo documento.
Provisioning di VM spot in GKE
Puoi eseguire il provisioning delle VM spot creando un cluster che utilizzi VM spot per il pool di nodi predefinito. In alternativa, puoi creare un pool di nodi che utilizza VM spot.
Utilizza gcloud CLI per impostare i parametri per l'arresto normale delle VM spot. Per saperne di più sulla possibilità di impostare i parametri di arresto normale, una funzionalità disponibile in Anteprima, consulta Terminazione e arresto normale delle VM spot.
Crea un cluster con VM spot
Puoi creare un nuovo cluster utilizzando le VM spot con Google Cloud CLI o la console Google Cloud .
gcloud
Crea un nuovo cluster che utilizza VM spot nel pool di nodi predefinito anziché VM standard:
gcloud container clusters create CLUSTER_NAME \
--spot
[--system-config-from-file=SYSTEM_CONFIG_PATH]
Sostituisci CLUSTER_NAME con il nome del nuovo cluster.
(Facoltativo) Se vuoi impostare i parametri per l'arresto normale
(Anteprima) per il
pool di nodi predefinito, sostituisci SYSTEM_CONFIG_PATH con
il percorso del file contenente la configurazione di kubelet. Per ulteriori informazioni, consulta Arresto normale delle VM spot in GKE.
Puoi anche aggiornare questi parametri dopo la creazione pool di nodi, tuttavia,
GKE deve ricreare i
nodi
per apportare le modifiche.
Console
Per creare un nuovo cluster con un pool di nodi che utilizza VM spot, segui questi passaggi:
Nella console Google Cloud , vai alla pagina Crea un cluster Kubernetes.
Nel menu di navigazione, nella sezione Pool di nodi, fai clic sul nome del pool di nodi che vuoi configurare, poi fai clic su Nodi.
Seleziona la casella di controllo Abilita VM Spot.
Configura il cluster in base alle esigenze, quindi fai clic su Crea.
Crea un pool di nodi con VM spot
Puoi creare nuovi pool di nodi utilizzando le VM spot con gcloud CLI o la console Google Cloud . Puoi abilitare le VM Spot solo sui nuovi pool di nodi. Non puoi attivare o disattivare le VM Spot sui pool di nodi esistenti.
gcloud
Crea un nuovo pool di nodi utilizzando le VM spot:
gcloud container node-pools create POOL_NAME \
--cluster=CLUSTER_NAME \
--spot
[--system-config-from-file=SYSTEM_CONFIG_PATH]
Sostituisci POOL_NAME con il nome del nuovo pool di nodi.
(Facoltativo) Se vuoi impostare i parametri per l'arresto normale
(anteprima), sostituisci
SYSTEM_CONFIG_PATH con il percorso del file
contenente la configurazione di kubelet. Per saperne di più, consulta Arresto
controllato delle VM spot in
GKE.
Puoi anche aggiornare questi parametri dopo la creazione pool di nodi, tuttavia,
GKE deve ricreare i
nodi
per apportare le modifiche.
Console
Per creare un nuovo pool di nodi utilizzando le VM spot, segui questi passaggi:
Vai alla pagina Google Kubernetes Engine nella console Google Cloud .
Nell'elenco dei cluster, fai clic sul nome del cluster da modificare.
Fai clic sulla scheda Nodi.
Fai clic su Crea node pool gestito dall'utente.
Nel menu di navigazione, fai clic su Nodi.
Seleziona la casella di controllo Abilita VM Spot.
Configura il pool di nodi in base alle esigenze, quindi fai clic su Crea.
Pianifica i carichi di lavoro sulle VM spot
GKE aggiunge le cloud.google.com/gke-spot=true e
cloud.google.com/gke-provisioning=spot (per i nodi che eseguono
GKE 1.25.5-gke.2500 o versioni successive)
etichette
ai nodi che utilizzano le VM spot. Puoi filtrare questa etichetta nelle specifiche del pod utilizzando il campo nodeSelector nelle specifiche del pod o l'affinità dei nodi.
Nell'esempio seguente, crei un cluster con due pool di nodi, uno dei quali
utilizza le VM spot. Poi, esegui il deployment di un'applicazione nginx stateless sulle
VM spot, utilizzando un nodeSelector per controllare dove GKE posiziona
i pod.
Crea un nuovo cluster con il pool di nodi predefinito utilizzando le VM standard:
gcloud container clusters create CLUSTER_NAMESostituisci
CLUSTER_NAMEcon il nome del nuovo cluster.Recupera le credenziali per il cluster:
gcloud container clusters get-credentials CLUSTER_NAMECrea un pool di nodi utilizzando le VM spot:
gcloud container node-pools create POOL_NAME \ --num-nodes=1 \ --spotSostituisci
POOL_NAMEcon il nome del nuovo pool di nodi.Salva il seguente manifest come file denominato
pi-app.yaml:apiVersion: batch/v1 kind: Job metadata: name: pi spec: template: metadata: labels: app: pi spec: nodeSelector: cloud.google.com/gke-spot: "true" terminationGracePeriodSeconds: 25 containers: - name: pi image: perl:5.34.0 command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] restartPolicy: Never backoffLimit: 4In questo manifest, il campo
nodeSelectorindica a GKE di pianificare i pod solo sui nodi che utilizzano VM Spot.Applica il manifest al cluster:
kubectl apply -f pi-app.yamlDescrivi il pod:
kubectl describe pod piL'output è simile al seguente:
Name: pi-kjbr9 Namespace: default Priority: 0 Node: gke-cluster-2-spot-pool-fb434072-44ct ... Labels: app=pi job-name=pi Status: Succeeded ... Controlled By: Job/pi Containers: ... Conditions: Type Status Initialized True Ready False ContainersReady False PodScheduled True Volumes: ... Node-Selectors: cloud.google.com/gke-spot=true Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 4m3s default-scheduler Successfully assigned default/pi-kjbr9 to gke-cluster-2-spot-pool-fb434072-44ct Normal Pulling 4m2s kubelet Pulling image "perl:5.34.0" Normal Pulled 3m43s kubelet Successfully pulled image "perl:5.34.0" in 18.481761978s Normal Created 3m43s kubelet Created container pi Normal Started 3m43s kubelet Started container piIl campo
Nodemostra che GKE pianifica i pod solo sui nodi che utilizzano VM spot.
Utilizzare taint e tolleranze per le VM spot
Come best practice, crea cluster con almeno un pool di nodi senza VM spot in cui puoi inserire workload di sistema come DNS. Puoi utilizzare le incompatibilità dei nodi e le tolleranze corrispondenti per indicare a GKE di evitare di posizionare determinati carichi di lavoro sulle VM spot.
Per creare un pool di nodi con nodi che utilizzano VM spot e hanno taint dei nodi, utilizza il flag
--node-taintsdurante la creazione del pool di nodi:gcloud container node-pools create POOL_NAME \ --node-taints=cloud.google.com/gke-spot="true":NoSchedule --spotPer aggiungere la tolleranza corrispondente ai pod che vuoi pianificare per le VM spot, modifica i deployment e aggiungi quanto segue alla specifica del pod:
tolerations: - key: cloud.google.com/gke-spot operator: Equal value: "true" effect: NoScheduleGKE pianifica solo i pod con questa tolleranza sulle VM spot con l'incompatibilità del nodo aggiunta.
Passaggi successivi
- Scopri come eseguire un'applicazione GKE su VM spot con nodi on demand come fallback.
- Scopri di più sulle VM spot in GKE.
- Segui un tutorial sul deployment di un carico di lavoro batch utilizzando le VM spot in GKE.