新春特別企画

2022年に注目したいCloudNative関連技術

あけましておめでとうございます。サイバーエージェントの青山真也@amsy810です。今年の新春企画では、2022年にも動向を見ていきたいと思っている、2021年のCloudNative関連のトピックを紹介します。項目としてはeBPF、WebAssembly(Wasm⁠⁠、複数Kubernetesクラスタの管理・連携、CNCF Technical Advisory Groups(TAGs)によるWhitepaperを取り上げていきます。

eBPF

eBPFは、カーネルのソースコードの変更なしに任意のプログラムをカーネルに組み込み、カーネル空間で任意の処理を実行するための仕組みです。CNCFのプロジェクトでは、Cilium・Calico・Falco・Pixieなどで利用されています。

CloudNative領域でのeBPFは、ネットワーク関連での利用が一番活発です。eBPFを利用したCNI(Container Networking Interface)としては、Ciliumが有名です。Ciliumは2021年にCNCFのIncubatingプロジェクトにも採択されました。Ciliumでは、kube-proxyで行われていたバランシングの処理もeBPFがサポートしており、kube-proxyが不要になります。さらに従来iptablesで行っていた処理に比べてパフォーマンス効率も向上します。

CNIとして現在最も利用されているCalicoでも、eBPFがサポートされました。Calico eBPF modeでもCiliumと同様の機能を持っています。GKEのDataplane V2でもCiliumが利用されていたり、EKSでもCalico eBPF modeが利用できるようになってきており、今後はeBPFを利用したCNIが一般的になるでしょう。

さらに昨年末、CiliumではeBPFを利用することでSidecarコンテナ(Envoy)なしでService Meshを構築する機能をベータリリースしました。一部の機能はEnvoyが必要なため、従来Pod単位だったEnvoyがNode単位にデプロイする形で残っていますが、リソース効率やパフォーマンスの向上が見込まれています。eBPFはService Meshの新たな形を実現する手段としても注目されています。

図1 Sidecar利用型のService MeshとeBPF利用型のService Meshの比較Ciliumのサイトより)
図1

他にも、eBPFはカーネルに任意の機能を組み込むための機能としても使えるため、オブザーバビリティやセキュリティの向上を実現する手段としても注目されています。たとえばPixieではeBPFを活用して、カーネル空間とユーザー空間の双方のデータを取得し、サービスとアプリケーション間のオブザーバビリティを実現しています。FalcoではeBPFを活用して、ポリシーに違反しているカーネル空間のイベントをフックしてアラートを通知します。

また、eBPFプログラムをKubernetesノードに組み込む形をとることで、そのノード上のすべてのコンテナに対して様々な制御を行えるほか、アプリケーションやマニフェストの変更・Sidecarの利用をせずに様々なことが実現できるようになります。

WebAssembly(Wasm)

WebAssemby(Wasm)はもともとブラウザ上で動作することを目的に作られたバイナリフォーマットです。様々な言語で関数を実装し、Wasmバイナリにビルドしたあとは、それをブラウザ上で読み込んで実行できるようになっています。

図2 WebAssembyをブラウザで実行する概要
図2

このWasm関連で注目しているのは、⁠Wasmを利用した機能拡張」「CNCFのSandboxプロジェクトにも採択されたWasmランタイム」の2つです。

Wasmを利用した機能拡張

Wasmを用いることで、様々な言語を用いて実装し、ミドルウェアを動的に拡張できます。

このWasmにはシステムと連携するためのインターフェースであるWASI(WebAssembly System Interface)が定義されています。これらのインターフェースを利用することで、WasmでもPOSIXシステムコール相当の関数を利用できるようになり、一般的なサーバーサイドアプリケーションが実行できるようになることも行えるようになります。

WASIと似た形で、EnvoyやNginxといったプロキシと連携するためのインターフェースであるProxy-Wasmの定義も進められています。Proxy-Wasmを利用することで、Wasmからプロキシの機能を利用するような命令を送ったり、特定のイベント発生時にWasmの関数を呼び出したりすることが可能になります。

図3 WebAssemblyからシステムやプロキシと連携するWASIとProxy-Wasmインターフェースの関係
図3

IstioでもEnvoyFilter CustomResourceでProxy-Wasmのサポートがされており、Service Meshとして展開されているEnvoyに対して任意のWasmモジュールをロードさせて、動的に機能を拡張できます。KubeCon NA 2021の基調講演で、この機能を利用してトラフィックの情報を外部に集約し、OpenAPI specとの差分比較を行うAPIClarityの紹介がされていたのも印象的でした。

図4 APIClarityのアーキテクチャAPIClarityのサイトより)
図4

他にも、Open Policy AgentでもWasmのサポートが行われています。ポリシーをRegoで評価するだけではなく、Wasmで実装した関数を使って評価することもできます。

このように、様々なミドルウェアを動的に拡張する手段としてのWasm利用がより進歩しており、2022年はより具体的な事例やエコシステムが登場してくることを期待しています。

CNCFのSandboxプロジェクトにも採択されたWasmランタイム

Wasmを実行するランタイム環境は、wasmCloud、Wasmtime、Lucet、Wasmerなど様々な実装があります。そのうちの1つであるwasmCloudが、CNCFのSandboxプロジェクトとして採択されました。

wasmCloudはただのWasmランタイムではなく、地理的に分散した環境でのコンピューティングを可能にするために、NATSとActorモデルを利用したLatticeと呼ばれるネットワーク機能も持っています。また、HTTPサーバとしての公開・HTTPリクエスト・KVSとの連携といった、ビジネスロジック以外の非機能要件をCapability Providerとして抽象化して利用する機能も持っています。これにより、Providerの裏側にある実装がRedisなのかmemcachedなのかといった違いを意識することなく、ビジネスロジックの実装だけに注力できるのも特徴の一つです。wasmCloudは現状では成熟度はまだまだですが、CNCFプロジェクトとして採択されたランタイムの一つとして2022年も注目度は高そうです。

図5 wasmCloudが目指す世界観wasmColudのTwitterの投稿より)
図5
図6 wasmCloudがターゲットにしている実行環境CNCFのYoTubeより)
図6
図7 wasmCloudが提供するCapability Providerと実装するビジネスロジックの分離
図7

複数Kubernetesクラスタの管理・連携

ここ数年、複数のKubernetesクラスタをどう管理していくかについて試行錯誤がなされています。Multi-cluster Service Mesh(istio⁠⁠・Federation v2・Admiralty・virtual-kubelet・submarinerなど、様々な手法も登場しています。

2021年に特に印象的だったのは、GCPがKubernetesのクラスタDNSとしてCloud DNSが利用できるようになった点です。これにより、複数のGKEクラスタ横断での名前解決や、VMをあわせたServiceの名前解決(たとえばsample.default.svc.cluster.local)が可能になり、より柔軟なアーキテクチャを実現する土壌が整いました。今後はAnthosなども含め、複数拠点で連携した構成も実現しやすくなるのではないでしょうか。

また、筆者としては今年はIstioによるMulti-cluster Service Meshの実例なども出てくるのではないかと期待しています。

図8 Cloud DNSを利用した利用した複数クラスタ間でのサービスディスカバリGoogle Cloudのサイトより)
図8

そしてOpen Cluster Managementプロジェクトも開始され、複数クラスタ・複数クラウドでの管理に焦点を当てた標準化や開発も始まりました。まだ日が浅いプロジェクトですが、既にArgo CD ApplicationSetやPersistentVolumeのDisaster Recovery対応を実現するRamenプロジェクトなどによって利用され始めています。2022年はOCMの発展も見ていきたいと思います。

CNCF Technical Advisory Groups(TAGs)によるWhitepaper

CNCFには、Security・Storage・App-Delivery・Network・Runtime・Observabilityといった領域ごとに、Technical Advisory Group(TAG)が作られており、各領域のCNCFプロジェクト全体での整合性の維持や品質の向上のための活動が行われています。昨年は各TAGsから様々なWhitepaperなどが公開・更新され、用語や定義の明確化やプロジェクトの比較などが整備されました。

  • CNCF Storage Landscape Whitepaper
    • 用語を明確化(Block/KVS/DB/Object/Filesystemなど)
    • Availability, scalability, consistency, durability, performanceなどの比較
  • Cloud Native Security Map
    • 各ステップでセキュリティを向上させるための取り組みのリスト
  • Operator Whitepaper
    • Operatorのベストプラクティスをまとめたリファレンスペーパー
    • デザインパターン、ライフサイクル管理、セキュリティ、フレームワークなど
  • Chaos Engineering Whitepaper
    • Chaos Engineeringの原則や、ユースケース・要件・関連ツールのリスト
  • CNCF Observability Whitepaper
    • Observabilityの定義や各種データ(メトリック、ログ、トレース、構造化イベントなど)の目的とベストプラクティスの明文化
  • Service Mesh Interface Conformance
    • Service Meshの標準インターフェースへの対応状況
  • Service Mesh Performance
    • 5000通りのテストをもとにService Meshのパフォーマンスを計測可能な標準仕様
  • Service Mesh Patterns
    • 60種類のベストプラクティスをカタログ化したパターン集

まとめ

新春のお話として、eBPFとWasmによる機能拡張や利用事例の動向、マルチクラスタ・マルチクラウド環境への適用・高度な様々なトピックに対応するWhitepaperを紹介しました。

最後に少し国内での動向もご紹介したいと思います。今年実施したCloudNative Days Tokyo 2021では、みんなの銀行三菱UFJインフォメーションテクノロジーによるKubernetesやCloudNativeな技術スタックの利用事例が基調講演で取り上げることができたほど、一定の裾野の広がりを見せました。

2022年はさらに一歩進んだ活用事例、高度な問題解決などもあり、楽しい一年になりそうです。本年も皆様よろしくお願いいたします。

おすすめ記事

記事・ニュース一覧