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 informations clés sur les dépenses pour prendre des décisions éclairées 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 Cloud Billing BigQuery.

Ce document est destiné aux opérateurs, aux architectes cloud, aux développeurs et aux administrateurs de données qui doivent gérer les coûts lors de la création et de la configuration de clusters, ainsi que du déploiement de 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 consulter Bonnes pratiques pour l'exécution d'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 Data Studio.
  • L'attribution des coûts GKE vous permet d'afficher les données de coût des clusters dans la section Cloud Billing Google Cloud de la console 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 la Google Cloud CLI pour cette tâche, installez et 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 vers BigQuery. Les données d'attribution GKE ne sont pas disponibles dans les données de coûts d'utilisation standard exportées vers BigQuery.
  • 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 d'instance 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 Google Cloud console 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 une version ultérieure.
  • L'attribution 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 lorsque vous utilisez des solutions de gestion de nœuds externes qui contournent les pools de nœuds GKE.
  • Lorsque vous utilisez des remises sur engagement d'utilisation avec le partage des remises activé, les coûts des instances couvertes par les remises sur engagement d'utilisation peuvent ne pas être entièrement répartis par l'attribution des coûts GKE et peuvent être attribués à un espace de noms tel que goog-k8s-unsupported-sku.

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é d'étiquette 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é d'étiquette Kubernetes entre en conflit avec une clé d'étiquette de VM, la valeur de l'étiquette Kubernetes remplace la valeur de l'étiquette 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 allouables.
  • 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 autoscales 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 étiquettes appliquées directement aux PersistentVolumeClaims n'apparaissent pas dans la section Cloud Billing de la Google Cloud console 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 normale 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 Google Cloud console.

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' --enable-cost-allocation option lorsque vous créez un cluster à l'aide de la gcloud container clusters create commande.

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 Google Cloud console. 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 Google Cloud console. 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 de la Google Cloud console.

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 afin d'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 les 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
    ;
    

Libérer de l'espace

Pour éviter que les ressources utilisées dans ce tutoriel soient facturées sur votre Google Cloud compte, 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éé.

Vous pouvez également utiliser l'outil de ligne de commande gcloud pour afficher et gérer vos libellés. Pour en savoir plus, consultez la gcloud resource-manager tags documentation.

Étape suivante