CNDT2021、クラウドネイティブなシステムにおけるデバッグ手法を紹介
CNCDT2021から、Visual Studio Codeを使ったKubernetesのデバッグ手法に関するセッションを紹介する。セッションを行ったのは、株式会社Mobility Technologiesのエンジニアの森下篤氏である。森下氏はサーバーサイドのエンジニアとしてタクシー配車アプリのGOの開発などに携わっているという。
森下氏は一般的なアプリケーション、コンテナ、そしてKubernetes上で稼働するPod内のアプリケーションのデバッグなどについて解説を行った。
このセッションは、複数のPodが連携するアプリケーションを例に挙げて、どうやってデバッグを行うのかについて具体的に解説する内容であると語った。そのための前提知識として、ローカルのアプリケーションやDockerコンテナのデバッグなどに関することも、おさらいという形で紹介した。
ここでは、Kubernetesで実装されたアプリケーションにおいて発生する問題点について解説。特にローカルでは動くのにテスト環境のKubernetesでは動かないといった問題や、他のサービスとの連携が必要な場合においてはデバッグが難しいというポイントを紹介した。
森下氏は4つのパターンを挙げてそれぞれのコマンド例を使って紹介。
ここからローカルでのデバッグ、Dockerコンテナでのデバッグの解説をプログラミング言語に対応したコマンド例などを示しながら説明することで、実際にPythonとGoによるコマンドの違いなどについても紹介した。
ここから、今回の焦点であるKubernetesで運用されている複数のPodの中でひとつのプロセスだけをデバッグする方法の解説に移った。
ここではローカルにデバッガとソースコードが存在し、テスト環境のクラスターのKubernetes上にPodが存在するという構成を前提としている。Podの中にデバッガと対象となるアプリケーションが存在している場合、ポートフォワードを使ってローカルのデバッガとPod内のデバッガが通信することで、ステップ実行や変数の確認などのデバッグ作業が可能になることを説明した。ここではKubernetesのDeploymentの設定によって複数のPodが実行されてしまうことを抑制するために、レプリカの数を1に設定することなどが操作上のポイントとして解説された。
デモでは実際にVisual Studio Codeを使ってVisual Studio Codeの設定ファイルの修正、ブレークポイントや変数の値の確認、実行までを紹介し、Visual Studio Code上でデバッグ作業が完結するようすを見せた。
またMicrosoftが提供しているBridge to KubernetesというVisual Studio Codeの拡張機能を紹介した。これはクラスターの中のKubernetesのアプリケーションをデバッグするために、ローカルに置いたアプリケーションの上でデバッガを動作させることを可能にするものだ。
Bridge to Kubernetesについては以下の公式サイトを参照されたい。
マーケットプレイスのURL:https://marketplace.visualstudio.com/items?itemName=mindaro.mindaro
この図にあるように本来、クラスター内のプロセスとして実行される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
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- Kubernetesクラスターの遠隔操作による開発を支援するTelepresence
- KubeCon NA 2020 LinkerdとAmbassadorを使ったマルチクラスター通信を紹介
- Kubernetes上のアプリケーション開発を加速させるツール(2) Telepresence
- CNDO 2021、Kubernetesとコンテナの基本的構造をNTTの徳永航平氏が解説
- Oracle Cloud Hangout Cafe Season 4 #2「Kubernetesのネットワーク」(2021年5月12日開催)
- Oracle Cloud Hangout Cafe Season7 #1「Kubnernetes 超入門」(2023年6月7日開催)
- KubeConで失敗を紹介したMonzo Bankのキーノート
- CNDO 2021、YAMLの加工ツールyttをVMwareのソリューションアーキテクトが解説
- Microsoft、ローカルと異なるリモートOS環境下で開発を行える「Remote Development拡張機能パック」を「Visual Studio Code」向けにプレビュー公開
- Microsoft、ローカルと異なるリモートOS環境下で開発を行える「Remote Development拡張機能パック」を「Visual Studio Code」向けにプレビュー公開