MEGAZONE

MEGAZONEブログ

Harness the power of Karpenter to scale, optimize & upgrade Kubernetes
Kubernetes re:Invent 2023

Harness the power of Karpenter to scale, optimize & upgrade Kubernetes

Pulisher : Strategic Tech Center チャン・セジョン
Description:Karpenterの基本動作原理からどのようなメリットがあるかを紹介するセッション

2020年11月にAWSでリリースされたKarpenterは、EKSのノードオートスケーリングオープンソースソリューションで、思ったよりまだ実務ではあまり使われていません。

今回のリインベントでKarpenterに関するセッションがあり、興味を持ち、実務に適用できる能力を持ちたいと思い、セッションに参加しました。

普通はCluster Autoscalerを主にノードスケーリングで使う理由はKarpenterの良さは知っているけど、慣れてないので実務で使うのが負担になる部分が多いからです。この機会にKarpenterを一度掘り下げてみようと思います。

Karpenterの動作メカニズムです。

podがトラフィックの増加で増設しようとしたら、Podが追加で上がるリソースが不足してPending状態になり、Karpenterはこれを検知してPodが上がるインスタンスを生成します。 そして、その生成されたインスタンスにPodがRunning状態になるわけです。

Cluster Autoscalerとの違いはCluster AutoscalerはASGに増設を要請します。しかし、KarpenterはASGを通さずに直接EC2増設を要求します。

だから、ノード増設がCluster Autoscalerより速くなります。

Karpenterのメリットを説明します。コスト最適化、MLとAIを含む多様なワークロードのサポート、ノードのアップグレードとPatchのサポートなどがあります。

それでは、Karpenterがなぜこのような利点があるのか一つずつ説明します。

インスタンスタイプを柔軟に組み合わせることができます。

Cluster Autoscalerはノードグループに一つのインスタンスタイプしか指定できないので、1つのPodを上げるためには必要以上のリソースを持つノードを追加するしかありません。

しかし、Karpenterは色んな大小のインスタンスタイプを登録することができます。1つのPodを上げる場合、そのPodのリソースと一番似たサイズのノードを追加してPodを実行することになります。

これはつまり、コスト削減までできるメリットがあります。

基本的なEKSのPodスケジューリングメカニズムです。

ノードセレクターやアフィニティ、その他TaintやTolerationなどを使って好きなノードにPodを実行させることができます。

Karpenterも同様です。

ノードにキー-バリュー方式のラベルを指定し、Pod構成設定ファイルに目的のノードに上がるように同じキー-バリュー値をノードアフィニティにラベル登録をしてくれます。

これを応用して、チームごとに使用するノードプールを違うものにする戦略も実践することができます。

全てのチームが同じノードプールを使う時と違って、チームごとにノードプールを別々に使う場合は

「Aチームだけ毎日問題だな」、「今月はBチームのAWS費用が多すぎるね。理由は何だろう?」

このような形で、そのチームに対する独立した分析やモニタリングも可能でしょう^^。

先ほど言ったようにKarpenterが実行されるPodsのリソースに合わせて適切なインスタンスタイプを選んでPodsを配置した様子を図で理解することができます。はいm5.xlargeとm5.largeで構成されていますね。

しかし、Cluster Autoscalerを使うなら、後で追加された右側の2つのPodを起動させるため、m5.xlargeのノードを増設したはずです。 そうすると、m5.xlarge 2台を使うことになり、Karpenterを使う時よりインスタンス使用費用が高くなります。

Karpenterは簡単に言うと

Cluster Autoscaler、ノードグループ、ノード削除に使われるノードTermination Handler、現在のPodsとノードの使用量を見て不要なリソースの使用を減らすためにPodを他の場所に移動させるDeschedulerの機能を一つにまとめたものと思ってください。良いものは全部入った総合ギフトセットのような感じです。

さて、Karpenterを導入したいですか?

KarpenterはAWS Public ECRにあるHelm Chartを使ってインストールすることができます。

Kartpenterは自分が管理するノード上には実行しないし、EKSのFartgateタイプとEC2タイプの両方をサポートします。

すでにCluster Autoscalerを使用していてKarpenterに切り替えたいですか?

難しく考えないでください、それはとても簡単です。AWSでガイドを提供しています。ガイドをゆっくり見て、ガイドに従ってください。一つ参考する点は既存のASG Launch Templateを使ってる場合はAWS Node Templateにアップデートする必要があります。

最後にKarpenterについてまとめます。

Karpenterは、高速で、シンプルで、強力で、費用対効果が高く、セキュリティに適しており、クラウドではなくKubernetesネイティブなソリューションであり、オープンソースのsig-autoscaling技術を使用しています。

本当に素晴らしいです。AWSは本当に素晴らしいです!

今回のセッションはKarpenterの基本動作原理から始まり、どのような利点があるのかよく知ることができた貴重なセッションでした。既存のCluster Autoscalerだけでも問題なくEKSを運営することができますが、メガゾンクラウドがより高い品質の技術を顧客に先に提案して実装すれば、顧客の満足度は非常に高くなると思います。 コスト削減までできるのですから最高でしょう。

Karpenterの導入を躊躇している顧客に堂々と先に提案し、素敵に運営する姿を想像すると、まるですでにやったかのように、すでに幸せです。

ブログ一覧

この記事の読者はこんな記事も読んでいます