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.
- 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 la section 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 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
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 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 :
|
| 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 valeursgoog-k8s-unknownlors 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 :
- Accédez à la page Google Kubernetes Engine dans la Google Cloud console. 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 Google Cloud console. 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 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 :
- 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 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
- Découvrez comment comprendre l'utilisation des ressources de cluster.
- Découvrez comment afficher les métriques d'optimisation liées aux coûts.
- En savoir plus sur l'autoscaler de cluster.
- Découvrez comment créer et gérer des étiquettes de cluster et de pool de nœuds.
- Découvrez comment dimensionner correctement vos charges de travail à grande échelle.