WebAssemblyモジュールのプルポリシー
WasmPlugin APIは、プロキシへのWasmモジュールの配布方法を提供します。各プロキシはリモートレジストリまたはHTTPサーバーからWasmモジュールをプルするため、Istioがモジュールをプルする方法を理解することは、使いやすさとパフォーマンスの両方の点で重要です。
イメージプルポリシーと例外
KubernetesのImagePullPolicy
と同様に、WasmPluginにもIfNotPresent
とAlways
という概念があります。これはそれぞれ「キャッシュされたモジュールを使用する」「キャッシュに関係なく常にモジュールをプルする」という意味です。
ユーザーはImagePullPolicy
フィールドを使用して、Wasmモジュールの取得動作を明示的に設定します。ただし、以下のシナリオでは、ユーザーが設定した動作がIstioによってオーバーライドされる可能性があります。
- WasmPluginで
sha256
を設定した場合、ImagePullPolicy
に関係なく、IfNotPresent
ポリシーが使用されます。 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_EXPIRY
とWASM_PURGE_INTERVAL
で設定できます。これらはそれぞれ、有効期限の期間と有効期限チェックの間隔を表します。
「常に」の意味
Kubernetesでは、ImagePullPolicy: Always
は、Podが作成されるたびにイメージがソースから直接プルされることを意味します。新しいPodが開始されるたびに、Kubernetesはイメージを新たにプルします。
WasmPlugin
の場合、ImagePullPolicy: Always
は、対応するWasmPlugin
Kubernetesリソースが作成または変更されるたびに、Istioがソースから直接イメージをプルすることを意味します。spec
だけでなくmetadata
の変更も、Always
ポリシーが使用されている場合、Wasmモジュールのプルをトリガーすることに注意してください。これは、Podの存続期間中、および個々のプロキシの存続期間中に、イメージがソースから複数回プルされる可能性があることを意味します。