ノート:

Oracle Cloud Native EnvironmentでのOpenCostの使用

イントロダクション

Oracle Cloud Native Environment (Oracle CNE)インストールでアプリケーションを実行およびデプロイする際のリアルタイム・コストを測定すると、アプリケーションの管理に役立ちます。OpenCostは、リアルタイムのビジネス・コスト監視を促進するためにコンテナおよびクラウド・インフラストラクチャのコストを記録する、ベンダー・ニュートラルなオープンソース・プロジェクトです。報告するリアルタイムのコストを使用して、CPU、GPU、メモリーなどのクラスタ内コストと、ストレージなどのクラウド・プロバイダベースのコストの両方を監視できます。

目的

このチュートリアルの内容:

前提条件

Oracle CNEの構成

ノート:独自のテナンシで実行している場合は、linux-virt-labs GitHubプロジェクトREADME.mdを読み、演習環境をデプロイする前に前提条件を完了してください。

  1. Lunaデスクトップでターミナルを開きます。

  2. linux-virt-labs GitHubプロジェクトをクローニングします。

    git clone https://github.com/oracle-devrel/linux-virt-labs.git
    
  3. 作業ディレクトリに移動します。

    cd linux-virt-labs/ocne2
    
  4. 必要なコレクションをインストールします。

    ansible-galaxy collection install -r requirements.yml
    
  5. ブート・ボリューム・サイズを大きくします。

    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
    
  6. 演習環境をデプロイします。

    ansible-playbook create_instance.yml -e localhost_python_interpreter="/usr/bin/python3.6" -e "@instances.yml"
    

    無料の演習環境では、追加変数local_python_interpreterが必要です。この変数は、localhostで実行されている再生用にansible_python_interpreterを設定します。この変数は、python3.6モジュールの下にあるOracle Cloud Infrastructure SDK for PythonのRPMパッケージが環境によってインストールされるため必要です。

    デフォルトのデプロイメント・シェイプでは、AMD CPUおよびOracle Linux 8が使用されます。Intel CPUまたはOracle Linux 9を使用するには、デプロイメント・コマンドに-e instance_shape="VM.Standard3.Flex"または-e os_version="9"を追加します。

    重要:プレイブックが正常に実行されるまで待機し、一時停止タスクに到達します。プレイブックのこの段階で、Oracle CNEのインストールが完了し、インスタンスの準備ができました。前の再生に注意してください。これは、デプロイするノードのパブリックIPアドレスとプライベートIPアドレス、および演習の実行中に必要なその他のデプロイメント情報を出力します。

Kubernetesクラスタへのアクセス

  1. ターミナルを開き、SSHを介してocneインスタンスに接続します。

    ssh oracle@<ip_address_of_instance>
    
  2. CLIを使用して、既知のクラスタのリストを取得します。

    ocne cluster list
    
  3. kube構成の場所を取得します。

    ocne cluster show -C mycluster
    

    -Cを使用して、クラスタ・リストから特定のクラスタを指定します。

  4. KUBECONFIG環境変数を設定します。

    export KUBECONFIG=$(ocne cluster show -C mycluster)
    
  5. クラスタが安定し、すべてのポッドが実行中の状態でレポートされるまで待機します。

    watch kubectl get pods -A
    

    すべてのポッドにSTATUSRunningと表示されたら、ctrl-cと入力してwatchコマンドを終了します。

  6. ノードの数を確認します。

    kubectl get nodes
    

Helmをインストールします

Helmでは、Oracle CNEクラスタにインストールされているアプリケーションを簡単に管理できます。この例では、これを使用してOpenCostをインストールします。

  1. Gitのインストール

    sudo dnf install -y git
    
  2. 最新バージョンの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では、インストール時に実行する前に確認することをお勧めします。

プロメテウスのインストール

OpenCostは、Prometheusを使用して、Kubernetesクラスタのスクレイピングされたメトリックを格納します。

  1. Prometheus Community Helmリポジトリを追加します。

    helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
    
  2. Prometheus Helmリポジトリを更新します。

    helm repo update
    
  3. Prometheusをインストールし、OpenCost用に構成します。

    デフォルトのOpenCost設定を使用して、Prometheusをprometheus-systemネームスペースにインストールします。

    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をインストールします

  1. OpenCostネームスペースを作成します。

    kubectl create namespace opencost
    
  2. Helm OpenCostリポジトリを追加します。

    helm repo add opencost https://opencost.github.io/opencost-helm-chart
    
  3. Helmリポジトリを更新します。

    helm repo update
    
  4. デフォルトの OpenCost values定義ファイルをダウンロードします。

    values.yamlファイルを使用して、OpenCost構成設定を構成し、チュートリアルで使用されるデフォルトの原価計算を設定します。

    curl -o local.yaml https://raw.githubusercontent.com/opencost/opencost-helm-chart/refs/heads/main/charts/opencost/values.yaml
    
  5. OpenCost Helmチャートをインストールします。

    helm install opencost --repo https://opencost.github.io/opencost-helm-chart opencost --namespace opencost -f local.yaml
    
  6. OpenCost UIを転送します。

    kubectl port-forward --namespace opencost service/opencost 9003:9090
    

    ノート:エラー通知を受け取った場合、これは、HelmでOpenCostが完全にデプロイされていないためです。数秒待ってから、port-forwardコマンドを繰り返します。

    重要:ポート転送の使用は、内部テストにのみ使用してください。本番デプロイメントでは、イングレス・ルールを使用してOpenCostにアクセスできるようにする必要があります。

OpenCost UIへのアクセス

  1. 新しいターミナル・ウィンドウを開き、SSHトンネルを構成します。

    ssh -L 9333:localhost:9003 oracle@<ip_address_of_node>
    
  2. Webブラウザを開き、URLを入力します。

    ヒント: OpenCostが表示できる十分なデータを収集する前に、ブラウザを数回リフレッシュする必要がある場合があります。

    http://localhost:9333/allocation?window=48h
    

    オープンコスト

    使用可能なパラメータは次のとおりです。

    • 日付範囲 - リストされているデフォルトから表示するデフォルト期間を選択する場合に使用します。「日付ピッカー」を使用してカスタム日付範囲を決定することもできます。
    • ブレークダウン - これを使用して、関連付けられたコストを表示するKubernetesリソース・タイプを選択します。たとえば、クラスタ、ノード、ネームスペース、ポッド、デプロイメントなどです。
    • 解決策 - 返されるデータをグラフに表示する方法を決定します。選択肢は1日当たりまたは累積です。
    • 通貨 - 表示される通貨分母を設定します。

    ノート:リクエストされた場合は、使用するブラウザに基づいてセキュリティ警告を承認します。Chromeの場合は、「Advanced」ボタンをクリックし、「Proceed to localhost (unsafe)」リンクをクリックします。また、Webページの「クラウド・コスト」および「外部コスト」リンクが無効になっていることにも注意してください。この動作は、このチュートリアルではOpenCostをOCIテナンシと統合していないために発生します。デプロイメントにこの機能が必要な場合は、OpenCostと連携するようにOCIテナンシを構成する方法の詳細は、OpenCostのドキュメントを参照してください。

Krewをインストール

Krewは、kubectlプラグインのパッケージ・マネージャで、システムへの検出とインストールを容易にします。

  1. 新しいターミナルを開き、SSHを介してocneインスタンスに接続します。

    ssh oracle@<ip_address_of_instance>
    
  2. KUBECONFIG環境変数を設定します。

    export KUBECONFIG=$(ocne cluster show -C mycluster)
    
  3. gitパッケージをインストールします。

    sudo dnf install -y git
    
  4. 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
    )
    
  5. krewバイナリをPATH環境変数に追加します。

    export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
    

    この変更を永続的にするには、.bashrcファイルを更新し、ログアウトしてシステムに再度ログインしてシェルを再起動します。

  6. インストールを確認します。

    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プラグインのインストール

  1. プラグインをインストールします。

    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.
    
  2. プラグインのインストールを確認します。

    kubectl cost version
    kubectl cost --help
    

OpenCost CLIプラグインの使用

kubectl costで使用される基本的な構文構造は、主にネームスペース、ラベル、デプロイメント、StatefulSetなどの標準のKubernetes概念にマップされます。Kubecost APIを使用して、Oracle CNEクラスタのワークロードおよびデプロイメントに関連する有用なコスト・データを返します。このツールは柔軟性があるので、いくつかの例から始めましょう。

  1. クラスタ内のすべてのネームスペースの月次コスト予測を表示します。

    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を指定するのと同じです。
  2. 「app」ラベルを持つすべてのデプロイメントによる過去5日間の合計コストを表示します。

    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 |                 |
    +-----------------+--------------------------------+--------------------+-----------------+
    
  3. 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 |                 |
    +-----------------+-------------------+------------------------------------+------------+----------+--------------------+-----------------+
    
  4. 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 |                 |
    +-----------------+-------------------+-------------------------------------------------------+------------+----------+--------------------+-----------------+
    

次のステップ

このチュートリアルでは、Oracle CNEでOpenCostを使用する方法について説明します。これは、Oracle CNEインフラストラクチャとアプリケーション・デプロイメントのコストを管理する方法の表面にしか見えません。詳細は、Opencostドキュメントを参照してください。

その他の学習リソース

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

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