背景
#15 (M1 贯通主线)「先 kind 真部署验证现状」时实测:在本机 Colima ~5.8GiB 的 kind 单 ns 里 helm upgrade --install platform(启用 infra-dev + gateway + 真 governance,另有 privacy 已在跑)后,kind 节点容器被 OOM reaper 干掉、dockerd socket 短暂消失 ,helm install 本身成功、Pod 到 ContainerCreating 即随节点一起没了。
复现实锤后定位:纯内存问题,非 chart 渲染/镜像缺陷 ——静态全过(helm template 干净、helm dependency build 成功、governance 镜像在 ghcr、helm install deployed)。
问题(根因)
各工作负载 chart 的 values.yaml 全是 resources: {} 占位 ,且 JVM 服务无堆上限 。在 kind 节点内:
每个 JVM(Keycloak / governance Spring Boot / privacy-orchestrator-java …)按节点总内存 (≈整台 VM 6G)自估 MaxRAMPercentage(~25%) → 单个 max heap 可达 ~1.5G;
三个 JVM 叠加即 ~4.5G+ heap + k8s/节点开销 → 超 6G VM → OOM-kill 节点。
即:M1 charts 当前在一台普通 dev 机(≤8G docker VM)上无法一次性起全量 ,这是 M1「单 ns 真跑通」的硬阻塞。
范围(受影响 charts)
deploy/charts/ 下纳入 M1 demo 的工作负载,重点是 JVM:
JVM :governance、control-plane、security、tools-bi、platform-common、privacy(orchestrator-java)、infra-dev(keycloak)
非 JVM 但也应限:gateway(apisix)、privacy(engine-py)、infra-dev(postgres / echoStub)
建议实现
每个 Deployment 模板从 values 注入 resources (现模板多为 {{- toYaml .Values.resources | nindent }},values 填默认而非 {}):给 requests/limits 一套保守 dev 默认(如 JVM 服务 requests.memory: 256Mi / limits.memory: 512Mi,按服务实测调)。
JVM 堆受 limit 约束而非节点总内存 :注入 JAVA_TOOL_OPTIONS: "-XX:MaxRAMPercentage=75.0"(容器内存感知,配合 limits.memory),或显式 -Xmx。Keycloak 同理(JAVA_OPTS_KC_HEAP / -Xmx)。
dev profile 一套小默认 :在 values-localdev.yaml(本 issue 可一并落,M1 贯通主线 · 端到端集成(主仓 owner) #15 /I4 也需要它)给全量一套能在 ~8–10G docker VM 跑起的 limits。
文档:在 deploy/charts/*/README 或主仓 deploy README 标注「dev 机最低内存」与默认 limits 由来。
验收
参考 / 已验证
轻量子集(infra-dev: Keycloak+PG+echoStub + gateway,关真 JVM)在同一 6G Colima 上稳定起、cluster_e2e 12 passed/0 failed ——证明 I1/I2 架构无误、仅资源缺约束。
关联 M1 贯通主线 · 端到端集成(主仓 owner) #15 (M1 贯通主线 · I5 各服务真实化收口);受 D5 (主仓 owns charts)约束。
背景
#15(M1 贯通主线)「先 kind 真部署验证现状」时实测:在本机 Colima ~5.8GiB 的 kind 单 ns 里
helm upgrade --install platform(启用 infra-dev + gateway + 真 governance,另有 privacy 已在跑)后,kind 节点容器被 OOM reaper 干掉、dockerd socket 短暂消失,helm install本身成功、Pod 到 ContainerCreating 即随节点一起没了。复现实锤后定位:纯内存问题,非 chart 渲染/镜像缺陷——静态全过(
helm template干净、helm dependency build成功、governance 镜像在 ghcr、helm installdeployed)。问题(根因)
各工作负载 chart 的
values.yaml全是resources: {}占位,且 JVM 服务无堆上限。在 kind 节点内:MaxRAMPercentage(~25%) → 单个 max heap 可达 ~1.5G;即:M1 charts 当前在一台普通 dev 机(≤8G docker VM)上无法一次性起全量,这是 M1「单 ns 真跑通」的硬阻塞。
范围(受影响 charts)
deploy/charts/下纳入 M1 demo 的工作负载,重点是 JVM:governance、control-plane、security、tools-bi、platform-common、privacy(orchestrator-java)、infra-dev(keycloak)gateway(apisix)、privacy(engine-py)、infra-dev(postgres / echoStub)建议实现
resources(现模板多为{{- toYaml .Values.resources | nindent }},values 填默认而非{}):给 requests/limits 一套保守 dev 默认(如 JVM 服务requests.memory: 256Mi / limits.memory: 512Mi,按服务实测调)。JAVA_TOOL_OPTIONS: "-XX:MaxRAMPercentage=75.0"(容器内存感知,配合limits.memory),或显式-Xmx。Keycloak 同理(JAVA_OPTS_KC_HEAP/-Xmx)。values-localdev.yaml(本 issue 可一并落,M1 贯通主线 · 端到端集成(主仓 owner) #15/I4 也需要它)给全量一套能在 ~8–10G docker VM 跑起的 limits。deploy/charts/*/README或主仓 deploy README 标注「dev 机最低内存」与默认 limits 由来。验收
helm template渲染出resources.requests+resources.limits(无裸{})kubectl exec查-XX:MaxHeapSize≈ limit×比例enabled在单 ns(dev kind / CI)部署不 OOM、各 Pod readiness 真绿参考 / 已验证