WebAssembly Hub と WASM OCI Image Specification について / Intro: WebAssembly Hub and WASM OCI Image Specification

WebAssembly Hub と WASM OCI Image Specification について / Intro: WebAssembly Hub and WASM OCI Image Specification

Envoy Meetup Tokyo #2 で発表したスライドとなります。
https://envoytokyo.connpass.com/event/175256/

発表時の録画は以下を参照ください。
https://youtu.be/ICN35mxcEXU?t=8685

9fdb6e5b532d7fa8687faebc4e70a865?s=128

Ryuma Yoshida

June 20, 2020
Tweet

Transcript

  1. Envoy Meetup Tokyo #2 Ryuma Yoshida @ryysud WebAssembly Hub と

    WASM OCI Image Specification について
  2. Ryuma Yoshida @ryysud Software Engineer at Z Lab Corporation

  3. WebAssembly Hub について

  4. WebAssembly Hub について ▶ Wasm Module を OCI イメージとして 管理/配布

    するためのプラットフォーム + Solo.io が Google と Istio コミュニティと協⼒して開発した + Envoy の Wasm Filter の 作成/共有/デプロイ を簡略化するのが⽬的 + イメージの仕様は WASM OCI Image Specification で標準化されている + https://webassemblyhub.io ▶ Wasm イメージは wasme という CLI を利⽤することで Docker コンテナと同じくらい簡単に扱える + wasme で Wasm イメージの Build/Push/Pull/Envoy への Deploy などの操作が可能 + https://github.com/solo-io/wasme ▶ Wasm イメージは Envoy の Wasm Filter としてデプロイできる + デプロイには wasme を利⽤する + Wasme Operator を利⽤して Istio 内の Envoy に CRD ベースで Wasm Filter をデプロイすることも可能 + https://docs.solo.io/web-assembly-hub/latest/tutorial_code/wasme_operator/
  5. wasme の利⽤⽅法 ▶ wasme init(Wasm Filter プロジェクトの初期化) ▶ wasme build(Wasm

    イメージのビルド) ▶ wasme tag(Wasm イメージのタグ付け) ▶ wasme list(Wasm イメージの⼀覧表⽰) ▶ wasme login(Wasm イメージレジストリへのログイン) ▶ wasme push(Wasm イメージのプッシュ) ▶ wasme pull(Wasm イメージのプル) ▶ wasme deploy(Wasm Filter を Envoy にデプロイ) ▶ wasme undeploy(Wasm Filter を Envoy から削除) ※ Version 0.0.20 でサポートされているコマンド
  6. WASM OCI Image Specification について

  7. WASM OCI Image Specification について ▶ Wasm Module を OCI

    イメージとしてバンドルするための仕様 + ⼀般的な仕様のため使⽤⽤途は限定されておらずあらゆる種類の Wasm Module に対応 + Envoy の Wasm Filter やブラウザ拡張など + Wasm Module を使⽤するアプリに特化して設計された OCI イメージ仕様の拡張という位置づけ + https://github.com/solo-io/wasm-image-spec ▶ Wasm OCI Image は以下のファイルから構成される + Wasm バイナリファイル(Wasm Module) + Wasm ランタイムで利⽤される JSON 形式の設定ファイル(Runtime Configuration) + JSON 形式の Wasm バイナリファイルのメタデータ ▶ Envoy は Wasm OCI Image を ローカルディスクまたは http でロードして Wasm Filter として実⾏する + WebAssembly Hub から Pull してローカルにキャッシュして Wasm ランタイムで実⾏するイメージ
  8. Wasm Filter を Envoy にデプロイする⽅法

  9. Wasm Filter を Envoy にデプロイする⽅法 ▶ wasme を利⽤して Istio または

    Gloo により展開された Envoy に Wasm Filter をデプロイできる + Istio へのデプロイでは Wasm Filter を Envoy で使⽤する設定を EnvoyFilter リソースとして作成する + Gloo の場合も同じようにカスタムリソースを作成する仕組み + 開発⽤途でローカル環境に Wasm Filter がセットアップされた Envoy を起動することも可能 ▶ wasme でデプロイを実⾏すると Wasm Filter をキャッシュするためのコンテナがデプロイされる + Kubernetes クラスタ内に wasme cache container が DaemonSet としてデプロイされる + Envoy は cache container によってキャッシュされた Wasm イメージを hostPath でマウントして利⽤する + https://github.com/solo-io/wasme/tree/v0.0.20/pkg/cmd/cache ▶ Wasme Operator を利⽤して Istio 内の Envoy に CRD ベースで Wasm Filter をデプロイすることも可能 + Wasm Filter を本番運⽤する場合に Operator を利⽤して設定などを CR で GitOps 的に管理するのが良い + Operator で利⽤する CR は FilterDeployment リソース + https://github.com/solo-io/wasme/blob/v0.0.20/operator/install/wasme/crds/wasme.io_v1_crds.yaml
  10. wasme を利⽤して Istio により展開された Envoy に Wasm Filter をデプロイ

  11. wasme cache container のデプロイ

  12. wasme cache container によって K8s Worker Nodes にキャッシュされた Wasm イメージを

    Envoy コンテナに hostPath でマウントするために Istio 仕様の Annotation をアプリの Deployment に追加 sidecar.istio.io/userVolume: '[{"name":"cache-dir","hostPath":{"path":"/var/local/lib/wasme-cache"}}]' sidecar.istio.io/userVolumeMount: '[{"mountPath":"/var/local/lib/wasme-cache","name":"cache-dir"}]'
  13. Wasm Filter を Envoy で使⽤する設定を定義した EnvoyFilter リソースを作成

  14. None
  15. None
  16. まとめ

  17. まとめ ▶ WebAssembly Hub は Wasm Module を OCI イメージとして        

    管理/配布 するためのプラットフォーム ▶ Wasm イメージの仕様は WASM OCI Image Specification で標準化されている ▶ wasme または Wasme Operator を使⽤することで Istio, Gloo によって展開さ れた Envoy に Wasm イメージを Wasm Filter としてデプロイできる
  18. https://qiita.com/ryysud/items/f4faa4e92cb925ebbfce

  19. https://qiita.com/ryysud/items/bf4139edc8165f991045

  20. WE ARE HIRING! https://zlab.co.jp

  21. Thank you!