ノート:

OpenCostを使用したOCI Kubernetes EngineでのマルチテナントSaaSコストの管理

イントロダクション

Oracle Cloud Infrastructure(OCI)にマルチテナントSoftware as a Service(SaaS)ソリューションを提供する独立系ソフトウェア・ベンダー(ISV)は、多くの場合、テナントごとに正確な請求を確保しながら、コストを効率的に管理するという課題に直面します。SaaSプロバイダの一般的なアプローチは、Kubernetesネームスペースを使用してテナントのワークロードをKubernetesで実行し、同じクラスタ内でそれらを論理的に分離することです。Oracle Cloud Infrastructure Kubernetes Engine (OCI Kubernetes EngineまたはOKE)にクラスタをデプロイする場合、OCIはクラスタ全体の詳細なコスト・データを提供します。ただし、ネームスペースなどの個々のKubernetesコンポーネントに詳細なコスト・インサイトを提供することはできません。これは、テナント固有のリソース使用状況の追跡と請求に不可欠です。

このチュートリアルでは、OKEのマルチテナント環境でのコストの追跡および管理に役立つオープンソースのコスト監視ツールであるOpenCostを使用して、簡単にデプロイできるソリューションについて説明します。

ISVは、複数のテナントがOKEクラスタ内のインフラストラクチャを共有するSaaSアプリケーションを実行している可能性があります。課題は、各テナントのリソース消費に関連するコストを可視化することです。経費を正確に配賦し、テナントごとに公平な請求を行うためには、これらのコストを理解することが不可欠です。

テナントごとのリソース使用量を表示できない場合、次のことが困難になります。

OpenCostは、Kubernetes環境専用に設計されたオープンソースのコスト監視および管理ツールです。OKEクラスタのリソース使用量を追跡し、CPU、メモリー、ストレージおよびネットワークのコストを割り当てます。OpenCostを使用すると、Kubernetesネームスペースに基づいてこれらのコストをテナントに簡単にマップできるため、マルチテナントのSaaSアプリケーションを持つISVにとって理想的なソリューションとなります。

OpenCostでは、次のことができます。

目的

前提条件

OKEクラスタへのOpenCostのインストール

  1. インストール用のOpenCostネームスペースを作成します。

    kubectl create namespace opencost
    

    OpenCostは、node.spec.providerIDからノード情報を読み取ることで、OCIをクラウド・サービス・プロバイダ(CSP)として自動的に検出します。OCIがCSPとして検出されると、OpenCostはOCI価格表APIから価格設定データを取得しようとします。公開価格設定データを取得するためにAPIキーは必要ありません。

  2. OpenCostをOpenCostネームスペースにインストールします。

    helm install opencost --repo https://opencost.github.io/opencost-helm-chart opencost --namespace opencost
    
  3. OpenCostを更新します。

    helm upgrade opencost --repo https://opencost.github.io/opencost-helm-chart opencost --namespace opencost
    
  4. 外部IPアドレスがOCIロード・バランサに割り当てられるようにサービスを更新します。

    kubectl patch svc opencost -n opencost -p '{"spec": {"type": "LoadBalancer"}}'
    

    OpenCostにパブリックにアクセスするには、ネットワーク・セキュリティ・グループ(NSG)を作成し、必要なポートを開いてOCIロード・バランサに関連付けるイングレス・ルールを構成する必要があります。

  5. ネットワーク・セキュリティ・グループ(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
    
  6. インターネットからのポート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
    
  7. 新しく作成したネットワーク・セキュリティ・グループ(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]" ]'
    

    NSGをロード・バランサにアタッチ

  8. 外部IPアドレスを取得し、Webブラウザを使用してOpenCostにアクセスします。kubectl get svc -n opencostコマンドを実行します。

    OpenCostがブラウザでオープン

    OpenCost UIをよく理解するには、ビデオ: OpenCostによるKubernetesコストおよびクラウド請求の追跡方法を参照してください。

    完了しました。OKEクラスタにOpenCostが正常にインストールおよび構成されました。

次のステップ

OpenCostをOKEクラスタと統合し、カスタム価格設定を構成することで、マルチテナントのSaaSコストを正確に把握できます。ISVは、各テナントのリソース使用量が最終請求に反映されるように、コストを公正かつ正確に配賦できるようになりました。

OpenCostのカスタム価格設定機能を使用すると、原価見積がOCIの価格と一致していることを確認できます。これは、マルチテナントのSaaS環境で収益性を維持するために重要です。

承認

その他の学習リソース

docs.oracle.com/learnの他のラボを確認するか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。

製品ドキュメントは、Oracle Help Centerを参照してください。