CNDT2021、クラウドネイティブなシステムにおけるデバッグ手法を紹介

CNCDT2021から、Visual Studio Codeを使ったKubernetesのデバッグ手法に関するセッションを紹介する。セッションを行ったのは、株式会社Mobility Technologiesのエンジニアの森下篤氏である。森下氏はサーバーサイドのエンジニアとしてタクシー配車アプリのGOの開発などに携わっているという。

セッションを行う森下篤氏

セッションを行う森下篤氏

森下氏は一般的なアプリケーション、コンテナ、そしてKubernetes上で稼働するPod内のアプリケーションのデバッグなどについて解説を行った。

複数のプロセスが連携するアプリケーションを例に挙げて説明

複数のプロセスが連携するアプリケーションを例に挙げて説明

このセッションは、複数のPodが連携するアプリケーションを例に挙げて、どうやってデバッグを行うのかについて具体的に解説する内容であると語った。そのための前提知識として、ローカルのアプリケーションやDockerコンテナのデバッグなどに関することも、おさらいという形で紹介した。

Kubernetesのデバッグの問題点を解説

Kubernetesのデバッグの問題点を解説

ここでは、Kubernetesで実装されたアプリケーションにおいて発生する問題点について解説。特にローカルでは動くのにテスト環境のKubernetesでは動かないといった問題や、他のサービスとの連携が必要な場合においてはデバッグが難しいというポイントを紹介した。

森下氏は4つのパターンを挙げてそれぞれのコマンド例を使って紹介。

4つのパターンでデバッグ手法を解説

4つのパターンでデバッグ手法を解説

ここからローカルでのデバッグ、Dockerコンテナでのデバッグの解説をプログラミング言語に対応したコマンド例などを示しながら説明することで、実際にPythonとGoによるコマンドの違いなどについても紹介した。

Docker環境でのデバッグの注意点を解説

Docker環境でのデバッグの注意点を解説

ここから、今回の焦点であるKubernetesで運用されている複数のPodの中でひとつのプロセスだけをデバッグする方法の解説に移った。

Kubernetes環境でのデバッグを解説

Kubernetes環境でのデバッグを解説

ここではローカルにデバッガとソースコードが存在し、テスト環境のクラスターのKubernetes上にPodが存在するという構成を前提としている。Podの中にデバッガと対象となるアプリケーションが存在している場合、ポートフォワードを使ってローカルのデバッガとPod内のデバッガが通信することで、ステップ実行や変数の確認などのデバッグ作業が可能になることを説明した。ここではKubernetesのDeploymentの設定によって複数のPodが実行されてしまうことを抑制するために、レプリカの数を1に設定することなどが操作上のポイントとして解説された。

実際にVisual Studio Codeを使ってデモを実施

実際にVisual Studio Codeを使ってデモを実施

デモでは実際にVisual Studio Codeを使ってVisual Studio Codeの設定ファイルの修正、ブレークポイントや変数の値の確認、実行までを紹介し、Visual Studio Code上でデバッグ作業が完結するようすを見せた。

またMicrosoftが提供しているBridge to KubernetesというVisual Studio Codeの拡張機能を紹介した。これはクラスターの中のKubernetesのアプリケーションをデバッグするために、ローカルに置いたアプリケーションの上でデバッガを動作させることを可能にするものだ。

Bridge to Kubernetesの紹介

Bridge to Kubernetesの紹介

Bridge to Kubernetesについては以下の公式サイトを参照されたい。

参考:Bridge to Kubernetes のしくみ

マーケットプレイスのURL:https://marketplace.visualstudio.com/items?itemName=mindaro.mindaro

Bridge to Kubernetesのアーキテクチャー図

Bridge to Kubernetesのアーキテクチャー図

この図にあるように本来、クラスター内のプロセスとして実行されるDeployment Bのアプリケーションをローカルでデバッガとともに実行し、クラスター内の通信をローカルマシンに迂回させることで、デバッグするアプリケーション以外はそのまま使うことができるのがポイントだ。

最後にセッションのポイントをまとめて紹介し、セッションを終えた。

セッションのまとめと紹介

セッションのまとめと紹介

ローカルでのデバッグ方法のおさらいからDockerコンテナのデバッグ、さらにKubernetesのPodのデバッグを経て複数のPodをデバッグする方法を解説したセッションであった。最後に紹介したBridge to Kubernetesは、CNCFのインキュベーションプロジェクトであるTelepresenceと似た手法を採用していると言えるだろう。プレゼンテーションを行った森下氏に「Telepresenceをセッションの中で紹介しなかった理由は?」と質問したところ、Bridge to KubernetesはTelepresenceと似ていると思うが、今回はVisual Studio Codeでのデバッグ方法を解説するという文脈であったので、他のソフトウェアは紹介しなかったという回答を得た。また「近いスコープとは言え一長一短がある中で、比較することが趣旨ではない場合に不必要に並べて紹介するのは、他のプロダクトに対して失礼かなと考えています」という森下氏からの回答の意図はオープンソースコミュニティに対する配慮ということだろう。

Telepresenceに関しては以下の公式サイトを参照されたい。TelepresenceはAmbassador Labsが開発しているオープンソースソフトウェアだ。Ambassador LabsはEnvoyを使ったAPI GatewayであるEmisarry-Ingressの開発やArgoCDの開発にも貢献している。

Telepresence:https://www.telepresence.io/

公式GitHubページ:https://github.com/telepresenceio/telepresence

Original Post>