次の方法で共有


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

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

デモ

まず、次の簡単なデモを検討してください。 アプリケーションからの DNS 要求が失敗する理由を理解する必要があるとします。 Inspektor Gadget を使用すると、アプリケーションが実行されている 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 Gadget は 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 Gadget は、Linux および Kubernetes システムのデバッグと検査専用のツールを構築、パッケージ化、デプロイ、実行するために設計されたフレームワークです。 これらのツール ("ガジェット") は、 eBPF プログラムとして実装されます。 主な目標は、特定のシステム シナリオに関する分析情報を提供するために、低レベルのカーネル データを収集することです。 Inspektor Gadget フレームワークは、Kubernetes リソースなどの高レベルの参照を使用して、収集されたデータの関連付けを管理します。 この統合により、低レベルの分析情報とそれに対応する高レベルのコンテキストとの間にシームレスな接続が確実に存在します。 この統合により、トラブルシューティング プロセスと関連情報の収集が合理化されます。

ガジェット

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

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

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

これらはほんの一例です。 公式ドキュメントには、各ガジェットの詳細な説明と例が記載されており、特定のユース ケースに最適なガジェットを特定できます。 ただし、既存のガジェットが現在カバーしていないユース ケースが見つかると、Inspektor Gadget は柔軟性を提供します。 スクリプト・コマンドを実行すると、eBPF トレース言語 bpftrace と互換性のあるスクリプトを実行できます。 または、run コマンドを実行して、独自の eBPF プログラムを 実行することもできます。 Inspektor Gadget フレームワークはカスタム プログラムのビルド、パッケージ化、デプロイを処理するため、独自の要件のプロセスが合理化されます。 また、高度なメタデータを収集して、プログラムで収集したデータを強化します。

ユース ケース

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

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

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

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

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

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

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

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

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

One-Click Inspektor Gadget の展開

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

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

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

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

  • コンピューターへの kubectl gadget プラグインのインストール

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

    警告

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

前提条件

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

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

注:

特定のリリースをインストールするか、ソースからコンパイルするには、「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 コントローラーをデプロイします。

注:

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

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

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

kubectl gadget deploy

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

kubectl gadget version

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

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

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

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

サードパーティのお問い合わせ窓口に関する免責事項

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

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

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