Ottieni insight chiave sulle spese per l'allocazione delle risorse GKE e i costi dei cluster

Questo documento mostra come ottenere insight chiave sulle spese per prendere decisioni informate in merito all'allocazione delle risorse e all'ottimizzazione dei costi utilizzando l'allocazione dei costi di Google Kubernetes Engine (GKE). Scopri la differenza tra l'allocazione dei costi di GKE e la misurazione dell'utilizzo dei cluster, le limitazioni dell'allocazione dei costi di GKE, come attivare l'allocazione dei costi di GKE sui cluster nuovi ed esistenti e come filtrare ed eseguire query sull'esportazione di BigQuery della fatturazione Cloud.

Questo documento è rivolto a operatori, architetti cloud, sviluppatori e amministratori di dati che devono gestire i costi durante la creazione e la configurazione dei cluster e il deployment dei carichi di lavoro in GKE. Per saperne di più sui ruoli comuni, consulta Ruoli e attività comuni degli utenti GKE.

Prima di leggere questo documento, ti consigliamo di familiarizzare con le Best practice per l'esecuzione di applicazioni Kubernetes con ottimizzazione dei costi su GKE.

Potenziale aumento del volume di dati

L'attivazione dell'allocazione dei costi di GKE può aumentare i costi di archiviazione ed esecuzione di query in BigQuery. L'aumento esatto dipende dal numero di combinazioni distinte di etichette e spazi dei nomi che utilizzi in pod e cluster.

L'attivazione dell'allocazione dei costi di GKE non modifica il costo totale dell'utilizzo di GKE. La somma delle voci di costo nell'esportazione è la stessa e le query e i report esistenti che hai creato sull'esportazione della fatturazione restituiscono gli stessi valori.

Allocazione dei costi di GKE e misurazione dell'utilizzo dei cluster

L'allocazione dei costi di GKE è diversa da misurazione dell'utilizzo dei cluster nei seguenti modi:

  • L'allocazione dei costi di GKE fornisce un'alternativa alla misurazione dell'utilizzo dei cluster per ottenere informazioni sui cluster.
  • L'allocazione dei costi di GKE calcola i costi dei cluster nel tuo account di fatturazione Cloud anziché aggregare i dati in un modello di Data Studio.
  • L'allocazione dei costi di GKE ti consente di visualizzare i dati di costo dei cluster nella console di fatturazione Cloud Google Cloud e nell'esportazione dettagliata della fatturazione Cloud.

Prima di iniziare

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

  • Abilita l'API Google Kubernetes Engine.
  • Abilita l'API Google 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 gcloud components update comando. Le versioni precedenti di gcloud CLI potrebbero non supportare l'esecuzione dei comandi in questo documento.

Limitazioni e restrizioni

  • Puoi visualizzare i dati di allocazione dei costi di GKE solo nell'esportazione dei dati di costo di utilizzo dettagliati della fatturazione Cloud in BigQuery. I dati di allocazione di GKE non sono disponibili nei dati di costo di utilizzo standard esportati in BigQuery.
  • Se abiliti l'allocazione dei costi di GKE, l'esportazione della fatturazione inizia a includere voci aggiuntive per le risorse GKE a partire da quella data. L'esportazione della fatturazione non esegue il backfill dei dati.
  • Se disabiliti l'allocazione dei costi di GKE, l'esportazione della fatturazione smette di includere voci aggiuntive, ma non modifica o rimuove le voci precedenti generate mentre la funzionalità era abilitata.
  • I dati di allocazione dei costi di GKE si basano sulle richieste di risorse, non sulle risorse utilizzate. Per saperne di più sulle differenze tra richieste di risorse, limiti delle risorse e consumo di risorse, consulta Best practice di Kubernetes: richieste e limiti delle risorse.
  • L'allocazione dei costi di GKE supporta i seguenti tipi di SKU di risorse:
    • SKU di vCPU delle istanze VM di Compute Engine
    • SKU di RAM delle istanze VM di Compute Engine
    • SKU di RAM delle istanze estese personalizzate delle VM di Compute Engine
    • SKU di GPU delle istanze VM di Compute Engine
    • SKU di capacità dei dischi permanenti di Compute Engine
    • SKU delle istanze Cloud TPU
  • Se un pod ha più di 50 etichette Kubernetes, nessuna di queste etichette sarà disponibile nella sezione Fatturazione Cloud della Google Cloud console o nell'esportazione dettagliata della fatturazione Cloud.
  • Dopo aver abilitato l'allocazione dei costi di GKE, potrebbero essere necessari fino a tre giorni prima che i dati vengano visualizzati nella fatturazione Cloud.
  • L'allocazione dei costi di GKE include i dati dei dischi permanenti con le seguenti eccezioni:
    • Supporta solo le risorse PersistentVolume di cui è stato eseguito il provisioning in modo dinamico tramite PersistentVolumeClaims o volumi effimeri generici.
    • Supporta solo le risorse PersistentVolume di cui è stato eseguito il provisioning dal driver CSI per il disco permanente di Compute Engine o con il plug-in di archiviazione kubernetes.io/gce-pd ritirato con la modalità di accesso ReadWriteOnce o ReadWriteOncePod.
    • I dischi permanenti con un uptime inferiore a 30 minuti potrebbero non essere monitorati. I dischi permanenti con un uptime di almeno 30 minuti vengono sempre monitorati.
  • La versione di Cloud TPU deve essere Cloud TPU v4 o successive.
  • L'allocazione dei costi di GKE non funziona con le istanze VM A4 o A4X o con le GPU collegate a queste istanze.
  • L'allocazione dei costi di GKE non è supportata quando si utilizzano soluzioni di gestione dei nodi esterni che ignorano i node pool GKE.
  • Quando si utilizzano gli sconti per impegno di utilizzo (CUD) con la condivisione degli sconti abilitata, i costi delle istanze coperte dai CUD potrebbero non essere completamente suddivisi dall'allocazione dei costi di GKE e potrebbero essere attribuiti a uno spazio dei nomi come goog-k8s-unsupported-sku.

Visualizzare i costi dei cluster GKE

Quando abiliti l'allocazione dei costi di GKE, il nome del cluster e lo spazio dei nomi dei carichi di lavoro GKE vengono visualizzati nel campo labels dell'esportazione della fatturazione in BigQuery:

Chiave di etichetta della risorsa (labels.key) Valore dell'etichetta della risorsa (labels.value)
Descrizione Le etichette Kubernetes hanno il seguente formato: k8s-label/${k8s-label-key}, dove ${k8s-label-key} è la chiave dell'etichetta Kubernetes del pod. L'etichetta di fatturazione k8s-label/${k8s-label-key} ha lo stesso valore dell'etichetta del pod Kubernetes corrispondente. Se una chiave di etichetta Kubernetes è in conflitto con una chiave di etichetta VM, il valore dell'etichetta Kubernetes sostituisce il valore dell'etichetta VM. Le etichette delle risorse del cluster e pool di nodi vengono applicate alle risorse utilizzando la seguente priorità, dalla più alta alla più bassa:
  • Risorsa individuale, ad esempio istanza o spazio di archiviazione
  • Node pool
  • Cluster
Nome del cluster goog-k8s-cluster-name [cluster-name]
Spazio dei nomi k8s-namespace [namespace]
Tipo di workload k8s-workload-type [workload-type]
(ad es. apps/v1-Deployment,apps/v1-StatefulSet,apps/v1-DaemonSet,apps/v1-ReplicaSet,batch/v1-Job,batch/v1-CronJob,core/v1-Pod)
Nome workload k8s-workload-name [workload-name]

Per saperne di più, consulta Schema dei dati di costo di utilizzo dettagliati.

Inoltre, vengono utilizzati i seguenti spazi dei nomi per monitorare l'overhead e le risorse non allocate:

  • kube:system-overhead: tiene conto delle risorse dei nodi non disponibili per i pod. Queste risorse vengono riservate dal sistema per l'esecuzione del framework Kubernetes (inclusi, a titolo esemplificativo, kubelet, kube-proxy, containerd). Questa è la differenza tra la capacità del nodo e le risorse allocabili.
  • kube:unallocated: le risorse non vengono richieste dai carichi di lavoro né per l'overhead di sistema.

Se GKE non riesce a determinare l'allocazione dei costi per una risorsa, l'esportazione include uno dei seguenti valori:

  • goog-k8s-unknown: la fatturazione Cloud non è riuscita a elaborare lo SKU. Questo può verificarsi quando viene eseguito il provisioning di una nuova istanza Compute Engine. Puoi prevedere alcuni valori goog-k8s-unknown durante l'avvio e l'arresto dei nodi, ad esempio quando GKE esegue la scalabilità automatica di un cluster.
  • goog-k8s-unsupported-sku: l'allocazione dei costi di GKE non supporta questo SKU. Trattalo come <blank>/NULL. Non è garantito che uno SKU sia sempre etichettato con questo valore.
  • <blank>/NULL: l'allocazione dei costi di GKE non monitora questa risorsa. Questo può verificarsi quando l'allocazione dei costi di GKE non è abilitata o la risorsa non appartiene a un cluster gestito da GKE.

I costi dei dischi permanenti vengono monitorati quando i PersistentVolumeClaims di backup del Persistent Disk vengono richiesti dai pod. I costi dei dischi permanenti ereditano tutti i metadati, come le etichette e gli spazi dei nomi dei pod, del pod richiedente, fino a quando i relativi PersistentVolumeClaims non vengono eliminati. Per i PersistentVolumeClaims eliminati ma che conservano i PersistentVolumes in base alla policy di recupero, i costi dei Persistent Disk vengono monitorati come non allocati.

Le etichette applicate direttamente a PersistentVolumeClaims non vengono visualizzate nella sezione Fatturazione Cloud della Google Cloud console o nell' esportazione dettagliata della fatturazione Cloud.

Per la RAM estesa, la stessa proporzione del costo totale viene allocata a un carico di lavoro sia per gli SKU di RAM normale sia per quelli di RAM estesa in base alla risorsa richiesta.

Abilitare l'allocazione dei costi di GKE

Puoi abilitare l'allocazione dei costi di GKE su un cluster nuovo o esistente utilizzando gcloud CLI o la Google Cloud console.

gcloud

Aggiorna un cluster utilizzando il flag --enable-cost-allocation:

gcloud container clusters update CLUSTER_NAME \
    --enable-cost-allocation

Sostituisci CLUSTER_NAME con il nome del cluster.

Puoi anche utilizzare il --enable-cost-allocation flag quando crei un nuovo cluster utilizzando il gcloud container clusters create comando.

Console

Per abilitare l'allocazione dei costi di GKE su un cluster esistente:

  1. Vai alla pagina Google Kubernetes Engine nella Google Cloud console. Vai a Google Kubernetes Engine
  2. Fai clic sul nome del cluster da modificare.
  3. Nella pagina Cluster, nella sezione Funzionalità, fai clic accanto a Allocazione dei costi.
  4. Nella finestra di dialogo Modifica allocazione dei costi, seleziona la casella di controllo Abilita allocazione dei costi.
  5. Fai clic su Salva modifiche.

Verificare che l'allocazione dei costi di GKE sia abilitata

gcloud

Descrivi il cluster:

gcloud container clusters describe CLUSTER_NAME

L'output è simile al seguente:

...
costManagementConfig:
  enabled: true
...

In questo output, costManagementConfig indica che l'allocazione dei costi di GKE è abilitata.

Console

Per verificare se l'allocazione dei costi di GKE è abilitata su un cluster esistente:

  1. Vai alla pagina Google Kubernetes Engine nella Google Cloud console. Vai a Google Kubernetes Engine
  2. Fai clic sul nome del cluster da modificare.
  3. Nella pagina Cluster, nella sezione Funzionalità, accanto a Allocazione dei costi viene indicato se l'allocazione dei costi di GKE è abilitata.

Visualizzare e filtrare l'esportazione dei dati di fatturazione

Puoi utilizzare le etichette Kubernetes descritte in questo documento per filtrare i tuoi costi nella pagina dei report di fatturazione Cloud della Google Cloud console.

Puoi filtrare e raggruppare i costi di GKE nel set di dati BigQuery utilizzando uno dei seguenti metodi:

Puoi utilizzare le seguenti query di esempio con questi metodi per filtrare i dati di fatturazione esportati per le informazioni specifiche di GKE:

  • Ottieni i costi inclusi i crediti per spazio dei nomi:

    SELECT
      labels.value as namespace,
      SUM(cost) + SUM(IFNULL((SELECT SUM(c.amount) FROM UNNEST(credits) c), 0)) AS cost_after_credits,
    FROM `project-ID.dataset.gcp_billing_export_resource_v1_XXXXXX-XXXXXX-XXXXXX`
    LEFT JOIN UNNEST(labels) as labels
      ON labels.key = "k8s-namespace"
    GROUP BY namespace
    ;
    
  • Ottieni i costi dei cluster esclusi i crediti:

    SELECT
      SUM(cost) AS cost_before_credits,
      labels.value AS cluster_name
    FROM  `project-ID.dataset.gcp_billing_export_resource_v1_XXXXXX-XXXXXX-XXXXXX`
    LEFT JOIN UNNEST(labels) as labels
      ON labels.key = "goog-k8s-cluster-name"
    GROUP BY labels.value
    ;
    
  • Ottieni i costi totali relativi a GKE per SKU:

    SELECT
      project.id AS project_id,
      labels.value AS cluster_name,
      sku.id AS sku_id,
      sku.description AS sku_description,
      SUM(cost) AS cost
    FROM `project-ID.dataset.gcp_billing_export_resource_v1_XXXXXX-XXXXXX-XXXXXX`
    JOIN UNNEST(labels) AS labels
      ON labels.key = "goog-k8s-cluster-name"
    GROUP BY
      cluster_name, project_id, sku_description, sku_id
    ;
    
  • Ottieni i costi per nome del carico di lavoro esclusi i crediti:

    SELECT
      labels.value as workload_name,
      SUM(cost) AS cost
    FROM `project-ID.dataset.gcp_billing_export_resource_v1_YYYYYY-YYYYYY-YYYYYY`
    LEFT JOIN UNNEST(labels) as labels
      ON labels.key = "k8s-workload-name"
    WHERE labels.value IS NOT NULL
    GROUP BY workload_name
    ORDER BY cost DESC
    ;
    

Libera spazio

Per evitare che al tuo Google Cloud account vengano addebitati costi relativi alle risorse utilizzate in questa pagina, disabilita l'allocazione dei costi di GKE per il cluster:

gcloud container clusters update CLUSTER_NAME \
    --no-enable-cost-allocation

Puoi anche eliminare il cluster che hai creato.

Puoi anche utilizzare lo strumento a riga di comando gcloud per visualizzare e gestire le etichette. Per saperne di più, consulta la gcloud resource-manager tags documentazione.

Passaggi successivi