Questo documento mostra come ottenere insight sulle spese chiave per prendere decisioni 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 del cluster, le limitazioni dell'allocazione dei costi di GKE, come attivare l'allocazione dei costi di GKE su cluster nuovi ed esistenti e come filtrare ed eseguire query sull'esportazione di BigQuery per la fatturazione Cloud.
Questo documento è rivolto a operatori, Cloud Architect, sviluppatori e amministratori di dati che devono gestire i costi durante la creazione e la configurazione dei cluster e il deployment dei workload in GKE. Per scoprire di più sui ruoli comuni, consulta Ruoli e attività utente GKE comuni.
Prima di leggere questo documento, ti consigliamo di acquisire familiarità 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'abilitazione dell'allocazione dei costi di GKE non modifica il costo totale del tuo 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 del cluster
L'allocazione dei costi di GKE è diversa dalla misurazione dell'utilizzo del cluster per i seguenti aspetti:
- L'allocazione dei costi di GKE offre un'alternativa alla misurazione dell'utilizzo del cluster per ottenere informazioni sul 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 di un 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 operazioni:
- Abilita l'API Google Kubernetes Engine. Abilita l'API Google Kubernetes Engine
- Per 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.
- Assicurati di aver completato i passaggi per esportare i dati dettagliati sui costi di utilizzo in BigQuery. Se la tua organizzazione sta già esportando dati, devi avere accesso per eseguire query sulle tabelle.
- Assicurati di avere un cluster Standard esistente. Per creare un cluster standard, vedi Crea un cluster regionale.
Limitazioni e restrizioni
- Puoi visualizzare i dati di allocazione dei costi di GKE solo nell'esportazione dei dati dettagliati sui costi di utilizzo 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 disattivi l'allocazione dei costi di GKE, l'esportazione della fatturazione non include più elementi pubblicitari aggiuntivi, ma non modifica né rimuove gli elementi pubblicitari precedenti generati mentre la funzionalità era attiva.
- I dati di allocazione dei costi di GKE si basano sulle richieste di risorse, non sulle risorse consumate. Per saperne di più sulle differenze tra richieste di risorse, limiti di 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 risorsa:
- SKU vCPU dell'istanza VM di Compute Engine
- SKU RAM dell'istanza VM di Compute Engine
- SKU RAM istanza estesa personalizzata VM di Compute Engine
- SKU GPU istanza VM di Compute Engine
- SKU per la capacità dei DP di Compute Engine
- SKU delle istanze Cloud TPU
- Se un pod ha più di 50 etichette Kubernetes, nessuna di queste sarà disponibile nella sezione Fatturazione Cloud della console Google Cloud 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 Persistent Disk con le
seguenti eccezioni:
- Supporta solo le risorse
PersistentVolumedi cui è stato eseguito il provisioning in modo dinamico tramitePersistentVolumeClaimso volumi temporanei generici. - Supporta solo le risorse
PersistentVolumedi cui è stato eseguito il provisioning tramite il driver CSI per disco permanente di Compute Engine o con il plug-in di archiviazionekubernetes.io/gce-pddeprecato con la modalità di accessoReadWriteOnceoReadWriteOncePod. - I Persistent Disk con un uptime inferiore a 30 minuti potrebbero non essere monitorati. I Persistent Disk con almeno 30 minuti di uptime vengono sempre monitorati.
- Supporta solo le risorse
- 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 esterne che bypassano i node pool GKE.
- Quando utilizzi gli sconti per impegno di utilizzo (CUD) con la condivisione degli sconti abilitata,
i costi per le istanze coperte dai CUD potrebbero non essere suddivisi completamente in base
all'allocazione dei costi di GKE e potrebbero essere attribuiti a uno spazio dei nomi come
goog-k8s-unsupported-sku.
Visualizzare i costi del cluster GKE
Quando abiliti l'allocazione dei costi di GKE, il nome del cluster e lo spazio dei nomi dei tuoi workload GKE vengono visualizzati nel campo labels dell'esportazione della fatturazione in BigQuery:
Chiave di etichetta della risorsa (labels.key) |
Valore etichetta 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 dell'etichetta Kubernetes entra in conflitto con una chiave dell'etichetta VM, il valore dell'etichetta Kubernetes esegue l'override del 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:
|
| 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 dettagliati sui costi di utilizzo.
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 (incluso, a titolo esemplificativo, kubelet, kube-proxy, containerd). Questa è la differenza tra la capacità del nodo e le risorse allocabili.kube:unallocated: le risorse non sono richieste dai workload 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: Fatturazione Cloud non è riuscita a elaborare lo SKU. Ciò può verificarsi quando viene eseguito il provisioning di una nuova istanza Compute Engine. Puoi aspettarti alcuni valorigoog-k8s-unknowndurante l'avvio e l'arresto dei nodi, ad esempio quando GKE esegue lo scale automatico di un cluster.goog-k8s-unsupported-sku: l'allocazione dei costi di GKE non supporta questo SKU. Tratta questo valore allo stesso modo di<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 per i Persistent Disk vengono monitorati quando i backing
PersistentVolumeClaims del Persistent Disk vengono rivendicati dai pod. I costi del disco permanente
ereditano tutti i metadati, come le etichette e gli spazi dei nomi dei pod, del
pod richiedente, finché non vengono eliminati i relativi PersistentVolumeClaims. Per i PersistentVolumeClaims eliminati, ma che conservano 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 console Google Cloud o nell'esportazione dettagliata della fatturazione Cloud.
Per la RAM estesa, la stessa proporzione del costo totale viene allocata a un workload sia per gli SKU della RAM normale che per quelli della RAM estesa in base alla richiesta di risorse.
Abilita l'allocazione dei costi di GKE
Puoi attivare l'allocazione dei costi di GKE su un cluster nuovo o esistente utilizzando gcloud CLI o la console Google Cloud .
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 flag
--enable-cost-allocation quando crei
un nuovo cluster utilizzando
il comando gcloud container clusters create.
Console
Per abilitare l'allocazione dei costi di GKE in un cluster esistente, procedi nel seguente modo:
- Vai alla pagina Google Kubernetes Engine nella console Google Cloud . Vai a Google Kubernetes Engine
- Fai clic sul nome del cluster da modificare.
- Nella pagina Cluster, nella sezione Funzionalità, fai clic su edit accanto a Allocazione dei costi.
- Nella finestra di dialogo Modifica allocazione dei costi, seleziona la casella di controllo Abilita l'allocazione dei costi.
- Fai clic su Salva modifiche.
Verifica 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 in un cluster esistente:
- Vai alla pagina Google Kubernetes Engine nella console Google Cloud . Vai a Google Kubernetes Engine
- Fai clic sul nome del cluster da modificare.
- Nella pagina Cluster, nella sezione Funzionalità, accanto ad Allocazione dei costi viene indicato se l'allocazione dei costi di GKE è abilitata.
Visualizza e filtra l'esportazione dei dati di fatturazione
Puoi utilizzare le etichette Kubernetes descritte in questo documento per filtrare i costi nella pagina dei report sulla fatturazione Cloud nella console Google Cloud .
Puoi filtrare e raggruppare i costi di GKE nel set di dati BigQuery utilizzando uno dei seguenti metodi:
- In BigQuery, esegui una query.
- Nella fatturazione Cloud, genera ed esegui una query sui dati di fatturazione esportati (Anteprima).
Puoi utilizzare le seguenti query di esempio con questi metodi per filtrare i dati di fatturazione esportati per informazioni specifiche di GKE:
Visualizzare 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 ;Visualizza i costi del cluster prima dei 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 ;Visualizza i costi totali correlati 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 ;Visualizza i costi per nome del workload prima dei 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 ;
Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questa pagina, disattiva 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 documentazione gcloud resource-manager tags.
Passaggi successivi
- Scopri come comprendere l'utilizzo delle risorse cluster.
- Scopri come visualizzare le metriche di ottimizzazione correlate ai costi.
- Scopri di più sul gestore della scalabilità automatica dei cluster.
- Scopri come creare e gestire le etichette dei cluster e dei pool di nodi.
- Scopri come dimensionare correttamente i carichi di lavoro su larga scala.