注意:
- 本教程需要访问 Oracle Cloud。要注册免费账户,请参阅开始使用 Oracle Cloud Infrastructure 免费套餐。
- 它对 Oracle Cloud Infrastructure 身份证明、租户和区间使用示例值。完成实验室后,请使用特定于云环境的那些值替换这些值。
使用 OpenCost 在 OCI Kubernetes Engine 上管理多租户 SaaS 成本
简介
在 Oracle Cloud Infrastructure (OCI) 上交付多租户软件即服务 (SaaS) 解决方案的独立软件供应商 (ISV) 经常面临在确保每个租户准确计费的同时高效管理成本的挑战。SaaS 提供商中常用的方法是在 Kubernetes 上运行租户的工作负载,利用 Kubernetes 名称空间在同一集群中逻辑地将它们分开。在 Oracle Cloud Infrastructure Kubernetes Engine(OCI Kubernetes Engine 或 OKE)上部署集群时,OCI 会为整个集群提供详细的成本数据。但是,它无法为单个 Kubernetes 组件(例如命名空间)提供细粒度的成本洞察,而命名空间对于跟踪和计费特定于租户的资源使用情况至关重要。
在本教程中,我们将介绍使用 OpenCost(一种开源成本监视工具)轻松部署的解决方案,该工具可以帮助在 OKE 上的多租户环境中跟踪和管理成本。
作为 ISV,您可能运行 SaaS 应用程序,其中多个租户在 OKE 集群中共享基础结构。挑战在于了解与每个租户的资源消耗相关的成本。了解这些成本对于准确分配费用并确保每个租户的公平计费至关重要。
如果您无法查看每个租户的资源使用情况,则很难:
- 为租户准确计费其 Kubernetes 资源使用量。
- 优化资源以避免过度供应。
- 控制成本,确保 SaaS 业务的盈利能力。
OpenCost 是专为 Kubernetes 环境设计的开源成本监视和管理工具。它跟踪 OKE 集群的资源使用情况,并为 CPU、内存、存储和网络分配成本。通过 OpenCost,您可以基于 Kubernetes 名称空间轻松地将这些成本映射到租户,从而成为具有多租户 SaaS 应用的 ISV 的理想解决方案。
使用 OpenCost,可以执行以下操作:
- 按名称空间(或其他 Kubernetes 组件)分配成本,以跟踪单个租户的使用情况。
- 跟踪和分析指定时间段内每个租户的资源使用量。
- 优化租户环境,确保高效使用资源。
目标
- 使用 OpenCost 管理 OKE 上的多租户 SaaS 成本。
先决条件
-
OCI 中的活动 OKE 集群。
-
安装并配置了 kubectl 以访问 OKE 集群。
-
安装 Helm 来管理 Kubernetes 软件包。
-
安装 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
在 OKE 群集上安装 OpenCost
-
为您的安装创建 OpenCost 名称空间。
kubectl create namespace opencost
OpenCost 将通过从
node.spec.providerID
读取节点信息来自动检测 OCI 作为云服务提供商 (Cloud Service Provider,CSP)。当 OCI 被检测为 CSP 时,OpenCost 会尝试从 OCI 价目表 API 检索定价数据。无需 API 密钥即可检索公共定价数据。 -
将 OpenCost 安装到 OpenCost 名称空间中。
helm install opencost --repo https://opencost.github.io/opencost-helm-chart opencost --namespace opencost
-
更新 OpenCost。
helm upgrade opencost --repo https://opencost.github.io/opencost-helm-chart opencost --namespace opencost
-
更新服务,以便将外部 IP 地址分配给 OCI 负载平衡器。
kubectl patch svc opencost -n opencost -p '{"spec": {"type": "LoadBalancer"}}'
要公开访问 OpenCost,我们需要创建网络安全组 (Network Security Group,NSG),配置入站规则以打开所需的端口,并将其与 OCI 负载平衡器关联。
-
创建网络安全组 (NSG)。请务必将
YOUR_COMPARTMENT_ID
替换为实际的区间 ID,将YOUR_VCN_ID
替换为 VCN ID。您可以从 OCI 控制台检索这些信息。oci network nsg create --compartment-id [YOUR_COMPARTMENT_ID] --vcn-id [YOUR_VCN_ID] --display-name opencost_nsg
-
创建一个入站规则,以允许来自 Internet 的端口
9090
上的 TCP 流量。您可以从以下位置下载opencost-nsg-rule.json
文件: opencost-nsg-rule.json 。oci network nsg rules add --nsg-id [YOUR_NSG_ID] --from-json file://opencost-nsg-rule.json
-
将新创建的网络安全组 (NSG) 附加到 OCI 负载平衡器。将
YOUR_LB_ID
替换为负载平衡器 ID,将YOUR_NSG_ID
替换为网络安全组 ID。oci lb nsg update --load-balancer-id [YOUR_LB_ID] --nsg-ids '[ "[YOUR_NSG_ID]" ]'
-
检索外部 IP 地址并使用 Web 浏览器访问 OpenCost。运行
kubectl get svc -n opencost
命令。要熟悉 OpenCost UI,请参阅视频:了解 OpenCost 如何跟踪您的 Kubernetes 成本和云计费。
祝贺您!已成功在 OKE 群集上安装并配置 OpenCost!
后续步骤
通过将 OpenCost 与 OKE 集群集成并配置自定义定价,您可以准确了解多租户 SaaS 成本。ISV 现在可以公平准确地分配成本,确保每个租户的资源使用情况都反映在最终账单中。
借助 OpenCost 的自定义定价功能,您可以确保成本估计与 OCI 的定价保持一致,这对于在多租户 SaaS 环境中保持盈利能力至关重要。
相关链接
确认
- 作者 —主云架构师 JP Santana
更多学习资源
浏览 docs.oracle.com/learn 上的其他实验室,或者访问 Oracle Learning YouTube 渠道上的更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。
Manage Multi-Tenant SaaS Costs on OCI Kubernetes Engine with OpenCost
G17279-01
October 2024