Share
Embed
Wasmコンテナを動かしてみた
WebAssembly(Wasm)技術は、近年さまざまな領域で注目を集めており、クラウドネイティブ分野ではCNCFにおいて2022年に注目したい5つの技術の1つとしても取り上げられたこともあります。
Wasmの多様な活用シーンの中でも、特にWasmコンテナではアプリケーションコード以外のLinux部分を意識する必要がなくなります。今回はこのWasmコンテナとしての利用に着目し、その使い方や特徴について、デモを交えながらご紹介いたします。
※スピーカーの勉強内容を基に発表いたします。
【本セッションのゴール】
WebAssembly(Wasm)がどのような技術なのか、概要を理解する
Wasmコンテナとはどのようなものか、概要や特徴を理解する
アプリケーションをWasmコンテナとして作成する方法について知る
Shunsuke Tanaka
September 20, 2024
Transcript
34 slides
-
SNS拡散 資料公開 動画撮影 写真撮影 Ask the Speaker #IBMTechXchange #Dojo #Wasm
後日Connpassにて 公開させていただ きます 後日Connpassにて 公開させていただ きます • セッションにて ご質問ください • セッションにて ご案内するアン ケートにご記入 ください Copyright ©2024 NS Solutions Corporation, IBM Corporation. -
オープニング 18:00-18:05 座学 ・Wasmとは 18:05-18:20 デモ ・Wasmデモ 18:20-18:50 QA・クロージング 18:50-19:00
本日のアジェンダ Copyright ©2024 NS Solutions Corporation, IBM Corporation. -
アンケート QRコードを読み取るか、チャット欄のリンクより 回答をお願いします Copyright ©2024 NS Solutions Corporation, IBM Corporation.
https://app.sli.do/event/sB6i5TA9uiCYEi3btFzSFw -
当イベントは日本IBMおよび日鉄ソリューションズの有志エンジニアによって企画された勉強会です。 新しいテクノロジーやクラウドネイティブやマイクロサービスなどのテーマを中心に、今後も色々な勉強会・イベントを開催 する予定です。 本勉強会の内容は、エンジニア個人の見解であり、所属する企業の公式見解ではありません。 セッション中はマイクミュートでの参加にご協力お願いします。 本イベントは録画してアーカイブ公開する予定ですので、その点ご了承ください。 本発表で利用している製品の名称およびロゴは下記の個人、組織または企業の商標となります。 • IBM、は、 世界の多くの国で登録されたInternational
Business Machines Corporationの商標です。他の製品名および サービス名等は、それぞれIBMまたは各社の商標である場合があります。現時点での IBM の商標リストについては、 www.ibm.com/legal/copytrade.shtmlをご覧ください。 • NS(ロゴ)、NSSOL、NS Solutionsは、日鉄ソリューションズ株式会社の登録商標です。 • W3Cは、World Wide Web Consortiumの商標です。 • Windows、Microsoft Azureは、マイクロソフト グループの企業の商標です。 • Kubernetesは、The Linux Foundationの登録商標です。 • macOSは、Apple Inc.の登録商標です。 • Linuxは、Linus Torvaldsの登録商標です。 • Dockerは、Docker Inc.の登録商標です。 • wasmCloudは、wasmCloud LLCの登録商標です。 • Wasmtimeは、Bytecode Allianceの登録商標です。 • WasmEdgeは、Second Stateという会社の登録商標です。 • Wasmerは、Wasmer, Inc.の登録商標です。 • その他本文記載の会社名及び製品名は、それぞれ各社の商標又は登録商標です。 はじめに Copyright ©2024 NS Solutions Corporation, IBM Corporation. -
目的 • Wasm(WebAssembly)を知る・体験する ゴール • Wasmを理解する • Wasmコンテナとはどのようなものか、概念や特徴を理解する • アプリケーションをWasmコンテナとして作成する方法について知る
対象 • Wasmに興味のある方 • Wasmコンテナを作ってみたい方 このセッションについて Copyright ©2024 NS Solutions Corporation, IBM Corporation. • 本日は主に座学と簡単なデモで雰囲気だけでも味わってもらえれば嬉しいです -
田中 俊介(Shunsuke Tanaka) <所属> 日本IBM カスタマーサクセスマネージャー <経歴> 2013- 主にWebシステムの開発に携わる 2022-
日本IBMに中途入社 Automation、特にObservability製品のカスタマーサクセスマネージャーとして、業種・業態問わずサポート <趣味> スポーツ(観るのもやるのも)、旅行 自己紹介 -
望月 雄登(Yuto Mochizuki) <所属> 日鉄ソリューションズ株式会社 システム研究開発センター <経歴> 2022- 日鉄ソリューションズに新卒入社 BFF(Backend
For Frontend)構成全体の監視を導入する案件を担当 <趣味> アニメ、ゲーム、将棋 自己紹介 -
田村 大樹(Daiki Tamura) <所属> 日鉄ソリューションズ株式会社 システム研究開発センター <経歴> 2017-2019 Webシステムに対する負荷試験実行や性能分析 2020-2022
常駐先でクラウド上での開発運用案件(主に基盤担当) 2023- クラウドネイティブ分野の研究開発 <趣味> オーケストラ(クラリネット) 自己紹介 -
Wasmとは Copyright ©2024 NS Solutions Corporation, IBM Corporation. • WebAssemblyの略称
• W3C(※1)によって仕様が標準化されている • Webブラウザでプログラムを高速に実行するための、 「Webブラウザ上で動くバイナリコードの新しいフォーマット」 • JavaScriptより高速 • 基本的には、Rust、C/C++、Go、TypeScriptなどのコンパイル先となり、 これらの言語をウェブ上で実行することができる ※1 World Wide Web Consortium ------- ------- Rust, C/C++ Wasm HTML JS -
Wasmの特徴 Copyright ©2024 NS Solutions Corporation, IBM Corporation. • Wasmの3つの大きな特徴
1.Portable 2.Language Free 3.Sandbox/Secure -
Wasmの特徴 Copyright ©2024 NS Solutions Corporation, IBM Corporation. 1.Portable/Platform independent
-Wasmランタイムが実行できる環境であれば、 すべてのWasmコードの実行が可能 ブラウザ、サーバ、IoTデバイスなど同じコードで実行可能 2.Language Free -様々な言語でコンパイルすることが可能 Rust、C/C++、Go、TypeScript、Python、Ruby…etc. 3.Sandbox/Secure -Wasmはサンドボックス環境で実行される -不正なメモリアクセスや、リソースへのアクセスなどを厳密に制御 ※サンドボックス外へのアクセスはあらかじめ用意されているAPIを呼び出す -
Wasmをブラウザ外で Copyright ©2024 NS Solutions Corporation, IBM Corporation. • WASI
(WebAssembly System Interface)とは… Wasmをブラウザ外で実行するためのインターフェイスを標準化 様々なAPIが定義されていて、システムリソースへのアクセスが可能 Wasmの特徴である、Portable、Sandbox/Secureを引き継いでいる -
Filesystem Database Network Wasmをブラウザ外で Copyright ©2024 NS Solutions Corporation, IBM
Corporation. • 元々はブラウザ処理の高速化のために生まれた技術だったが… WASIが開発されたことで、WebブラウザだけでなくWindowsやLinuxと いったOSの上にWasmランタイムを配置し実行が可能となった Wasm Wasm Runtime WASI Linux Mac Windows -
Wasmとコンテナ Copyright ©2024 NS Solutions Corporation, IBM Corporation. • なぜコンテナとしての利用も期待されているのか…
• 従来のコンテナではOSやインストールされているパッケージの脆弱性も 管理対象となり、コンテナの脆弱性もトレンドの一つとなっている • 一方、Wasmはアプリケーション部分のみをフォーカスすれば良いので、 よりセキュアで軽量な運用が実現できる • また、OSなどに依存せず実行できるPortabilityも兼ね備えていることから、 コンテナとしてのWasmも注目されている • KubernetesやDockerとの統合も進んでおり今後も更なる発展が期待でき る -
Spin • Wasmをビルド・実行するためのフレームワーク • イベント駆動 • HTTP, Redis • コールドスタートの影響が小さい
(ミリ秒単位) その他、Wasm ランタイムの例 • Wasmtime、 WasmEdge、 Wasmer 、WasmCloud、など 実行環境 (フレームワーク) Copyright ©2024 NS Solutions Corporation, IBM Corporation. Spin: https://developer.fermyon.com/spin/v2/ -
Spinのインストール curl –fsSL https://developer.fermion.com/downloads/install.sh | bash sudo mv ./spin /usr/local/bin/spin
対応言語 • Rust, TypeScript, Python, TinyGo • 各言語のテンプレートが用意されている $ spin templates install --git https://github.com/fermyon/spin --update Copying remote template source Installing template redis-go... Installing template http-go... +------------------------------------------------------------------------+ | Name Description | +========================================================================+ | ... other templates omitted ... | | http-go HTTP request handler using (Tiny)Go | | redis-go Redis message handler using (Tiny)Go | | ... other templates omitted ... | +------------------------------------------------------------------------+ 実行環境 (フレームワーク) – Spin 1/2 Copyright ©2024 NS Solutions Corporation, IBM Corporation. -
以下のように複数のアプリを配置し、ビルドと実行ができる • アプリごとに言語が異なっても良い . ├── hello-go │ └── main.go ├──
hello-rust │ ├── Cargo.toml │ └── src │ └── lib.rs └── spin.toml ビルド、実行 spin build spin up 実行環境 (フレームワーク) – Spin 2/2 Copyright ©2024 NS Solutions Corporation, IBM Corporation. -
ローカル • Docker • k3d (Kubernetes) • どちらも、高レベル-低レベルランタイム間(containerd-runc間)を繋ぐ 各コンテナのプロセスによって実現可能になってきている •
containerd-wasm-shim • containerd-shim-spin クラウド • AKS (Microsoft Azure Kubernetes Service) • 大手クラウドベンダの中でWasmを先駆的にサポート 実行環境 (コンテナ) Copyright ©2024 NS Solutions Corporation, IBM Corporation. -
Dockerfileの作成 FROM --platform=${BUILDPLATFORM} rust:1.79 AS build WORKDIR /opt/build COPY .
. RUN cd hello-rust && rustup target add wasm32-wasi && cargo build --target wasm32-wasi --release FROM --platform=linux/amd64 golang:1.21.3-bullseye AS build-go WORKDIR /opt/build COPY . . RUN curl -LO https://github.com/tinygo-org/tinygo/releases/download/v0.30.0/tinygo_0.30.0_amd64.deb && dpkg -i ti RUN cd hello-go && tinygo build -target=wasi -gc=leaking -no-debug -o main.wasm main.go RUN cd healthz && tinygo build -target=wasi -gc=leaking -no-debug -o main.wasm main.go FROM scratch COPY --from=build /opt/build/hello-rust/target/wasm32-wasi/release/hello_rust.wasm ./hello-rust/target/wasm32-was COPY --from=build /opt/build/spin.toml . COPY --from=build-go /opt/build/hello-go/main.wasm ./hello-go/main.wasm COPY --from=build-go /opt/build/healthz/main.wasm ./healthz/main.wasm • spin用のファイルやコマンドを含むため、spinでしか動かせず可搬性が低い • 余計なOSやライブラリ、コマンドが入らず、脆弱性管理の負荷が小さい • scratchイメージに、wasmバイナリとテキストファイルを入れているだけ Dockerでspinのビルド(補足) Copyright ©2024 NS Solutions Corporation, IBM Corporation. -
• イメージサイズ • 一般的なLinuxコンテナイメージと比べて非常に小さい $ docker images REPOSITORY TAG IMAGE
ID CREATED SIZE hello-spin-spin-go latest 0ae54aefef10 6 seconds ago 101kB hello-spin-spin-rust latest 142fe8c0b8aa 15 seconds ago 104kB hello-spin-golang latest 897ad95e3982 23 seconds ago 6.6MB hello-spin-nodejs latest 60b266ebf819 50 seconds ago 427MB • 実行速度の比較結果 • 必ずしも速くなるとは限らない(※今回の実験結果) Wasmの特徴 Copyright ©2024 NS Solutions Corporation, IBM Corporation. Wasm(Rust) Wasm(Go) Nodejs Go -
現状 • まだWasmコンテナの実行環境が整備されている途中段階であり、その結果、実行 フレームワークが乱立しているという印象 (ネットワーク通信などWasmで実行できなかった部分をフレームワークで補完) • フレームワークに依存した実装やイメージになる メリットとデメリット • メリット
• セキュリティで考慮すべき点が少ない • イメージサイズが小さい • 従来のLinuxコンテナで必要なイメージサイズを小さくする工夫が不要 • コンテナとしての学習負荷が小さい • 従来のLinuxコンテナと同様にDockerやKubernetesで扱える • デメリット • 実行速度がやや遅い Wasmコンテナ総評 Copyright ©2024 NS Solutions Corporation, IBM Corporation. -
• spin以外のフレームワークも触ってみる • 可観測性の観点で調べる • プロファイリングやOpenTelemetryが使えるのか等 今後調査したいこと Copyright ©2024 NS
Solutions Corporation, IBM Corporation. -
日鉄ソリューションズでは、 クラウドネイティブ技術を用いてお客様のDXを推進する仲間を募集中です。 ご興味ある方は、ぜひお問い合わせください。 弊社人事より、ご連絡を差し上げます。 We are hiring!! 「NSSOL キャリア採用」 採用ページ:
https://www.nssol.nipponsteel.com/recruit/careers/ Copyright ©2024 NS Solutions Corporation, IBM Corporation. -
ワークショップ、セッション、および資料は、IBMまたはセッション発表者によって準備され、それぞれ独 自の見解を反映したものです。それらは情報提供の目的のみで提供されており、いかなる参加者に対しても 法律的またはその他の指導や助言を意図したものではなく、またIBM製品やサービスがお客様に適用ある特 定の法令に適合することを保証するものでもありません。本講演資料に含まれている情報については、完全 性と正確性を期するよう努めておりますが、「現状のまま」提供され、明示または黙示にかかわらず、商業 性、特定の目的への適合性、非侵害性を含め、いかなる保証も伴わないものとします。本講演資料またはそ の他の資料の使用によって、あるいはその他の関連によって、いかなる損害が生じた場合も、IBMは責任を 負わないものとします。 本講演資料で言及されるIBM製品、プログラム、またはサービスは、IBMがビジネスを行っているすべての 国・地域でご提供可能なわけではありません。本講演資料で言及される将来の展望(製品リリース日付や製
品機能を含む)は、市場機会またはその他の要因に基づいてIBM独自の決定権をもっていつでも変更できる ものとし、将来の製品または機能が使用可能になること、もしくは特定の結果を確約することを意図するも のではありません。 本講演資料は、言及される IBM製品またはサービスに適用ある契約条件を変更するものでも、追加の表明ま たは保証を意図するものでもありません。 Copyright ©2024 NS Solutions Corporation, IBM Corporation. -
アンケート QRコードを読み取るか、チャット欄のリンクより 回答をお願いします Copyright ©2024 NS Solutions Corporation, IBM Corporation.
https://app.sli.do/event/sB6i5TA9uiCYEi3btFzSFw -
• Wasmは基本サーバと同じでしょうか。HTTPだけでなくHTTPやUDPも はけると利用用途が広がりそうですが。 Wasmは、単体としてはあくまで数値計算程度の非常に制限された処理がサンドボックス内で 行える程度です。 外部とやり取りするには、OSでいうシステムコールに相当するWASIに備わる機能に依存し、 WASIがどれだけリッチになるかによってできる範囲が広がると思います。 • Spinの選定理由はなにでしょうか? AKSがWasmを先駆的にサポートしていたこともあり、
今回Wasmを試すにあたり、まずはAKSのドキュメントに沿って試行していきました。 そのドキュメントで使用されているコンテナ等について詳しく調査を進めていると、 Spinにたどり着き、まずはこのSpinを深堀をしていくことから始めました。 Q&A Copyright ©2024 NS Solutions Corporation, IBM Corporation. -
• JavaとWasmどちらが早いのか? Wasmの方が早く作られているのではと考えていますが、 具体的に比較をできたわけではないので今後更に調査していきたいと思います。 • ネイティブバイナリと比べてWASIランタイムを使った場合のメモリ使用 量はどのくらい増えるでしょうか? フットプリントが小さいので小さくなりそうですが、 今回のデモではグラフに表示することに留めているので、こちらに関しても今後更に深堀して いきたいと思います。
Q&A Copyright ©2024 NS Solutions Corporation, IBM Corporation.