注意:
- 此教程位于 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 个内存的弹性
- 针对每个附加控制层和 Worker 节点进行计算
- VM.Standard.E4。具有四个 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
,该变量为在 localhost 上运行的播放设置ansible_python_interpreter
。此变量是必需的,因为环境为 Python 的 Oracle Cloud Infrastructure SDK 安装 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)
-
等待集群稳定,所有云池报告都处于正在运行状态。
watch kubectl get pods -A
所有 pod 显示 STATUS Running 后,键入
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 定义文件。
可以使用
values.yaml
文件配置 OpenCost 配置设置,并设置教程中使用的默认成本计算。curl -o local.yaml https://raw.githubusercontent.com/opencost/opencost-helm-chart/refs/heads/main/charts/opencost/values.yaml
-
安装 OpenCost Helm 图表。
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 资源类型。例如,集群、节点、名称空间、云池、部署等。
- 解决方法 - 确定图形如何显示返回的任何数据。选择要么是每天,要么是累积。
- 货币 - 设置显示的货币分母。
注:如果请求,请根据使用的浏览器批准安全警告。对于 Chrome,单击 "Advanced"(高级)按钮,然后单击 "Proceed to localhost (unsafe) 链接。另请注意,网页上的云成本和外部成本链接已禁用。发生此行为是因为在本教程中未将 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 插件
-
安装该插件。
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 插件
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 = 定义为
-
使用“应用程序”标签显示所有部署在过去五天的总成本。
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 | | +-----------------+-------------------+------------------------------------+------------+----------+--------------------+-----------------+
-
显示部署的每个云池的成本,包括特定于 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 帮助中心。
Use OpenCost with Oracle Cloud Native Environment
G33060-01
Copyright ©2025, Oracle and/or its affiliates.