Observação:

Use OpenCost com o Oracle Cloud Native Environment

Introdução

Medir os custos em tempo real de execução e implantação de aplicativos na instalação do Oracle Cloud Native Environment (Oracle CNE) ajuda a gerenciá-los. OpenCost é um projeto de código aberto neutro do fornecedor que registra os custos de infraestrutura de contêiner e nuvem para facilitar o monitoramento de custos de negócios em tempo real. Você pode usar os custos em tempo real relatados para monitorar os custos no cluster, como CPU, GPU e memória, e os custos baseados em provedor de nuvem, como armazenamento.

Objetivos

Neste tutorial, você aprenderá:

Pré-requisitos

Configurar o Oracle CNE

Observação: Se estiver em execução em sua própria tenancy, leia o projeto linux-virt-labs GitHub README.md e conclua os pré-requisitos antes de implantar o ambiente de laboratório.

  1. Abra um terminal no Luna Desktop.

  2. Clone o projeto linux-virt-labs GitHub.

    git clone https://github.com/oracle-devrel/linux-virt-labs.git
    
  3. Altere para o diretório de trabalho.

    cd linux-virt-labs/ocne2
    
  4. Instale as coleções necessárias.

    ansible-galaxy collection install -r requirements.yml
    
  5. Aumente o tamanho do volume de inicialização.

    cat << EOF | tee instances.yml > /dev/null
    compute_instances:
      1:
        instance_name: "ocne"
        type: "server"
        boot_volume_size_in_gbs: 128
    ocne_type: "oci"
    install_ocne_rpm: true
    create_ocne_oci_cluster: true
    ocne_cluster_name: "mycluster"
    num_cp_nodes: 1
    num_wk_nodes: 3
    update_all: true
    EOF
    
  6. Implante o ambiente de laboratório.

    ansible-playbook create_instance.yml -e localhost_python_interpreter="/usr/bin/python3.6" -e "@instances.yml"
    

    O ambiente de laboratório gratuito requer a variável extra local_python_interpreter, que define ansible_python_interpreter para execuções em execução no localhost. Essa variável é necessária porque o ambiente instala o pacote RPM do SDK para Python do Oracle Cloud Infrastructure, localizado nos módulos python3.6.

    A forma de implantação padrão usa a CPU AMD e o Oracle Linux 8. Para usar uma CPU Intel ou Oracle Linux 9, adicione -e instance_shape="VM.Standard3.Flex" ou -e os_version="9" ao comando de implantação.

    Importante: Aguarde a execução bem-sucedida do playbook e atinja a tarefa de pausa. Nesta etapa do manual, a instalação do Oracle CNE está concluída e as instâncias estão prontas. Tome nota da reprodução anterior, que imprime os endereços IP públicos e privados dos nós que ele implanta e qualquer outra informação de implantação necessária durante a execução do laboratório.

Acessar o Cluster do Kubernetes

  1. Abra um terminal e estabeleça conexão via SSH com a instância ocne.

    ssh oracle@<ip_address_of_instance>
    
  2. Obtenha uma lista de clusters conhecidos usando a CLI.

    ocne cluster list
    
  3. Obtenha a localização da configuração do kube.

    ocne cluster show -C mycluster
    

    Usamos o -C para especificar um cluster específico na lista de clusters.

  4. Defina a variável de ambiente KUBECONFIG.

    export KUBECONFIG=$(ocne cluster show -C mycluster)
    
  5. Aguarde a estabilização do cluster e todos os pods relatem em um estado de execução.

    watch kubectl get pods -A
    

    Depois que todos os pods mostrarem um STATUS de Em Execução, digite ctrl-c para sair do comando watch.

  6. Confirme quantos nós estão presentes.

    kubectl get nodes
    

Instalar o Helm

O Helm fornece uma maneira fácil de gerenciar aplicativos instalados no seu cluster do Oracle CNE. Neste exemplo, você o usa para instalar o OpenCost.

  1. Instalar o Git.

    sudo dnf install -y git
    
  2. Faça download da versão mais recente do Helm e instale-a localmente.

    curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
    chmod 700 get_helm.sh
    ./get_helm.sh
    

    Observação: geralmente não é recomendável executar um script sem revisá-lo e compreendê-lo antes de executá-lo. No entanto, esse script é amplamente utilizado e bem documentado. A Oracle recomenda que você o revise antes de executá-lo em suas instalações.

Instalar Prometheus

O OpenCost usa o Prometheus para armazenar métricas raspadas para o cluster do Kubernetes.

  1. Adicione o repositório Helm da Comunidade Prometheus.

    helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
    
  2. Atualize o repositório Prometheus Helm.

    helm repo update
    
  3. Instale o Prometheus e configure-o para OpenCost.

    Você instalará o Prometheus no namespace prometheus-system usando as definições padrão de OpenCost.

    helm install prometheus --repo https://prometheus-community.github.io/helm-charts prometheus --namespace prometheus-system --create-namespace --set prometheus-pushgateway.enabled=false --set alertmanager.enabled=false -f https://raw.githubusercontent.com/opencost/opencost/develop/kubernetes/prometheus/extraScrapeConfigs.yaml
    

    Observação: Você pode usar uma instância existente do Prometheus. Consulte a documentação OpenCost para obter detalhes.

Instalar OpenCost

  1. Crie o namespace OpenCost.

    kubectl create namespace opencost
    
  2. Adicione o repositório OpenCost do Helm.

    helm repo add opencost https://opencost.github.io/opencost-helm-chart
    
  3. Atualize o repositório Helm.

    helm repo update
    
  4. Faça download de um arquivo de definição OpenCost valores padrão.

    Você usa o arquivo values.yaml para configurar a definição de configuração OpenCost e definir os custos padrão usados no tutorial.

    curl -o local.yaml https://raw.githubusercontent.com/opencost/opencost-helm-chart/refs/heads/main/charts/opencost/values.yaml
    
  5. Instale o gráfico Helm OpenCost.

    helm install opencost --repo https://opencost.github.io/opencost-helm-chart opencost --namespace opencost -f local.yaml
    
  6. Encaminhe a porta da IU OpenCost.

    kubectl port-forward --namespace opencost service/opencost 9003:9090
    

    Observação: Se você receber uma notificação de erro, isso ocorre porque o Helm não implantou totalmente o OpenCost. Aguarde alguns segundos e repita o comando port-forward.

    Importante: O uso de uma porta para frente só deve ser usado para teste interno. As implantações de produção devem usar uma regra de Entrada para fornecer acesso a OpenCost.

Acessar a IU OpenCost

  1. Abra uma nova janela de terminal e configure um túnel SSH.

    ssh -L 9333:localhost:9003 oracle@<ip_address_of_node>
    
  2. Abra um navegador da Web e insira o URL.

    Dica: Talvez você precise atualizar o browser algumas vezes antes de o OpenCost ter coletado dados suficientes para serem exibidos.

    http://localhost:9333/allocation?window=48h
    

    início do custo inicial

    Onde os parâmetros disponíveis são:

    • Intervalo de Datas - Use-o para escolher um período padrão a ser exibido nos padrões listados. Também é possível usar o "Seletor de data" para determinar um intervalo de datas personalizado.
    • Detalhamento - Use essa opção para escolher qual tipo de recurso do Kubernetes exibir o custo associado. Por exemplo, Cluster, Nó, Namespace, Pod, Implantação etc.
    • Resolução - Determina como o gráfico exibe os dados retornados. A escolha é por dia ou cumulativamente.
    • Moeda - Define o denominador de moeda exibido.

    Observação: se solicitado, aprove a advertência de segurança com base no browser usado. Para o Chrome, clique no botão Avançado e, em seguida, no link Prosseguir para o localhost (inseguro). Além disso, observe que os links Custos da Nuvem e Custos Externos na página Web estão desativados. Esse comportamento acontece porque você não integra OpenCost a uma Tenancy do OCI neste tutorial. Se você precisar dessa funcionalidade para sua implantação, consulte a documentação OpenCost para obter detalhes sobre como configurar sua tenancy do OCI para trabalhar com OpenCost.

Instalar Krew

O Krew é um gerenciador de pacotes dos plug-ins do kubectl, o que facilita a descoberta e a instalação deles no sistema.

  1. Abra um novo terminal e conecte-se via SSH à instância ocne.

    ssh oracle@<ip_address_of_instance>
    
  2. Defina a variável de ambiente KUBECONFIG.

    export KUBECONFIG=$(ocne cluster show -C mycluster)
    
  3. Instale o pacote git.

    sudo dnf install -y git
    
  4. Faça download do plug-in krew e instale-o.

    (
    set -x; cd "$(mktemp -d)" &&
    OS="$(uname | tr '[:upper:]' '[:lower:]')" &&
    ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\(arm\)\(64\)\?.*/\1\2/' -e 's/aarch64$/arm64/')" &&
    KREW="krew-${OS}_${ARCH}" &&
    curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/latest/download/${KREW}.tar.gz" &&
    tar zxvf "${KREW}.tar.gz" &&
    ./"${KREW}" install krew
    )
    
  5. Adicione o binário krew à variável de ambiente PATH.

    export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
    

    Para tornar essa alteração permanente, atualize o arquivo .bashrc e reinicie seu shell fazendo logout e de volta no sistema.

  6. Verifique a instalação.

    kubectl krew
    

    Exemplo de Saída:

    [oracle@ocne ~]$ kubectl krew
    krew is the kubectl plugin manager.
    You can invoke krew through kubectl: "kubectl krew [command]..."
    
    Usage:
      kubectl krew [command]
    
    Available Commands:
      help        Help about any command
      index       Manage custom plugin indexes
      info        Show information about an available plugin
      install     Install kubectl plugins
      list        List installed kubectl plugins
      search      Discover kubectl plugins
      uninstall   Uninstall plugins
      update      Update the local copy of the plugin index
      upgrade     Upgrade installed plugins to newer versions
      version     Show krew version and diagnostics
    
    Flags:
      -h, --help      help for krew
      -v, --v Level   number for the log level verbosity
    
    Use "kubectl krew [command] --help" for more information about a command.
    

Instalar o Plug-in CLI OpenCost

  1. Instale o plug-in.

    kubectl krew install cost
    

    Exemplo de Saída:

    [oracle@ocne ~]$ kubectl krew install cost
    Updated the local copy of plugin index.
    Installing plugin: cost
    Installed plugin: cost
    \
     | Use this plugin:
     | 	kubectl cost
     | Documentation:
     | 	https://github.com/kubecost/kubectl-cost
     | Caveats:
     | \
     |  | Requires Kubecost (a cluster-side daemon) to be installed in your cluster.
     |  | See https://www.kubecost.com/install for installation instructions.
     | /
    /
    WARNING: You installed plugin "cost" from the krew-index plugin repository.
       These plugins are not audited for security by the Krew maintainers.
       Run them at your own risk.
    
  2. Verifique a instalação do plug-in.

    kubectl cost version
    kubectl cost --help
    

Usando o Plug-in da CLI OpenCost

A estrutura de sintaxe básica usada pelo kubectl cost é mapeada para os conceitos padrão do Kubernetes de namespace, label, implantação, StatefulSet etc. principalmente. Ele usa as APIs do Kubecost para retornar dados de custo úteis relacionados às cargas de trabalho e implantações no cluster do Oracle CNE. A ferramenta é flexível, então vamos começar com alguns exemplos.

  1. Mostra a projeção de custo mensal para todos os namespaces do cluster.

    kubectl cost namespace --opencost true
    

    Exemplo de Saída:

    [oracle@ocne ~]$ kubectl cost namespace --opencost true
    +-----------------+-------------------+--------------------+-----------------+
    | CLUSTER         | NAMESPACE         | MONTHLY RATE (ALL) | COST EFFICIENCY |
    +-----------------+-------------------+--------------------+-----------------+
    | __idle__        | __idle__          |        1100.228400 |        0.000000 |
    | default-cluster | kube-system       |          23.187600 |        0.470162 |
    |                 | monitoring        |          11.530800 |        0.296739 |
    |                 | kube-flannel      |           9.702000 |        0.031735 |
    |                 | prometheus-system |           1.309216 |        1.000000 |
    |                 | opencost          |           0.800139 |        0.303188 |
    |                 | ocne-system       |           0.079200 |        1.000000 |
    +-----------------+-------------------+--------------------+-----------------+
    | SUMMED          |                   |        1146.837356 |                 |
    +-----------------+-------------------+--------------------+-----------------+
    

    Onde:

    • –opencost true = Quando definido como true, ele configura OpenCost para usar os parâmetros de acordo com a especificação padrão OpenCost. O que é equivalente a fornecer as opções da linha de comando: --service-port 9003 --service-name opencost --kubecost-namespace opencost --allocation-path /allocation/compute.
  2. Mostre o custo total dos últimos cinco dias por todas as implantações com o rótulo "app".

    kubectl cost label --historical -l app --opencost true
    

    Exemplo de Saída:

    [oracle@ocne ~]$ kubectl cost label --historical -l app --opencost true
    +-----------------+--------------------------------+--------------------+-----------------+
    | CLUSTER         | LABEL:APP                      | MONTHLY RATE (ALL) | COST EFFICIENCY |
    +-----------------+--------------------------------+--------------------+-----------------+
    | __idle__        | __idle__                       |        1100.224800 |        0.000000 |
    | default-cluster | __unallocated__                |          35.937616 |        0.367372 |
    |                 | flannel                        |           9.702000 |        0.031831 |
    |                 | csi-oci-node                   |           0.450000 |        1.000000 |
    |                 | csi-oci-controller             |           0.370800 |        1.000000 |
    |                 | kube-prometheus-stack-operator |           0.122400 |        1.000000 |
    +-----------------+--------------------------------+--------------------+-----------------+
    | SUMMED          |                                |        1146.807616 |                 |
    +-----------------+--------------------------------+--------------------+-----------------+
    
  3. Mostre o custo mensal projetado por implantação, incluindo detalhes de eficiência de custo de CPU e CPU.

    kubectl cost deployment --show-cpu --opencost true
    

    Exemplo de Saída:

    [oracle@ocne ~]$ kubectl cost deployment --show-cpu --opencost true
    +-----------------+-------------------+------------------------------------+------------+----------+--------------------+-----------------+
    | CLUSTER         | NAMESPACE         | DEPLOYMENT                         | CPU        | CPU EFF. | MONTHLY RATE (ALL) | COST EFFICIENCY |
    +-----------------+-------------------+------------------------------------+------------+----------+--------------------+-----------------+
    | __idle__        | __idle__          | __idle__                           | 528.487200 | 0.000000 |        1100.224800 |        0.000000 |
    | default-cluster | kube-system       | __unallocated__                    | 14.860800  | 0.008692 |          17.499600 |        1.359666 |
    |                 | monitoring        |                                    | 9.342000   | 0.002225 |          11.311200 |        0.241625 |
    |                 | kube-flannel      |                                    | 9.104400   | 0.008750 |           9.702000 |        0.031878 |
    |                 | kube-system       | coredns                            | 4.550400   | 0.000750 |           5.313600 |        0.023865 |
    |                 | prometheus-system | prometheus-server                  | 0.165600   | 1.000000 |           1.219216 |        1.000000 |
    |                 | opencost          | opencost                           | 0.454539   | 0.008000 |           0.800139 |        0.303828 |
    |                 | kube-system       | csi-oci-controller                 | 0.075600   | 1.000000 |           0.370800 |        1.000000 |
    |                 | monitoring        | promstack-kube-prometheus-operator | 0.010800   | 1.000000 |           0.122400 |        1.000000 |
    |                 | prometheus-system | prometheus-kube-state-metrics      | 0.032400   | 1.000000 |           0.097200 |        1.000000 |
    |                 | monitoring        | promstack-kube-state-metrics       | 0.028800   | 1.000000 |           0.097200 |        1.000000 |
    |                 | ocne-system       | ui                                 | 0.007200   | 1.000000 |           0.054000 |        1.000000 |
    |                 |                   | ocne-catalog                       | 0.000000   | 0.000000 |           0.025200 |        1.000000 |
    +-----------------+-------------------+------------------------------------+------------+----------+--------------------+-----------------+
    | SUMMED          |                   |                                    | 567.119739 |          |        1146.837356 |                 |
    +-----------------+-------------------+------------------------------------+------------+----------+--------------------+-----------------+
    
  4. Mostre o custo de cada pod implantado, incluindo custos específicos da CPU.

    kubectl cost pod --show-cpu --opencost true
    

    Exemplo de Saída:

    oracle@ocne ~]$ kubectl cost pod --show-cpu --opencost true
    +-----------------+-------------------+-------------------------------------------------------+------------+----------+--------------------+-----------------+
    | CLUSTER         | NAMESPACE         | POD                                                   | CPU        | CPU EFF. | MONTHLY RATE (ALL) | COST EFFICIENCY |
    +-----------------+-------------------+-------------------------------------------------------+------------+----------+--------------------+-----------------+
    | __idle__        | __idle__          | __idle__                                              | 540.291130 | 0.000000 |        1124.022678 |        0.000000 |
    | default-cluster | kube-system       | kube-apiserver-mycluster-control-plane-q8qjn          | 5.689252   | 0.024160 |           7.020939 |        0.209251 |
    |                 | monitoring        | prometheus-promstack-kube-prometheus-prometheus-0     | 4.767026   | 0.007700 |           5.893983 |        1.301700 |
    |                 |                   | alertmanager-promstack-kube-prometheus-alertmanager-0 | 4.560417   | 0.000300 |           5.306087 |        0.022176 |
    |                 | kube-system       | kube-controller-manager-mycluster-control-plane-q8qjn | 4.552904   | 0.007350 |           4.752000 |        0.048939 |
    |                 |                   | coredns-7dcb9db977-4hwdv                              | 2.276452   | 0.001300 |           2.657739 |        0.025254 |
    |                 |                   | coredns-7dcb9db977-zfdbf                              | 2.276452   | 0.001400 |           2.657739 |        0.024453 |
    |                 |                   | etcd-mycluster-control-plane-q8qjn                    | 2.276452   | 0.024300 |           2.575096 |        0.125228 |
    |                 | kube-flannel      | kube-flannel-ds-vl5qd                                 | 2.276452   | 0.017500 |           2.424835 |        0.040974 |
    |                 |                   | kube-flannel-ds-7tw4k                                 | 2.276452   | 0.017300 |           2.424835 |        0.041796 |
    |                 |                   | kube-flannel-ds-48qk4                                 | 2.276452   | 0.017200 |           2.424835 |        0.040679 |
    |                 |                   | kube-flannel-ds-cn46r                                 | 2.276452   | 0.015000 |           2.424835 |        0.033543 |
    |                 | kube-system       | kube-scheduler-mycluster-control-plane-q8qjn          | 2.276452   | 0.003100 |           2.340313 |        0.030303 |
    |                 | prometheus-system | prometheus-server-6c586d99cd-vcxfq                    | 0.137113   | 1.000000 |           1.209669 |        1.000000 |
    |                 | opencost          | opencost-6b8cb599b7-m6pk2                             | 0.455040   | 0.013000 |           0.802560 |        0.310859 |
    |                 | kube-system       | csi-oci-controller-7ff494cb89-4ncws                   | 0.075130   | 1.000000 |           0.368139 |        1.000000 |
    |                 |                   | csi-oci-node-cqhfh                                    | 0.001878   | 1.000000 |           0.142748 |        1.000000 |
    |                 |                   | csi-oci-node-mhts8                                    | 0.001878   | 1.000000 |           0.123965 |        1.000000 |
    |                 | monitoring        | promstack-kube-prometheus-operator-7dc5684785-tgdj4   | 0.009391   | 1.000000 |           0.122087 |        1.000000 |
    |                 | kube-system       | csi-oci-node-54cz9                                    | 0.001878   | 1.000000 |           0.099548 |        1.000000 |
    |                 | monitoring        | promstack-kube-state-metrics-5bd74cc8d9-jch68         | 0.030052   | 1.000000 |           0.099548 |        1.000000 |
    |                 | prometheus-system | prometheus-kube-state-metrics-65846b5c64-k6qbf        | 0.031930   | 1.000000 |           0.097670 |        1.000000 |
    |                 | kube-system       | oci-cloud-controller-manager-6n4n2                    | 0.031930   | 1.000000 |           0.095791 |        1.000000 |
    |                 |                   | kube-proxy-k2tqn                                      | 0.011270   | 1.000000 |           0.090157 |        1.000000 |
    |                 |                   | csi-oci-node-l7g44                                    | 0.000000   | 0.000000 |           0.080765 |        1.000000 |
    |                 |                   | kube-proxy-rrzls                                      | 0.007513   | 1.000000 |           0.067617 |        1.000000 |
    |                 | monitoring        | promstack-prometheus-node-exporter-4jqk7              | 0.020661   | 1.000000 |           0.065739 |        1.000000 |
    |                 | kube-system       | kube-proxy-8t48n                                      | 0.005635   | 1.000000 |           0.063861 |        1.000000 |
    |                 | ocne-system       | ui-5f59d8454b-p9tz4                                   | 0.007513   | 1.000000 |           0.052591 |        1.000000 |
    |                 | kube-system       | kube-proxy-4q5gk                                      | 0.003757   | 1.000000 |           0.046957 |        1.000000 |
    |                 | monitoring        | promstack-prometheus-node-exporter-z5vfx              | 0.001878   | 1.000000 |           0.033809 |        1.000000 |
    |                 | ocne-system       | ocne-catalog-8c94cc49f-vnhpx                          | 0.000000   | 0.000000 |           0.026296 |        1.000000 |
    |                 | monitoring        | promstack-prometheus-node-exporter-q7hm7              | 0.000000   | 0.000000 |           0.026296 |        1.000000 |
    |                 |                   | promstack-prometheus-node-exporter-dfj4k              | 0.000000   | 0.000000 |           0.022539 |        1.000000 |
    +-----------------+-------------------+-------------------------------------------------------+------------+----------+--------------------+-----------------+
    | SUMMED          |                   |                                                       | 578.906797 |          |        1170.664263 |                 |
    +-----------------+-------------------+-------------------------------------------------------+------------+----------+--------------------+-----------------+
    

Próximas Etapas

Este tutorial apresentou o uso de OpenCost com o Oracle CNE. Ele apenas mostra como ele pode ajudar você a gerenciar os custos de sua infraestrutura e implantação de aplicativos Oracle CNE. Consulte a documentação da Opencost para obter mais detalhes.

Mais Recursos de Aprendizagem

Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal Oracle Learning YouTube. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.

Para obter a documentação do produto, visite o Oracle Help Center.