Kubernetes クラスタにおけるメトリクスサーバーの問題のトラブルシューティング
Kubernetes クラスター内のメトリクスサーバーに関する一般的な問題のデバッグ方法と解決策について、症状、原因、および手順を詳しく解説します。
仮想プライベートクラウド クラシック・インフラストラクチャー
以下の症状は、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を介してメトリクスサーバーと通信できない場合、メトリクスAPIは利用できません。 アドミッション制御 Webhook により、コントロール・プレーンがポッド (metrics-server ポッドを含む) を作成できないようにすることができます。
トラブルシューティングを行うには、以下の手順に従ってください。
-
metrics-server ポッドが存在することを確認します。
kubectl get pod -n kube-system -l k8s-app=metrics-serverポッドがリストされない場合は、
admission-controlWebhook に問題がある可能性があります。 Webhook が壊れているためにクラスター操作が失敗するのはなぜですか?を参照してください。 -
API サーバーが
metrics-serverに接続できることを確認します。kubectl logs POD -n kube-system -c metrics-server --tail 5PODを、前述のポッド名に置き換えます。 返されるログの内容は問題ではありません。<workerIP>:10250: getsockopt: connection timed outのようなテキストを含むエラー・メッセージを受け取った場合は、kubectlコマンドがタイムアウトになるを参照してください。 -
前のステップで問題が示されない場合は、
metrics-serverのリソースを調整してください。 クラスター・メトリック・プロバイダー・リソースの調整を参照してください。