2 検証環境
2.1 ネットワーク構成
検証環境は、VMware Workstation Pro上に構築した3台の仮想マシンでKubernetesクラスタを構成しています。各仮想マシンはブリッジ接続により、PCと同じネットワーク(192.168.1.0/24)に接続されています。
一方、10.244.0.0/16 は、CalicoのCNIプラグインによってクラスタ内に作成されるPodネットワークです。各Podにはこのアドレス帯からIPアドレスが割り当てられ、異なるノード上のPod同士が相互に通信する際に使用されます。Calicoは各ノードに経路を設定することで、Pod間通信を透過的に実現しています。
+--- control ---+ +--- worker1 ---+ +--- worker2 ---+
|AlmaLinux 10.2 | |AlmaLinux 10.2 | |AlmaLinux 10.2 |
| | | | | |
| Pod | | Pod | | Pod |
| | | | | | | | |
| 10.244.x.0/24 | | 10.244.y.0/24 | | 10.244.z.0/24 |
| ------------- | | ------------- | | ------------- |
| | | | | |
+-------+-------+ +-------+-------+ +-------+-------+
|.19 |.20 |.22
| | |
| 192.168.1.0/24 | |
+--------------------------------------------------------+
| VMware Workstation Pro(Bridged networking) |
+--------------------------------------------------------+
|
+---------------+
| |
| PC |
| |
+---------------+それぞれの役割は以下のとおりです。
1台をコントロールノード、2台をワーカーノードとして使用します。
| ホスト名 |
名称 |
役割 |
| control |
コントロールノード |
クラスタ(control、worker1、worker2)の状態を管理し、Pod をどのノードで実行するかを決定するノード |
| worker1 |
ワーカーノード |
Pod を実行するノード |
| worker2 |
ワーカーノード |
Pod を実行するノード |
2.2 ソフトウェアのバージョン
各ノードのAlmaLinuxバージョンは以下のとおりです。
[root@control ~]# cat /etc/redhat-release
AlmaLinux release 10.2 (Lavender Lion)
各ノードのカーネルバージョンは以下のとおりです。
[root@control ~]# uname -r
6.12.0-211.7.3.el10_2.x86_64
Kubernetesのバージョンは以下のとおりです。
[root@contol ~]# kubectl version
Client Version: v1.36.3
Kustomize Version: v5.8.1
Server Version: v1.36.3
2.3 ノードのリソース
各ノードには4GBのメモリを割り当てています。
[root@control ~]# free -h
total used free shared buff/cache available
Mem: 3.6Gi 1.3Gi 1.0Gi 5.8Mi 1.5Gi 2.3Gi
Swap: 0B 0B 0B各ノードは 4コアのCPU(4 vCPU) を搭載しています。
[root@control ~]# lscpu -xe
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE
0 0 0 0 0:0:0:0 yes
1 0 1 1 1:1:1:1 yes
2 0 2 2 2:2:2:2 yes
3 0 3 3 3:3:3:3 yes
lscpuコマンドの詳しい使い方は、以下のページをご覧ください。
hana-shin.hatenablog.com
4 メトリクスサーバのインストール
(1) リポジトリの追加
メトリクスサーバーのチャートが公開されているリポジトリを、Helmで利用できるように追加します。
[root@control ~]# helm repo add metrics-server https://kubernetes-sigs.github.io/metrics-server
"metrics-server" has been added to your repositories
helmコマンドの詳しい使い方は、以下のページをご覧ください。
hana-shin.hatenablog.com
追加したリポジトリの一覧を確認します。
[root@control ~]# helm repo list
NAME URL
metrics-server https://kubernetes-sigs.github.io/metrics-serve
ローカルにキャッシュされているチャート情報を最新の状態に更新します。この操作を行わないと、最新のチャート情報がローカルに反映されず、最新バージョンの検索や取得ができない場合があるため、事前に実行します。
[root@contol ~]# helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "metrics-server" chart repository
Update Complete. ?Happy Helming!?
(2) チャートのインストール
メトリクスサーバーのHelmチャートをクラスタにインストールします。このとき、kube-system 名前空間にデプロイするよう指定します。
[root@control ~]# helm install metrics-server metrics-server/metrics-server --namespace kube-system
NAME: metrics-server
LAST DEPLOYED: Tue Aug 4 14:13:06 2026
NAMESPACE: kube-system
STATUS: deployed
REVISION: 1
DESCRIPTION: Install complete
TEST SUITE: None
NOTES:
***********************************************************************
* Metrics Server *
***********************************************************************
Chart version: 3.13.1
App version: 0.8.1
Image tag: registry.k8s.io/metrics-server/metrics-server:v0.8.1
***********************************************************************
Podの状態を確認します。コマンドを実行すると、出力結果の一覧に metrics-server のPodが表示され、正常に動作していることを確認できます(この実行例では、一番下の行)。
[root@control ~]# kubectl get pods -n kube-system -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
calico-kube-controllers-58f68d56d9-7mh9c 1/1 Running 0 3h47m 10.244.42.194 control <none> <none>
calico-node-bw49k 1/1 Running 0 3h38m 192.168.1.16 worker1 <none> <none>
calico-node-pmt6s 1/1 Running 0 3h38m 192.168.1.17 worker2 <none> <none>
calico-node-x9gmw 1/1 Running 0 3h47m 192.168.1.15 control <none> <none>
coredns-589f44dc88-bm7dp 1/1 Running 0 3h50m 10.244.42.193 control <none> <none>
coredns-589f44dc88-pgrks 1/1 Running 0 3h50m 10.244.42.195 control <none> <none>
etcd-control 1/1 Running 0 3h50m 192.168.1.15 control <none> <none>
kube-apiserver-control 1/1 Running 0 3h50m 192.168.1.15 control <none> <none>
kube-controller-manager-control 1/1 Running 0 3h50m 192.168.1.15 control <none> <none>
kube-proxy-hqvsc 1/1 Running 0 3h38m 192.168.1.16 worker1 <none> <none>
kube-proxy-nnnl6 1/1 Running 0 3h38m 192.168.1.17 worker2 <none> <none>
kube-proxy-wrgcs 1/1 Running 0 3h50m 192.168.1.15 control <none> <none>
kube-scheduler-control 1/1 Running 0 3h50m 192.168.1.15 control <none> <none>
metrics-server-5846d89996-lf78z 1/1 Running 0 36s 10.244.235.129 worker1 <none> <none>
5 動作確認
(1) 初期状態の確認
ノードのリソース使用状況を確認します。
[root@control ~]# kubectl top node
NAME CPU(cores) CPU(%) MEMORY(bytes) MEMORY(%)
control 159m 3% 1949Mi 55%
worker1 46m 1% 1029Mi 29%
worker2 46m 1% 972Mi 27%
(2) CPU0 に負荷をかける
CPU0 に対して、CPU 使用率を高める負荷(CPU 負荷)をかけます。
[root@control ~]# stress-ng -c 1 --taskset 0 -q &
[1] 75755
CPU使用率を確認すると、CPU0(PSR列が 0)の CPU使用率が96%になっていることが分かります。
[root@control ~]# ps -C stress-ng,stress-ng-cpu -o comm,pid,ppid,%cpu,psr,wchan
COMMAND PID PPID %CPU PSR WCHAN
stress-ng 75755 3885 0.0 0 do_wait
stress-ng-cpu 75756 75755 96.0 0 -
control ノードの CPU 使用率を確認すると、28% に増加していることが分かります。
[root@control ~]# kubectl top node
NAME CPU(cores) CPU(%) MEMORY(bytes) MEMORY(%)
control 1138m 28% 1989Mi 56%
worker1 54m 1% 1045Mi 29%
worker2 52m 1% 987Mi 28%
(3) CPU1 に負荷をかける
CPU1 に対して、CPU 使用率を高める負荷(CPU 負荷)をかけます。
[root@control ~]# stress-ng -c 1 --taskset 1 -q &
[2] 76990
CPU使用率を確認すると、CPU1(PSR列が 0)の CPU使用率が102%になっていることが分かります。
[root@control ~]# ps -C stress-ng,stress-ng-cpu -o comm,pid,ppid,%cpu,psr,wchan
COMMAND PID PPID %CPU PSR WCHAN
stress-ng 75755 3885 0.0 0 do_wait
stress-ng-cpu 75756 75755 98.9 0 -
stress-ng 76990 3885 0.0 1 do_wait
stress-ng-cpu 76991 76990 102 1 -
control ノードの CPU 使用率を確認すると、53% に増加していることが分かります。
[root@control ~]# kubectl top node
NAME CPU(cores) CPU(%) MEMORY(bytes) MEMORY(%)
control 2137m 53% 2005Mi 56%
worker1 57m 1% 1045Mi 29%
worker2 63m 1% 987Mi 28%
(4) CPU2 に負荷をかける
CPU2 に対して、CPU 使用率を高める負荷(CPU 負荷)をかけます。
[root@control ~]# stress-ng -c 1 --taskset 2 -q &
[3] 77977
CPU使用率を確認すると、CPU2(PSR列が 0)の CPU使用率が102%になっていることが分かります。
[root@control ~]# ps -C stress-ng,stress-ng-cpu -o comm,pid,ppid,%cpu,psr,wchan
COMMAND PID PPID %CPU PSR WCHAN
stress-ng 75755 3885 0.0 0 do_wait
stress-ng-cpu 75756 75755 99.0 0 -
stress-ng 76990 3885 0.0 1 do_wait
stress-ng-cpu 76991 76990 99.6 1 -
stress-ng 77977 3885 0.0 2 do_wait
stress-ng-cpu 77978 77977 102 2 -
control ノードの CPU 使用率を確認すると、78% に増加していることが分かります。
[root@control ~]# kubectl top node
NAME CPU(cores) CPU(%) MEMORY(bytes) MEMORY(%)
control 3140m 78% 2021Mi 57%
worker1 81m 2% 1044Mi 29%
worker2 75m 1% 987Mi 28%
(5) CPU3 に負荷をかける
CPU3 に対して、CPU 使用率を高める負荷(CPU 負荷)をかけます。
[root@control ~]# stress-ng -c 1 --taskset 3 -q &
[4] 78856
CPU 使用率を確認すると、すべての CPU コアがほぼ 100% の状態で動作していることが分かります。
[root@control ~]# ps -C stress-ng,stress-ng-cpu -o comm,pid,ppid,%cpu,psr,wchan
COMMAND PID PPID %CPU PSR WCHAN
stress-ng 75755 3885 0.0 0 do_wait
stress-ng-cpu 75756 75755 98.8 0 -
stress-ng 76990 3885 0.0 1 do_wait
stress-ng-cpu 76991 76990 99.0 1 -
stress-ng 77977 3885 0.0 2 do_wait
stress-ng-cpu 77978 77977 98.9 2 -
stress-ng 78856 3885 0.1 3 do_wait
stress-ng-cpu 78857 78856 90.5 3 -
control ノードの CPU 使用率を確認すると、99% に増加していることが分かります。
[root@control ~]# kubectl top node
NAME CPU(cores) CPU(%) MEMORY(bytes) MEMORY(%)
control 3998m 99% 2037Mi 57%
worker1 92m 2% 1045Mi 29%
worker2 84m 2% 987Mi 28%
(6) あと始末
起動した stress-ng のプロセスを終了します。
[root@control ~]# jobs
[1] 実行中 stress-ng -c 1 --taskset 0 -q &
[2] 実行中 stress-ng -c 1 --taskset 1 -q &
[3]- 実行中 stress-ng -c 1 --taskset 2 -q &
[4]+ 実行中 stress-ng -c 1 --taskset 3 -q &
[root@control ~]# kill %1
[root@control ~]# kill %2
[root@control ~]# kill %3
[root@control ~]# kill %4