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 を使用すると、ポッド内 で開いているすべてのファイルをトレース して、アクセスの問題を診断できます。 アプリケーションがファイルを開こうとするたびに、次の情報を検出できます。
たとえば、エラー 2 (ENOENT) が原因でファイルを開こうとしても失敗した場合、アプリケーションは存在しないファイルを開こうとしている可能性があります。 つまり、コードに入力ミスがあるか、ファイルが別のパスで使用できる可能性があります。 |
リモート コード実行 (RCE) | アプリケーションのアイドル期間中の CPU 使用率が高い場合に明らかな 暗号ジャッキング などの未承認のコード実行 | 攻撃者がシステムに対してこの種の攻撃を実行しようとすると、通常、 を使用 bash してコードを実行する必要があります。 Inspektor Gadget を使用すると、 新しいプロセス、特に などの bash 重要なコマンドを含むプロセスの作成をトレースできます。 |
AKS クラスターに Inspektor ガジェットをインストールする方法
One-Click Inspektor Gadget の展開
次のボタンを選択すると、AKS クラスターが自動的に作成され、Inspektor Gadget がクラスターにデプロイされます。 デプロイが完了したら、提供されたシェル環境で Inspektor Gadget のすべての機能を調べることができます。
"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 のドキュメントを参照してください。
前提条件
Kubernetes kubectl コマンド ライン ツール。 Azure CLI がある場合は、az aks install-cli コマンドを実行して kubectl をインストールできます。
AKS クラスター。 AKS クラスターがない場合は、 Azure CLI を使用 するか、Azure portal を使用して作成します。
kubectl のプラグイン用の krew パッケージ マネージャー。 このパッケージ マネージャーをインストールするには、 krew クイック スタート ガイド に従います。
パート 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 フィードバック コミュニティに製品フィードバックを送信することもできます。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示