Remarques :
- Ce tutoriel est disponible dans un environnement d'atelier gratuit fourni par Oracle.
- Il utilise des exemples de valeurs pour les informations d'identification, la location et les compartiments Oracle Cloud Infrastructure. Lorsque vous terminez votre atelier, remplacez ces valeurs par celles propres à votre environnement cloud.
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 :
- Installation de OpenCost
- Installation du module d'extension OpenCost à l'aide de Krew
- Comment utiliser OpenCost pour surveiller les coûts d'infrastructure de conteneur et cloud
Prérequis
-
Minimum d'une instance Oracle Linux
-
Oracle Linux doit être installé et configuré sur chaque système avec :
- Compte utilisateur Oracle (utilisé pendant l'installation) avec accès sudo
- SSH basé sur une clé, également appelé SSH sans mot de passe, entre les hôtes
-
La création de cluster OCI nécessite l'accès aux ressources suivantes dans une location Oracle Cloud Infrastructure :
- Réseau cloud virtuel avec quatre sous-réseaux
- Equilibreur de charge réseau
- Bucket Object Storage avec 5 GiB minimum disponible
- Calculer l'image personnalisée
- Forme de bras de calcul pour le noeud de plan de contrôle
- VM.Standard.A1. Flexibilité avec deux OCPU et 12 mémoires
- Calcul pour chaque plan de contrôle et noeud de processus actif supplémentaires
- VM.Standard.E4. Flexibilité avec quatre OCPU et 64 mémoires
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.
-
Ouvrez un terminal sur le bureau Luna.
-
Clonez le projet
linux-virt-labs
GitHub.git clone https://github.com/oracle-devrel/linux-virt-labs.git
-
Accédez au répertoire de travail.
cd linux-virt-labs/ocne2
-
Installez les collections requises.
ansible-galaxy collection install -r requirements.yml
-
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
-
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éfinitansible_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
-
Ouvrez un terminal et connectez-vous via SSH à l'instance
ocne
.ssh oracle@<ip_address_of_instance>
-
Obtenez la liste des clusters connus à l'aide de la CLI.
ocne cluster list
-
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. -
Définissez la variable d'environnement KUBECONFIG.
export KUBECONFIG=$(ocne cluster show -C mycluster)
-
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 commandewatch
. -
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.
-
Installation de Git.
sudo dnf install -y git
-
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.
-
Ajoutez le référentiel Helm de la communauté Prometheus.
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
-
Mettez à jour le référentiel Prometheus Helm.
helm repo update
-
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
-
Créez l'espace de noms OpenCost.
kubectl create namespace opencost
-
Ajoutez le référentiel Helm OpenCost.
helm repo add opencost https://opencost.github.io/opencost-helm-chart
-
Mettez à jour le référentiel Helm.
helm repo update
-
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
-
Installez le graphique Helm OpenCost.
helm install opencost --repo https://opencost.github.io/opencost-helm-chart opencost --namespace opencost -f local.yaml
-
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
-
Ouvrez une nouvelle fenêtre de terminal et configurez un tunnel SSH.
ssh -L 9333:localhost:9003 oracle@<ip_address_of_node>
-
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
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.
-
Ouvrez un nouveau terminal et connectez-vous via SSH à l'instance
ocne
.ssh oracle@<ip_address_of_instance>
-
Définissez la variable d'environnement KUBECONFIG.
export KUBECONFIG=$(ocne cluster show -C mycluster)
-
Installez le package git.
sudo dnf install -y git
-
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 )
-
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.
-
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
-
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.
-
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.
-
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
.
- –opencost true : lorsqu'elle est définie sur
-
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 | | +-----------------+--------------------------------+--------------------+-----------------+
-
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 | | +-----------------+-------------------+------------------------------------+------------+----------+--------------------+-----------------+
-
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.
Liens connexes
- Documentation Oracle Cloud Native Environment
- OpenCost Documentation
- Parcours Oracle Cloud Native Environment
- Centre de formation Oracle Linux
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.
Use OpenCost with Oracle Cloud Native Environment
G33055-01
Copyright ©2025, Oracle and/or its affiliates.