コンテンツに移動
Containers & Kubernetes

GKE の Kubernetes コントロール プレーンの指標のご紹介

2022年9月21日
Google Cloud Japan Team

※この投稿は米国時間 2022 年 9 月 9 日に、Google Cloud blog に投稿されたものの抄訳です。

どのアプリケーションの運用にも不可欠な側面は、そのアプリケーションと基盤となるインフラストラクチャの正常性とパフォーマンスを観察して、問題が発生したときに迅速に解決する能力です。Google Kubernetes Engine(GKE)は、すぐに使用できるダッシュボードと自動エラーレポートに加えて、監査ログオペレーション ログ指標をすでに提供し、信頼性の高いアプリケーションの大規模な実行を簡単に行えるようにしています。このようなログと指標を使用して、Cloud Operations は、アラート、モニタリング ダッシュボード、ログ エクスプローラを提供し、問題の迅速な検出、トラブルシューティング、解決を可能にします。

Kubernetes コントロール プレーンの指標のご紹介とその重要性について

テレメトリ データの既存のソースに加えて、このたび、Kubernetes コントロール プレーンの指標の一般公開を発表いたします。GKE の場合、Google が Kubernetes コントロール プレーンを完全に管理しますが、問題のトラブルシューティング時には、Kubernetes コントロール プレーンが出力する特定の指標にアクセスできると便利です。

Kubernetes の使用性と操作性を向上させるという、Google のビジョンの一環として、コントロール プレーンの指標は、Cloud Monitoring と直接統合されているため、指標の収集やスクレイピング構成を管理する必要がありません。

たとえば、API サーバーの正常性を把握するには、apiserver_request_totalapiserver_request_duration_seconds などの指標を使用して、API サーバーにかかっている負荷、エラーを返す API サーバーのリクエストの割合、API サーバーが受信したリクエストのレスポンスのレイテンシを追跡できます。また、apiserver_storage_objects は、特にカスタム コントローラを使用している場合、API サーバーの飽和度をモニタリングするのに非常に有用です。この指標をリソースのラベルで分類して、どの Kubernetes カスタム リソース、またはコントローラに問題があるか見つけ出します。

Pod が作成されると、最初は「保留」状態になり、ノードでまだスケジュールされていないことを示します。正常なクラスタでは、保留中の Pod がノード上で比較的早くスケジュールされ、実行に必要なリソースがワークロードに提供されます。ただし、保留中の Pod 数が持続的に増加している場合は、Pod のスケジューリングに問題があることを示している可能性があります。これは、リソースが不足している、または構成が適切でないことが原因と考えられます。scheduler_pending_pods、scheduler_schedule_attempts_total、scheduler_preemption_attempts_total、scheduler_preemption_victims、scheduler_scheduling_attempt_duration_seconds などの指標は、スケジューリングの問題の可能性をアラートできるため、お客様は迅速に対応して、Pod で十分なリソースを確保できるようになります。指標を組み合わせて使用することで、クラスタの正常性をより把握できます。たとえば、scheduler_preemption_attempts_total が上昇した場合、より優先度の高い Pod をスケジュールできることを意味し、Scheduler により実行中の Pod がプリエンプトされます。ただし、scheduler_pending_pods の値も増加している場合は、優先度の高い Pod の割り振りに十分なリソースがないことを示している可能性があります。


Kubernetes Scheduler が、Pod に適したノードをまだ見つけることができない場合、Pod は最終的にスケジュール不可能としてマークされます。Kubernetes コントロール プレーンの指標は、Pod のスケジューリング エラーとスケジュール不可能な Pod を可視化します。いずれの場合でも急増は、Kubernetes Scheduler が、多くの Pod を実行する適切なノードを見つけられないことを意味し、最終的にアプリケーションのパフォーマンスが低下する可能性があります。多くの場合、根本的な原因に対処するためのアクションを起こすまで、スケジュール不可能な Pod の割合が高い問題を解決できません。問題のトラブルシューティングで最初に始めた方がいいことは、最近の FailedScheduling イベントを探すことです(GKE のシステムログを有効にしている場合は、すべての Kubernetes イベントが Cloud Logging で利用できるようになっています)。FailedScheduling イベントには、Pod がどのノードでもスケジュールできなかった理由を正確に示す役立つメッセージ(たとえば、「0/6 ノードが使用可能: 6 CPU が不足」など)が含まれます。これは、問題の対処方法に関するガイダンスとなります。

最後の例: ジョブのスケジューリングが非常に遅い場合、考えられる原因の一つは、サードパーティの Webhook が大幅なレイテンシを引き起こしていることです。API サーバーがジョブをスケジュールするのに長い時間がかかっている可能性があります。apiserver_admission_webhook_admission_duration_seconds などの Kubernetes コントロール プレーンの指標は、アドミッション Webhook のレイテンシを公開して、遅いジョブ スケジューリングの根本的な原因を特定し、問題を軽減できるようにします。

状況に合わせて表示

Kubernetes コントロール プレーンの指標を追加で利用できるようになっただけでなく、このような指標のすべてが Cloud コンソールの Kubernetes Engine セクションに表示されるようになったこともお知らせいたします。これにより、GKE クラスタの管理中に問題を状況に合わせて特定して調査することが簡単になります。

コントロール プレーンの指標を表示するには、Cloud コンソールの Kubernetes クラスタ セクションに移動し、[オブザーバビリティ] タブを選択してから、[コントロール プレーン] を選択します。

https://storage.googleapis.com/gweb-cloudblog-publish/images/control_plane_metrics_screenshot.max-2200x2200.jpg

Kubernetes コントロール プレーンの指標は、すべて Cloud Monitoring に取り込まれるため、Cloud Alerting でアラート ポリシーを作成して、注意が必要なときにすぐ通知を受けることができます。

PromQL に対応

GKE クラスタの Kubernetes コントロール プレーンの指標を有効にすると、すべての指標が Google Cloud Managed Service for Prometheus を使用して収集されます。つまり、指標が Kubernetes クラスタと同じ GCP プロジェクトの Cloud Monitoring に送信され、Cloud Monitoring API と Metrics Explorer を介して PromQL を使用してクエリできるようになるということです。

たとえば、次の PromQL クエリを使用して、99 パーセンタイル API サーバーのレスポンス レイテンシの急増をモニタリングできます。

読み込んでいます...

サードパーティ サポート

一般的なサードパーティのオブザーバビリティ ツールを使用して、GKE クラスタをモニタリングする場合、サードパーティのオブザーバビリティ ツールは、Cloud Monitoring API を使用して、Kubernetes コントロール プレーンの指標を取り込むことができます。

たとえば、Datadog のお客様で、GKE クラスタの Kubernetes コントロール プレーンの指標を有効にしている場合、Datadog は、API サーバー、Scheduler、Controller Manager からの Kubernetes コントロール プレーンの指標を含む拡張された可視化を提供します。

料金

すべての Kubernetes コントロール プレーンの指標は、Google Cloud Managed Service for Prometheus から取り込まれた指標の標準料金で課金されます。

使ってみる

コントロール プレーン バージョン 1.23.6 以降を実行している GKE クラスタは、Kubernetes API サーバー、Scheduler、Controller Manager から指標にアクセスできるようになりました。Kubernetes コントロール プレーンの指標は、GKE Autopilot クラスタではご利用できません。

次の gcloud コマンドは、クラスタを更新して、Kubernetes API サーバー、Scheduler、Controller Manager からの指標の収集を有効にします。

読み込んでいます...

Kubernetes コントロール プレーンの指標は、Terraform を使用して構成することもできます。

詳細は、コントロール プレーンの指標の収集の構成をご覧ください。

- Google Kubernetes Engine グループ プロダクト マネージャー Nathan Beach

投稿先