metrics-server
のデバッグ
仮想プライベート・クラウド クラシック・インフラストラクチャー
以下の症状は、metrics-server
リソースを調整する必要があることを示している可能性があります。
-
metrics-server
が頻繁に再始動する。 -
名前空間を削除すると、名前空間が
Terminating
状態のままになり、kubectl describe namespace
にメトリック API ディスカバリー・エラーを報告する条件が含まれる。 -
kubectl top pods
、kubectl top nodes
、その他のkubectl
コマンド、または Kubernetes API を使用するアプリケーションが、以下のような Kubernetes エラーをログに記録する。The server is currently unable to handle the request (get pods.metrics.k8s.io)
Discovery failed for some groups, 1 failing: unable to retrieve the complete list of server APIs: metrics.k8s.io/v1beta1: the server is currently unable to handle the request
-
HorizontalPodAutoscalers (HPA) がデプロイメントをスケーリングしない。
-
kubectl get apiservices v1beta1.metrics.k8s.io
を実行すると、次のような状況になる。NAME SERVICE AVAILABLE AGE v1beta1.metrics.k8s.io kube-system/metrics-server False (FailedDiscoveryCheck) 139d
クラスターには、kube-system
名前空間内の metrics-server
デプロイメントによって提供されるメトリック・サービスがあります。 metrics-server
リソースの要求と制限は、クラスター内のノード数に基づいており、ワーカー・ノード当たりのポッド数が 30 以下のクラスター用に最適化されています。 メモリー要求が少なすぎると、メモリー不足エラーで失敗し、応答が非常に遅くなる可能性があります。
CPU 要求が小さすぎると、CPU スロットルが原因で、活性プローブおよび作動可能プローブが失敗する可能性があります。
metrics-server
での問題は、他の領域でも問題の原因となる可能性があります。 コントロール・プレーンが Konnectivity を使用して metrics-server と通信できない場合、メトリック API は使用できません。 アドミッション制御 Webhook により、コントロール・プレーンがポッド (metrics-server
ポッドを含む) を作成できないようにすることができます。
トラブルシューティングを行うには、以下の手順に従ってください。
-
metrics-server ポッドが存在することを確認します。
kubectl get pod -n kube-system -l k8s-app=metrics-server
ポッドがリストされない場合は、
admission-control
Webhook に問題がある可能性があります。 Webhook が壊れているためにクラスター操作が失敗するのはなぜですか?を参照してください。 -
API サーバーが
metrics-server
に接続できることを確認します。kubectl logs POD -n kube-system -c metrics-server --tail 5
POD
を、前述のポッド名に置き換えます。 返されるログの内容は問題ではありません。<workerIP>:10250: getsockopt: connection timed out
のようなテキストを含むエラー・メッセージを受け取った場合は、kubectl
コマンドがタイムアウトになるを参照してください。 -
前のステップで問題が示されない場合は、
metrics-server
のリソースを調整してください。 クラスター・メトリック・プロバイダー・リソースの調整を参照してください。