Contents
1️⃣ Node Allocatable と requests/limits の最適化
1.1 重要ポイント
- Node Allocatable が有効になると、Kubelet が OS・kube‑system の消費分を除外した「実際にスケジューラが使用できる」リソース量を算出します。
requestsとlimitsを適切に設定しないと OOM が頻発し、結果的に 約 15 % のコスト増(未最適化クラスタの実測値)につながります【1】。
1.2 推奨設定例(CPU 2 コア / メモリ 4 Gi ノード)
|
1 2 3 4 5 6 7 8 9 10 11 12 |
# kubelet-config.yaml (v1beta1) apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration kubeReserved: cpu: "500m" memory: "512Mi" systemReserved: cpu: "250m" memory: "256Mi" evictionHard: memory.available: "200Mi" |
- 予約リソースはノード全体の 70 % 以下 に抑える(目安)【2】。
requests/limitsは Pod ごとに以下を参考に設定。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
apiVersion: v1 kind: Pod metadata: name: web-app spec: containers: - name: app image: nginx:stable resources: requests: cpu: "200m" memory: "256Mi" limits: cpu: "500m" memory: "512Mi" |
1.3 効果測定
| 項目 | 変更前 | 変更後 | 削減率 |
|---|---|---|---|
| CPU/Memory の過剰予約率 | 85 % | 68 % | 15 %【1】 |
| OOM 発生回数(月) | 12 件 | 2 件 | - |
ポイント:Node Allocatable と
requests/limitsを合わせて管理すれば、リソースの無駄遣いを約 15 % 削減できます。
2️⃣ 自動スケーリングとスポットノードプール活用
2.1 HPA + VPA の連携パターン
| 項目 | 内容 |
|---|---|
| 目的 | 水平スケールでトラフィック変動に対応し、垂直スケールで Pod の requests を最適化してリソース過剰を防止 |
| 期待効果 | 実証環境で ノード使用率が 75 % → 55 % に改善し、同等負荷でも 約 20 % のインスタンス削減【3】 |
マニフェスト例(Kubernetes 1.30 対応)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# HorizontalPodAutoscaler apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: web-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: web-deploy minReplicas: 2 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 60 # VerticalPodAutoscaler apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: web-vpa spec: targetRef: apiVersion: apps/v1 kind: Deployment name: web-deploy updatePolicy: updateMode: Auto |
2.2 Cluster Autoscaler(CA)のチューニング
| パラメータ | 推奨値 | 効果 |
|---|---|---|
--scale-down-unneeded-time |
10m【4】 | スポットインスタンスの回復待ち時間を確保し、オンデマンド切替頻度 30 % 削減 |
--balance-similar-node-groups |
true |
同種ノード間でバランスを取ってスポット活用率向上 |
起動例(EKS / GKE 共通)
|
1 2 3 4 5 |
--scale-down-unneeded-time=10m \ --scale-down-delay-after-add=5m \ --balance-similar-node-groups=true \ --skip-nodes-with-local-storage=false |
ポイント:CA のパラメータを調整するだけで、スポットインスタンスの回復失敗による余計なオンデマンド課金を 約 30 % カットできます。
2.3 カスタムスケジューラ Extender によるコスト優先配置
- 標準スケジューラはリソース残量のみで判断。
- Extender を使えば、リアルタイムのスポット価格情報を取得し「最安ノード」へ Pod を割り当てられる。
Python 実装サンプル
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import json, requests def get_spot_price(instance_type): # AWS Spot Price API (例) resp = requests.get(f"https://api.aws.com/spot/{instance_type}") return float(resp.json()["price"]) def filter_node(pod, nodes): spot_prices = {n["name"]: get_spot_price(n["instance_type"]) for n in nodes} # 価格の逆数でスコア付与(低価格=高スコア) scored = sorted(nodes, key=lambda n: 1 / spot_prices.get(n["name"], 1)) return scored[:5] # 上位5件を候補に返す |
- 実証結果:同一負荷で 12 % の費用削減【5】。
3️⃣ スポット・リザーブドインスタンス活用例とシミュレーション
| クラウド | スポット割引率(平均) | ハイブリッドプール構成例 |
|---|---|---|
| AWS | 66 % 割引($0.032/時間 vs $0.096/時間)【6】 | オンデマンド 60 % / スポット 40 % → 38 % コスト削減 |
| GCP | 約 70 % 割引(Preemptible VM) | 同上 |
| Azure | 約 65 % 削減(Spot VMs) | 同上 |
Terraform での混在ノードプール例(AWS EKS)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
resource "aws_eks_node_group" "on_demand" { cluster_name = aws_eks_cluster.main.name node_role_arn = aws_iam_role.eks_node.arn subnet_ids = data.aws_subnet_ids.private.ids scaling_config { desired_size = 3 max_size = 5 min_size = 2 } instance_types = ["m6i.large"] } resource "aws_eks_node_group" "spot" { cluster_name = aws_eks_cluster.main.name node_role_arn = aws_iam_role.eks_node.arn subnet_ids = data.aws_subnet_ids.private.ids scaling_config { desired_size = 2 max_size = 4 min_size = 1 } instance_types = ["m6i.large"] capacity_type = "SPOT" } |
3.1 リザーブドインスタンス(RI)+ Savings Plans のハイブリッド活用
| 割引条件 | 効果 |
|---|---|
| RI:45 % 割引(3 年予約) | 基本料金の 45 % カット【7】 |
| Savings Plans:30 % 割引 | 残りの 55 % に対して 30 % カット |
| 合算効果 | 約 43 % の総削減(月額 $46 → $26) |
Python シミュレーション例
|
1 2 3 4 5 6 7 8 9 10 |
def simulate(cost_hourly, ri_discount=0.45, sp_discount=0.30, ri_ratio=0.6): ri_cost = cost_hourly * (1 - ri_discount) * ri_ratio sp_cost = cost_hourly * (1 - sp_discount) * (1 - ri_ratio) return ri_cost + sp_cost # c6i.large のオンデマンド価格 $0.085/時間 base = 0.085 monthly = simulate(base) * 720 # 30日 x 24h print(f"Monthly cost after RI+SP: ${monthly:.2f}") |
ポイント:長期安定ワークロードは RI と Savings Plans の併用で 最大 72 % 割引(RI 単体)に近い費用削減が可能です。
4️⃣ コスト最適化ツール比較と選定指針
| 項目 | Kubecost (v2.9) | CloudHealth (v5) | Spot.io Optimizer (v3) |
|---|---|---|---|
| リアルタイム可視化 | ✅(Prometheus 連携) | ✅(マルチクラウド統合) | ✅(スポット価格 API) |
| CPU/Memory 最適化提案 | ✅(VPA/HPA 推奨) | ❌ | ✅(自動スポット置換) |
| タグ・ラベル管理支援 | ✅(自動検出) | ✅(ポリシーエンジン) | ✅(コストセンター別レポート) |
| AI/ML 予測機能 | ❌ | ✅(FinOps AI) | ✅(価格変動予測) |
| 導入形態 | SaaS / オンプレミス | SaaS | SaaS |
| 料金モデル | ノード数 × $0.10/時間 (例: 50 ノード = $120/月)【8】 | 月額 $2,500 + 使用量ベース | クラスタ月額 $1,200 + 削減分 5 % ロイヤリティ |
| 無料トライアル | 30 日間フル機能 | 14 日間制限付き | 60 日間全機能 |
選定ポイント
- 固定費 vs 変動ロイヤリティ
- 小規模(≤ 30 ノード)では Kubecost の固定料金がシンプルで予算計画しやすい。
-
大規模(≥ 100 ノード)かつスポット活用率が高い場合は Spot.io のロイヤリティ方式が総コスト削減に有利。
-
機能適合性
- AI 予測やマルチクラウド統合が必須なら CloudHealth が最適。
- K8s ネイティブの VPA/HPA 推奨とリアルタイム可視化だけでよければ Kubecost。
| ツール | 月額固定費 | 削減ロイヤリティ (30 % 減) | 合計コスト例(50 ノード・月 $5,000 のインフラ) |
|---|---|---|---|
| Kubecost | $120 | - | $120 |
| CloudHealth | $2,500 | $250 (5 % of $5,000) | $2,750 |
| Spot.io | $1,200 | $250 | $1,450 |
ポイント:自社の規模・スポット利用率に合わせて「固定費」か「変動ロイヤリティ」かを選択することが、総合的なコスト最適化の鍵です。
5️⃣ IaC(Terraform / ArgoCD)で不要リソース自動削除
5️⃣‑1 Terraform のライフサイクル管理
| 手法 | 内容 |
|---|---|
lifecycle ブロック |
prevent_destroy = false と create_before_destroy = true を組み合わせ、削除タイミングを安全に制御 |
provisioner "local-exec"(destroy) |
削除時に残存リソース(EBS, NIC 等)を確実にクリーンアップ |
| ガーベジコレクション | 毎月 GitHub Actions で terraform plan -destroy → 未使用リソース自動削除 |
実装例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
resource "aws_ebs_volume" "data_vol" { availability_zone = var.az size = var.size_gb type = "gp3" lifecycle { prevent_destroy = false create_before_destroy = true } provisioner "local-exec" { when = destroy command = "aws ec2 delete-volume --volume-id ${self.id}" } } |
根拠:2026 年 1 月の AWS 請求レポートで未使用リソースが全体コストの 8 % を占めていることが判明【9】。
5️⃣‑2 ArgoCD のフック活用でサイズダウングレード
| フック種別 | 実行タイミング |
|---|---|
PreSync |
デプロイ直前 |
PostSync |
デプロイ完了後(リソース最適化に最適) |
Application マニフェスト例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: my-app spec: source: repoURL: https://github.com/example/repo.git path: manifests/overlays/prod destination: server: https://kubernetes.default.svc namespace: prod syncPolicy: automated: prune: true selfHeal: true syncOptions: - CreateNamespace=true hooks: - name: resource-optimizer type: PostSync manifest: | apiVersion: batch/v1 kind: Job metadata: name: optimize-resources spec: template: spec: containers: - name: optimizer image: ghcr.io/yourorg/k8s-optimizer:latest args: ["--shrink-pvc", "--downgrade-node"] restartPolicy: Never |
k8s-optimizerコンテナは内部でkubectl patch pvc …やeksctl delete nodegroup --name idle-*を実行し、不要リソースを即座に削除します。
6️⃣ マルチクラウドのタグ戦略と AI 予測
6.1 統一タグモデル
| タグキー | 推奨値例 |
|---|---|
CostCenter |
finance, devops など |
Environment |
prod, staging, dev |
- Terraform の
default_tagsと GCP のlabelsを同時設定し、CI パイプラインで必須チェックを実装 → 100 % タグ付与 が保証されます【10】。
例:共通タグ設定
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
provider "aws" { default_tags { tags = { CostCenter = var.cost_center Environment = var.env } } } resource "google_compute_instance" "vm" { name = "app-server" machine_type = "e2-medium" zone = var.zone labels = { cost_center = var.cost_center environment = var.env } } |
6.2 Azure Cost Management の AI‑Driven Forecast
| 項目 | 内容 |
|---|---|
| 予測精度 | ±5 %(2026 年 4 月更新)【11】 |
| 手動作業削減 | 平均 30 時間/週 短縮【11】 |
CLI 設定例
|
1 2 3 4 5 6 7 8 |
az costmanagement forecast create \ --scope "/subscriptions/<sub-id>" \ --timeframe "MonthToDate" \ --forecast-type "AI" \ --budget-name "monthly-budget" \ --budget-amount 5000 \ --notification-thresholds "80,90,100" |
効果:予算の 80 % に達した時点で Teams/Slack に自動通知。即座にスポットノードへのシフトや不要リソース削除をトリガーできる。
7️⃣ 実践ロードマップ – 無料トライアルから本番導入まで
| フェーズ | 主なアクション | 成果指標 |
|---|---|---|
| ① トライアル環境構築 | kind または小規模 EKS/GKE(ノード 3 台)をデプロイ |
クラスタ起動成功、ベースライン取得 |
| ② コスト可視化ツール導入 | Kubecost(Helm)をインストールし、Cost Dashboard を有効化 | CPU/Memory 使用率・未割当リソースの可視化 |
| ③ 改善策実装 | Node Allocatable 設定、HPA/VPA+CA 調整、スポットノードプール追加 | リソース予約率 70 % 以下、スケジューラ最適化 |
| ④ 効果測定 & 繰り返し | 改善後 2 週間で同様のコストレポートを取得し、削減率=(ベースライン‑改善後)/ベースライン×100 を算出 | 目標削減率(例:15 %)達成か否か |
| ⑤ 本番展開 | GitOps (ArgoCD) に統合し、フックで自動ガーベジコレクションを有効化 | 継続的最適化が自動化された状態 |
ポイント:無料トライアルで実測データを取得すれば、導入リスクなしに 削減効果(例: 月 $1,000) を定量的に証明できます。
8️⃣ まとめ
- Node Allocatable と
requests/limitsの適切な設定で過剰プロビジョニングを防止し、約 15 % コスト削減。 - HPA+VPA+Cluster Autoscaler をスポットノードプールと組み合わせることで、最大 30 % のインフラ費用削減が可能。
- リザーブドインスタンス + Savings Plans のハイブリッド活用で 72 % まで割引効果を期待できる。
- Kubecost・CloudHealth・Spot.io を機能と価格で比較し、規模・要件に合ったツールを選定。
- Terraform と ArgoCD の自動ガーベジコレクション/サイズダウングレード で見えないリソース課金を排除。
- 統一タグ戦略 + Azure AI Forecast によるマルチクラウドの可視化と予測アラートで、予算超過リスクを最小化。
- 無料トライアル → ベースライン取得 → 改善実装 → 効果測定 の 4 ステップで安全に導入し、継続的なコスト最適化サイクルを構築。
次のアクション:本ガイドの「ロードマップ」セクションから自社環境に合わせたステップを選び、まずは Kubecost の 30 日無料トライアル を開始してください。
参考文献・出典
- Qiita 「リソース管理ガイド」 – https://qiita.com/0h-n0/items/b3791046ac20c8347a59 (取得日: 2026‑04‑10)
- Kubernetes Docs「Node Allocatable」 – https://kubernetes.io/docs/tasks/administer-cluster/reserve-compute-resources/#node-allocatable (取得日: 2026‑04‑12)
- App-tatsujin 「GCP カスタムオートスケーリング事例」 – https://app-tatsujin.com/gcp-pricing-updates-2024-2026-cost-optimization/ (取得日: 2026‑03‑28)
- Kubernetes SIG Autoscaling「Cluster Autoscaler – Tuning」 – https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler#configuration (取得日: 2026‑04‑11)
- Spot.io Blog 「Extender を使ったコスト最適化」 – https://spot.io/blog/kubernetes-scheduler-extender-cost-optimization/ (取得日: 2026‑02‑15)
- AWS Pricing(2026 年 2 月) – https://aws.amazon.com/jp/ec2/pricing/on-demand/ (取得日: 2026‑04‑09)
- AWS Savings Plans と RI の比較資料 – https://aws.amazon.com/jp/savingsplans/ (取得日: 2026‑01‑20)
- Kubecost 公式料金表 – https://kubecost.com/pricing/ (取得日: 2026‑04‑08)
- AWS 請求レポート(2026 年 1 月) – https://aws.amazon.com/jp/blogs/aws/aws-billing-reports/ (取得日: 2026‑01‑30)
- FinOps Foundations – Zenn 記事「IaC とタグ管理」 – https://zenn.dev/finops/articles/tag-management-with-iac (取得日: 2026‑02‑05)
- Azure Cost Management 更新情報(2026 年 4 月) – https://azure.microsoft.com/ja-jp/blog/azure-cost-management-ai-forecast-improvements/ (取得日: 2026‑04‑07)