WebAssemblyモジュールのプルポリシー

WasmPlugin APIは、プロキシへのWasmモジュールの配布方法を提供します。各プロキシはリモートレジストリまたはHTTPサーバーからWasmモジュールをプルするため、Istioがモジュールをプルする方法を理解することは、使いやすさとパフォーマンスの両方の点で重要です。

イメージプルポリシーと例外

KubernetesのImagePullPolicyと同様に、WasmPluginにもIfNotPresentAlwaysという概念があります。これはそれぞれ「キャッシュされたモジュールを使用する」「キャッシュに関係なく常にモジュールをプルする」という意味です。

ユーザーはImagePullPolicyフィールドを使用して、Wasmモジュールの取得動作を明示的に設定します。ただし、以下のシナリオでは、ユーザーが設定した動作がIstioによってオーバーライドされる可能性があります。

  1. WasmPluginsha256を設定した場合、ImagePullPolicyに関係なく、IfNotPresentポリシーが使用されます。
  2. urlフィールドがOCIイメージを指しており、ダイジェストサフィックス(例:gcr.io/foo/bar@sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef)が付いている場合、IfNotPresentポリシーが使用されます。

リソースに対してImagePullPolicyが指定されていない場合、IstioはデフォルトでIfNotPresent動作を使用します。ただし、提供されたurlフィールドがタグ値がlatestであるOCIイメージを指定している場合、IstioはAlways動作を使用します。

キャッシュされたモジュールのライフサイクル

サイドカープロキシとゲートウェイのどちらの場合でも、各プロキシはWasmモジュールをキャッシュします。そのため、キャッシュされたWasmモジュールの有効期間は、対応するPodの有効期間によって制限されます。さらに、プロキシのメモリフットプリントを最小限に抑えるための有効期限メカニズムがあります。キャッシュされたWasmモジュールが一定時間使用されない場合、モジュールはパージされます。

この有効期限は、pilot-proxyの環境変数WASM_MODULE_EXPIRYWASM_PURGE_INTERVALで設定できます。これらはそれぞれ、有効期限の期間と有効期限チェックの間隔を表します。

「常に」の意味

Kubernetesでは、ImagePullPolicy: Alwaysは、Podが作成されるたびにイメージがソースから直接プルされることを意味します。新しいPodが開始されるたびに、Kubernetesはイメージを新たにプルします。

WasmPluginの場合、ImagePullPolicy: Alwaysは、対応するWasmPlugin Kubernetesリソースが作成または変更されるたびに、Istioがソースから直接イメージをプルすることを意味します。specだけでなくmetadataの変更も、Alwaysポリシーが使用されている場合、Wasmモジュールのプルをトリガーすることに注意してください。これは、Podの存続期間中、および個々のプロキシの存続期間中に、イメージがソースから複数回プルされる可能性があることを意味します。

この情報は役に立ちましたか?
改善のための提案はありますか?

ご意見ありがとうございます!