🛠️

「eks-node-viewer」で EKS クラスターの Node の状態を可視化してみた

2023/02/02に公開

はじめに

eks-node-viewer という OSS を使うと、コマンドライン上で EKS クラスターの Node の状態を可視化することができます。

after_2

インストール

Go で開発されたツールになります。以下のコマンドでインストールできます。

go install github.com/awslabs/eks-node-viewer/cmd/eks-node-viewer@latest

使い方

シンプルに以下のコマンドで利用可能です。

eks-node-viewer

--node-selectorというフラグによって、表示する Node をフィルタすることができます。Karpenter によって起動された Node だけ表示したい場合は、以下のコマンドを実行します。

eks-node-viewer --node-selector "karpenter.sh/provisioner-name"

Karpenter で起動される Node には、以下のようなラベルが付与されているため、上記のコマンドではそのラベルのキー名を指定しています。

  labels:
    # Provisioner の名前が値として定義されるラベル
    karpenter.sh/provisioner-name: default

動かしてみた

まずは Karpenter によって起動される Node が存在しない状態でツールを実行してみます。

beforels

次に、Karpenter をインストールした EKS クラスターに対して Pod を複数デプロイして、Node をスケーリングさせてみます。今回はサンプルで 20 個の nginx Pod をデプロイしてみました。

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
  name: nginx
  namespace: default
spec:
  replicas: 20
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - image: nginx
          name: nginx
          resources:
            requests:
              memory: "1000Mi"
              cpu: "1000m"

しばらく待つと、Node が起動している様子がリアルタイムに表示されているのがわかります。また Node 自体の空きリソースや、上で動いている Pod 数も表示されていて、クラスターの Node の状態も確認できます。

after_1

after_2

c5a.8xlargeという中々大きなインスタンスタイプの Node が起動しましたね。Karpenter は スケジュール出来ない Pod でどれだけリソースが必要なのかを計算した上で、適切なインスタンスタイプを選択してくれます。

次に Pod の数を少し増やしてみます。(40個に変更しました)すると、以下のように Node が起動してきました。

今回は c5a.4xlarge というインスタンスタイプが起動しているのがわかります。このように、横で Pod の数を増減させたりしながら、Node の状態をリアルタイムに確認するといったことが実現できます。(確認が終わったらリソースの無駄遣いを防ぐために Deployment を削除しておきましょう。)

おわりに

eks-node-viewerという EKS クラスター上の Node の状態を可視化するツールを使ってみました。コマンドラインからクラスターの状態をざっと確認したり、Karpenter の動作確認をする時などに有用なツールではないかと思います。

Discussion