Splunkは、Amazon Kubernetesの公式ディストリビューションであるAmazon EKS Distro (EKS-D)の提供においてアマゾン ウェブ サービス (AWS)とパートナーを組んでいます。EKS-Dには、Amazon EKSと同じ検証およびテスト済みのセキュアなコンポーネントが含まれます。Splunk Infrastructure Monitoringは、Kubernetesを監視するためのエンタープライズクラスのターンキーソリューションで、Amazon EKSに対応しています。Splunk Infrastructure Monitoringでは、特別な設定をせずにKubernetesコントロールプレーンを監視することもできます。SplunkのEKS-Dのサポートにより、両社のお客様は、クラウドネイティブのAmazon EKSからAmazon Outpostsとのハイブリッド、オンプレミスの自己管理型環境まで、あらゆる環境でKubernetesを確実に運用できます。
Kubernetes Navigatorでは、Kubernetesワーカーノードやデプロイされたアプリケーションのパフォーマンスを簡単かつ直感的に把握および管理できます。以前のブログでは、以下の機能を活用することで、DevOpsチームとSREチームがKubernetes環境のパフォーマンスの問題を迅速に検出、トリアージ、解決する方法をご紹介しました。
さらに、自己管理型のEKS-D環境の場合、DevOpsチームは、Kubernetesコントロールプレーンの主要なパフォーマンスメトリクスをリアルタイムで表示し、正確なアラートを受け取る必要があります。
このブログでは、Splunk Infrastructure MonitoringでAmazon EKS-Dのコントロールプレーンを監視する方法について詳しく説明します。
Kubernetesクラスターは、コンテナ化したアプリケーションをデプロイする1つ以上のワーカーノードと、それらのワーカーノードを管理するコントロールプレーンで構成されます。コントロールプレーンは、どのPodをどのワーカーノードにデプロイするかなど、スケジューリングに関する決定を行い、クラスターを監視して、Kubernetesクラスターが適切な状態になるように管理します。
Splunkは、コントロールプレーンを構成するコンポーネント、ワーカーノードで実行されるコンポーネント、主要なアドオンなど、Kubernetes内部コンポーネントに関する設定済みのテレメトリを提供します。これらのコンポーネントを監視すれば、Kubernetesクラスターのスケジューリング、オーケストレーション、ネットワークに関する問題を迅速に解決できます。
図:Amazon EKS Distro (EKS-D)のコンポーネント
Kubernetesは分散システムであり、上記のコンポーネントはすべてAPIサーバーのみと通信します。APIサーバーは、デプロイしたアプリケーションのさまざまなライフサイクルイベントを調整します。 Kubernetesは、Kubernetesクラスターの状態を表すKubernetesオブジェクトと呼ばれる永続エンティティで構成されます。Kubernetesオブジェクトには以下のものがあります。
APIサーバーは、クラスターを操作するためのkubectlや自動化タスクなど、すべてのKubernetesコンポーネントとクライアントの中央ハブとして機能します。HTTP経由のRESTful APIを実装することにより、クラスターを照会および変更するためのCRUD(作成、読み取り、更新、削除)インターフェイスを提供します。CRUDリクエストの検証を行った後、etcd分散ストレージシステムにクラスターの状態を保存し、クライアントが不適切な構成のオブジェクトを保存できないようにします。検証と同時に、認証、認可、排他制御を実行することで、オブジェクトに対して許可された変更が同時に複数行われた場合でも、他のクライアントにオーバーライドされないようにします。APIサーバーでは、これらのタスクを実行するためにさまざまなプラグインが使用されます。
図:Kubernetes APIサーバーの健全性とパフォーマンスを表示する設定済みのダッシュボード
クラスターとのやりとりはすべてAPIサーバーを通じて行われるため、APIサーバーの健全性とパフォーマンスを監視することは特に重要です。Splunkでは、メトリクスを自動的に収集し、設定済みのダッシュボードに同時スレッド数、goroutine、RPCレートなどの内部コンポーネントの状態を表示できます。また、登録キューの深さを監視し、キューに追加されたリクエストを追跡して、APIサーバーでリクエストの処理が遅れている場合に通知することもできます。 Splunkでは「4つのゴールデンシグナル」アプローチを取り入れてAPIサーバーの健全性とパフォーマンスを監視できます。
コントローラーマネージャーは、クラスターが適切な状態になるようにコントローラーを運用します。DevOpsチームは、リソース仕様ファイルを通じて「適切な状態」をAPIサーバーに指定します。たとえばノードコントローラーは、クラスター内の各ノードの健全性を監視し、到達不能なノードがあった場合はPodを適切に退避させることによって、ノードリソースを管理します。また、レプリケーションコントローラーは、クラスターで実行されている実際のPod数と必要なPod数の差を調整します。コントローラーマネージャーの健全性は、クラスターのパフォーマンスを示します。
図:コントローラーマネージャーのパフォーマンスを表示する設定済みダッシュボード
コントローラーマネージャーのダッシュボードでは、Podのレプリケーションなどのリクエストが処理前に入るワークキューを確認できます。また、リクエスト処理のレイテンシーを監視したり、マネージャーからAPIサーバーへのHTTPリクエスト数を追跡してこれらのコンポーネント間の通信状態を把握したりすることもできます。さらに、コントローラーマネージャーを実行しているコンテナのサチュレーション状態を監視して、CPU、メモリ、ディスクリソースが十分に確保されていることを確認することも重要です。コントローラーマネージャーのパフォーマンスメトリクスの全リストは、こちらのドキュメントで確認できます。
etcdは、クラスターの状態を永続化するための分散キーバリューストアです。クラスターの状態を保持し、Kubernetesオブジェクトの実行に関する情報を提供します。etcdでは、分散合意アルゴリズムのRaftが使用されます。etcdサービスが利用できなくなった場合、既存のPodの実行は続けられますが、クラスターの状態は変更できなくなります。また、Kubernetes APIサーバーがetcdに再接続すると、不整合が発生します。
図:etcdのパフォーマンスに関するインサイトを表示する設定済みダッシュボード
etcdクラスターリーダーを監視することが重要です。リーダーを実行しているノードに障害が発生した場合、Raftによって新しいノードが選出され、リーダーシップ変更イベントが発生します。一般的に、リーダーシップの変更が頻繁に発生する場合は、構造的な問題を示している可能性があります。また、各種のプロポーザルのレイテンシーを監視して、プロポーザルの失敗(proposals_failed_total)についてアラートを通知することもできます。プロポーザルの失敗は、クラスター全体の問題を示します。さらに、Kubernetesがクラスター内の変更をサブスクライブしてAPIサーバーからの状態リクエストを実行するために使用するウォッチャーの数(etcd_debugging_mvcc_watcher_total)も監視します。
DevOpsチームは通常、Podを実行するノードを指定しません。ノードの指定はスケジューラーに任され、スケジューラーは、ノードが決まっていない新しいPodにノードを割り当てます。この機能は一見シンプルです。しかし、スケジューラーはノードをランダムに選んでいるわけではありません。高度なアルゴリズムに基づいて、特定のPodを実行するために利用できる最適なノードを判断しています。また、利用可能なすべてのノードのリストを管理し、以下のようなさまざまなチェックを実行します。
図:Kubernetesスケジューラーのパフォーマンスに関するインサイトを表示する設定済みダッシュボード
設定済みのKubernetesスケジューラーダッシュボードには、スケジューラーに対して行われたクライアントリクエストが、操作のタイプ(verbs)とステータスコードとともに表示されます。200以外のHTTP応答コードが返されたときや、総スケジューリング時間(scheduler_binding_duration_seconds)の値が履歴ベースラインと比べて高い場合(Kubernetesスケジューラーのパフォーマンスに問題があることを示します)に、アラートを通知できます。
CoreDNSは、柔軟性と拡張性に優れたDNSサーバーであり、Kubernetesクラスターにデプロイされたマイクロサービスベースアプリケーションのサービス検出機能も提供します。CoreDNSは一連のプラグインで構成されます。各プラグインがKubernetesサービスの検出やPrometheusメトリクスなどのDNS機能を実行します。ほとんどのプラグインはPrometheusプラグインを介してテレメトリデータを送信します。カスタムプラグインを作成して、exampleプラグインの説明に従って監視を有効にすることもできます。Splunkスマートエージェントでは、CoreDNSモニターを設定することによってパフォーマンスメトリクスを透過的に収集できます。
図:CoreDNSのパフォーマンスメトリクスを表示する設定済みダッシュボード
設定済みのダッシュボードでは、CoreDNSインフラとその機能の健全性を確認できます。DNSリクエストをレコードタイプ(coredns_dns_request_type_count_total)ごとに監視すると、CoreDNSの処理量を把握できます。上の図のように、キャッシュサイズとキャッシュのヒット率を監視し、Corefileを介してConfigMapの有効期間(TTL)値を増やして、レコードをキャッシュに保持する期間を長くすることもできます。エラーを監視するには、リターンコード(rcodes)を追跡します。たとえばNXDomainはDNSリクエストの問題を表し、ドメインが見つからない場合にエラーを通知します。ServFailやRefusedは、DNSサーバー(この場合はCoreDNS)に問題があることを示します。
Splunk Infrastructure Monitoringなら、AWSのマネージドKubernetesであるAmazon EKS、オンプレミスやハイブリッドの自己管理型EKS-D環境を含むあらゆる環境で、Kubernetesを包括的に監視できます。
Splunk Infrastructure Monitoringの無料トライアル版を入手して、エンドツーエンドのKubernetes監視をぜひお試しください。
Splunkプラットフォームは、データを行動へとつなげる際に立ちはだかる障壁を取り除いて、オブザーバビリティチーム、IT運用チーム、セキュリティチームの能力を引き出し、組織のセキュリティ、レジリエンス(回復力)、イノベーションを強化します。
Splunkは、2003年に設立され、世界の21の地域で事業を展開し、7,500人以上の従業員が働くグローバル企業です。取得した特許数は1,020を超え、あらゆる環境間でデータを共有できるオープンで拡張性の高いプラットフォームを提供しています。Splunkプラットフォームを使用すれば、組織内のすべてのサービス間通信やビジネスプロセスをエンドツーエンドで可視化し、コンテキストに基づいて状況を把握できます。Splunkなら、強力なデータ基盤の構築が可能です。