Obtenir des insights clés sur vos dépenses pour l'allocation des ressources GKE et les coûts de vos clusters

Ce document explique comment obtenir des insights clés sur les dépenses pour éclairer vos décisions concernant l'allocation des ressources et l'optimisation des coûts à l'aide de l'attribution des coûts Google Kubernetes Engine (GKE). Découvrez la différence entre l'attribution des coûts GKE et la mesure de l'utilisation des clusters, les limites de l'attribution des coûts GKE, comment activer l'attribution des coûts GKE sur les clusters nouveaux et existants, et comment filtrer et interroger votre exportation BigQuery de la facturation Cloud.

Ce document s'adresse aux opérateurs, aux architectes cloud, aux développeurs et aux administrateurs de données qui doivent gérer les coûts lorsqu'ils créent et configurent des clusters, et déploient des charges de travail dans GKE. Pour en savoir plus sur les rôles courants, consultez Rôles utilisateur et tâches courantes de GKE.

Avant de lire ce document, vous pouvez vous familiariser avec les bonnes pratiques pour exécuter des applications Kubernetes à coût maîtrisé sur GKE.

Augmentation potentielle du volume de données

L'activation de l'attribution des coûts GKE peut augmenter vos coûts de stockage et d'interrogation dans BigQuery. L'augmentation exacte dépend du nombre de combinaisons d'étiquettes et d'espaces de noms distinctes que vous utilisez dans les pods et les clusters.

L'activation de l'attribution des coûts GKE ne modifie pas le coût total de votre utilisation de GKE. La somme des lignes de coût de votre exportation est identique, et les requêtes et rapports existants que vous avez créés sur l'exportation de la facturation renvoient les mêmes valeurs.

Attribution des coûts GKE et mesure de l'utilisation des clusters

L'attribution des coûts GKE présente plusieurs différences avec la mesure de l'utilisation du cluster :

  • L'attribution des coûts GKE constitue une alternative à la mesure de l'utilisation des clusters pour obtenir des informations sur les clusters.
  • L'attribution des coûts GKE calcule les coûts des clusters dans votre compte de facturation Cloud au lieu d'agréger les données dans un modèle Looker Studio.
  • L'attribution des coûts GKE vous permet d'afficher les données de coût des clusters dans la console Cloud Billing Google Cloud et dans l'exportation détaillée de Cloud Billing.

Avant de commencer

Avant de commencer, effectuez les tâches suivantes :

  • Activez l'API Google Kubernetes Engine.
  • Activer l'API Google Kubernetes Engine
  • Si vous souhaitez utiliser Google Cloud CLI pour cette tâche, installez puis initialisez la gcloud CLI. Si vous avez déjà installé la gcloud CLI, obtenez la dernière version en exécutant la commande gcloud components update. Il est possible que les versions antérieures de la gcloud CLI ne permettent pas d'exécuter les commandes de ce document.

Limites et restrictions

  • Vous ne pouvez afficher les données d'attribution des coûts GKE que dans l'exportation des données de coûts d'utilisation détaillées de Cloud Billing dans BigQuery.
  • Vous devez disposer de la version 392.0.0 ou ultérieure de Google Cloud CLI.
  • Si vous activez l'attribution des coûts GKE, votre exportation de la facturation commence à inclure des lignes supplémentaires pour vos ressources GKE à compter de cette date. L'exportation de la facturation ne remplit pas les données.
  • Si vous désactivez l'attribution des coûts GKE, votre exportation de facturation arrête d'inclure des lignes supplémentaires, mais ne modifie ni ne supprime les lignes précédentes générées lors de l'activation de la fonctionnalité.
  • Les données d'attribution des coûts de GKE sont basées sur les demandes de ressources, et non sur les ressources consommées. Pour en savoir plus sur les différences entre les demandes de ressources, les limites de ressources et la consommation de ressources, consultez la section Bonnes pratiques Kubernetes : requêtes et limites de ressources.
  • L'attribution des coûts GKE est compatible avec les types de codes SKU de ressources suivants :
    • SKU du processeur virtuel de l'instance de VM Compute Engine
    • SKU de RAM de l'instance de VM Compute Engine
    • SKU de RAM d'instance étendue personnalisée de VM Compute Engine
    • Codes SKU GPU des instances de VM Compute Engine
    • Codes SKU de capacité de disque persistant Compute Engine
    • Codes SKU des instances Cloud TPU
  • Si un pod comporte plus de 50 étiquettes Kubernetes, aucune de ces étiquettes ne sera disponible dans la section Cloud Billing de la console Google Cloud ni dans l'exportation détaillée de Cloud Billing.
  • Après avoir activé la répartition des coûts GKE, l'affichage des données dans Cloud Billing peut prendre jusqu'à trois jours.
  • L'attribution des coûts GKE inclut les données des disques persistants, avec les exceptions suivantes :
    • Compatible uniquement avec les ressources PersistentVolume provisionnées dynamiquement via PersistentVolumeClaims ou les volumes éphémères génériques.
    • Compatible uniquement avec les ressources PersistentVolume provisionnées par le pilote CSI de disque persistant Compute Engine ou avec le plug-in de stockage kubernetes.io/gce-pd obsolète avec le mode d'accès ReadWriteOnce ou ReadWriteOncePod.
    • Les disques persistants avec un temps de disponibilité inférieur à 30 minutes peuvent ne pas être suivis. Les disques persistants avec une disponibilité d'au moins 30 minutes sont toujours suivis.
  • La version de Cloud TPU doit être Cloud TPU v4 ou ultérieure.
  • La répartition des coûts GKE ne fonctionne pas avec les instances de VM A4 ou A4X, ni avec les GPU associés à ces instances.
  • L'attribution des coûts GKE n'est pas compatible avec les solutions de gestion de nœuds externes qui contournent les pools de nœuds GKE.

Afficher les coûts de cluster GKE

Lorsque vous activez la répartition des coûts GKE, le nom de cluster et l'espace de noms de vos charges de travail GKE apparaissent dans le champ labels de l'exportation de facturation vers BigQuery :

Clé du libellé de ressource (labels.key) Valeur du libellé de ressource (labels.value)
Description Les libellés Kubernetes ont le format suivant : k8s-label/${k8s-label-key}, où ${k8s-label-key} est la clé du libellé Kubernetes du pod. Le libellé de facturation k8s-label/${k8s-label-key} a la même valeur que le libellé de pod Kubernetes correspondant. Si une clé de libellé Kubernetes entre en conflit avec une clé de libellé de VM, la valeur du libellé Kubernetes remplace la valeur du libellé de VM. Les libellés de ressources de cluster et de pool de nœuds sont appliqués aux ressources en utilisant la priorité suivante, de la plus élevée à la plus basse :
  • Ressource individuelle, telle que l'instance ou le stockage
  • Pool de nœuds
  • Cluster
Nom du cluster goog-k8s-cluster-name [cluster-name]
Namespace k8s-namespace [namespace]
Type de charge de travail k8s-workload-type [workload-type]
(par exemple, apps/v1-Deployment,apps/v1-StatefulSet,apps/v1-DaemonSet,apps/v1-ReplicaSet,batch/v1-Job,batch/v1-CronJob,core/v1-Pod)
Nom de la charge de travail k8s-workload-name [workload-name]

Pour en savoir plus, consultez la section Schéma des données détaillées de coût d'utilisation.

De plus, les espaces de noms suivants sont utilisés pour effectuer le suivi des frais généraux et des ressources non allouées :

  • kube:system-overhead : cela tient compte des ressources de nœud qui ne sont pas disponibles pour les pods. Ces ressources sont réservées par le système pour exécuter le framework Kubernetes (y compris, mais sans s'y limiter, kubelet, kube-proxy et containerd). Il s'agit de la différence entre la capacité du nœud et les ressources pouvant être allouées.
  • kube:unallocated : les ressources ne sont pas sollicitées par les charges de travail, ni en cas de surcharge du système.

Si GKE ne peut pas déterminer l'attribution des coûts d'une ressource, l'exportation comprend l'une des valeurs suivantes :

  • goog-k8s-unknown : Cloud Billing n'a pas pu traiter le code SKU. Cela peut se produire lorsqu'une nouvelle instance Compute Engine est en cours de provisionnement. Vous pouvez vous attendre à certaines valeurs goog-k8s-unknown lors du démarrage et de l'arrêt des nœuds, par exemple lorsque GKE effectue l'autoscaling d'un cluster.
  • goog-k8s-unsupported-sku: l'attribution des coûts GKE n'est pas compatible avec ce code SKU. Traiter de la même manière que <blank>/NULL. Rien ne garantit qu'un code SKU soit toujours étiqueté avec cette valeur.
  • <blank>/NULL: l'attribution des coûts GKE ne suit pas cette ressource. Cela peut se produire lorsque l'attribution des coûts GKE n'est pas activée ou que la ressource n'appartient pas à un cluster géré par GKE.

Les coûts des disques persistants sont suivis lorsque les PersistentVolumeClaims de sauvegarde du disque persistant sont revendiquées par les pods. Les coûts du disque persistant héritent de toutes les métadonnées, telles que les étiquettes et les espaces de noms du pod, jusqu'à ce que leurs PersistentVolumeClaims soient supprimées. Pour les PersistentVolumeClaims supprimées mais qui conservent des PersistentVolumes conformément à la règle de récupération, les coûts des disques persistants sont suivis comme non alloués.

Les libellés appliqués directement aux PersistentVolumeClaims n'apparaissent pas dans la section Cloud Billing de la console Google Cloud ni dans l'exportation détaillée de Cloud Billing.

Pour la RAM étendue, la même proportion du coût total est allouée à une charge de travail pour les SKU de RAM standard et de RAM étendue, en fonction de la ressource demandée.

Activer l'attribution des coûts GKE

Vous pouvez activer la répartition des coûts GKE sur un cluster nouveau ou existant à l'aide de gcloud CLI ou de la console Google Cloud .

gcloud

Mettez à jour un cluster à l'aide de l'option --enable-cost-allocation :

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

Remplacez CLUSTER_NAME par le nom du cluster.

Vous pouvez également utiliser l'indicateur --enable-cost-allocation lorsque vous créez un cluster à l'aide de la commande gcloud container clusters create.

Console

Procédez comme suit pour activer l'attribution des coûts GKE sur un cluster existant :

  1. Accédez à la page Google Kubernetes Engine dans la console Google Cloud . Accéder à Google Kubernetes Engine
  2. Cliquez sur le nom du cluster que vous souhaitez modifier.
  3. Sur la page Clusters, dans la section Fonctionnalités, cliquez sur à côté de Allocation des coûts.
  4. Dans la boîte de dialogue Modifier la répartition des coûts, cochez la case Activer la répartition des coûts.
  5. Cliquez sur Enregistrer les modifications.

Vérifier que l'attribution des coûts GKE est activée

gcloud

Décrivez le cluster :

gcloud container clusters describe CLUSTER_NAME

Le résultat ressemble à ce qui suit :

...
costManagementConfig:
  enabled: true
...

Dans ce résultat, costManagementConfig indique que l'attribution des coûts GKE est activée.

Console

Procédez comme suit pour vérifier si l'attribution des coûts GKE est activée sur un cluster existant :

  1. Accédez à la page Google Kubernetes Engine dans la console Google Cloud . Accéder à Google Kubernetes Engine
  2. Cliquez sur le nom du cluster que vous souhaitez modifier.
  3. Sur la page Clusters, dans la section Fonctionnalités, à côté de Allocation des coûts, il sera indiqué si l'allocation des coûts de GKE est activée.

Afficher et filtrer l'exportation des données de facturation

Vous pouvez utiliser les libellés Kubernetes décrits dans ce document pour filtrer vos coûts sur la page des rapports Cloud Billing dans la console Google Cloud .

Vous pouvez filtrer et regrouper vos coûts GKE dans l'ensemble de données BigQuery à l'aide de l'une des méthodes suivantes :

Vous pouvez utiliser les exemples de requêtes suivants avec ces méthodes pour filtrer les données de facturation exportées et obtenir des informations spécifiques à GKE :

  • Obtenir les coûts après crédits par espace de noms :

    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
    ;
    
  • Obtenir les coûts des clusters avant les crédits :

    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
    ;
    
  • Obtenir le coût total lié à GKE par code 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
    ;
    
  • Obtenir les coûts par nom de charge de travail avant crédits :

    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
    ;
    

Effectuer un nettoyage

Pour éviter que les ressources utilisées dans cette page soient facturées sur votre compte Google Cloud , désactivez l'attribution des coûts GKE pour le cluster :

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

Vous pouvez également supprimer le cluster que vous avez créé.

Étapes suivantes