Esegui carichi di lavoro a tolleranza di errore a costi inferiori nei pod spot


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 ai pod Autopilot standard, ma possono essere espulsi da GKE ogni volta che sono necessarie risorse di calcolo per eseguire pod standard.

I pod spot sono ideali per l'esecuzione di carichi di lavoro senza stato, 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 calcolo, consulta Classi di calcolo in Autopilot.

Per scoprire di più sui prezzi dei pod Spot nei cluster Autopilot, consulta la pagina Prezzi di Google Kubernetes Engine.

I pod Spot sono esclusi dal livello di servizio Autopilot Contratto.

Vantaggi

L'utilizzo di 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 contamina automaticamente i nodi su cui vengono eseguiti i pod Spot per garantire che i pod standard, come i carichi di lavoro critici, non vengano pianificati su questi nodi. I deployment che utilizzano i pod Spot vengono aggiornati automaticamente con una tolleranza corrispondente.

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti attività:

  • Attiva l'API Google Kubernetes Engine.
  • Attiva l'API Google Kubernetes Engine
  • Se vuoi utilizzare Google Cloud CLI per questa attività, installa e poi inizializza gcloud CLI. Se hai già installato gcloud CLI, scarica la versione più recente eseguendo gcloud components update.

Richiedere pod Spot nei carichi di lavoro Autopilot

Per richiedere l'esecuzione dei pod come pod spot, utilizza l'etichetta cloud.google.com/gke-spot=true in un nodeSelector o node affinity nella specifica del pod. GKE esegue automaticamente il provisioning dei nodi che possono eseguire pod a pagamento per ora.

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 si verifica un'interruzione, i pod Spot sul nodo in fase di interruzione possono richiedere fino a 15 secondi di tempo di tolleranza prima dell'interruzione, che viene concesso secondo il criterio del "best effort", specificando il campo terminationGracePeriodSeconds.

Il periodo di tolleranza massimo concesso ai pod Spot durante il prerilascio è pari a 15 secondi. La richiesta di più di 15 secondi in terminationGracePeriodSeconds non concede più di 15 secondi durante la prelazione. Al momento dell'espulsione, al pod viene inviato il segnale SIGTERM e dovrebbe adottare misure per 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 il parametro cloud.google.com/gke-spot=true al tuo deployment, ad esempio nelle seguenti esempio:

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 node affinità per richiedere pod Spot. L'affinità dei nodi offre un modo più estendibile 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 i pod spot.
  • preferredDuringSchedulingIgnoredDuringExecution: utilizza i pod Spot su una base migliore.

Per utilizzare l'affinità dei nodi per richiedere i pod Spot in un deployment, aggiungi la seguente regola nodeAffinity al manifest del 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 i pod Spot in base alla preferenza, GKE pianifica i pod in base al seguente ordine:

  1. Nodi esistenti che possono eseguire pod Spot con capacità allocabile disponibile.
  2. Nodi standard esistenti con capacità allocabile disponibile.
  3. Nuovi nodi che possono eseguire pod spot, se le risorse di calcolo sono disponibili.
  4. Nuovi nodi standard.

Poiché GKE preferisce i nodi standard esistenti con capacità allocatile alla creazione di nuovi nodi per i pod spot, potresti notare un numero maggiore di pod in esecuzione come pod standard rispetto ai pod spot, il che ti impedisce di sfruttare appieno i prezzi inferiori dei pod spot.

Richieste per pod prerilasciabili

I cluster Autopilot supportano le richieste di pod preemptibili utilizzando il selettorecloud.google.com/gke-preemptible. Per i pod che utilizzano questo selettore viene eseguita automaticamente la migrazione ai pod Spot e il selettore viene modificato in cloud.google.com/gke-spot.

Trovare ed eliminare i 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 garbage collection raccolta ripulisce i pod. Puoi anche eliminare manualmente i pod in stato di arresto utilizzando il seguente comando:

kubectl get pods --all-namespaces | grep -i shutdown | awk '{print $1, $2}' | xargs -n2 kubectl delete pod -n

Passaggi successivi