Este documento mostra como receber insights importantes sobre gastos para informar suas decisões de alocação de recursos e otimização de custos usando a alocação de custos do Google Kubernetes Engine (GKE). Saiba mais sobre a diferença entre a alocação de custos do GKE e a medição de uso do cluster, as limitações da alocação de custos do GKE, como ativar a alocação de custos do GKE em clusters novos e atuais e como filtrar e consultar a exportação do Cloud Billing para o BigQuery.
Este documento é destinado a operadores, arquitetos de nuvem, desenvolvedores e administradores de dados que precisam gerenciar custos ao criar e configurar clusters e implantar cargas de trabalho no GKE. Para saber mais sobre papéis comuns, consulte Tarefas e papéis de usuário comuns do GKE.
Antes de ler este documento, recomendamos que você se familiarize com as Práticas recomendadas para executar aplicativos do Kubernetes otimizados para custo no GKE.
Possível aumento no volume de dados
Ativar o detalhamento de custos do GKE pode aumentar os custos de armazenamento e consulta no BigQuery. O aumento exato depende do número de combinações distintas de rótulos e namespaces que você usa em pods e clusters.
Ativar o detalhamento de custos do GKE não altera o custo total do uso do GKE. A soma dos itens de linha de custo na exportação é a mesma, e as consultas e relatórios que você criou na exportação de faturamento retornam os mesmos valores.
Alocação de custos do GKE e medição de uso do cluster
A alocação de custos do GKE é diferente da medição de uso de clusters das seguintes maneiras:
- A alocação de custos do GKE fornece uma alternativa à medição de uso do cluster para receber informações do cluster.
- A alocação de custos do GKE calcula os custos do cluster na sua conta do Cloud Billing, em vez de agregar os dados em um modelo do Data Studio.
- Com a alocação de custos do GKE, é possível ver os dados de custo de um cluster no console do Cloud Billing Google Cloud e na exportação detalhada do Cloud Billing.
Antes de começar
Antes de começar, verifique se você realizou as tarefas a seguir:
- Ative a API Google Kubernetes Engine. Ativar a API Google Kubernetes Engine
- Se você quiser usar a Google Cloud CLI para essa tarefa, instale e inicialize a CLI gcloud. Se você instalou a CLI gcloud anteriormente, instale a versão mais recente executando o comando
gcloud components update. Talvez as versões anteriores da CLI gcloud não sejam compatíveis com a execução dos comandos neste documento.
- Verifique se você concluiu as etapas para Exportar dados detalhados de custo de uso para o BigQuery. Se a organização já estiver exportando dados, você precisará ter acesso para consultar as tabelas.
- Verifique se você tem um cluster padrão. Para criar um cluster Standard, consulte Criar um cluster regional.
Limitações e restrições
- Só é possível ver os dados de alocação de custos do GKE na exportação detalhada de dados de custo de uso do Cloud Billing para o BigQuery. Os dados de alocação do GKE não estão disponíveis nos dados de custo de uso padrão exportados para o BigQuery.
- Se você ativar o detalhamento de custos do GKE, a exportação de faturamento começará a incluir outros itens de linha para seus recursos do GKE a partir dessa data. A exportação de faturamento não preenche os dados.
- Se você desativar o detalhamento de custos do GKE, a exportação de faturamento parará de incluir itens de linha adicionais, mas não modificará nem removerá itens anteriores que foram gerados enquanto o recurso estava ativado.
- Os dados de alocação de custos do GKE são baseados em solicitações de recursos, não em recursos consumidos. Para saber mais sobre as diferenças entre solicitações de recursos, limites de recursos e consumo de recursos, consulte Práticas recomendadas do Kubernetes: solicitações e limites de recursos.
- O detalhamento de custos do GKE é compatível com os seguintes tipos de SKU de recurso:
- SKUs de vCPU da instância de VM do Compute Engine
- SKUs de RAM da instância de VM do Compute Engine
- SKUs de RAM da instância estendida personalizada de VM do Compute Engine
- SKUs de GPU da instância de VM do Compute Engine
- SKUs de capacidade de DP do Compute Engine
- SKUs de instâncias do Cloud TPU
- Se um pod tiver mais de 50 identificadores do Kubernetes, nenhum deles estará disponível na seção do Cloud Billing do console do Google Cloud ou na exportação detalhada do Cloud Billing.
- Depois de ativar a alocação de custos do GKE, pode levar até três dias para que os dados apareçam no Cloud Billing.
- A alocação de custos do GKE inclui dados de discos permanentes, com
as seguintes exceções:
- Compatível apenas com recursos
PersistentVolumeprovisionados dinamicamente peloPersistentVolumeClaimsou Volumes temporários genéricos. - Compatível apenas com recursos
PersistentVolumeprovisionados pelo Driver CSI de disco permanente do Compute Engineou com o plugin de armazenamentokubernetes.io/gce-pddescontinuado com modo de acessoReadWriteOnceouReadWriteOncePod. - Discos permanentes com tempo de atividade inferior a 30 minutos podem não ser rastreados. Os discos permanentes com pelo menos 30 minutos de tempo de atividade são sempre rastreados.
- Compatível apenas com recursos
- A versão do Cloud TPU precisa ser a Cloud TPU v4 ou mais recente.
- A alocação de custos do GKE não funciona com instâncias de VM A4 ou A4X nem com GPUs anexadas a essas instâncias.
- A alocação de custos do GKE não é compatível com soluções externas de gerenciamento de nós que ignoram os pools de nós do GKE.
- Ao usar descontos por compromisso de uso (CUDs) com o compartilhamento de descontos ativado, os custos das instâncias cobertas por CUDs podem não ser totalmente detalhados pelo detalhamento de custos do GKE e podem ser atribuídos a um namespace como
goog-k8s-unsupported-sku.
Ver os custos do cluster do GKE
Quando você ativa o detalhamento de custos do GKE, o nome do cluster e o
namespace das cargas de trabalho do GKE aparecem no
campo labels da exportação de faturamento para o BigQuery:
Chave do rótulo do recurso (labels.key) |
Valor do rótulo de recurso (labels.value) |
|
| Descrição |
Os
rótulos do Kubernetes
têm o seguinte formato:
k8s-label/${k8s-label-key}, em que
${k8s-label-key} é a chave do rótulo do Kubernetes
do pod. O rótulo de faturamento k8s-label/${k8s-label-key} tem
o mesmo valor que o rótulo do pod do Kubernetes correspondente. |
Se uma chave de rótulo do Kubernetes conflita com uma de chave de rótulo da VM, o
valor do rótulo do Kubernetes substitui esse valor.
Os rótulos de recurso do cluster e do pool de nós são aplicados aos recursos usando
esta prioridade, da maior para a menor:
|
| Nome do cluster | goog-k8s-cluster-name |
[cluster-name] |
| Namespace | k8s-namespace |
[namespace] |
| Tipo de carga de trabalho | k8s-workload-type |
[workload-type] (por exemplo, apps/v1-Deployment,apps/v1-StatefulSet,apps/v1-DaemonSet,apps/v1-ReplicaSet,batch/v1-Job,batch/v1-CronJob,core/v1-Pod) |
| Nome da carga de trabalho | k8s-workload-name |
[workload-name] |
Para mais informações, acesse Esquema dos dados detalhados de custo de uso.
Além disso, os namespaces a seguir são usados para rastrear sobrecarga e recursos não alocados:
kube:system-overhead: considera recursos de nó que não estão disponíveis para os pods. Esses recursos são reservados pelo sistema para executar o framework do Kubernetes (incluindo, mas não se limitando a, kubelet, kube-proxy, containerd). Essa é a diferença entre a capacidade do nó e os recursos alocáveis.kube:unallocated: os recursos não são solicitados por cargas de trabalho nem solicitados para a sobrecarga do sistema.
Se o GKE não puder determinar a alocação de custos de um recurso, a exportação vai incluir um destes valores:
goog-k8s-unknown: o Cloud Billing não conseguiu processar a SKU. Isso pode acontecer durante o provisionamento de uma nova instância do Compute Engine. Alguns valores degoog-k8s-unknownpodem ser esperados durante a inicialização e o desligamento do nó, por exemplo, quando o GKE escalona um cluster automaticamente.goog-k8s-unsupported-sku: a alocação de custos do GKE não funciona com essa SKU. Trate isso da mesma forma que<blank>/NULL. Não há garantia de que uma SKU será sempre rotulada com esse valor.<blank>/NULL: a alocação de custos do GKE não rastreia esse recurso. Isso pode ocorrer quando a alocação de custos do GKE não está ativada ou o recurso não pertence a um cluster gerenciado do GKE.
Os custos de discos permanentes são rastreados quando o PersistentVolumeClaims de apoio do disco permanente é reivindicado pelos pods. Os custos do Persistent Disk herdam todos os metadados do pod declarante, como rótulos e namespaces do pod, até que os PersistentVolumeClaims sejam excluídos. Para PersistentVolumeClaims que são excluídos, mas mantêm PersistentVolumes de acordo com a política de recuperação, os custos dos Persistent Disks são rastreados como não alocados.
Os rótulos aplicados diretamente a PersistentVolumeClaims não aparecem na seção "Cloud Billing" do console do Google Cloud ou na exportação detalhada do Cloud Billing.
Para a RAM estendida, a mesma proporção do custo total é alocada a uma carga de trabalho para os SKUs de RAM regular e RAM estendida com base na solicitação de recurso.
Ativar a alocação de custos do GKE
É possível ativar a alocação de custos do GKE em um cluster novo ou atual usando a CLI gcloud ou o console Google Cloud .
gcloud
Atualize um cluster usando a sinalização --enable-cost-allocation:
gcloud container clusters update CLUSTER_NAME \
--enable-cost-allocation
Substitua CLUSTER_NAME pelo nome do cluster.
Também é possível usar a flag
--enable-cost-allocation ao
criar um cluster com o
comando gcloud container clusters create.
Console
Para ativar a alocação de custos do GKE em um cluster atual, faça o seguinte:
- Acesse a página do Google Kubernetes Engine no console do Google Cloud . Acessar o Google Kubernetes Engine
- Clique no nome do cluster que você quer modificar.
- Na página Clusters, na seção Recursos, clique em edit ao lado de Alocação de custos.
- Na caixa de diálogo Editar alocação de custos, marque a caixa de seleção Ativar alocação de custos.
- Clique em Salvar alterações.
Verificar se a alocação de custos do GKE está ativada
gcloud
Descreva o cluster:
gcloud container clusters describe CLUSTER_NAME
O resultado será assim:
...
costManagementConfig:
enabled: true
...
Nesta saída, costManagementConfig indica que a alocação de custos do GKE está ativada.
Console
Para verificar se a alocação de custos do GKE está ativada em um cluster atual, faça o seguinte:
- Acesse a página do Google Kubernetes Engine no console do Google Cloud . Acessar o Google Kubernetes Engine
- Clique no nome do cluster que você quer modificar.
- Na página Clusters, na seção Recursos, ao lado de Alocação de custos, será mostrado se a alocação de custos do GKE estiver ativada.
Ver e filtrar a exportação de dados de faturamento
Use os rótulos do Kubernetes descritos neste documento para filtrar os custos na página de relatórios de faturamento do Cloud Billing no console do Google Cloud .
É possível filtrar e agrupar os custos do GKE no conjunto de dados do BigQuery usando um dos seguintes métodos:
- No BigQuery, execute uma consulta.
- No Cloud Billing, gere e execute uma consulta nos dados de faturamento exportados (prévia).
Use as consultas de exemplo a seguir com esses métodos para filtrar os dados de faturamento exportados e encontrar informações específicas do GKE:
Ver custos após créditos por namespace:
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 ;Ver custos de clusters antes dos créditos:
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 ;Ver o total de custos relacionados ao GKE por 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 ;Ver custos por nome de carga de trabalho antes dos créditos:
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 ;
Limpar
Para evitar cobranças na conta do Google Cloud pelos recursos usados nesta página, desative a alocação de custo do GKE no cluster:
gcloud container clusters update CLUSTER_NAME \
--no-enable-cost-allocation
Também é possível excluir o cluster que você criou.
Você também pode usar a ferramenta de linha de comando gcloud para ver e gerenciar seus rótulos. Para mais informações, consulte a documentação do gcloud resource-manager tags.
A seguir
- Saiba como entender o uso de recursos do cluster.
- Saiba como ver métricas de otimização relacionadas ao custo.
- Saiba mais sobre o escalonador automático de clusters.
- Saiba como criar e gerenciar rótulos de clusters e de pool de nós de nós.
- Saiba como dimensionar corretamente suas cargas de trabalho em grande escala.