Informazioni su GKE ComputeClasses


Puoi definire set di attributi dei nodi e impostazioni di scalabilità automatica che Google Kubernetes Engine (GKE) utilizza per creare nodi per eseguire pod utilizzando ComputeClasses. Questa pagina descrive il funzionamento, i casi d'uso e i vantaggi di ComputeClasses, nonché i tipi disponibili.

Queste informazioni sono destinate alle seguenti persone:

  • Architetti cloud e ingegneri di piattaforma che vogliono ridurre il sovraccarico associato alla gestione dell'infrastruttura del cluster.
  • Operatori di app e SRE che vogliono concentrarsi sul funzionamento dei carichi di lavoro senza pensare all'infrastruttura sottostante.

Informazioni su ComputeClass e sulla scalabilità automatica dei cluster

Una ComputeClass è un insieme di attributi dei nodi e impostazioni di scalabilità automatica che esiste come oggetto API Kubernetes in un cluster GKE. Puoi selezionare una ComputeClass in qualsiasi workload Kubernetes che implementi. La scalabilità automatica dei cluster GKE utilizza gli attributi di una ComputeClass per creare nodi per i carichi di lavoro.

Gli ingegneri della piattaforma possono utilizzare ComputeClass per configurare l'infrastruttura per vari tipi di carichi di lavoro, in modo che ogni nuovo nodo sia ottimizzato per i requisiti specifici delle tue applicazioni. Le ComputeClass migliorano la velocità e la flessibilità della scalabilità automatica di GKE e ti forniscono un metodo dichiarativo per configurare le opzioni dell'infrastruttura nei tuoi cluster. Per ulteriori informazioni, consulta la sezione Vantaggi dell'utilizzo di ComputeClass.

Funzionalità e caratteristiche specifiche di GKE sono disponibili solo con ComputeClass, ad esempio le seguenti:

  • Priorità di calcolo di riserva: definisci più set di configurazioni dell'infrastruttura in una ComputeClass, con priorità in base alle tue preferenze. Durante lo scaling, se la configurazione preferita non è disponibile, GKE esegue il failover alla configurazione successiva.
  • Migrazione attiva a nodi con priorità più alta: se configurato, GKE sostituisce automaticamente i nodi che si trovano più in basso nell'elenco delle priorità di fallback con nodi che si trovano più in alto nell'elenco nel tempo. Di conseguenza, i tuoi pod vengono eseguiti sui nodi preferiti in una ComputeClass, anche se l'hardware non era disponibile quando hai creato il workload.
  • Autopilot in GKE Standard: esegui i carichi di lavoro in modalità GKE Autopilot per utilizzare le funzionalità di Autopilot come la piattaforma di calcolo ottimizzata per i container e la fatturazione basata sui pod, anche nei cluster Standard. GKE gestisce questi nodi e carichi di lavoro, offrendoti i vantaggi della modalità Autopilot in qualsiasi cluster.

Vantaggi di ComputeClasses

ComputeClasses offre agli amministratori e agli operatori della piattaforma vantaggi come i seguenti:

  • Migliore ottenibilità delle risorse: le ComputeClass espandono le funzionalità della scalabilità automatica del cluster GKE. Le funzionalità di ComputeClass, come le priorità di fallback e i parametri di consolidamento dei nodi, possono ridurre il rischio che i pod rimangano in stato Pending e aumentare la gamma di opzioni che puoi utilizzare per scalare i nodi.
  • Configurazione dichiarativa a livello di piattaforma: le ComputeClass consentono agli ingegneri della piattaforma di descrivere in modo dichiarativo le configurazioni dei nodi per vari tipi di workload. La scalabilità automatica di GKE gestisce la creazione e la configurazione di nodi e pool di nodi. Puoi integrare le tue ComputeClass nelle pipeline CI/CD per garantire la coerenza dell'infrastruttura di cui è stato eseguito il provisioning sulla tua piattaforma.
  • Overhead di gestione ridotto: ComputeClass riduce la complessità della gestione dell'infrastruttura e dei carichi di lavoro su larga scala. Gli ingegneri della piattaforma dichiarano le classi di infrastruttura e gli operatori delle app selezionano una classe pertinente in un workload. GKE gestisce lo scaling, la configurazione dell'hardware dei nodi e applica incompatibilità, tolleranze ed etichette.

Informazioni sulla risorsa personalizzata ComputeClass

ComputeClass sono risorse personalizzate di Kubernetes. Puoi definire la specifica di una ComputeClass in un file manifest e crearla nei tuoi cluster, in modo simile a come definisci e crei le risorse dei carichi di lavoro Kubernetes come deployment e servizi.

Il seguente manifest di esempio definisce una ComputeClass denominata n4:

apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
  name: n4
spec:
  nodePoolAutoCreation:
    enabled: true
  priorities:
  - machineFamily: n4
  - machineFamily: n2
  whenUnsatisfiable: DoNotScaleUp

Quando un pod seleziona questa ComputeClass, GKE esegue le seguenti operazioni quando crea nuovi nodi:

  1. GKE crea nodi che utilizzano la serie di macchine N4.
  2. Se la serie di macchine N4 non è disponibile, GKE crea nodi che utilizzano la serie di macchine N2.
  3. Se la serie di macchine N2 non è disponibile, GKE attende che le risorse diventino disponibili per pianificare il pod.

Puoi controllare varie impostazioni per i nodi utilizzando ComputeClasses, tra cui acceleratori, impostazioni di sistema dei nodi, posizioni dei nodi e comportamento di fallback di GKE quando le risorse hardware non sono disponibili. Per ulteriori informazioni su tutte le configurazioni disponibili per ComputeClass, consulta la CustomResourceDefinition di ComputeClass.

Selezione di ComputeClass nei workload

Per utilizzare una ComputeClass per un workload GKE, seleziona la ComputeClass nel manifest del workload utilizzando un selettore di nodi per l'etichetta cloud.google.com/compute-class.

Il seguente manifest di Deployment seleziona una ComputeClass:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: helloweb
  labels:
    app: hello
spec:
  selector:
    matchLabels:
      app: hello
  template:
    metadata:
      labels:
        app: hello
    spec:
      nodeSelector:
        # Replace with the name of a compute class
        cloud.google.com/compute-class: COMPUTE_CLASS 
      containers:
      - name: hello-app
        image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
        ports:
        - containerPort: 8080
        resources:
          requests:
            cpu: "250m"
            memory: "4Gi"

Sostituisci COMPUTE_CLASS con il nome di una ComputeClass esistente nel cluster. Ad esempio, puoi specificare n4 ComputeClass dalla sezione Informazioni sulla risorsa personalizzata ComputeClass o dalla autopilot ComputeClass integrata.

Configurazione dei nodi nelle specifiche del workload

I cluster GKE Autopilot e il provisioning automatico dei nodi in GKE Standard ti consentono di utilizzare i selettori di nodi nei tuoi pod per creare nodi con proprietà specifiche come famiglie di macchine, VM spot o GPU e TPU. ComputeClasses ti consente di definire centralmente questi requisiti anziché aggiungere selettori individuali a ogni workload.

Informazioni sull'applicazione di ComputeClasses per impostazione predefinita

Puoi configurare GKE in modo che applichi una ComputeClass per impostazione predefinita ai pod che non selezionano una ComputeClass specifica. Puoi definire una ComputeClass predefinita per spazi dei nomi specifici o per un intero cluster. Per ulteriori informazioni su come configurare i cluster o gli spazi dei nomi con una classe predefinita, consulta Applicare ComputeClass ai pod per impostazione predefinita.

La tabella seguente descrive gli effetti dell'impostazione di una ComputeClass come predefinita per uno spazio dei nomi o per un cluster:

Effetti delle ComputeClass predefinite
Valore predefinito a livello di spazio dei nomi
  • GKE applica ComputeClass solo ai pod in uno spazio dei nomi specifico.
  • GKE modifica i pod per aggiungere un selettore di nodi per la classe predefinita a livello di spazio dei nomi.
  • GKE esegue lo scale up solo dei nodi con etichette e taint per ComputeClass, in modo simile a qualsiasi altra classe di calcolo.
  • GKE aggiunge etichette e incompatibilità dei nodi ai nodi che crea per la classe predefinita a livello di spazio dei nomi.
Valore predefinito a livello di cluster
  • GKE applica ComputeClass ai pod in qualsiasi spazio dei nomi.
  • GKE applica ComputeClass solo ai pod che non hanno un selettore esistente per una ComputeClass.
  • GKE non modifica le specifiche del pod per aggiungere un selettore di nodi per la classe predefinita a livello di cluster.
  • GKE esegue lo scale up dei nodi che soddisfano una delle seguenti condizioni:
    • I nodi non hanno etichette e taint per una classe di computing diversa.
    • I nodi hanno l'etichetta cloud.google.com/compute-class: default.
  • GKE aggiunge l'etichetta del nodo cloud.google.com/compute-class: default ai nodi che crea per la classe predefinita a livello di cluster. GKE non aggiunge incompatibilità dei nodi a questi nodi.
  • Se aggiorni un cluster Autopilot in modo che utilizzi una classe di computing personalizzata come impostazione predefinita a livello di cluster, GKE non esegue i pod sulla piattaforma di computing ottimizzata per i container Autopilot per impostazione predefinita. In GKE versione 1.33.1-gke.1107000 e successive, puoi utilizzare la piattaforma di calcolo Autopilot per pod specifici aggiungendo il selettore di nodi cloud.google.com/compute-class: autopilot a questi pod.

Se GKE applica una ComputeClass predefinita a livello di spazio dei nomi a un pod, questo pod non attiva la ComputeClass predefinita a livello di cluster, perché GKE aggiunge un selettore di nodi per la classe predefinita a livello di spazio dei nomi al pod.

ComputeClass predefinite a livello di cluster

Quando abiliti le ComputeClass predefinite a livello di cluster, un oggetto ComputeClass denominato default definisce le regole di scalabilità automatica dei nodi per il cluster. Se il tuo cluster ha già una ComputeClass denominata default, GKE utilizza la configurazione di ComputeClass per il cluster. Se il cluster non ha una ComputeClass personalizzata denominata default, GKE si comporta come se fossero applicate le seguenti regole ComputeClass:

spec:
  whenUnsatisfiable: ScaleUpAnyway
  nodePoolAutoCreation:
    enabled: true

Per impostazione predefinita, GKE non applica alcun comportamento di fallback e non modifica la configurazione dei nodi con scalabilità automatica. Per applicare proprietà specifiche ai nodi di scalabilità automatica per impostazione predefinita, devi eseguire il deployment di una ComputeClass personalizzata denominata default.

Tieni presente quanto segue quando configuri la classe di calcolo a livello di cluster predefinita:

  • Per evitare che i pod rimangano bloccati nello stato Pending, imposta il campo spec.whenUnsatisfiable su ScaleUpAnyway. Questo valore consente a GKE di creare nodi anche se i pod richiedono famiglie di macchine Compute Engine che non rientrano nelle regole di priorità per la classe predefinita a livello di cluster. Se vuoi forzare questi pod a utilizzare le famiglie di macchine presenti in ComputeClass predefinita, imposta questo campo su DoNotScaleUp.
  • Per limitare le modifiche a default ComputeClass, utilizza un ClusterRole RBAC per limitare le operazioni update, patch, delete e create sulla risorsa ComputeClass denominata default.
  • Per modificare i parametri di consolidamento dei nodi predefiniti del gestore della scalabilità automatica del cluster, utilizza il campo spec.autoscalingPolicy nella specifica ComputeClass. I parametri specificati per questo campo nella ComputeClass predefinita a livello di cluster si applicano a tutti i nodi del cluster. Per saperne di più, vedi Impostare i parametri di scalabilità automatica per il consolidamento dei nodi.

Passaggi successivi