「eks-node-viewer」で EKS クラスターの Node の状態を可視化してみた
はじめに
eks-node-viewer という OSS を使うと、コマンドライン上で EKS クラスターの Node の状態を可視化することができます。
インストール
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 が存在しない状態でツールを実行してみます。
次に、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 の状態も確認できます。
c5a.8xlarge
という中々大きなインスタンスタイプの Node が起動しましたね。Karpenter は スケジュール出来ない Pod でどれだけリソースが必要なのかを計算した上で、適切なインスタンスタイプを選択してくれます。
次に Pod の数を少し増やしてみます。(40個に変更しました)すると、以下のように Node が起動してきました。
今回は c5a.4xlarge
というインスタンスタイプが起動しているのがわかります。このように、横で Pod の数を増減させたりしながら、Node の状態をリアルタイムに確認するといったことが実現できます。(確認が終わったらリソースの無駄遣いを防ぐために Deployment を削除しておきましょう。)
おわりに
eks-node-viewerという EKS クラスター上の Node の状態を可視化するツールを使ってみました。コマンドラインからクラスターの状態をざっと確認したり、Karpenter の動作確認をする時などに有用なツールではないかと思います。
Discussion