Remarques :

Utiliser OpenCost avec Oracle Cloud Native Environment

Introduction

La mesure des coûts en temps réel liés à l'exécution et au déploiement d'applications sur votre installation Oracle Cloud Native Environment (Oracle CNE) vous aide à les gérer. OpenCost est un projet open source indépendant du fournisseur qui enregistre les coûts des conteneurs et de l'infrastructure cloud afin de faciliter la surveillance des coûts métier en temps réel. Vous pouvez utiliser les coûts en temps réel signalés pour surveiller à la fois les coûts du cluster, tels que l'UC, le GPU et la mémoire, et les coûts basés sur le cloud, tels que le stockage.

Objectifs

Dans ce tutoriel, vous allez apprendre :

Prérequis

Configurer Oracle CNE

Remarque : en cas d'exécution dans votre propre location, lisez le projet linux-virt-labs GitHub README.md et respectez les prérequis avant de déployer l'environnement d'atelier.

  1. Ouvrez un terminal sur le bureau Luna.

  2. Clonez le projet linux-virt-labs GitHub.

    git clone https://github.com/oracle-devrel/linux-virt-labs.git
    
  3. Accédez au répertoire de travail.

    cd linux-virt-labs/ocne2
    
  4. Installez les collections requises.

    ansible-galaxy collection install -r requirements.yml
    
  5. Augmentez la taille du volume d'initialisation.

    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. Déployez l'environnement d'exercice.

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

    L'environnement d'exercice gratuit nécessite la variable supplémentaire local_python_interpreter, qui définit ansible_python_interpreter pour les lectures exécutées sur localhost. Cette variable est nécessaire car l'environnement installe le package RPM pour le kit SDK Oracle Cloud Infrastructure pour Python, situé sous les modules python3.6.

    La forme de déploiement par défaut utilise la CPU AMD et Oracle Linux 8. Pour utiliser une CPU Intel ou Oracle Linux 9, ajoutez -e instance_shape="VM.Standard3.Flex" ou -e os_version="9" à la commande de déploiement.

    Important : attendez que le playbook s'exécute correctement et atteignez la tâche de pause. A ce stade du manuel, l'installation du CNE Oracle est terminée et les instances sont prêtes. Notez la lecture précédente, qui imprime les adresses IP publiques et privées des noeuds qu'elle déploie, ainsi que toute autre information de déploiement nécessaire lors de l'exécution de l'exercice.

Accéder au cluster Kubernetes

  1. Ouvrez un terminal et connectez-vous via SSH à l'instance ocne.

    ssh oracle@<ip_address_of_instance>
    
  2. Obtenez la liste des clusters connus à l'aide de la CLI.

    ocne cluster list
    
  3. Obtenir l'emplacement de la configuration kube.

    ocne cluster show -C mycluster
    

    Nous utilisons -C pour indiquer un cluster spécifique dans la liste des clusters.

  4. Définissez la variable d'environnement KUBECONFIG.

    export KUBECONFIG=$(ocne cluster show -C mycluster)
    
  5. Attendez que le cluster se stabilise et que tous les pods génèrent un rapport en cours d'exécution.

    watch kubectl get pods -A
    

    Une fois que tous les pods ont le statut STATUS Running, saisissez ctrl-c pour quitter la commande watch.

  6. Vérifiez le nombre de noeuds présents.

    kubectl get nodes
    

Installer Helm

Helm offre un moyen facile de gérer les applications installées sur votre cluster Oracle CNE. Dans cet exemple, vous l'utilisez pour installer OpenCost.

  1. Installation de Git.

    sudo dnf install -y git
    
  2. Téléchargez la dernière version de Helm et installez-la localement.

    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
    

    Remarque : il n'est généralement pas recommandé d'exécuter un script sans le vérifier et le comprendre avant de l'exécuter. Cependant, ce script est largement utilisé et bien documenté. Oracle vous recommande de la vérifier avant de l'exécuter sur vos installations.

Installer Prométhée

OpenCost utilise Prometheus pour stocker les mesures mises au rebut pour le cluster Kubernetes.

  1. Ajoutez le référentiel Helm de la communauté Prometheus.

    helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
    
  2. Mettez à jour le référentiel Prometheus Helm.

    helm repo update
    
  3. Installez Prometheus et configurez-le pour OpenCost.

    Vous allez installer Prometheus dans l'espace de noms prometheus-system à l'aide des paramètres OpenCost par défaut.

    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
    

    Remarque : vous pouvez utiliser une instance Prometheus existante. Pour plus de détails, reportez-vous à la documentation OpenCost.

Installer OpenCost

  1. Créez l'espace de noms OpenCost.

    kubectl create namespace opencost
    
  2. Ajoutez le référentiel Helm OpenCost.

    helm repo add opencost https://opencost.github.io/opencost-helm-chart
    
  3. Mettez à jour le référentiel Helm.

    helm repo update
    
  4. Téléchargez un fichier de définition de valeurs OpenCost par défaut.

    Utilisez le fichier values.yaml pour configurer le paramètre de configuration OpenCost et définir les coûts par défaut utilisés dans le tutoriel.

    curl -o local.yaml https://raw.githubusercontent.com/opencost/opencost-helm-chart/refs/heads/main/charts/opencost/values.yaml
    
  5. Installez le graphique Helm OpenCost.

    helm install opencost --repo https://opencost.github.io/opencost-helm-chart opencost --namespace opencost -f local.yaml
    
  6. Transférez l'interface utilisateur OpenCost.

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

    Remarque : si vous recevez une notification d'erreur, cela est dû au fait que Helm n'a pas entièrement déployé OpenCost. Attendez quelques secondes et répétez la commande port-forward.

    Important : l'utilisation d'un transfert de port ne doit être utilisée que pour les tests internes. Les déploiements de production doivent utiliser une règle entrante pour fournir l'accès à OpenCost.

Accéder à l'interface utilisateur OpenCost

  1. Ouvrez une nouvelle fenêtre de terminal et configurez un tunnel SSH.

    ssh -L 9333:localhost:9003 oracle@<ip_address_of_node>
    
  2. Ouvrez un navigateur Web et saisissez l'URL.

    Conseil : vous devrez peut-être actualiser le navigateur plusieurs fois avant que OpenCost n'ait collecté suffisamment de données pour être affiché.

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

    début de l'opération

    Les paramètres disponibles sont les suivants :

    • Plage de dates : utilisez cette option pour choisir une période par défaut à afficher parmi les valeurs par défaut répertoriées. Il est également possible d'utiliser le sélecteur de date pour déterminer une plage de dates personnalisée.
    • Répartition : utilisez cette option pour choisir le type de ressource Kubernetes à utiliser pour afficher le coût associé. Par exemple, cluster, noeud, espace de noms, pod, déploiement, etc.
    • Résolution : détermine la façon dont le graphique affiche les données renvoyées. Le choix est soit par jour, soit cumulativement.
    • Devise : définit le dénominateur de devise affiché.

    Remarque : si nécessaire, approuvez l'avertissement de sécurité en fonction du navigateur utilisé. Pour Chrome, cliquez sur le bouton Avancé, puis sur le lien Passer à localhost (non sécurisé). Notez également que les liens Coûts cloud et Coûts externes de la page Web sont désactivés. Ce comportement est dû au fait que vous n'intègre pas OpenCost à une location OCI dans ce tutoriel. Si vous avez besoin de cette fonctionnalité pour votre déploiement, reportez-vous à la documentation OpenCost pour plus de détails sur la configuration de la location OCI afin qu'elle fonctionne avec OpenCost.

Installer Krew

Krew est un gestionnaire de packages pour les modules d'extension kubectl, ce qui facilite leur détection et leur installation sur votre système.

  1. Ouvrez un nouveau terminal et connectez-vous via SSH à l'instance ocne.

    ssh oracle@<ip_address_of_instance>
    
  2. Définissez la variable d'environnement KUBECONFIG.

    export KUBECONFIG=$(ocne cluster show -C mycluster)
    
  3. Installez le package git.

    sudo dnf install -y git
    
  4. Téléchargez et installez le module d'extension 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. Ajoutez le binaire krew à votre variable d'environnement PATH.

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

    Pour rendre cette modification permanente, mettez à jour votre fichier .bashrc et redémarrez votre shell en vous déconnectant puis en vous reconnectant au système.

  6. Vérifiez l'installation.

    kubectl krew
    

    Exemple de sortie :

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

Installation du module d'extension de la CLI OpenCost

  1. Installez le module d'extension.

    kubectl krew install cost
    

    Exemple de sortie :

    [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. Vérifiez l'installation du module d'extension.

    kubectl cost version
    kubectl cost --help
    

Utilisation du module d'extension CLI OpenCost

La structure de syntaxe de base utilisée par kubectl cost est mise en correspondance avec les concepts Kubernetes standard d'espace de noms, de libellé, de déploiement, de StatefulSet, etc. Il utilise les API Kubecost pour renvoyer des données de coût utiles liées aux charges de travail et aux déploiements sur votre cluster Oracle CNE. L'outil est flexible, alors commençons par quelques exemples.

  1. Affichez la projection du coût mensuel pour tous les espaces de noms du cluster.

    kubectl cost namespace --opencost true
    

    Exemple de sortie :

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

    Où :

    • –opencost true : lorsqu'elle est définie sur true, elle configure OpenCost pour utiliser les paramètres en fonction de la spécification par défaut OpenCost. Equivaut à fournir les options de ligne de commande : --service-port 9003 --service-name opencost --kubecost-namespace opencost --allocation-path /allocation/compute.
  2. Affichez le coût total des cinq derniers jours par tous les déploiements avec le libellé "app".

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

    Exemple de sortie :

    [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. Affichez le coût mensuel prévisionnel par déploiement, y compris les détails de rentabilité de l'UC et de l'UC.

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

    Exemple de sortie :

    [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. Affichez le coût de chaque pod déployé, y compris les coûts propres à l'UC.

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

    Exemple de sortie :

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

Etapes suivantes

Ce tutoriel vous a présenté l'utilisation de OpenCost avec Oracle CNE. Il ne fait que vous expliquer comment il peut vous aider à gérer les coûts de votre infrastructure Oracle CNE et de votre déploiement d'applications. Reportez-vous à la documentation Opencost pour plus de détails.

Ressources de formation supplémentaires

Explorez d'autres ateliers sur docs.oracle.com/learn ou accédez à d'autres contenus de formation gratuits sur le canal Oracle Learning YouTube. De plus, visitez le site education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.

Pour obtenir la documentation produit, consultez le site Oracle Help Center.