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.
- Assurez-vous d'avoir terminé la procédure Exporter des données de coûts d'utilisation détaillées vers BigQuery. Si votre organisation exporte déjà des données, vous devez avoir un accès pour interroger les tables.
- Assurez-vous de disposer d'un cluster standard. Pour créer un cluster standard, consultez Créer un cluster régional.
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
PersistentVolumeprovisionnées dynamiquement viaPersistentVolumeClaimsou les volumes éphémères génériques. - Compatible uniquement avec les ressources
PersistentVolumeprovisionnées par le pilote CSI de disque persistant Compute Engine ou avec le plug-in de stockagekubernetes.io/gce-pdobsolète avec le mode d'accèsReadWriteOnceouReadWriteOncePod. - 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.
- Compatible uniquement avec les ressources
- 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 :
|
| 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 valeursgoog-k8s-unknownlors 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 :
- Accédez à la page Google Kubernetes Engine dans la console Google Cloud . Accéder à Google Kubernetes Engine
- Cliquez sur le nom du cluster que vous souhaitez modifier.
- Sur la page Clusters, dans la section Fonctionnalités, cliquez sur edit à côté de Allocation des coûts.
- Dans la boîte de dialogue Modifier la répartition des coûts, cochez la case Activer la répartition des coûts.
- 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 :
- Accédez à la page Google Kubernetes Engine dans la console Google Cloud . Accéder à Google Kubernetes Engine
- Cliquez sur le nom du cluster que vous souhaitez modifier.
- 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 :
- Dans BigQuery, exécutez une requête.
- Dans Cloud Billing, générez et exécutez une requête sur vos données de facturation exportées (aperçu).
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
- Consultez d'autres exemples de requêtes associées à l'exportation de données Cloud Billing.
- Découvrez comment visualiser vos coûts avec Looker Studio.