KubernetesのノードとしてWebAssemblyランタイムを用いる「Krustlet」、マイクロソフトが公開
Dockerコンテナによって実現された軽量で高速に起動するアプリケーション実行環境は、多数のコンテナから構成される分散アプリケーションの普及を大きく後押ししました。
分散アプリケーションの普及は、さらに軽量かつセキュアなDockerコンテナ実現へのニーズへとつながり、GoogleのgVisorやAmazon Web ServicesのFirecrackerといったセキュアなコンテナランタイムの実装や、同じくAWSによるコンテナに最適化したLinuxベースの軽量OSである「Bottlerocket」などを生み出すことになりました。
しかしいくらLinuxを軽量化したところで、OSであるLinuxの軽量化や機能の簡素化には限界があり、それはコンテナランタイムに対しても同様です。
今回マイクロソフトが発表した「Krustlet」はこの、より軽量かつセキュアにアプリケーションを実行するというニーズに対して、DockerコンテナではなくWebAssemblyを用いるという、新しいアプローチで答えたものです。
「Krustlet」は、Rustで実装されたKubeletかつWebAssemblyランタイム
Krustletとは、Rustで実装されたKubeletであり、かつWebAssemlyランタイムの機能も備えています。名称は「Kubernetes-rust-kubelet」を略したものです。
Krustletは、起動されるとまず自分自身をKubernetesのノードとしてKubernetesに登録します。Krustletは前述のようにRustで実装されたKubeletであるため、Kubeletとしてノード上でPodの生成などの機能を備えています。
そのためKuberenetesのマニフェストファイルによってKubeletとして動作をコントロールし、Azure Container RegistryからWebAssemblyモジュールをロードしてKrustlet上で実行する、といったことが可能だと説明されています。
これはつまり、OS上のサンドボックスとしてDockerコンテナを用い、そのなかでWebAssemblyランタイムを実行するのではなく、OS上のサンドボックスとしてWebAssemblyを用いる、ということです。
これによりDockerコンテナよりもさらに軽量で、しかもOSよりもそもそも実装されている機能が少ないという意味でセキュアなWebAssemblyを、Kubernetesのノードとして利用できるようになるわけです。
ただし、Krustletはまだバージョン0.1.0の段階で、多くの機能が未実装です。実用までにはさらに機能を充実させていく必要があります。ノードとして利用されるWebAssembly側にもまだ進化が必要でしょう。
WebAssemblyはポータブルなバイナリフォーマットへ
WebAssemblyとは、Webブラウザ上でネイティブコードに近い実行速度で高速に実行できるバイナリフォーマットとして開発が始まり、2019年12月にはW3Cの勧告に到達しました。
と同時に、このWebAssemblyの技術をWebブラウザから取り出し、サーバやデスクトップなどさまざまな場所で実行できるものにしようとする動きも目立ってきました。
その代表が、2019年4月にCDNベンダのFastlyが公開したWebAssemblyのコンパイラとランタイムの「Lucet」です。
そしてLucetの公開と同時に、FastlyやMozilla、Node.jsなどが共同で、WebAssemblyからファイルやネットワーク、メモリなどのリソースへ共通のAPIでアクセスできるようにするための標準仕様「WASI」の策定を開始。
WASIが実現するのは、WebAssemblyからファイル操作やメモリ操作、ネットワークへの通信を、LinuxでもWindowsでもmacOSなどのOSに依存せず、共通のWebAssemblyバイナリで可能にするというものです。これによってWebAssemblyバイナリはプロセッサにもOSにも依存しないポータブルなバイナリとなります。
WebAssemblyをポータブルかつセキュアなバイナリとしていこうという動きは、インテルやMoziilaなどが設立したBytoCode Allianceによっても支持されています。
このようにWebAssemblyは今後あらゆる場所で使われるバイナリフォーマットになるでしょう。Kubernetesのノードとして使おうとするKrustletはそうしたトレンドの代表的な1つとなります。
いずれ分散アプリケーションのプログラマは、コードをDockerコンテナ上で実行するか、それともWebAssemblyへコンパイルして実行するか、といった選択肢を持てるようになるのではないでしょうか。
あわせて読みたい
jQueryが久しぶりにバージョンアップ、「jQuery 3.5.0」に。セキュリティフィクスによる破壊的変更あり
≪前の記事
「Visual Studio Code」2020年3月版の新機能、時系列でファイルへの操作履歴「タイムラインビュー」、PC間で設定の同期、Undo/Redoがファイル再開後も有効など