k8s リソースをディスプレイに表示する

k8s リソースをディスプレイに表示する


おうち k8s 構築の続きです。

k8s cluster 各ノードの CPU, Memory を取得し、ディスプレイに表示します。

手順

Pod metrics-server 追加

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// 2022.05.14 時点最新 commit abacf42babf4b4f623e992ff65761cd3902d0994 を参照しています。
$ wget https://github.com/kubernetes-sigs/metrics-server/releases/download/metrics-server-helm-chart-3.8.2/components.yaml -O metrics-server-components.yaml

$ vim metrics-server-components.yaml

// 以下編集
spec:
containers:
- args:
...
- --kubelet-insecure-tls # 追加

$ kubectl apply -f metrics-server-components.yaml

// metrics-server 関連 pod 起動確認
$ kubectl get pod metrics-server -n kube-system

...
// 以下のように表示されれば OK
metrics-server-8bb87844c-jvfnz 1/1 Running 0 31s

// k8s cluster 各ノードの CPU/Memory 表示
$ kubectl top node

NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
pikube01 466m 11% 1309Mi 35% # master node
pikube02 171m 4% 1615Mi 43%
pikube03 576m 14% 1525Mi 40%

sampler ビルド/実行

RPi の master node (pikube01) で以下作業を進めます。

RPi に Go をインストールする必要があります。以下参考まで

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
// see: https://github.com/greghesp/assistant-relay/issues/49
$ sudo apt-get install libasound2-dev

$ git clone https://github.com/sqshq/sampler
$ cd sampler
$ GOOS=linux GOARCH=arm GOARM=7 go build
$ sudo mv sampler /usr/bin

$ cd $HOME
$ cat <<'EOF'> sampler-config.yml
gauges:
- title: pikube01 CPU
position: [[0, 0], [40, 6]]
rate-ms: 30000
color: 10
percent-only: true
cur:
sample: cat /tmp/kube-node | grep pikube01 | awk '{print $3}' | tr -d "%"
max:
sample: echo 100
min:
sample: echo 0
- title: pikube02 CPU
position: [[0, 7], [40, 6]]
rate-ms: 30000
color: 13
percent-only: true
cur:
sample: cat /tmp/kube-node | grep pikube02 | awk '{print $3}' | tr -d "%"
max:
sample: echo 100
min:
sample: echo 0
- title: pikube03 CPU
position: [[0, 13], [40, 6]]
rate-ms: 30000
color: 14
percent-only: true
cur:
sample: cat /tmp/kube-node | grep pikube03 | awk '{print $3}' | tr -d "%"
max:
sample: echo 100
min:
sample: echo 0
- title: pikube01 Mem
position: [[40, 0], [40, 6]]
rate-ms: 30000
color: 10
cur:
sample: cat /tmp/kube-node | grep pikube01 | awk '{print $4}' | tr -d "Mi"
max:
sample: echo 4096
min:
sample: echo 0
- title: pikube02 Mem
position: [[40, 7], [40, 6]]
rate-ms: 30000
color: 13
cur:
sample: cat /tmp/kube-node | grep pikube02 | awk '{print $4}' | tr -d "Mi"
max:
sample: echo 4096
min:
sample: echo 0
- title: pikube03 Mem
position: [[40, 13], [40, 6]]
rate-ms: 30000
color: 14
cur:
sample: cat /tmp/kube-node | grep pikube03 | awk '{print $4}' | tr -d "Mi"
max:
sample: echo 4096
min:
sample: echo 0
textboxes:
- title: Status
position: [[0, 19], [80, 23]]
rate-ms: 30000
sample: >-
kubectl top node > /tmp/kube-node;
kubectl get all --all-namespaces > /tmp/kube-all;
echo "Pod:$(cat /tmp/kube-all | grep pod/ | grep 'Running' | wc -l)"
"Service:$(cat /tmp/kube-all | grep service/ | wc -l)"
"Daemonset:$(cat /tmp/kube-all | grep daemonset.apps/ | wc -l)"
"Deployment:$(cat /tmp/kube-all | grep deployment.apps/ | wc -l)"
"Replicaset:$(cat /tmp/kube-all | grep replicaset.apps/ | wc -l)";
echo "";
echo "Service";
kubectl get svc --no-headers | grep -v ClusterIP | awk '{print $1, $4, $5}' | column -t;
EOF

いざ sampler 起動

master node にキーボードを直接接続し、コンソール上で sampler を起動します。

1
sampler -c sampler-config.yml

かっこいい!

ちょっとハマりポイント

ディスプレイに 「QUIMAT 3.5 インチタッチスクリーン HDMI モニタ TFT LCD ディスプレイ」を使いましたが、
HDMI 接続で解像度の調整が難しく、手を焼きました。

/boot/config.txt の修正をして再起動したら、 RPi が起動しなくなったり。。。

ssh もできなくなり、RPi にキーボード接続しても操作できなくなり、強制停止(電源引っこ抜き)し、 SD カードを別マシンで読み込んで /boot/config.txt を元に戻して事なきを得ました。

RPi4B の /boot/config.txt は 公式ドキュメント を参考に最終的に以下のような編集をしました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// 以下追加
# コンソールフレームバッファの幅
framebuffer_width=480
# コンソールフレームバッファの高さ
framebuffer_height=320

# 480x320 の解像度の設定がない為、カスタムCVTモードを定義する
# hdmi_cvt=<width> <height> <framerate> <aspect> <margins> <interlace> <rb>
hdmi_cvt=480 320 60 6 0 0 0

# HDMI が接続されていない状態で RPi を起動するとコンポジットに切り替わるのを防ぐ
# ディスプレイを HDMI に接続すると表示される様にする
hdmi_force_hotplug=1

# DMT (Display Monitor Timings、通常モニターで使用される規格) に設定
# 今回利用するディスプレイに対応
hdmi_group=2
# hdmi_group=2 にない hdmi_mode でカスタムモードを利用したい場合に設定する
hdmi_mode=87

# 通常の HDMI モード
hdmi_drive=2

# 以下コメントアウト: この設定があると解像度が変わってしまい、文字サイズが小さくなってしまう
#dtoverlay=vc4-kms-v3d
#max_framebuffers=2

以上
参考になれば幸いです。

参考

https://qiita.com/reireias/items/0d87de18f43f27a8ed9b

k8s リソースをディスプレイに表示する

https://kenzo0107.github.io/2022/05/17/2022-05-18-k8s-monitoring-metric/

Author

Kenzo Tanaka

Posted on

2022-05-18

Licensed under

コメント