Skip to content

M1 charts 补 resources 限额 + JVM 堆上限(6G dev 机全量必 OOM) #32

@uniquehole

Description

@uniquehole

背景

#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:

  • JVMgovernancecontrol-planesecuritytools-biplatform-commonprivacy(orchestrator-java)、infra-dev(keycloak)
  • 非 JVM 但也应限:gateway(apisix)、privacy(engine-py)、infra-dev(postgres / echoStub)

建议实现

  1. 每个 Deployment 模板从 values 注入 resources(现模板多为 {{- toYaml .Values.resources | nindent }},values 填默认而非 {}):给 requests/limits 一套保守 dev 默认(如 JVM 服务 requests.memory: 256Mi / limits.memory: 512Mi,按服务实测调)。
  2. JVM 堆受 limit 约束而非节点总内存:注入 JAVA_TOOL_OPTIONS: "-XX:MaxRAMPercentage=75.0"(容器内存感知,配合 limits.memory),或显式 -Xmx。Keycloak 同理(JAVA_OPTS_KC_HEAP / -Xmx)。
  3. dev profile 一套小默认:在 values-localdev.yaml(本 issue 可一并落,M1 贯通主线 · 端到端集成(主仓 owner) #15/I4 也需要它)给全量一套能在 ~8–10G docker VM 跑起的 limits。
  4. 文档:在 deploy/charts/*/README 或主仓 deploy README 标注「dev 机最低内存」与默认 limits 由来。

验收

  • 各工作负载 helm template 渲染出 resources.requests + resources.limits(无裸 {}
  • JVM 服务 heap 由容器 limit 约束(非节点总内存):kubectl exec-XX:MaxHeapSize ≈ limit×比例
  • 全量 enabled 在单 ns(dev kind / CI)部署不 OOM、各 Pod readiness 真绿
  • 红线自检(无客户可识别信息;dev 占位凭据)

参考 / 已验证

  • 轻量子集(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)约束。

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions