附註:
- 此教學課程可在 Oracle 提供的免費實驗室環境中取得。
- 它使用 Oracle Cloud Infrastructure 證明資料、租用戶及區間的範例值。完成實驗室時,請將這些值取代為您雲端環境特定的值。
將 OpenCost 與 Oracle Cloud Native Environment 搭配使用
簡介
衡量在 Oracle Cloud Native Environment (Oracle CNE) 安裝上執行和部署應用程式的即時成本有助於您進行管理。OpenCost 是供應商中立的開源專案,可記錄容器和雲端基礎架構成本,以促進即時業務成本監控。您可以使用報告的即時成本來監控叢集內成本,例如 CPU、GPU 和記憶體,以及雲端提供者型成本 (例如儲存體)。
目標
在本教學課程中,您將學習:
- 如何安裝 OpenCost
- 如何使用 Krew 安裝 OpenCost 外掛程式
- 如何使用 OpenCost 監控容器和雲端基礎架構成本
必要條件
-
最少一個 Oracle Linux 執行處理
-
每個系統都應該安裝並設定 Oracle Linux:
- 具備 sudo 存取權的 Oracle 使用者帳戶 (在安裝期間使用)
- 主機之間的以金鑰為基礎的 SSH (亦稱為無密碼 SSH)
-
建立 OCI 叢集需要存取 Oracle Cloud Infrastructure 租用戶中的下列資源:
- 具有四個子網路的虛擬雲端網路
- 網路負載平衡器
- 提供至少 5 個 GiB 的物件儲存的儲存桶
- 運算自訂映像檔
- 控制平面節點的運算 Arm 資源配置
- VM.Standard.A1。彈性搭配兩個 OCPU 和 12 記憶體
- 每個額外控制層和工作節點的運算
- VM.Standard.E4。具備 4 個 OCPU 和 64 個記憶體的彈性
設定 Oracle CNE
注意:如果在您自己的租用戶中執行,請先閱讀 linux-virt-labs
GitHub 專案 README.md 並完成先決條件,再部署實驗室環境。
-
在 Luna 桌面上開啟終端機。
-
複製
linux-virt-labs
GitHub 專案。git clone https://github.com/oracle-devrel/linux-virt-labs.git
-
變更至工作目錄。
cd linux-virt-labs/ocne2
-
安裝所需的集合。
ansible-galaxy collection install -r requirements.yml
-
增加開機磁碟區大小。
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
-
部署實驗室環境。
ansible-playbook create_instance.yml -e localhost_python_interpreter="/usr/bin/python3.6" -e "@instances.yml"
自由實驗室環境需要額外的變數
local_python_interpreter
,此變數會設定ansible_python_interpreter
代表在 localhost 上執行的播放。環境會安裝 Oracle Cloud Infrastructure SDK for Python 的 RPM 套裝程式 (位於 python3.6 模組底下),因此需要此變數。預設部署資源配置使用 AMD CPU 和 Oracle Linux 8。若要使用 Intel CPU 或 Oracle Linux 9,請在部署命令中新增
-e instance_shape="VM.Standard3.Flex"
或-e os_version="9"
。重要事項:等待手冊順利執行並到達暫停工作。在手冊的這個階段,Oracle CNE 的安裝已完成,且執行處理已就緒。請注意先前的播放,其會列印部署節點的公用和專用 IP 位址,以及執行實驗室時所需的任何其他部署資訊。
存取 Kubernetes 叢集
-
開啟終端機並透過 SSH 連線至
ocne
執行處理。ssh oracle@<ip_address_of_instance>
-
取得使用 CLI 的已知叢集清單。
ocne cluster list
-
取得 Kube 組態的位置。
ocne cluster show -C mycluster
我們使用
-C
來指定叢集清單中的特定叢集。 -
設定 KUBECONFIG 環境變數。
export KUBECONFIG=$(ocne cluster show -C mycluster)
-
等待叢集穩定,而且所有 Pod 都處於執行中狀態。
watch kubectl get pods -A
當所有 Pod 顯示執行中的 STATUS 之後,請輸入
ctrl-c
以結束watch
命令。 -
確認有多少個節點存在。
kubectl get nodes
安裝 Helm
Helm 可讓您輕鬆管理 Oracle CNE 叢集上安裝的應用程式 - 在此範例中,您可以使用它來安裝 OpenCost。
-
安裝 Git。
sudo dnf install -y git
-
下載最新版本的 Helm 並於本機安裝。
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
注意:在執行命令檔之前,通常不建議執行命令檔,而不需要複查和瞭解命令檔。不過,此程序檔已廣泛使用並記載良好。Oracle 建議您在安裝前先複查它。
安裝 Prometheus
OpenCost 使用 Prometheus 儲存 Kubernetes 叢集的廢品度量。
-
新增 Prometheus Community Helm 儲存庫。
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
-
更新 Prometheus Helm 儲存區域。
helm repo update
-
安裝 Prometheus 並設定 OpenCost。
您將使用預設的 OpenCost 設定值,在
prometheus-system
命名空間中安裝 Prometheus。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
注意:您可以使用現有的 Prometheus 執行處理,請參閱 OpenCost 文件瞭解詳細資訊。
安裝 OpenCost
-
建立 OpenCost 命名空間。
kubectl create namespace opencost
-
新增 Helm OpenCost 儲存區域。
helm repo add opencost https://opencost.github.io/opencost-helm-chart
-
更新 Helm 儲存區域。
helm repo update
-
下載預設的 OpenCost 值定義檔。
您可以使用
values.yaml
檔案來設定 OpenCost 組態設定,以及設定教學課程中使用的預設成本計算。curl -o local.yaml https://raw.githubusercontent.com/opencost/opencost-helm-chart/refs/heads/main/charts/opencost/values.yaml
-
安裝 OpenCost Helm Chart。
helm install opencost --repo https://opencost.github.io/opencost-helm-chart opencost --namespace opencost -f local.yaml
-
連接埠轉送 OpenCost UI。
kubectl port-forward --namespace opencost service/opencost 9003:9090
注意:如果您收到錯誤通知,這是因為 Helm 尚未完全部署 OpenCost。等待幾秒鐘,然後重複執行
port-forward
指令。重要事項:使用連接埠轉送應該只用於內部測試。生產部署應使用傳入規則來提供 OpenCost 的存取權。
存取 OpenCost UI
-
開啟新的終端機視窗並設定 SSH 通道。
ssh -L 9333:localhost:9003 oracle@<ip_address_of_node>
-
開啟 Web 瀏覽器並輸入 URL。
提示:在 OpenCost 收集到足夠的資料以供顯示之前,您可能需要幾次重新整理瀏覽器。
http://localhost:9333/allocation?window=48h
可用的參數為:
- 日期範圍 - 可選擇要從列出的預設值顯示的預設期間。您也可以使用「日期選擇器」來決定自訂日期範圍。
- 明細 - 可用來選擇要顯示相關成本的 Kubernetes 資源類型。例如叢集、節點、命名空間、Pod、部署等。
- 解析 - 決定圖表顯示任何傳回資料的方式。選項為每日或累計。
- 幣別 - 設定顯示的幣別分母。
注意:如果要求,請根據使用的瀏覽器來核准安全警告。若為 Chrome,請按一下「進階」按鈕,然後繼續前往 localhost (不安全) 連結。此外,請注意網頁上的雲端成本和外部成本連結已停用。此行為的原因是因為您未在此教學課程中整合 OpenCost 與 OCI 租用戶。如果您需要此功能來進行部署,請參閱 OpenCost 文件,瞭解有關設定 OCI 租用戶以使用 OpenCost 的詳細資訊。
安裝 Krew
Krew 是 kubectl 外掛程式的套裝軟體管理員,可以讓您輕鬆在系統上尋找與安裝。
-
開啟新的終端機,然後透過 SSH 連線至
ocne
執行處理。ssh oracle@<ip_address_of_instance>
-
設定 KUBECONFIG 環境變數。
export KUBECONFIG=$(ocne cluster show -C mycluster)
-
安裝 git 套裝軟體。
sudo dnf install -y git
-
下載並安裝 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 )
-
將 krew 二進位檔新增至您的 PATH 環境變數。
export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
若要永久進行此變更,請更新您的 .bashrc 檔案,然後登出並重新登入系統以重新啟動 Shell。
-
確認安裝。
kubectl krew
範例輸出:
[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.
安裝 OpenCost CLI 外掛程式
-
安裝 Plugin.
kubectl krew install cost
範例輸出:
[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.
-
驗證外掛程式安裝。
kubectl cost version kubectl cost --help
使用 OpenCost CLI Plugin
kubectl cost
使用的基本語法結構主要對應至命名空間、標籤、部署、StatefulSet 等的標準 Kubernetes 概念。它使用 Kubecost API 傳回與 Oracle CNE 叢集上工作負載和部署有關的有用成本資料。此工具具有彈性,所以讓我們從幾個範例開始。
-
顯示叢集中所有命名空間的每月成本預估。
kubectl cost namespace --opencost true
範例輸出:
[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 | | +-----------------+-------------------+--------------------+-----------------+
其中:
- – opencost true = 定義為
true
時,它會根據 OpenCost 預設規格設定 OpenCost 以使用參數。這等同於提供指令行選項:--service-port 9003 --service-name opencost --kubecost-namespace opencost --allocation-path /allocation/compute
。
- – opencost true = 定義為
-
以 "app" 標籤顯示所有部署過去五天的總成本。
kubectl cost label --historical -l app --opencost true
範例輸出:
[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 | | +-----------------+--------------------------------+--------------------+-----------------+
-
依部署顯示預估的每月成本,包括 CPU 和 CPU 成本效率詳細資訊。
kubectl cost deployment --show-cpu --opencost true
範例輸出:
[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 | | +-----------------+-------------------+------------------------------------+------------+----------+--------------------+-----------------+
-
顯示每個已部署 Pod 的成本,包括 CPU 特定費用。
kubectl cost pod --show-cpu --opencost true
範例輸出:
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 | | +-----------------+-------------------+-------------------------------------------------------+------------+----------+--------------------+-----------------+
接下來的步驟
本教學課程介紹如何使用 OpenCost 搭配 Oracle CNE。它只會簡要說明如何協助您管理 Oracle CNE 基礎架構與應用程式部署的成本。如需詳細資訊,請參閱 Opencost 文件。
相關連結
其他學習資源
探索 docs.oracle.com/learn 上的其他實驗室,或存取 Oracle Learning YouTube 頻道上的更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。
如需產品文件,請造訪 Oracle Help Center 。
Use OpenCost with Oracle Cloud Native Environment
G33061-01
Copyright ©2025, Oracle and/or its affiliates.