WebAssembly 모듈의 풀 정책
WebAssembly 모듈의 풀 정책 (Pull Policy for WebAssembly Modules)
WasmPlugin API가 프록시에 Wasm 모듈을 배포하는 방법을 제공해요. 각 프록시는 원격 레지스트리나 HTTP 서버에서 Wasm 모듈을 풀하므로, Istio가 모듈을 풀하는 방식을 이해하는 것이 사용성과 성능 측면에서 중요해요.
출처: Istio 문서
본문
WasmPlugin API는 프록시에 Wasm 모듈을 배포하는 방법을 제공해요. 각 프록시는 원격 레지스트리나 HTTP 서버에서 Wasm 모듈을 풀하기 때문에, Istio가 모듈을 풀하기로 선택하는 방식을 이해하는 것이 사용성뿐 아니라 성능 측면에서도 중요해요.
이미지 풀 정책과 예외
쿠버네티스의 ImagePullPolicy와 유사하게 WasmPlugin도 IfNotPresent와 Always의 개념이 있어요. 각각 "캐시된 모듈 사용"과 "캐시와 관계없이 항상 모듈 풀"을 의미해요.
사용자는 ImagePullPolicy 필드로 Wasm 모듈 검색 동작을 명시적으로 구성해요. 하지만 다음 시나리오에서는 Istio가 사용자 제공 동작을 재정의할 수 있어요.
- 사용자가 WasmPlugin에서
sha256을 설정하면,ImagePullPolicy와 관계없이IfNotPresent정책이 사용돼요. url필드가 digest 접미사가 있는 OCI 이미지를 가리킨다면(예:gcr.io/foo/bar@sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef),IfNotPresent정책이 사용돼요.
리소스에 ImagePullPolicy가 지정되지 않으면 Istio는 기본적으로 IfNotPresent 동작을 사용해요. 하지만 제공된 url 필드가 latest 태그 값을 가진 OCI 이미지를 지정하면 Istio는 Always 동작을 사용해요.
캐시된 모듈의 수명주기
sidecar 프록시든 게이트웨이든 각 프록시는 Wasm 모듈을 캐시해요. 따라서 캐시된 Wasm 모듈의 수명은 해당 파드의 수명으로 제한돼요. 또한 프록시 메모리 공간을 최소로 유지하기 위한 만료 메커니즘이 있어요. 캐시된 Wasm 모듈이 일정 시간 동안 사용되지 않으면 그 모듈은 제거(purge)돼요.
이 만료는 pilot-proxy의 환경 변수 WASM_MODULE_EXPIRY와 WASM_PURGE_INTERVAL로 구성할 수 있어요. 각각 만료 기간과 만료를 확인하는 간격이에요.
"Always"의 의미
쿠버네티스에서 ImagePullPolicy: Always는 파드를 생성할 때마다 이미지가 소스에서 직접 풀된다는 뜻이에요. 새 파드가 시작될 때마다 쿠버네티스는 이미지를 새로 풀해요.
WasmPlugin의 경우 ImagePullPolicy: Always는 해당 WasmPlugin 쿠버네티스 리소스가 생성되거나 변경될 때마다 Istio가 이미지를 소스에서 직접 풀한다는 뜻이에요. Always 정책을 사용할 때 spec뿐 아니라 metadata의 변경도 Wasm 모듈 풀을 트리거한다는 점에 유의하세요. 이는 파드 수명 동안, 그리고 개별 프록시의 수명 동안 이미지가 소스에서 여러 번 풀될 수 있다는 것을 의미해요.