Kubernetes

Karpenter かーぺんたー

オートスケーリングKubernetesノードプロビジョニングAWSクラウドコスト最適化Pod
Karpenterについて教えて

簡単に言うとこんな感じ!

Kubernetesクラスターに「サーバーが足りない!」という状況が起きたとき、必要なサーバーをすぐに自動で用意してくれる賢い調達係だよ。しかも「この荷物なら軽トラがベスト」みたいに、ワークロードに合ったサーバータイプをAIみたいに選んでコストも最適化してくれるんだ!


Karpenterとは

Karpenterは、Kubernetesクラスター上で動作するオープンソースのノード自動プロビジョニングツールです。「ノード」とはKubernetesがアプリを動かすための仮想サーバーのことで、Karpenterはそのノードの追加・削除を自動的かつ賢く行います。2021年にAWSが中心となって開発し、現在はCNCF(Cloud Native Computing Foundation)のプロジェクトとして広く普及しています。

従来のKubernetes標準のオートスケーラーであるCluster Autoscaler(CAと比べて、Karpenterはより高速・柔軟・コスト効率の高いアプローチをとっています。Cluster Autoscalerがあらかじめ定義された「ノードグループ」の中でしかスケールできないのに対し、Karpenterはワークロードの要件を直接見て最適なインスタンスタイプを動的に選択できます。

実務上は、突発的なアクセス増加・バッチ処理・機械学習ジョブなど、需要が読みにくいシステムで特に威力を発揮します。必要なときだけサーバーを用意して不要になったらすぐ返す、という動きが非常に速く、クラウドコストの削減にも直結します。


Karpenterの仕組みと構造

Karpenterは大きく2つのリソース定義(CRD)を軸に動作します。

リソース役割
NodePoolどんなノード(インスタンスタイプ・OS・ゾーンなど)を用意してよいかのポリシー定義
NodeClassクラウドプロバイダー固有の設定(AMI・サブネットセキュリティグループなど)

Karpenterの動作フロー

Podがスケジュール不能(Pending)になる

Karpenterがそのアプリの「必要スペック」を読み取る

NodePool・NodeClassのルールに従い最適なインスタンスタイプを選ぶ

クラウドAPIを直接叩いてノードを起動(数十秒〜数分)

PodがそのノードにScheduleされ起動する

不要になったらノードを自動で削除(Consolidation機能)

Consolidation(統合)機能

Karpenterの強力な機能の一つがConsolidation(コンソリデーション)です。
複数のノードにバラバラに乗っているPodをまとめて少数のノードに詰め込み直し、空いたノードを削除することでコストを自動で最小化します。

機能説明
WhenUnderutilized使用率が低いノードを統合して削除
WhenEmptyPodがいなくなったノードをすぐに削除

覚え方

大工(Carpenter)が現場に合わせた足場をすぐ組んで、仕事が終わったら即撤収する
Karpenterの “K” はKubernetesの “K” 。現場(クラスター)に合わせた足場(ノード)を動的に組み立てるイメージで覚えよう!


歴史と背景

  • 2014年 — Kubernetesが公開され、コンテナオーケストレーションが広まり始める
  • 2016年頃 — Cluster Autoscaler(CA)が登場。ノードグループ単位でのスケーリングが可能になるが、柔軟性に限界があった
  • 2021年11月 — AWSがKarpenter v0.5をオープンソースとして公開。re:Invent 2021で大きく注目される
  • 2022年 — AWSのEKS(Elastic Kubernetes Service)でKarpenterが推奨のオートスケーラーとして採用が広まる
  • 2023年3月CNCF(Cloud Native Computing Foundation)のSandboxプロジェクトとして採択。AWS以外のクラウド(Azure・GCPなど)への対応も進む
  • 2024年 — v1.0リリース。本番利用に十分な安定性が認められ、エンタープライズ採用が急増

Karpenter vs Cluster Autoscaler 比較

KarpenterとCluster Autoscalerは同じ「ノードを増やす」仕事をしますが、アプローチが大きく異なります。

Karpenter vs Cluster Autoscaler Karpenter ノードグループ不要 最適なインスタンスを動的選択 スケール速度: 数十秒〜数分 (APIを直接呼び出し) Consolidation機能あり ノード統合で自動コスト削減 スポットインスタンス活用が得意 複数タイプを柔軟に組み合わせ 設定: NodePool + NodeClass (シンプルなYAML定義) Cluster Autoscaler ノードグループ単位で管理 事前にグループ定義が必要 スケール速度: 数分〜 (グループ内でのスケール) ノード統合機能は限定的 空ノード削除のみ スポット活用は設定次第 タイプ固定になりがち 設定: Auto Scaling Group (クラウド側の設定が必要)

使い分けの目安

シナリオ推奨
コスト最適化・スポット活用を重視したいKarpenter
需要が急変するバッチ・ML処理があるKarpenter
すでにCluster Autoscalerが安定稼働しているCA継続も選択肢
マルチクラウドオンプレミス環境CA(対応範囲が広い)

関連する規格・RFC

規格・仕様内容
Kubernetes CRD(Custom Resource Definition)KarpenterのNodePool・NodeClassはCRDとして定義される
CNCF Sandbox Project2023年よりCNCFが管理するオープンソースプロジェクト
AWS EC2 Fleet APIKarpenterがAWS上でインスタンスを起動する際に内部的に使用
OpenTelemetryKarpenterのメトリクス・トレース出力に対応

関連用語