Amazon Web Services(AWS)は、オープンソースのKubernetesクラスタオートスケーリングツールであるKarpenterのバージョン1.0をリリースした。このリリースはベータ版からのKarpenterの卒業を示すものであり、安定版APIと複数の新機能が導入されている
2021年11月に発表されたKarpenterは、包括的なKubernetesネイティブのノードライフサイクルマネージャーへと進化した。このプロジェクトは、今年初めに我々が報告したように、Slackのような業界リーダーの間で人気を集め、GitHubにおけるAWSのオープンソースプロジェクトのトップ10に入った。
Infracloudへの投稿でHimanshu Verma氏は、どのようにKarpenterが事前構成済ノードグループとリソースサイジングの必要性を排除し、起動テンプレートを使ってインスタンスを直接管理するかを説明している。Karpenterはスケジュールできないポッドにリアルタイムで対応し、必要に応じて新しいノードを自動的にプロビジョニングする。クラスタ計算能力の動的調整は、パフォーマンスとコスト効率の両方を最適化する。
![InfracloudからのKarpenter図](https://imgopt.infoq.com/fit-in/3000x4000/filters:quality(85)/filters:no_upscale()/news/2024/09/karpenter-10/en/resources/1karpenter diagram-1726344362441.png)
1.0リリースでは、多くの修正といくつかの新機能が追加された。Karpenter 1.0の主な機能:
-
中断コントロールの強化: ユーザーは稼働率の低下、空の状態、ドリフトなどのシナリオに対してノードの中断をより細かく制御できるよう、理由ごとに中断予算を設定できるようになった。
-
統合ポリシーの名称変更: わかりやすくするため「WhenUnderutilized」ポリシーが 「WhenEmptyOrUnderutilized」に改名された。
-
新しい統合制御: 「consolidateAfter」パラメーターにより、ユーザーはポッドが追加または削除されたとき、Karpenterがノードを統合するまでの待ち時間を指定できるようになった。
-
終了猶予期間: 新しい「terminationGracePeriod」設定により、クラスタ管理者はノードの寿命とグレースフル・ターミネーションをよりコントロールできるようになった。
-
ドリフト機能のプロモーション: あるべき状態から逸脱したノードを置き換えるドリフト機能が、デフォルトで有効になった。
-
AMI選択の変更: 「amiSelectorTerms」フィールドが必須になり、新「エイリアス」用語で、ユーザーはAmazon EKS最適化AMIの特定バージョンを選択できるようになった。
-
インスタンスメタデータサービス(IMDS)へのアクセス制限: セキュリティを向上させるため、IMDSへのポッドアクセスがデフォルトでブロックされるようになった。
-
Kubelet 設定の移動: Kubeletの設定がEC2NodeClass APIに移された。
-
NodeClaimがの不変化: NodeClaim は作成後に変更できなくなり、期待されていた動作に合わせられた。
-
NodePoolのnodeClassRefの変更: すべての nodeClassRef フィールドが必須になり、「apiVersion」フィールドが「group」に改名された。
-
メトリックの変更: ダッシュボードの更新が必要になるかもしれない、いくつかのPrometheusメトリクスが変更された。
また、特定のアノテーションやConfigMapベースの設定削除を含む、いくつかの廃止計画がある。
ベータ版からのアップグレードを検討しているユーザーのために、AWSは最新APIのバージョンを既に使用していることを前提に、Kubernetesのwebhookコンバージョンを使用したマイグレーションパスを提供している。このプロセスでは、ノードの置き換え不要でその場でAPIをアップグレードできる。しかし、ユーザーは 実施前にマイグレーションドキュメント一式を確認し、本番環境以外の環境でアップグレードプロセスをテストすることが推奨されている。
X(旧Twitter)のvideo walkthroughで、Olalekan Taofeek氏はKarpenterを0.37から1.0にアップグレードした方法-マイグレーションパスで想定されているより大きなバージョンジャンプを詳細に説明した。彼は注意深い対応が必要な重大な変更がいくつかあったことを強調した。
-
ユーザーデータはもはやKubernetes設定に使われていない。
-
ノードプール/グループ設定変更 - APIバージョンとフィールド名が変更されたため、ユーザー設定を更新する必要がある。
-
ユーザーワークロードを記録する必要がある新「startup time」フィールドの追加。
-
一部のフィールドをノードプールからノードクラス設定に移動。
Karpenter 1.0のニュースは好評で、例えばVatsal Bajpai氏はX(旧Twitter)にこう記載している。
「Karpenterはクラウド上のK8sにとって非常に重要になった、それが見れて幸せだ!」
Redditのスレッドでは、ユーザーは概ねこのリリースを評価しており、一部のユーザーはAzureへの移植版も用意されていることを指摘したが、一方でGCPのサポートがないことを嘆く声もあった。また、Karpenterの機能をEKSのコントロールプレーンに完全に統合することができるのかどうか考えている人もいた。
より詳しい情報やフィードバックの提供については、Kubernetes Slackの#karpenterチャンネルやGitHubで問い合わせることができる。