Kubernetes でのデバッグ},{
IntelliJ IDEA は、次の Kubernetes デバッグフローをサポートしています:Ephemeral コンテナーによる Pod のその場のトラブルシューティングと、Telepresence によるリモートデバッグです。これにより、IDE を離れることなくさまざまな課題を診断できます。
Kubernetes プラグインの有効化
この機能は、デフォルトで IntelliJ IDEA にバンドルされて有効になっている Kubernetes(英語) プラグインに依存しています。 関連機能が利用できない場合は、プラグインを無効化していないことを確認してください。
Ctrl+Alt+S を押して設定を開き、 を選択します。
インストール済み タブを開き、 Kubernetes プラグインを見つけて、プラグイン名の横にあるチェックボックスを選択します。
Ephemeral コンテナー
IntelliJ IDEA は、実行中の Pod を再起動せずに Ephemeral コンテナー をアタッチできます。 これにより、稼働中の Kubernetes 環境を検査し、診断用コマンドを実行して、実行中の Pod 内で直接課題を調査できます。
エフェメラルコンテナーは、デバッグのために既存のポッドに一時的に追加され、アプリケーションコンテナーと一緒に実行されます。 この目的のために、IntelliJ IDEA は内部で kubectl debug コマンドを実行します。 カスタムデバッグコンテナーをアタッチすることも、軽量な BusyBox イメージを使用することもでき、 ping コマンド、 netstat、 wget 、および top といった一般的なツールが初期状態で利用できます。
実行中の Pod のデバッグの詳細については、 Kubernetes のドキュメント(英語)を参照してください。
BusyBox を実行中の Pod にアタッチする
サービスツールウィンドウを開きます: または Alt+8。
実行中の pod を一覧表示するノードを展開し、デバッグする pod を右クリックして、コンテキストメニューから を選択します。
または、対象の pod を選択し、ツールバーの
をクリックして、ドロップダウンから Busybox のアタッチ を選択します。
実行中の Pod にカスタムコンテナーをアタッチする
サービスツールウィンドウを開きます: または Alt+8。
実行中の pod を一覧表示するノードを展開し、デバッグする pod を右クリックして、コンテキストメニューから を選択します。
または、対象の pod を選択し、ツールバーの
をクリックして、ドロップダウンから カスタムのアタッチ を選択します。カスタムデバッグコンテナーのアタッチ ダイアログで、次のフィールドを使用して、エフェメラル コンテナーの起動とアタッチに使用する
kubectl debugコマンドをカスタマイズします。Pod: ドロップダウンからデバッグする pod を選択します。
ターゲット: 選択した pod 内のターゲット コンテナーを指定します。
イメージ: デバッグに使用するイメージの名前を入力し始め、リストから選択します。
実行可能: 起動後にエフェメラル コンテナー内で実行するシェルへの絶対パスを指定します(例: BusyBox では
/bin/sh、Ubuntu では/bin/bash)。オプション: デバッグ コンテナーの追加の構成パラメーターを指定します。 例については、 Kubernetes のドキュメント(英語)を参照してください。

Pod にアタッチ をクリックします。
IntelliJ IDEA が新しいエフェメラル コンテナーを起動して pod へのアタッチに成功すると、 コンソール タブが開き、そこでコマンドを実行して pod を検査できます。

BusyBox をアタッチした場合、IntelliJ IDEA は自動で sh を使用します。 カスタムイメージの場合、IDE は 実行可能 フィールドで指定したシェルを使用します。
アタッチ先の pod を削除すると、そのコンテナーは除去されます。
最近のコマンド
Ephemeral デバッグコンテナー メニューからエフェメラル コンテナーをアタッチすると、IntelliJ IDEA は対応する kubectl debug コマンドを自動で保存します。 後で 最近 セクションからアクセスして再実行できます。

最近のコマンドを使用して Ephemeral コンテナーを開始する
サービスツールウィンドウを開きます: または Alt+8。
実行中の pod を一覧表示するノードを展開し、デバッグする pod を右クリックします。 コンテキストメニューから Ephemeral デバッグコンテナー と、必要な最近のコマンドを選択します。
または、対象の pod を選択し、ツールバーの
をクリックして、ドロップダウンから最近のコマンドを選択します。
最近のコマンドを管理する
最近のコマンドにアクセスする:
設定 ダイアログ(Ctrl+Alt+S )で、 を選択します。
サービス ツールウィンドウ(Alt+8 )を開きます。 実行中の任意の pod を右クリックし、コンテキストメニューから を選択します。
Ephemeral デバッグコンテナー セクションに移動します。
事前に構成してすばやく新しいエフェメラル コンテナーを起動できる新しいコマンドを追加するには、
をクリックします。 デバッグパラメーターの追加 ダイアログで、
kubectl debugコマンド用のイメージ、実行可能ファイル、オプションを指定できます。最近の一覧からコマンドを除去するには、テーブルでそのコマンドを選択し、
をクリックします。
既存のコマンドを編集するには、テーブルでそのコマンドを選択し、
をクリックします。 デバッグパラメーターの追加 ダイアログで、
kubectl debugコマンド用のイメージ、実行可能ファイル、オプションを変更します。
Telepresence
Telepresence(英語) は、Kubernetes クラスター内のサービスにアクセスし、デバッグし、サービスがローカルのコンピューター上で実行されているかのように変更を加えてテストできるツールです。
Kubernetes プラグインは Telepresence との統合を提供し、次のことを可能にします。
Telepresence に接続するを使用して、DNS 名でクラスター内のサービスにアクセスします。
サービスをインターセプトするは、クラスターからローカル環境にトラフィックをルーティングします。
Telepresence に接続する
サービスツールウィンドウを開きます: を選択するか、 Alt+8 を押します。
Kubernetes クラスターを右クリックし、 Telepresence を接続 を選択します。 あるいは、ツールバーの「
」をクリックします。 プロンプトが表示されたら、Telepresence デーモンを起動するために必要な管理者アカウントのパスワードを入力します。 Windows では、 telepresence.exe の実行を許可します。
Telepresence と Traffic Manager をインストールした後、もう一度 Telepresence を接続 をクリックします。
クラスターがワークステーション上で実行されているかのように、DNS 名を使用して Kubernetes クラスター内のサービスにアクセスできるようになりました。 例: hello-node:9001 へのリクエストを受け入れるアプリケーションがある場合、その名前でアクセスできます。

クラスターからのトラフィックをインターセプトする
インターセプトを使用すると、Kubernetes クラスター内のサービスに送信されるトラフィックを取得し、ローカルサービスにルーティングできます。
ツールバーで、
(新規インターセプトの作成) をクリックし、次に 新規インターセプトの作成 をクリックします。
開いたウィンドウの サービス リストで、インターセプトするワークロードを選択します。 これは、デプロイ、ReplicaSet、StatefulSet のいずれかになります。
ポート フィールドに、サービスのローカルインスタンスが実行されているポートを指定します。

サービスが正常にインターセプトされた場合は、ローカルでサービスにアクセスし、IDE 機能を使用して、クラスター内で実行されているアプリケーションを試し、デバッグし、プロファイリングすることができます。
Telepresence の終了
Telepresence は一度に 1 つのクラスターと対話するため、別のクラスターに接続する前にテレプレゼンスを停止する必要がある場合があります。 テレプレゼンスを終了すると、アクティブな傍受がすべて停止されます。
サービスツールウィンドウを開きます: を選択するか、 Alt+8 を押します。
Kubernetes クラスターを右クリックし、 Telepresence の終了 を選択します。 あるいは、ツールバーの「
」をクリックします。
インターセプションを使用してアプリケーションを実行する
IntelliJ IDEA では、1 回のクリックでローカルアプリケーションを実行し、同時に Kubernetes クラスター内のサービス宛てのトラフィックをこのローカルアプリケーションにリダイレクトできます。
これは、Kubernetes クラスターへのトンネル (Telepresence インターセプト) を構成し、それを 実行構成の 起動前タスクとして追加することで実現されます。 この実行構成を実行するたびに、IntelliJ IDEA は Telepresence インターセプトを作成し、リモートアプリケーションをローカルで実行しているかのようにデバッグできるようにします。
実行構成にインターセプションを追加する
以下を確認してください:
サービスの元のインスタンスが Kubernetes クラスターにデプロイされて実行され、そのローカルインスタンスのソースコードがエディターで開かれます。
IntelliJ IDEA インスタンスが Kubernetes クラスターに接続されています。
メインクラス宣言の近くのガターで
をクリックし、 リモートデバッグ用のトンネルを追加 を選択します。 このアクションは、IntelliJ IDEA に少なくとも 1 つのクラスターが接続されている場合に使用できます。

あるいは、アプリケーションの実行 / デバッグ構成がすでに存在する場合は、実行ウィジェットで
をクリックし、 リモートデバッグ用のトンネルを追加 を選択します。
開いた Kubernetes トンネルを実行構成に追加 ウィンドウで、クラスターと名前空間を選択し、 クラスターに接続 をクリックします。 プロンプトが表示されたら、Telepresence デーモンを起動するために必要な管理者アカウントのパスワードを入力します。
クラスターに正常に接続されたら、インターセプトパラメーターを構成します。
サービス リストで、インターセプトするワークロードを選択します
ポート フィールドに、サービスのローカルインスタンスが実行されているポートを指定します。
必要に応じて、
telepresence interceptコマンドに追加のオプションを指定します。

Telepresence コマンドの出力を確認する場合は、 出力 セクションを展開します。 Telepresence への接続中にエラーが発生した場合、このセクションは自動的に展開されます。
構成の保存 をクリックします。 インターセプトパラメーターを確認するために、IntelliJ IDEA はインターセプトを作成してそのままにします。
インターセプトパラメーターは、新しい実行構成の起動前タスクとして デバッグ用トンネルの追加 として保存されます。 他の実行構成と区別するために、この実行構成名には (Telepresence) 接尾辞が含まれます (例: MyApp (Telepresence))。
これで、 アプリケーションを実行し、そのリモートバージョンをインターセプトする準備が整いました。
インターセプションを使用してアプリケーションを実行する
実行ウィジェットで、 (Telepresence) 接尾辞を持つ実行構成を選択します。

をクリックして実行するか、
をクリックしてデバッガーセッションを開始します。
これにより、ローカルアプリケーションが実行され、同時に上記で指定したパラメーターを使用して telepresence intercept コマンドが実行されます。
Telepresence は、クラスター内のサービスに送信されるすべてのトラフィックをインターセプトし、ローカルアプリケーションにルーティングするようになりました。 インターセプトされたサービスをローカルでコーディングおよびデバッグできます。
サービス ツールウィンドウには、 Telepresence インターセプション ノードに作成されたインターセプトが表示されます。 Kubernetes クラスターのルートノードには、生成されたテレプレゼンスコマンドと関連ログも表示されます。

このアプリケーションを停止すると( をクリックして)、IntelliJ IDEA も傍受を停止します(
telepresence leave)。