Note :

Utiliser OpenCost avec Oracle Cloud Native Environment

Présentation

La mesure des coûts en temps réel d'exécution et de déploiement d'applications sur votre installation Oracle Cloud Native Environment (Oracle CNE) vous aide à les gérer. OpenCost est un projet à code source libre, indépendant de tout fournisseur, qui enregistre les coûts des infrastructures en nuage et en conteneurs pour faciliter la surveillance des coûts d'affaires en temps réel. Vous pouvez utiliser les coûts en temps réel qu'il rapporte pour surveiller les coûts en grappe, tels que les coûts de CPU, de GPU et de mémoire, et les coûts basés sur les fournisseurs de services infonuagiques, tels que le stockage.

Objectifs

Ce tutoriel décrit comment :

Préalables

Configurer Oracle CNE

Note : Si vous exécutez votre propre location, lisez les préalables du projet linux-virt-labs GitHub README.md et remplissez les conditions requises avant de déployer l'environnement de laboratoire.

  1. Ouvrez un terminal sur le Luna Desktop.

  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 de démarrage.

    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 de l'exercice.

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

    L'environnement de laboratoire 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 l'ensemble RPM pour la trousse SDK Oracle Cloud Infrastructure pour Python, située sous les modules python3.6.

    La forme de déploiement par défaut utilise le processeur AMD et Oracle Linux 8. Pour utiliser une unité centrale 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 livre de jeu s'exécute avec succès et atteignez la tâche Mettre en pause. À ce stade du livre de jeux, l'installation du CNE Oracle est terminée et les instances sont prêtes. Prenez note de la lecture précédente, qui imprime les adresses IP publiques et privées des noeuds qu'il déploie et toutes les autres informations de déploiement nécessaires lors de l'exécution de l'exercice.

Accéder à la grappe Kubernetes

  1. Ouvrez un terminal et connectez-vous au moyen de SSH à l'instance ocne.

    ssh oracle@<ip_address_of_instance>
    
  2. Obtenez une liste des grappes connues à l'aide de l'interface de ligne de commande.

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

    ocne cluster show -C mycluster
    

    Nous utilisons -C pour spécifier une grappe spécifique dans la liste des grappes.

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

    export KUBECONFIG=$(ocne cluster show -C mycluster)
    
  5. Attendez que la grappe se stabilise et que tous les pods soient en cours d'exécution.

    watch kubectl get pods -A
    

    Une fois que tous les pods affichent le statut STATUS En cours d'exécution, entrez 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 grappe CNE Oracle - dans cet exemple, vous l'utilisez pour installer OpenCost.

  1. Installer 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
    

    Note : 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 le vérifier avant de l'exécuter sur vos installations.

Installer Prometheus

OpenCost utilise Prometheus pour stocker les mesures grattées de la grappe Kubernetes.

  1. Ajoutez le référentiel Prometheus Community Helm.

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

    Note : 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.

    Vous 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 le port vers l'interface utilisateur OpenCost.

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

    Note : Si vous recevez un avis d'erreur, c'est parce 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 de trafic entrant 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 entrez 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ées.

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

    Opencost-start

    Les paramètres disponibles sont les suivants :

    • Intervalle 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 un intervalle de dates personnalisé.
    • Répartition - Utilisez cette option pour choisir le type de ressource Kubernetes à utiliser pour afficher le coût associé. Par exemple, Grappe, Noeud, Espace de noms, Pod, Déploiement, etc.
    • Résolution - Détermine la façon dont le graphique affiche les données retournées. Le choix est soit par jour, soit cumulatif.
    • Devise - Définit le dénominateur de devise affiché.

    Note : Sur demande, approuvez l'avertissement de sécurité en fonction du navigateur utilisé. Pour Chrome, cliquez sur le bouton Advanced, puis sur le lien Proceed to localhost (insafe). Notez également que les liens Coûts du nuage et Coûts externes de la page Web sont désactivés. Ce comportement se produit parce que vous n'intégrez pas OpenCost à une location OCI dans ce tutoriel. Si vous avez besoin de cette fonctionnalité pour votre déploiement, reportez-vous à la documentation sur OpenCost pour plus de détails sur la configuration de votre location OCI pour qu'elle fonctionne avec OpenCost.

Installer Krew

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

  1. Ouvrez un nouveau terminal et connectez-vous au moyen de 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 l'ensemble git.

    sudo dnf install -y git
    
  4. Téléchargez et installez le plugiciel 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 interpréteur de commandes en vous déconnectant et en retournant dans le 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.
    

Installer le plugiciel d'interface de ligne de commande OpenCost

  1. Installez le plugin.

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

    kubectl cost version
    kubectl cost --help
    

Utilisation du plugiciel d'interface de ligne de commande OpenCost

La structure de syntaxe de base utilisée par kubectl cost est mappée aux concepts standard de Kubernetes tels que l'espace de noms, l'étiquette, le déploiement, StatefulSet, etc. Il utilise les API Kubecost pour retourner des données de coûts utiles relatives aux charges de travail et aux déploiements sur votre grappe CNE Oracle. L'outil est flexible, alors commençons par quelques exemples.

  1. Afficher la projection mensuelle des coûts pour tous les espaces de noms de la grappe.

    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'il est défini comme true, il configure OpenCost pour utiliser les paramètres conformément à la spécification par défaut OpenCost. Ce qui équivaut à fournir les options de ligne de commande : --service-port 9003 --service-name opencost --kubecost-namespace opencost --allocation-path /allocation/compute.
  2. Afficher le coût total des cinq derniers jours pour tous les déploiements avec l'étiquette "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. Afficher le coût mensuel projeté par déploiement, y compris les détails de rentabilité d'UC et d'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. Afficher le coût de chaque module de réseautage 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 |                 |
    +-----------------+-------------------+-------------------------------------------------------+------------+----------+--------------------+-----------------+
    

Étapes suivantes

Ce tutoriel explique l'utilisation de OpenCost avec Oracle CNE. Il explique seulement comment il peut vous aider à gérer les coûts de votre infrastructure Oracle CNE et du déploiement d'applications. Reportez-vous à la documentation Opencost pour plus de détails.

Autres ressources d'apprentissage

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

Pour obtenir la documentation sur le produit, visitez Oracle Help Center.