KubernetesのノードとしてWebAssemblyランタイムを用いる「Krustlet」、マイクロソフトが公開

2020年4月14日

Dockerコンテナによって実現された軽量で高速に起動するアプリケーション実行環境は、多数のコンテナから構成される分散アプリケーションの普及を大きく後押ししました。

分散アプリケーションの普及は、さらに軽量かつセキュアなDockerコンテナ実現へのニーズへとつながり、GoogleのgVisorやAmazon Web ServicesのFirecrackerといったセキュアなコンテナランタイムの実装や、同じくAWSによるコンテナに最適化したLinuxベースの軽量OSである「Bottlerocket」などを生み出すことになりました。

しかしいくらLinuxを軽量化したところで、OSであるLinuxの軽量化や機能の簡素化には限界があり、それはコンテナランタイムに対しても同様です。

今回マイクロソフトが発表した「Krustlet」はこの、より軽量かつセキュアにアプリケーションを実行するというニーズに対して、DockerコンテナではなくWebAssemblyを用いるという、新しいアプローチで答えたものです。

fig

「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へコンパイルして実行するか、といった選択肢を持てるようになるのではないでしょうか。

Tags: Docker Kubernetes WebAssembly コンテナ型仮想化

このエントリーをはてなブックマークに追加
ツイート
follow us in feedly





タグクラウド

クラウド / AWS / Azure / Google Cloud
コンテナ / Docker / Kubernetes
クラウドネイティブ / サーバレス
クラウド障害 / 運用・監視

プログラミング言語 / 開発ツール
JavaScript / Java / .NET / WebAssembly
HTML/CSS / Web標準

アジャイル開発 / スクラム / DevOps / CI/CD
ソフトウェアテスト・品質
ローコード/ノーコード開発

データベース / RDB / NoSQL / 機械学習・AI
Oracle Database / MySQL / PostgreSQL
Office / 業務アプリケーション

ネットワーク / HTTP / QUIC / セキュリティ
OS / Windows / Linux / VMware
ハードウェア / サーバ / ストレージ

業界動向 / 働き方 / 給与・年収
編集後記 / 殿堂入り / おもしろ

全てのタグを見る

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed

最新記事10本