AKS クラスターからリアルタイムのシステム分析情報をキャプチャする

この記事では、Inspektor ガジェットを使用して Microsoft Azure Kubernetes Service (AKS) クラスターからリアルタイムのシステム分析情報を収集するプロセスについて説明します。 この記事には、AKS 環境にこのツールをインストールするための詳細な手順が含まれています。 また、Inspektor ガジェットが実際の問題の効果的なデバッグを行うために貴重な情報を収集する方法を示す実用的な例についても説明します。

Demo

まず、次の簡単なデモを検討してください。 アプリケーションからの DNS 要求が失敗する理由を理解する必要があるとします。 Inspektor ガジェットを使用すると、アプリケーションが実行されている Kubernetes 名前空間で DNS トラフィックをキャプチャできます。

kubectl gadget trace dns --namespace my-ns --output columns=+nameserver
K8S.NODE                           K8S.NAMESPACE  K8S.POD  PID      TID      COMM      QR  TYPE      QTYPE  NAME             RCODE NUMANSWERS NAMESERVER
aks-agentpool-97833681-vmss000001  my-ns          my-app   1349264  1349264  nslookup  Q   OUTGOING  A      www.example.com.       0          1.2.3.4
aks-agentpool-97833681-vmss000001  my-ns          my-app   1349264  1349264  nslookup  Q   OUTGOING  AAAA   www.example.com.       0          1.2.3.4
aks-agentpool-97833681-vmss000001  my-ns          my-app   1349264  1349264  nslookup  Q   OUTGOING  A      www.example.com.       0          1.2.3.4
aks-agentpool-97833681-vmss000001  my-ns          my-app   1349264  1349264  nslookup  Q   OUTGOING  AAAA   www.example.com.       0          1.2.3.4

この情報から、DNS 要求は IP アドレス 1.2.3.4で DNS サーバーに送信されますが、サーバーは応答しないことがわかります。

ここで、 1.2.3.4 が既定のネーム サーバー構成ではなく、疑わしいプロセスによって実行時に構成が変更されている可能性があるとします。 このような場合、Inspektor ガジェットは DNS 診断を超えています。 また、重要なファイル ( /etc/resolv.conf など) にアクセスするプロセスを監視し、それらのファイルを変更する意図を持つことができます。 この監視機能を使用するには、出力のフラグをフィルター処理して、 書き込みファイル アクセス モード (書き込み専用で開くO_WRONLY 、読み取りと書き込み用に開く O_RDWR を表示します)。

kubectl gadget trace open --namespace my-ns \
    --filter path:/etc/resolv.conf,flags:'~(O_WRONLY|O_RDWR)' \
    --output columns=+flags
K8S.NODE                           K8S.NAMESPACE  K8S.POD  K8S.CONTAINER  PID      COMM  FD  ERR  PATH              FLAGS
aks-agentpool-97833681-vmss000001  my-ns          my-app   my-app         1365052  vi    3   0    /etc/resolv.conf  O_WRONLY|O_CREAT

Inspektor ガジェットとは

Inspektor Gadget は、Linux および Kubernetes システムのデバッグと検査専用のツールを構築、パッケージ化、デプロイ、実行するために設計されたフレームワークです。 これらのツール ("ガジェット") は、 eBPF プログラムとして実装されます。 主な目標は、特定のシステム シナリオに関する分析情報を提供するために、低レベルのカーネル データを収集することです。 Inspektor Gadget フレームワークは、Kubernetes リソースなどの高度な参照を使用して、収集されたデータの関連付けを管理します。 この統合により、低レベルの分析情報とそれに対応する高度なコンテキストの間にシームレスな接続が確実に存在します。 この統合により、トラブルシューティング プロセスと関連情報の収集が効率化されます。

ガジェット

Inspektor Gadget には、システム上の一般的な状況をデバッグして観察するように設計された一連の組み込みツールが用意されています。 たとえば、このようなガジェットを使用すると、クラスター内の次のイベントをトレースできます。

  • プロセス作成
  • ファイル アクセス
  • TCP 接続や DNS 解決などのネットワーク アクティビティ

ガジェットは、さまざまなメカニズムを使用して収集された情報を提示します。 たとえば、一部のガジェットでは、特定の時刻にシステムの状態について通知できます。 他のガジェットは、特定のイベントが発生するたびに報告したり、定期的な更新を提供したりできます。

いくつかの例を示します。 非公式のドキュメントでは、各ガジェットの詳細な説明と例が示されているため、特定のユース ケースに最適なガジェットを判断できます。 ただし、既存のガジェットが現在カバーしていないユース ケースが見つかると、Inspektor Gadget では、 run コマンドを使用して独自の eBPF プログラムを実行できます。 Inspektor Gadget フレームワークは、カスタム プログラムのビルド、パッケージ化、展開を処理するため、独自の要件のプロセスを合理化します。 また、高度なメタデータを収集して、プログラムで収集したデータを強化します。

ユース ケース

この記事の冒頭で紹介したデモを補完するために、Inspektor Gadget がデバッグの課題に取り組むのにどのように役立つのかを示す問題と実用的なシナリオの一覧をまとめました。 次の例では、Inspektor ガジェットの可能性を示します。 ただし、このツールの機能は、これらのシナリオを超えて拡張されます。 これにより、Inspektor ガジェットは、Kubernetes のデバッグと監視の複雑さをナビゲートするための貴重な資産になります。

問題領域 現象 トラブルシューティング
ディスクを集中的に使用するアプリケーション メモリまたは CPU 使用率が高い、またはノードの準備が一貫性がない アプリケーションは、広範なログ記録など、ディスクの読み取り/書き込み操作に一貫して関与する可能性があります。 Inspektor ガジェットを使用すると、より多くの ブロック I/Oを生成するコンテナーをリアルタイムで識別できます。 または、より具体的には、fileへの読み取りと書き込みが増えるコンテナーを見つけることができます。
"常に DNS です" アプリケーションの待機時間が長い、タイムアウト、またはエンドユーザー エクスペリエンスが低い

Inspektor ガジェットを使用すると、クラスター内のすべての DNS クエリと応答をトレースできます。 特に、Inspektor ガジェットは、DNS がアプリケーションのパフォーマンスに影響を与えるかどうかを判断するのに役立つ次の情報を提供します。

  • クエリの成功
  • 応答にエラーが含まれているかどうか
  • 検索に使用されるネーム サーバー
  • クエリ応答の待機時間
ファイル システムへのアクセス アプリケーションの動作が正しく動作しない、または正しく機能しない

アプリケーションは、ファイル システム内の特定の構成、ログ、またはその他の重要なファイルにアクセスできない可能性があります。 このようなシナリオでは、Inspektor ガジェットを使用すると、ポッド内で開いているすべてのファイルトレースしてアクセスの問題を診断できます。 アプリケーションがファイルを開こうとするたびに、次の情報を検出できます。

  • ファイルを開くために使用されるフラグ (たとえば、 O_RDONLY、O_WRONLY、O_RDWRなど)
  • ファイルを開く試行が成功するかどうか
  • 返されたエラー (ファイルを開く試行が失敗した場合)

たとえば、エラー 2 (ENOENT) が原因でファイルを開こうとした場合、アプリケーションは存在しないファイルを開こうとしている可能性があります。 つまり、コードに入力ミスがあるか、ファイルが別のパスで使用できる可能性があります。

リモート コード実行 (RCE) アプリケーションのアイドル期間中の CPU 使用率が高い場合に明らかな、 cryptojacking などの未承認のコード実行 攻撃者がシステムに対してこのような攻撃を実行しようとすると、通常、 bashを使用してコードを実行する必要があります。 Inspektor Gadget を使用すると、新しいプロセス、特にbashなどの重要なコマンドを含むプロセスの作成をトレースできます。

AKS クラスターに Inspektor ガジェットをインストールする方法

ワンクリックの Inspektor ガジェットの展開

次のボタンを選択すると、AKS クラスターが自動的に作成され、Inspektor Gadget がクラスターにデプロイされます。 デプロイが完了したら、提供されたシェル環境で Inspektor Gadget のすべての機能を調べることができます。

AKS クラスターに Inspektor ガジェットをデプロイする

"kubectl ガジェット" プラグインを実行して Inspektor ガジェットをインストールする

このセクションでは、 kubectl gadget プラグインを実行して、AKS クラスターに Inspektor Gadget をインストールする手順について説明します。 インストールは、次の 2 つの部分で構成されます。

  • kubectl gadget プラグインをコンピューターにインストールする

  • kubectl gadget プラグインを実行してクラスターに Inspektor ガジェットをインストールする

    警告

    Inspektor ガジェットの展開と使用には、多くのメカニズムを使用できます。 これらのメカニズムはそれぞれ、特定のユース ケースと要件に合わせて調整されています。 kubectl ガジェット プラグインを使用して、これらのメカニズムのいくつかを適用できますが、それらのすべてではありません。 たとえば、 kubectl gadget プラグインを使用して Inspektor Gadget をデプロイすることは、Kubernetes API サーバーの可用性によって異なります。 可用性が損なわれる可能性があるため、このようなコンポーネントに依存できない場合は、 kubectl gadgetデプロイ メカニズムの使用を避けてください。 このユース ケースとその他のユース ケースの詳細については、 Inspektor Gadget のドキュメントを参照してください。

前提条件

パート 1: kubectl プラグイン ガジェットをコンピューターにインストールする

krewを使用して、kubectl gadget プラグインをインストールすることをお勧めします。

Note

特定のリリースをインストールするか、ソースからコンパイルするには、GitHub kubectl ガジェットのインストール を参照してください。

kubectl krew install gadget

次に、 version コマンドを実行してインストールを確認します。

kubectl gadget version

version コマンドでは、クライアントのバージョン (kubectl gadget プラグイン) が表示されますが、サーバー (クラスター) にまだインストールされていないことも示されます。

Client version: vX.Y.Z
Server version: not installed

パート 2: クラスターに Inspektor ガジェットをインストールする

次のコマンドは、 DaemonSet コントローラーをデプロイします。

Note

次の一覧に示すように、デプロイをカスタマイズするためにいくつかのオプションを使用できます。

  • 特定のコンテナー イメージを使用する
  • 特定のノードにデプロイする
  • カスタム名前空間にデプロイする

これらのオプションの詳細については、公式ドキュメントの「 クラスターへのインストール 」セクションを参照してください。

kubectl gadget deploy

version コマンドをもう一度実行して、インストールを確認します。

kubectl gadget version

今回は、クライアントとサーバーの両方が正しくインストールされていることを示します。

Client version: vX.Y.Z
Server version: vX.Y.Z

サードパーティの情報に関する免責事項

この資料に記載されているサードパーティ製品は、マイクロソフトと関連のない他社の製品です。 明示的か黙示的かにかかわらず、これらの製品のパフォーマンスや信頼性についてマイクロソフトはいかなる責任も負わないものとします。

サード パーティの連絡先に関する免責事項

Microsoft では、このトピックに関する追加情報を検索するのに役立つサード パーティの連絡先情報を提供しています。 この連絡先情報は、予告なしに変更される可能性があります。 Microsoft では、サード パーティの連絡先情報が正確であることを保証していません。

お問い合わせはこちらから

質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。