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

2022年1月17日(月)
松下 康之 - Yasuyuki Matsushita
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

著者
松下 康之 - Yasuyuki Matsushita
フリーランスライター&マーケティングスペシャリスト。DEC、マイクロソフト、アドビ、レノボなどでのマーケティング、ビジネス誌の編集委員などを経てICT関連のトピックを追うライターに。オープンソースとセキュリティが最近の興味の中心。

連載バックナンバー

仮想化/コンテナイベント
第17回

CNDT2021、CNCFの元TOCメンバーがOSSにおける標準の重要性を解説

2022/2/22
AppleのシニアエンジニアKatie Gamanji氏が、クラウドネイティブにおける標準の重要性を解説したセッションを紹介する。
セキュリティイベント
第16回

CNDT2021、メルカリがマイクロサービスのセキュリティを強固にするための施策を解説

2022/2/1
CNDT2021から、メルカリのエンジニアによるマイクロサービスのセキュリティを強化する施策を解説するセッションを紹介する。
システム開発イベント
第15回

CNDT2021、クラスター運用自動化をGitOps的に行う方法論をサイバーエージェントのエンジニアが解説

2022/1/28
CNDT2021から、サイバーエージェントのエンジニアによる、GitOps的にクラスター運用自動化を行う際のポイントを解説したセッションを紹介する。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています