Open15

Karpenter Best Practices

not75743not75743

karpenterの機能

https://aws.github.io/aws-eks-best-practices/karpenter/#karpenter

Karpenterは、Kubernetesクラスタ内のノードライフサイクル管理を強化するために設計されたオープンソースプロジェクトです。 Podの特定のスケジューリングニーズに基づいてノードのプロビジョニングとデプロビジョニングを自動化し、効率的なスケーリングとコストの最適化を可能にする。 主な機能は次のとおりです。

  • リソースによりk8sクラスタにデプロイできないpodを監視
  • そのpodをどのようにスケジューリングするか評価
  • 要件に合うノードをプロビジョニング
  • 不要なノードを削除する
not75743not75743

変動するキャパシティが必要なワークロードにkarpenterを使う

  • Karpenterは、需要が急増する期間や多様なコンピュート要件を持つワークロードを持つクラスタに最適
  • MNGとASGは、より静的で一貫性のあるワークロードを実行するクラスタに適している
  • 要件に応じて、動的に管理されるノードと静的に管理されるノードを混在させることができる
not75743not75743

他のスケーラーが望ましい場合

  • karpenterは比較的新しいプロジェクトである
  • karpenterにない機能が必要であれば他の手段を検討するのが望ましい
not75743not75743

karpenterのコントローラはEKS Fargate or NodeGroup Nodeで動かす

  • karpenterが管理するノードでkarpenter controllerを動かさない
  • ダウンするため
not75743not75743

karpenter v1以上ではカスタム起動テンプレートを使わない

  • v1以降ではカスタム起動テンプレートが利用できない
  • 代わりにnodeclassで定義する
not75743not75743

ワークロードに合わないインスタンスタイプを除外する

node.kubernetes.io/instance-typeキーで利用しないインスタンスタイプを選択する
こんな感じ

- key: node.kubernetes.io/instance-type
  operator: NotIn
  values:
  - m6g.16xlarge
  - m6gd.16xlarge
  - r6g.16xlarge
  - r6gd.16xlarge
  - c6g.16xlarge
not75743not75743

スポット使用時の中断処理を有効にする

https://aws.github.io/aws-eks-best-practices/karpenter/#enable-interruption-handling-when-using-spot
https://karpenter.sh/docs/concepts/disruption/#interruption

not75743not75743

外部に出れないEKSクラスタでのkarpenter利用

  • 必要なVPCエンドポイントを用意する必要がある
not75743not75743

nodepoolを複数作成するパターン

各チームがクラスタを共有している、異なるworker nodeでワークロードを実行したい、OSやインスタンスタイプの要件が異なる場合などのときはnodepoolを複数作成する
複数のNodePoolsを使用することで、各チームに最適なworker nodeが利用できる

not75743not75743

nodepoolを指定できるようにする

  • taintやnodeaffinityなどが必要なノードプールを作成する
  • 複数のノードグループがマッチした場合、予期しないノードを利用する可能性があるため
not75743not75743

タイマー(TTL)を使用してクラスタからノードを自動的に削除する

  • TTLを利用して、以下の場合にノードを削除する
    • ワークロードを動かすpodがない(バッチジョブなど)
    • 有効期限に達した
  • 有効期限を設定することで、不要なノードをなくす、新バージョンのノードを使う
    などが可能
not75743not75743

spotインスタンスを利用する場合、インスタンスタイプの過度な制限は避ける

  • KarpenterがSpotを使用する際は多様なインスタンスタイプを使用できるようにするのが望ましい
  • karpenterがspotを調達する戦略は「price-capacity-optimized」が用いられる
    • 短期的に中断する可能性が最も低いと思われるプールからスポットインスタンスをリクエスト
    • これらのプールのうち最も価格の低いプールからスポットインスタンスを要求する