メトリックを報告しないクラスタエージェントのトラブルシューティング

クラスタエージェントが特定のコンテナ、ポッド、またはノードのメトリックを報告しない場合は、Kubernetes メトリックサーバの問題が原因であると考えられます。メトリックがメトリックサーバによって報告されない場合、クラスタエージェントはメトリックを報告できません。

メトリックサーバがメトリックを送信していることを確認するには、クラスタのプライマリノードから次のコマンドを入力します。

$ kubectl get --raw /apis/metrics.k8s.io/v1beta1/pods

コマンドの出力にコンテナのメトリックが表示されない場合は、メトリックサーバに問題がある可能性があります。次に、メトリックサーバからの出力例を示します。

{
"kind":"PodMetricsList",
"apiVersion":"metrics.k8s.io/v1beta1",
"metadata":{
"selfLink":"/apis/metrics.k8s.io/v1beta1/pods"
},
"items":[
{
"metadata":{
"name":"replicaset-test-cjnsc",
"namespace":"test-qe",
"selfLink":"/apis/metrics.k8s.io/v1beta1/namespaces/test-qe/pods/replicaset-test-cjnsc",
"creationTimestamp":"2019-09-23T10:24:46Z"
},
"timestamp":"2019-09-23T10:23:38Z",
"window":"30s",
"containers":[
{
"name":"appagent",
"usage":{
"cpu":"1667384n",
"memory":"258672Ki"
}
}
]
}
]
}

メトリックサーバは、ノード、ポッド、コンテナからメトリックを収集するため、すべての問題をログに記録します。メトリックサーバのログを取得して表示するには、次を入力します。

$ kubectl logs <metric-server pod name>  -n <namespace for metric-server(default value is: "kube-system")> --tail <number of required lines of logs>

例:

$ kubectl logs metrics-server-6764b987d-mtn7g -n kube-system --tail 20

メトリックサーバログでは、メトリックを収集できなかった理由が明らかになることがあります。例:

E0920 11:44:54.204075       1 reststorage.go:147] unable to fetch pod metrics for pod test-qe/replicaset-test-9k7rl: no metrics known for pod
E0920 11:44:54.204080       1 reststorage.go:147] unable to fetch pod metrics for pod test/replicaset1-458-g9n2d: no metrics known for pod
E0920 11:44:54.204089       1 reststorage.go:147] unable to fetch pod metrics for pod kube-system/kube-proxy-t54rc: no metrics known for pod
E0920 11:45:19.188033       1 manager.go:111] unable to fully collect metrics: unable to fully scrape metrics from source kubelet_summary:ip-111.111.111.111: unable to fetch metrics from Kubelet ip-111.111.111.111 (111.111.111.111): Get https://111.111.111.111:2222/stats/summary/: dial tcp 111.111.111.111:2222: i/o timeout