Nota

Usa OpenCost con Oracle Cloud Native Environment

Introduzione

Misurare i costi in tempo reale di esecuzione e distribuzione delle applicazioni nell'installazione di Oracle Cloud Native Environment (Oracle CNE) ti aiuta a gestirle. OpenCost è un progetto open source indipendente dal fornitore che registra i costi dell'infrastruttura cloud e dei container per facilitare il monitoraggio dei costi aziendali in tempo reale. Puoi utilizzare i costi in tempo reale segnalati per monitorare sia i costi in cluster, come CPU, GPU e memoria, sia i costi basati su provider cloud, come lo storage.

Obiettivi

In questo tutorial imparerai:

Prerequisiti

Configura Oracle CNE

Nota: se è in esecuzione nella propria tenancy, leggere il progetto linux-virt-labs GitHub README.md e completare i prerequisiti prima di distribuire l'ambiente di esercitazione pratica.

  1. Aprire un terminale sul Luna Desktop.

  2. Duplica il progetto linux-virt-labs GitHub.

    git clone https://github.com/oracle-devrel/linux-virt-labs.git
    
  3. Passare alla directory di lavoro.

    cd linux-virt-labs/ocne2
    
  4. Installare le raccolte richieste.

    ansible-galaxy collection install -r requirements.yml
    
  5. Aumentare la dimensione del volume di avvio.

    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. Implementa l'ambiente di laboratorio.

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

    L'ambiente di laboratorio gratuito richiede la variabile aggiuntiva local_python_interpreter, che imposta ansible_python_interpreter per le riproduzioni in esecuzione su localhost. Questa variabile è necessaria perché l'ambiente installa il pacchetto RPM per l'SDK Oracle Cloud Infrastructure per Python, situato sotto i moduli python3.6.

    La forma di distribuzione predefinita utilizza la CPU AMD e Oracle Linux 8. Per utilizzare una CPU Intel o Oracle Linux 9, aggiungere -e instance_shape="VM.Standard3.Flex" o -e os_version="9" al comando di distribuzione.

    Importante: attendere la corretta esecuzione della guida e raggiungere il task di sospensione. In questa fase della guida, l'installazione di Oracle CNE è stata completata e le istanze sono pronte. Prendi nota della riproduzione precedente, che stampa gli indirizzi IP pubblici e privati dei nodi che distribuisce e qualsiasi altra informazione di distribuzione necessaria durante l'esecuzione del laboratorio.

Accedi al cluster Kubernetes

  1. Aprire un terminale e connettersi tramite SSH all'istanza ocne.

    ssh oracle@<ip_address_of_instance>
    
  2. Ottenere una lista di cluster noti utilizzando l'interfaccia CLI.

    ocne cluster list
    
  3. Ottenere la posizione della configurazione kube.

    ocne cluster show -C mycluster
    

    Il comando -C consente di specificare un cluster specifico dalla lista dei cluster.

  4. Impostare la variabile di ambiente KUBECONFIG.

    export KUBECONFIG=$(ocne cluster show -C mycluster)
    
  5. Attendere la stabilizzazione del cluster e la segnalazione di tutti i pod in esecuzione.

    watch kubectl get pods -A
    

    Dopo che tutti i pod hanno mostrato uno STATUS di In esecuzione, digitare ctrl-c per uscire dal comando watch.

  6. Confermare il numero di nodi presenti.

    kubectl get nodes
    

Installa Helm

Helm offre un modo semplice per gestire le applicazioni installate sul cluster Oracle CNE. In questo esempio, viene utilizzato per installare OpenCost.

  1. Installare Git.

    sudo dnf install -y git
    
  2. Scaricare l'ultima versione di Helm e installarla 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
    

    Nota: in genere non è consigliabile eseguire uno script senza esaminarlo e comprenderlo prima di eseguirlo. Tuttavia, questo script è ampiamente usato e ben documentato. Oracle consiglia di esaminarla prima di eseguirla nelle installazioni.

Installa Prometheus

OpenCost utilizza Prometheus per memorizzare le metriche scaricate per il cluster Kubernetes.

  1. Aggiungi il repo Prometheus Community Helm.

    helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
    
  2. Aggiorna il repository Prometheus Helm.

    helm repo update
    
  3. Installare Prometheus e configurarlo per OpenCost.

    Prometheus verrà installato nello spazio di nomi prometheus-system utilizzando le impostazioni predefinite di 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
    

    Nota: è possibile utilizzare un'istanza Prometheus esistente. Per ulteriori informazioni, fare riferimento alla documentazione OpenCost.

Installa OpenCost

  1. Creare lo spazio di nomi OpenCost.

    kubectl create namespace opencost
    
  2. Aggiungere il repository OpenCost Helm.

    helm repo add opencost https://opencost.github.io/opencost-helm-chart
    
  3. Aggiorna il repository Helm.

    helm repo update
    
  4. Scaricare un file di definizione OpenCost values predefinito.

    Il file values.yaml viene utilizzato per configurare l'impostazione di configurazione OpenCost e per impostare i costi predefiniti utilizzati nell'esercitazione.

    curl -o local.yaml https://raw.githubusercontent.com/opencost/opencost-helm-chart/refs/heads/main/charts/opencost/values.yaml
    
  5. Installare il grafico OpenCost Helm.

    helm install opencost --repo https://opencost.github.io/opencost-helm-chart opencost --namespace opencost -f local.yaml
    
  6. Inoltra l'interfaccia utente OpenCost.

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

    Nota: se si riceve una notifica di errore, il motivo è che Helm non ha distribuito completamente OpenCost. Attendere alcuni secondi e ripetere il comando port-forward.

    Importante: l'utilizzo di una porta di inoltro deve essere utilizzato solo per i test interni. Le distribuzioni di produzione devono utilizzare una regola di entrata per fornire l'accesso a OpenCost.

Accedi all'interfaccia utente OpenCost

  1. Aprire una nuova finestra del terminale e configurare un tunnel SSH.

    ssh -L 9333:localhost:9003 oracle@<ip_address_of_node>
    
  2. Aprire un browser Web e immettere l'URL.

    Suggerimento: potrebbe essere necessario aggiornare il browser alcune volte prima che OpenCost abbia raccolto dati sufficienti da visualizzare.

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

    avvio opencost

    Se i parametri disponibili sono:

    • Intervallo date: utilizzare questa opzione per scegliere un periodo predefinito da visualizzare tra i valori predefiniti elencati. È inoltre possibile utilizzare il "Selettore data" per determinare un intervallo di date personalizzato.
    • Riduzione: utilizzare questa opzione per scegliere il tipo di risorsa Kubernetes da visualizzare per il costo associato. Ad esempio, Cluster, Node, Namespace, Pod, Deployment e così via.
    • Risoluzione: determina la modalità di visualizzazione dei dati restituiti nel grafico. La scelta è giornaliera o cumulativa.
    • Valuta: imposta il denominatore valuta visualizzato.

    Nota: se richiesto, approvare l'avvertenza di sicurezza in base al browser utilizzato. Per Chrome, fare clic sul pulsante Avanzate e quindi sul collegamento Procedi a localhost (non sicuro). Si noti inoltre che i collegamenti Costi cloud e Costi esterni nella pagina Web sono disabilitati. Questo comportamento si verifica perché in questa esercitazione non si integra OpenCost con una tenancy OCI. Se hai bisogno di questa funzionalità per la tua distribuzione, fai riferimento alla documentazione OpenCost per i dettagli sulla configurazione della tua tenancy OCI in modo che funzioni con OpenCost.

Installa Krew

Krew è un gestore di pacchetti per i plugin kubectl, per facilitare la ricerca e l'installazione nel sistema.

  1. Aprire un nuovo terminale e connettersi tramite SSH all'istanza ocne.

    ssh oracle@<ip_address_of_instance>
    
  2. Impostare la variabile di ambiente KUBECONFIG.

    export KUBECONFIG=$(ocne cluster show -C mycluster)
    
  3. Installare il pacchetto git.

    sudo dnf install -y git
    
  4. Scaricare e installare il plugin krew.

    (
    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. Aggiungere il file binario krew alla variabile di ambiente PATH.

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

    Per rendere permanente questa modifica, aggiornare il file .bashrc e riavviare la shell eseguendo la disconnessione e di nuovo il sistema.

  6. Verificare l'installazione.

    kubectl krew
    

    Output di esempio:

    [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.
    

Installare il plugin CLI OpenCost

  1. Installare il plugin.

    kubectl krew install cost
    

    Output di esempio:

    [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. Verificare l'installazione del plugin.

    kubectl cost version
    kubectl cost --help
    

Uso del plugin CLI OpenCost

La struttura di sintassi di base utilizzata da kubectl cost è mappata ai concetti standard di Kubernetes di spazio di nomi, etichetta, distribuzione, StatefulSet e così via. Utilizza le API Kubecost per restituire dati utili sui costi relativi ai carichi di lavoro e alle distribuzioni nel cluster Oracle CNE. Lo strumento è flessibile, quindi iniziamo con alcuni esempi.

  1. Mostra la proiezione dei costi mensili per tutti gli spazi dei nomi nel cluster.

    kubectl cost namespace --opencost true
    

    Output di esempio:

    [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 |                 |
    +-----------------+-------------------+--------------------+-----------------+
    

    dove:

    • -opencost true = Se definito come true, configura OpenCost per utilizzare i parametri in base alla specifica predefinita OpenCost. Equivale a fornire le opzioni della riga di comando: --service-port 9003 --service-name opencost --kubecost-namespace opencost --allocation-path /allocation/compute.
  2. Mostra il costo totale degli ultimi cinque giorni per tutte le distribuzioni con l'etichetta "app".

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

    Output di esempio:

    [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. Mostra il costo mensile previsto per distribuzione, inclusi i dettagli sull'efficienza dei costi della CPU e della CPU.

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

    Output di esempio:

    [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. Mostra il costo di ogni pod distribuito, inclusi i costi specifici della CPU.

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

    Output di esempio:

    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 |                 |
    +-----------------+-------------------+-------------------------------------------------------+------------+----------+--------------------+-----------------+
    

Passi successivi

In questa esercitazione viene descritto come utilizzare OpenCost con Oracle CNE. Si limita a illustrare come può aiutarti a gestire i costi dell'infrastruttura e della distribuzione delle applicazioni Oracle CNE. Per ulteriori dettagli, fare riferimento alla documentazione Opencost.

Altre risorse di apprendimento

Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti gratuiti sulla formazione su Oracle Learning YouTube channel. Inoltre, visita education.oracle.com/learning-explorer per diventare un Oracle Learning Explorer.

Per la documentazione del prodotto, visita l'Oracle Help Center.