Revisão do Kubecost para economizar dinheiro no Kubernetes nas nuvens



Atualmente, mais e mais empresas estão migrando sua infraestrutura de servidores de ferro e suas próprias máquinas virtuais para as nuvens. Essa solução é fácil de explicar: não há necessidade de cuidar do hardware, o cluster é facilmente configurado de várias maneiras diferentes ... e o mais importante, as tecnologias disponíveis (como o Kubernetes) facilitam o dimensionamento do poder de computação, dependendo da carga.

O aspecto financeiro é sempre importante. A ferramenta, que será discutida neste artigo, foi projetada para ajudar a reduzir os orçamentos ao usar a infraestrutura de nuvem com o Kubernetes.

1. Introdução


O Kubecost é uma startup californiana de imigrantes do Google, criando uma solução para calcular custos de infraestrutura em serviços em nuvem (dentro do cluster Kubernetes + recursos compartilhados), encontrando gargalos nas configurações do cluster e enviando notificações apropriadas para o Slack.

Temos clientes com o Kubernetes nas nuvens conhecidas da AWS e GCP, além de mais raras para a comunidade Linux do Azure - em geral, em todas as plataformas suportadas pelo Kubecost. Para alguns deles, consideramos os custos dos serviços intra-cluster por conta própria (usando uma técnica semelhante à usada pelo Kubecost), além de monitorar os custos de infraestrutura e tentar otimizá-los. Portanto, é lógico que estávamos interessados ​​na capacidade de automatizar essas tarefas.

O código fonte do módulo principal do Kubecost é aberto sob os termos da licença Open Source (Apache License 2.0). Pode ser usado livremente, e as funções disponíveis devem ser suficientes para pequenos projetos. No entanto, negócios são negócios: o restante do produto está fechado, pode ser usado para assinaturas pagas , o que também implica suporte comercial. Além disso, os autores oferecem uma licença gratuita para pequenos clusters (1 cluster com 10 nós - durante a redação deste artigo, esse limite foi expandido para 20 nós) ou um período de avaliação com recursos completos por 1 mês.

Como funciona


Portanto, a maior parte do Kubecost é um aplicativo de modelo de custo escrito em Go. O gráfico de leme, que descreve todo o sistema, é chamado de analisador de custos e é essencialmente um conjunto de modelo de custo com Prometheus, Grafana e vários painéis.

De um modo geral, o modelo de custo tem sua própria interface da web, que exibe gráficos e estatísticas detalhadas sobre custos de forma tabular, bem como, é claro, dicas sobre como otimizar custos. Os painéis apresentados no Grafana são um estágio anterior no desenvolvimento do Kubecost e contêm os mesmos dados do modelo de custo, complementando-os com as estatísticas usuais sobre o consumo de CPU / memória / rede / espaço em disco no cluster e seus componentes.

Como o Kubecost funciona?

  • O modelo de custo por meio da API de provedores de nuvem recebe preços de serviço.
  • Além disso, dependendo do tipo de ferro do site e da região, o custo por site é considerado.
  • Com base no custo do trabalho dos nós, cada pod final recebe o custo por hora de uso do processador, gastando um gigabyte de memória e o custo de uma hora de armazenamento de um gigabyte de dados - dependendo do nó no qual ele trabalhou ou da classe de armazenamento.
  • Com base no custo do trabalho de pods individuais, o pagamento é considerado para namespaces, serviços, implantações, StatefulSets.
  • Para calcular estatísticas, são usadas as métricas fornecidas por kube-state-metrics e node-exportator.

É importante observar que o Kubecost, por padrão, conta apenas os recursos disponíveis no Kubernetes . Bancos de dados externos, servidores GitLab, repositórios S3 e outros serviços que não estão no cluster (embora localizados na mesma nuvem) não são visíveis para ele. Embora para GCP e AWS, você possa adicionar as chaves das suas contas de serviço e calcular tudo juntas.

Instalação


Para o Kubecost funcionar, você precisa:

  • Kubernetes versão 1.8 e superior;
  • métricas de estado de cubo;
  • Prometeu;
  • exportador de nós.

Aconteceu que em nossos clusters todas essas condições foram atendidas com antecedência; portanto, foi suficiente apenas para especificar o ponto de extremidade correto para o acesso ao Prometheus. No entanto, o Helm-chart oficial do kubecost contém tudo o que você precisa para iniciar em um cluster simples.

Existem várias maneiras de instalar o Kubecost:

  1. O método de instalação padrão descrito nas instruções no site do desenvolvedor.Você precisa adicionar o repositório do analisador de custos ao Helm e, em seguida, instalar o gráfico . Resta apenas encaminhar a porta e concluir as configurações para o estado desejado manualmente (via kubectl) e / ou usando a interface da web de modelo de custo.

    Nem tentamos esse método, porque não usamos configurações prontas de terceiros, no entanto, parece uma boa opção "tente você mesmo". Se você já possui alguns dos componentes do sistema instalados ou deseja um ajuste mais fino, é melhor considerar a segunda maneira.
  2. Use essencialmente o mesmo gráfico , mas configure e instale independentemente de qualquer maneira conveniente.

    Como já mencionado, além do próprio kubecost, este gráfico contém os gráficos Grafana e Prometheus, que também podem ser personalizados conforme desejado.

    O gráfico values.yaml para o analisador de custos disponível no gráfico permite configurar:

    • lista de componentes do analisador de custos a serem implantados;
    • seu ponto final para Prometheus (se você já tiver um);
    • Domínios e outras configurações de entrada para modelo de custo e Grafana;
    • anotações para pods;
    • a necessidade de armazenamento permanente e seu tamanho.

    Uma lista completa de opções de configuração disponíveis com uma descrição está na documentação .

    Como o kubecost na versão básica não sabe como restringir o acesso, você precisará configurar imediatamente a autenticação básica para o painel da web.
  3. Instale apenas o núcleo do sistema - modelo de custo. Para fazer isso, você deve ter o Prometheus instalado no cluster e especificar o valor correspondente do seu endereço na variável prometheusEndpoint do Helm. Depois disso, aplique o conjunto de configurações YAML no cluster.

    Novamente, você precisa adicionar manualmente o Ingress com a autenticação básica. E, finalmente, você precisa adicionar uma seção para coletar métricas de modelo de custo em extraScrapeConfigs na configuração do Prometheus:

     - job_name: kubecost honor_labels: true scrape_interval: 1m scrape_timeout: 10s metrics_path: /metrics scheme: http dns_sd_configs: - names: - <   kubecost> type: 'A' port: 9003 

O que nós ganhamos?


Com uma instalação completa, temos à disposição o painel da web kubecost e o Grafana com um conjunto de painéis.

O custo total exibido na tela principal mostra realmente o custo estimado dos recursos para o mês. Esse é o preço previsto que exibe o custo do uso do cluster (por mês) no nível atual de consumo de recursos.

Essa métrica é mais para análise e otimização de custos. Não é muito conveniente observar os custos totais do resumo de julho no kubecost: você precisará cobrar por isso. Mas você pode ver os custos detalhados por namespaces, rótulos e pods por 1/2/7/30/90 dias, que o faturamento nunca mostrará.



Falando de etiquetas . Você deve entrar imediatamente nas configurações e definir os nomes dos rótulos que serão usados ​​como categorias adicionais para agrupar os custos:



Você pode pendurar qualquer etiqueta nelas - é conveniente se você já possui seu próprio sistema de etiquetas.

Lá, você também pode alterar o endereço da API do terminal ao qual o modelo de custo se conecta, configurar o tamanho do desconto no GCP e definir seus próprios preços de recursos e moeda para mensurá-los (por algum motivo, o recurso não afeta o Custo total).

O Kubecost pode mostrar vários problemas no cluster (e até alertar em caso de perigo). Infelizmente, a opção não é configurável e, portanto, se você tiver ambientes de desenvolvedor e eles forem usados, poderá observar constantemente algo como isto:



Uma ferramenta importante é a economia de cluster . Ele mede a atividade dos pods (consumo de recursos, incluindo a rede) e também considera quanto dinheiro e quanto pode ser economizado.

Pode parecer que as dicas de otimização são bastante óbvias, mas a experiência sugere que ainda há algo para se olhar. Em particular, a atividade de rede dos pods é monitorada (o Kubecost oferece atenção aos inativos), são comparados o consumo de memória e CPU solicitados e reais, bem como a CPU usada pelos nós do cluster (oferece o recolhimento de vários nós em um), carga do disco e algumas dúzias parâmetros.

Como em qualquer problema de otimização, a otimização de recursos com base nos dados do Kubecost deve ser tratada com cautela . Por exemplo, a Economia de cluster sugere a exclusão de nós, alegando que é seguro, mas não leva em conta a presença de seletores de nó e contaminação nos pods implantados neles que não estão presentes em outros nós. De qualquer forma, mesmo os autores do produto em seu artigo recente (a propósito, pode ser muito útil para aqueles que estão interessados ​​no tópico do projeto) recomendam não se apressar de cabeça na otimização de custos, mas abordar a questão com atenção.

Sumário


Depois de usar o kubecost por um mês em alguns projetos, podemos concluir que esta é uma ferramenta interessante (e até fácil de aprender e instalar) para analisar e otimizar os custos dos provedores de nuvem usados ​​nos clusters Kubernetes. Os cálculos são muito precisos: em nossos experimentos, eles coincidiram com o que os fornecedores realmente exigiram.

Não sem desvantagens: existem bugs não críticos, a funcionalidade em alguns locais não cobre os requisitos específicos de alguns projetos. No entanto, se você precisar entender rapidamente para onde vai o dinheiro e o que pode "cortar" para reduzir constantemente a fatura de serviços em nuvem de 5 a 30% (isso aconteceu no nosso caso), essa é uma ótima opção.

PS


Leia também em nosso blog:

Source: https://habr.com/ru/post/pt466659/


All Articles