デフォルトのコスト配分ポリシーに加え、コスト管理スイートではカスタムコスト会計ポリシーもサポートしています。カスタムのコスト配分またはチャージバックロジックが必要な場合は、カスタムリソース価格を含む構成ファイルを作成できます。これにより、コストデータをビジネスロジックに合わせることができます。
ユースケース
カスタムコスト会計により、より細やかな IT コストガバナンスが可能になります。代表的なユースケースは以下のとおりです。
-
内部運用チームが基盤となる計算リソースを一括購入し、さまざまな業務部門に再販売する。
-
業務レベルでコストを標準化し、同じ仕様の Pod を異なる仕様のノードにスケジューリングすることによるコストのばらつきを解消したい。
-
複数の業務部門が同じノード上で、同じリソースリクエストを持つ Pod を異なるオーバーコミット率でデプロイしている。これらの部門間で差別化されたコスト会計を実現するために、Pod の単位価格にリソースリミットを反映させる必要がある。
こうしたカスタムコスト会計の要件に対応するため、コスト管理スイートではカスタム価格テンプレートを提供しています。テンプレートを編集して Pod リソースの単位価格を設定すると、それらが集計されて Pod の価格コストが算出されます。
現在、Pod の価格コストは API 経由でのみ取得可能です。カスタム価格を有効化および設定後、API 応答内の customCost フィールドからコストデータを取得できます。API の使用方法の詳細については、「API によるコストデータ取得の概要」をご参照ください。
前提条件
ステップ 1: cost-exporter でカスタム価格を有効化する
ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
クラスターリスト ページで、ご利用のクラスター名をクリックします。左側のナビゲーションウィンドウで、 をクリックします。
-
ページ上部の [名前空間] ドロップダウンリストから kube-system を選択します。ack-cost-exporter デプロイメントを見つけ、アクション 列で、詳細 > Yaml を選択します。
commandセクションに'--enable-custom-price=true'を追加します。その後、更新 をクリックします。
ステップ 2: 価格テンプレートを設定する
操作手順
-
以下のサンプルコードを含む price-template.yaml という名前のファイルを作成します。
重要-
テンプレート内の
specフィールド配下のすべてのフィールドは任意です。Pod のメタデータがspec配下に設定されたすべてのフィールドと一致する場合、その Pod はテンプレートにマッチします。specが空のテンプレートは、すべての Pod にマッチします。 -
テンプレートは記述順にマッチングされます。Pod が複数のテンプレートにマッチする場合、YAML ファイルの上から最初にマッチしたテンプレートがその Pod の価格付けに使用されます。
apiVersion: v1 kind: ConfigMap metadata: name: price-template namespace: kube-system data: template.yaml: | - name: template-nginx spec: labelSelector: app: nginx namespaceSelector: - default - kube-system resource: cpu: 500m memory: 512Mi cpu-overcommit-ratio: 2 memory-overcommit-ratio: 2 price: cpu: 0.2 memory: 0.03 - name: template-default price: cpu: 0.1 memory: 0.02この価格テンプレートは以下を指定しています。
-
template-nginx 価格テンプレートは、次のすべての条件を満たすクラスター内の Pod に適用されます。
-
Pod に
app:nginxラベルが付与されている。 -
Pod が default または kube-system 名前空間にある。
-
CPU リソースリクエストが 500m、リソースリミットが 1 Core である。
-
メモリリソースリクエストが 512 MiB、リソースリミットが 1 GiB である。
-
-
template-default 価格テンプレートは、クラスター内のその他のすべての Pod に適用されます。
以下の表はパラメーターの説明です。
パラメーター
説明
name
価格テンプレートの名前。
spec.labelSelector
Pod ラベルとのマッチングに使用するセレクター。
spec.namespaceSelector
マッチング対象の名前空間のリスト。
spec.resource.cpu
Pod の CPU リソースリクエスト。
spec.resource.memory
Pod のメモリリソースリクエスト。
spec.resource.cpu-overcommit-ratio
Pod の CPU オーバーコミット率。計算式:CPU リソースリミット / CPU リソースリクエスト。
spec.resource.memory-overcommit-ratio
Pod のメモリオーバーコミット率。計算式:メモリリソースリミット / メモリリソースリクエスト。
price.cpu
Pod の CPU 単位価格。単位:Core 時間。
price.memory
Pod のメモリ単位価格。単位:GiB 時間。
-
-
以下のコマンドを実行して、
kube-system名前空間にprice-templateという名前の ConfigMap を作成し、カスタム価格設定を適用します。kubectl apply -f price-template.yaml -n kube-system
関連ドキュメント
-
クラスタースケジューリングウォーターマークに基づいて Pod コストを見積もりできます。これには単一リソース (CPU またはメモリ) による見積もりと、重み付き混合 (CPU とメモリ) による見積もりが含まれます。詳細については、「コスト見積もりポリシーの概要」をご参照ください。
-
HTTP API リクエストを送信して、カスタム開発用にコストインサイトデータを取得できます。詳細については、「API を呼び出してコストデータを照会する概要」をご参照ください。