KubeCon EU、Linkerdでマルチクラスターを実装するセッションを紹介

2021年10月12日(火)
松下 康之 - Yasuyuki Matsushita
サービスメッシュのLinkerdを使ってマルチクラスター実装を解説するセッションを紹介する。

KubeCon EUから、サービスメッシュのLinkerdでクラスターをマルチで接続する実装方法を、デモを交えて解説するセッションを紹介する。プレゼンテーションを行ったのは、Liquid Replyというクラウドネイティブなシステムに特化したエンジニアリングサービスファームの共同創業者であるMax Körbächer氏だ。セッションのタイトルは「Seamless multi-cluster Communication and Observability with Linkerd」というもので、単一のクラスターで実装するのではなく、1つのアプリケーションを3つのクラスターに分割して実装する際の要点や注意点を解説するものだ。

デモとしてフロントエンド、バックエンド、データベースサービスの3つをそれぞれオンプレミスのKubernetesとAWS上のKubernetes(2つのリージョンを利用)に分けて実装して、解説に利用するという内容だ。

プレゼンテーションのタイトルスライド

プレゼンテーションのタイトルスライド

Körbächer氏はKubernetesのSIG(Special Interests group)Releaseの一員として、1.17からコントリビューションを行っているエンジニアだ。

Körbächer氏の自己紹介

Körbächer氏の自己紹介

本番環境で複数クラスター利用のケースが増加

Körbächer氏はKubernetesクラスターの形態について、「さまざまな形がありうる」として、すべてを一つのクラスターに収める方法、組織の形態に従って組織ごとのクラスターを用意する方法、関連するアプリケーションが通信するソフトウェアをまとめてクラスターに集約する方法、そして一つのアプリケーションごとにクラスターを用意する方法があると解説。シンプルなクラスターから、組織構造などによって複数のクラスターが必要となるケースを説明した。

ニーズによって変わるクラスターの種類を解説

ニーズによって変わるクラスターの種類を解説

またCNCFが行ったサーベイの結果を元に、本番環境で利用されるクラスターの数は単一のクラスターという形態が減少し、10以上のクラスターを使うケースが徐々に増えていることを紹介。

CNCFのサーベイで本番クラスターの数が増えているのが分かる

CNCFのサーベイで本番クラスターの数が増えているのが分かる

またクラスターを増やした際のアプリケーションを分離する方法論として、ネームスペースを分ける、ラベルを付ける、クラスターを分割するなどの手法が取られていることがわかるが、セキュリティやモニタリングなどのポイントについて苦労していることを指摘した。

ここからはある案件の条件を元に、マルチクラスターが必要となる要素を解説することになった。特にKörbächer氏がミュンヘン在住であることからわかるように、EUのGDPR(General Data Protection Regulation)を意識した内容となっている。

マルチクラスターが必要となる条件を解説

マルチクラスターが必要となる条件を解説

特にすべての通信を暗号化すること、フロントエンド、バックエンド、データベースサービスをアイソレーションすること、APIによって各サブシステムが統合されることなどが必須の条件として解説された。

例として挙げたシステムをアーキテクチャー図として解説

例として挙げたシステムをアーキテクチャー図として解説

このスライドで描かれたアーキテクチャー図は、インターネット側から入ってきたトラフィックが中央のリージョンに実装された2つのクラスター(フロントエンドとバックエンド)による処理を経て、別のリージョンのクラスター(データマネージメントとバックエンド)にデータとして書き込まれる形になっていることがわかる。

アーキテクチャー図の拡大

アーキテクチャー図の拡大

このアーキテクチャーでは分離はされているものの、トラフィックの暗号化、サービスの接続など多くのマニュアル作業が必要であるとして、アプリケーション実装の方法としては必ずしもクラウドネイティブではないと解説した。

解決案としてLinkerdを提案

解決案としてLinkerdを提案

そして解決案として、Linkerdを複数のクラスターを繋ぐためのコンポーネントとして利用することを提案したと説明した。Linkerdを使うことの利点は、すべてのトラフィックが暗号化されること、モニタリング、トレーシングなどの監視機能が用意されていること、サービスミラーリングを使えばクラスター間の通信のための特別な設定が不要となることなどを挙げた。

Yelbを用いたデモ

ここからはデモとして、Yelbという投票を行うサンプルアプリケーションを使ってマルチクラスターにおけるLinkerdの設定などを紹介するフェーズとなった。

デモはYelbを利用

デモはYelbを利用

Yelbについては以下のGitHubリポジトリーを参照されたい。AWSのエンジニア、Massimo Re Ferre氏が公開しているLambdaを使った3層構造のデモアプリケーションだ。

Yelb:https://github.com/mreferre/yelb

Yelbのアーキテクチャー図

Yelbのアーキテクチャー図

今回のマルチクラスターの実装ではyelb-uiの部分をローカルで受け、フロントエンドをAWSのWestリージョンに設置されたSVC-Westという名前のクラスターで実装、データベースサービスをSVC-Eastクラスターで実装し、そのクラスター間通信をLinkerdが担当するという内容だ。

Linkerdによるマルチクラスター通信を紹介

Linkerdによるマルチクラスター通信を紹介

デモとして紹介されたYelbは、WebUIから投票を行うというシンプルなもので、このページには実行されているアプリケーションサーバーのPod名が表示されている。

デモとして使われたYelbのWebユーザーインターフェース

デモとして使われたYelbのWebユーザーインターフェース

Linkerdのコンソールからも実行されているPodなどのようすが確認できる。

Linkerdの管理コンソールから確認

Linkerdの管理コンソールから確認

またデフォルトで実装される監視用のPrometheusのデータを、Grafanaから確認することもできることを紹介。

Grafanaでフロントエンドの状況を確認

Grafanaでフロントエンドの状況を確認

このスライドではLinkerdの設定のためのコマンドを紹介。ローカルからSVC-West、SVC-WestからSVC-Eastに通信を行うという設定になっていることを解説した。

またLinkerdがサービスメッシュのツールであることを応用して、トラフィックを50%ずつに分割することも可能であることを紹介した。

トラフィック分割もLinkerdの設定で可能

トラフィック分割もLinkerdの設定で可能

ここではLinkerdの設定として、フロントエンド→バックエンド→データベースという順に参照されていること、サービス間の通信だけが許可されていることなどを紹介した。

ミラーリングの機能を有効にしてクラスター間を接続

ミラーリングの機能を有効にしてクラスター間を接続

またアプリケーション全体の監視機能としてサクセスレート、秒単位のリクエスト数、遅延などが可視化されることを紹介した。

可視化について解説

可視化について解説

またトレーシングについても、Jaegerによる可視化が可能になっていることをJaegerのインターフェースを操作して紹介した。

Jaegerのインターフェースを使ってトレーシングを紹介

Jaegerのインターフェースを使ってトレーシングを紹介

サービス間の実行時間を表示

サービス間の実行時間を表示

ただJaegerのデモで使われたデータはYelbのデモではなく、Linkerdの標準のデモであるEmojivotoというアプリケーションのデータであり、機能の紹介としては過不足はないものの、若干説明が足りないように感じた。

まとめ

ここからはまとめとして「マルチクラスターが必要な条件」を挙げて解説した。具体的例として、待機用として本番機と同様のクラスターが必要な場合や、ブルー/グリーンデプロイメントを行うような場合を示した。また通信が必要なアプリケーションが多数存在する場合、オンプレミスとパブリッククラウドを接続する必要がある場合などを条件として挙げて、説明を行った。

マルチクラスターが必要な場合とは?

マルチクラスターが必要な場合とは?

またこの例での得られた教訓として、サービスのエンドポイントの命名方法などにも留意すること、サービスメッシュの運用は難しいこと、サービス名を組織名などに沿って付けると長くなりがちなので注意することなどを挙げた。Körbächer氏はLinkerdのアップデートには苦労したようで、この後もアップデートには注意するようにというポイントを挙げて説明している。

Linkerdをマルチクラスターに使う際の要点

Linkerdをマルチクラスターに使う際の要点

最後に、実際にLinkerdの設定におけるポイントを解説してセッションを終えた。

さらに細かい要点を解説

さらに細かい要点を解説

セッションの動画及びスライドは以下のURLから参照することができる。

動画:Seamless multi-cluster Communication and Observability with Linkerd - Max Körbächer, Liquid Reply

セッションのスライド(PDF):https://static.sched.com/hosted_files/kccnceu2021/d7/seamless_multi_cluster_communication_and_observability_with_linkerd_MaxKoerbaecher_50521_v1.pdf

Linkerd自体のアップデートについては何度も「簡単ではない」と強調したKörbächer氏だった。Linkerdの開発元であるBuoyantは、Managed LinkerdであるBuoyant Cloudを発表している。正式にサービスインが始まるのは2021年7月以降と思われるが、マネージドであればLinkerd自体のアップデートなどに関する苦労は解消されるのではないだろうか。

参考:Buoyant Cloud

Yelbのデモは以下のGitHubリポジトリーを参照されたい。

Yelb:https://github.com/mreferre/yelb

またLinkerdが用意しているデモアプリケーションは、以下のURLから参照されたい。

Emojivoto:https://github.com/BuoyantIO/emojivoto

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

連載バックナンバー

ネットワークイベント
第6回

KubeCon EU、欠点から逆算するKubernetesのネットワークに関するセッションを紹介

2021/10/13
eBPFを使ったネットワークスタックであるCiliumの開発元のCTOがKubernetesのネットワークの弱点を紹介。
クラウドイベント
第5回

KubeCon EU、Linkerdでマルチクラスターを実装するセッションを紹介

2021/10/12
サービスメッシュのLinkerdを使ってマルチクラスター実装を解説するセッションを紹介する。
クラウドイベント
第4回

KubeCon EUレポート Alibabaが本番環境で使うKubeVelaとDaprのセッションを紹介

2021/10/8
KubeCon EUからAlibabaのエンジニアが行ったKubeVelaとDaprに関するセッションを紹介する。

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

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

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

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