Kubernetes環境のCPUやメモリリソースの使用率をKubernetes API経由で確認するための機能として、「Kubernetes Metrics Server」がある。
Kubernetes Metrics Serverは、標準ではインストールされておらず使用できない。そのため、kubectl top
コマンドでリソース情報を取得しようとしても、以下の通り"Metrics API not available"のエラーで失敗する。
# kubectl top node
error: Metrics API not available
# kubectl top pod -A
error: Metrics API not available
Kubernetes Metrics Serverは、マニフェストファイルをApplyすることで簡単に導入することができる。本記事では、Kubernetes Metrics Serverの導入手順を記載する。導入することでkubectl top
コマンドを利用できるようにする。
環境
環境は以下の通り。
- ホストOS : AlmaLinux 8.6
- Kubernetes: v1.27.3
- Kubernetes Metrics Server: v0.6.3 (2023/7/16導入)
Kubernetes Metrics Server導入手順
1. インストール用マニフェストファイルのダウンロード
Kubernetes Metrics Serverはマニフェストファイルを用いることでインストールできる。公式手順は直接kubectl apply [URL]
コマンドを実行しているが、今回は次の手順で一部マニフェストファイルを編集をするため、先にcurl
コマンドでダウンロードを行う。
#curl -LO https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
# ls -l
-rw-r--r-- 1 root root 4186 7月 16 17:20 components.yaml
2. マニフェストファイルを編集
Kubernetes Metrics ServerへはHTTPSによる通信にて接続を行うが、その際にSSL証明書の検証が動作し、検証に失敗すると正常にリソース情報を取得することができない。
そこで、--kubelet-insecure-tls
のオプションを追加し、証明書の検証を行わないよう設定する。
components.yaml
~(中略)~
strategy:
rollingUpdate:
maxUnavailable: 0
template:
metadata:
labels:
k8s-app: metrics-server
spec:
containers:
- args:
- --cert-dir=/tmp
- --secure-port=4443
- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
- --kubelet-use-node-status-port
- --metric-resolution=15s
- --kubelet-insecure-tls # <-★追加
~(以下略)~
3. マニフェストファイルをapply
修正したマニフェストファイルをapplyする。
# kubectl apply -f components.yaml
serviceaccount/metrics-server created
clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created
clusterrole.rbac.authorization.k8s.io/system:metrics-server created
rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created
clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created
clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created
service/metrics-server created
deployment.apps/metrics-server created
apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created
4. Pod及びサービスリソースの起動確認
10秒ほど経過してから確認すると、Podとサービスリソースが正常に展開されているはずだ。
# kubectl get pod -n=kube-system
NAME READY STATUS RESTARTS AGE
~(中略)~
metrics-server-7db4fb59f9-skc7s 1/1 Running 0 144m
# kubectl get service -n=kube-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 53d
metrics-server ClusterIP 10.107.188.51 <none> 443/TCP 3h2m
もし、PodのREADYが0/1などになっている場合は正常にコンテナが起動していない可能性があるため、Podのログを確認して原因調査が必要となる。例えば、--kubelet-insecure-tls
オプションを付与しておらず証明書の検証に失敗した場合は、以下のような"statuscode: 500"のエラーが表示される。
# kubectl describe pod metrics-server-7b4c4d4bfd-tbctq -n=kube-system
Name: metrics-server-7b4c4d4bfd-tbctq
Namespace: kube-system
~(中略)~
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 5m48s default-scheduler Successfully assigned kube-system/metrics-server-7b4c4d4bfd-tbctq to t3052kube
Normal Pulled 5m48s kubelet Container image "registry.k8s.io/metrics-server/metrics-server:v0.6.3" already present on machine
Normal Created 5m48s kubelet Created container metrics-server
Normal Started 5m48s kubelet Started container metrics-server
Warning Unhealthy 38s (x33 over 5m28s) kubelet Readiness probe failed: HTTP probe failed with statuscode: 500
↑★"statuscode: 500"のエラー
5. kubectl top
コマンドで動作確認
kubectl top
コマンドでノードとPodのリソース取得ができることの確認をしてみよう。
ノードの場合
# kubectl top node
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
t3051kube 121m 3% 2459Mi 67%
t3052kube 90m 2% 1076Mi 29%
t3053kube 105m 2% 2470Mi 68%
Podの場合
[root@t3051kube metrics-server]# kubectl top pod -A
NAMESPACE NAME CPU(cores) MEMORY(bytes)
~(中略)~
mynamespace almalinux-postfix-7b4577c6bc-fq578 1m 36Mi
mynamespace almalinux-postfix-7b4577c6bc-hds6v 1m 43Mi
mynamespace almalinux-postfix-7b4577c6bc-mtrnp 1m 42Mi
mynamespace almalinux-squid-d66588dbb-g6tn6 1m 200Mi
mynamespace almalinux-squid-d66588dbb-m5fff 1m 279Mi
mynamespace almalinux-squid-d66588dbb-t9lg6 1m 266Mi
mynamespace almalinux-unbound-66c9746bff-92htn 0m 42Mi
mynamespace almalinux-unbound-66c9746bff-f5gmk 0m 37Mi
mynamespace almalinux-unbound-66c9746bff-rnw8m 0m 40Mi
以上で、Kubernetes Metrics Serverの導入手順は終了となる。
0 件のコメント:
コメントを投稿