【免费下载链接】flexprice
Usage-based pricing and billing for developers 🔓 Cloud or self-hosted ⚙️ No-code UI 💰 Realtime usage metering 🎟 Credits & top-ups 🔑 Control feature access
本文以 FlexPrice 开源仓库中 local-setup-troubleshooting.md 为骨架,完整记录在 Apple Silicon(M 系列)Mac 上通过 OrbStack 内置 Kubernetes 与 Helm 运行 FlexPrice 全栈时遇到的 13 类真实故障——从 Bitnami 镜像拉取失败、Temporal 配置错位,到 Kafka KRaft 仲裁破裂与 Helm pending-upgrade 死锁——并给出可复现的根因分析与修复方案。读完本文,你将掌握如何在开发者笔记本上把内存预算压到 6 GiB 以内、用一条条
helm upgrade命令把 FlexPrice(API / Consumer / Worker / Temporal / ClickHouse / Kafka / Redis / PostgreSQL)跑起来,并具备独立排查同类问题的能力。
一、环境基线:这套方案针对什么运行环境
本文所有结论都基于下表所示的实测环境,脱离该基线时部分结论需要重新评估:
| 项目 | 详情 |
|---|---|
| 机器 | Apple Silicon(M 系列,aarch64) |
| 操作系统 | macOS 15.x |
| 容器运行时 | OrbStack(替代 Docker Desktop) |
| Kubernetes | OrbStack 内置 k8s 集群 |
| Helm | 4.x(通过brew install helm安装) |
| Chart | internal/ee/infrastructure/helm/flexprice/,Chart.yaml 声明 v1.0.0 |
| Temporal | server v1.30.3,chart v0.74.0 |
当前仓库中 Chart.yaml 的依赖为:postgresql16.7.27、kafka32.4.3、redis20.13.4(均来自 Bitnami charts 仓库),以及temporal0.74.0(来自go.temporal.io/helm-charts),条件开关分别对应postgresql.enabled、kafka.enabled、redis.enabled、temporal.enabled四个顶层键。这套依赖是理解下文诸多故障(镜像源、默认开启 Elasticsearch、配置模板格式)的前提。
二、快速上手(TL;DR):一条龙命令序列
下面的命令序列是官方推荐的本地一键启动路径,包含一次性环境配置、分阶段部署与最终验证。请注意:分阶段部署是有意为之——先只拉起基础设施(数据库、消息队列、Temporal),跑完迁移,再启动应用组件,避免迁移 Job 与应用争抢资源。
# 前置条件:OrbStack 正在运行,kubectl context 已指向 OrbStack k8s brew install helm cd helm/ # 即仓库的 internal/ee/infrastructure/helm/ # 一次性:把 ingress 的 LoadBalancer IP 与三个域名写入 /etc/hosts sudo sh -c 'echo "$(kubectl get svc -n ingress-nginx ingress-nginx-controller \ -o jsonpath="{.status.loadBalancer.ingress[0].ip}" 2>/dev/null \ || echo 192.168.139.2) api.flexprice.local temporal.flexprice.local" >> /etc/hosts' # 一次性:安装 ingress-nginx(kind 部署清单同样适用于 OrbStack k8s) kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.10.1/deploy/static/provider/kind/deploy.yaml kubectl wait --namespace ingress-nginx \ --for=condition=ready pod \ --selector=app.kubernetes.io/component=controller \ --timeout=120s # 创建命名空间并部署(阶段一:仅基础设施,全部应用组件关闭) kubectl create namespace flexprice --dry-run=client -o yaml | kubectl apply -f - helm dependency update ./flexprice helm upgrade --install flexprice ./flexprice \ -f ./flexprice/values.yaml -f ./values-local.yaml \ --set api.enabled=false --set consumer.enabled=false \ --set worker.enabled=false --set frontend.enabled=false \ --set migration.enabled=false \ -n flexprice --wait --timeout 10m # 阶段二:运行数据库迁移 helm upgrade flexprice ./flexprice \ -f ./flexprice/values.yaml -f ./values-local.yaml \ --set api.enabled=false --set consumer.enabled=false \ --set worker.enabled=false --set frontend.enabled=false \ --set migration.enabled=true \ -n flexprice --wait --timeout 5m # 阶段三:部署应用(API + Consumer + Worker,前端保持关闭) helm upgrade flexprice ./flexprice \ -f ./flexprice/values.yaml -f ./values-local.yaml \ --set api.enabled=true --set consumer.enabled=true \ --set worker.enabled=true --set frontend.enabled=false \ --set migration.enabled=false \ -n flexprice --wait --timeout 5m # 验证 curl http://api.flexprice.local/health # → {"status":"ok"}要点提醒:values-local.yaml位于 internal/ee/infrastructure/helm/values-local.yaml,是本地开发覆盖层;官方脚本层面,仓库还提供了provision.sh一键部署器(./provision.sh,默认创建 kind 集群flexprice-local,支持--source local|ghcr、--skip-tests、--skip-frontend等参数,详见 helm README),kind 集群配置见 kind-cluster.yaml。
三、13 类故障的完整排障手册
以下每小节都遵循「症状 → 根因 → 修复」结构,并补充了仓库源码中的依据与「需要进一步加固」的改进建议。
1. 必填值未文档化——缺少密码时 chart 直接失败
症状
Error: secrets.existingSecret not set and clickhouse.password is empty根因
当secrets.existingSecret为空时,chart 会渲染自己的 Secret 并强制要求四个明文值:
postgres.passwordclickhouse.passwordauth.secretsecrets.encryptionKey
secret.yaml 模板 中对四个键逐一使用了 Helm 的required函数,任何一个为空都会让渲染直接报错退出。而 values.yaml 中这些字段的默认值都是空字符串,因此不带任何覆盖值直接helm install必败。
修复
values-local.yaml 中已经补齐全部四个值:
secrets: encryptionKey: "dev-encryption-key-32-chars-here" auth: provider: "flexprice" secret: "dev-auth-secret-local" postgres: password: "flexprice123" clickhouse: password: "flexprice123"加固建议:values.yaml中这四个键应标注# REQUIRED: set this注释并在 README 中显式点名。从模板源码看,required的错误信息已经足够明确(会指出具体缺哪个键),但默认值仍为空字符串的现状对新手不友好。
2. Bitnami 镜像从 Docker Hub 消失
症状
failed to pull image "docker.io/bitnami/redis:7.4.3-debian-12-r0": not found failed to pull image "docker.io/bitnami/kafka:...": not found根因
Bitnami 于 2023 年 11 月从 Docker Hub 移除了所有带版本号的镜像 tag,只保留:latest(redis/postgresql 尚存),Kafka 镜像则完全从 Docker Hub 消失。
修复
改用 ECR Public 的public.ecr.aws/bitnami/,它保留了全部版本化 tag:
postgresql: image: registry: public.ecr.aws redis: image: registry: public.ecr.aws kafka: image: registry: public.ecr.awsApple Silicon 特别说明:ECR Public 上的 Bitnami 镜像只有 amd64 架构。OrbStack 会通过 Rosetta 2 透明运行 amd64 容器,因此在 OrbStack k8s 上「开箱即用」;但在原生 arm64 的 kind 集群上则无法运行(见故障 3)。
加固建议:values.yaml的三个 Bitnami 子 chart 默认registry应直接改为public.ecr.aws。仓库现状是:values.yaml中注释示例提到了这一改动,但实际默认值仍指向 Docker Hub。另外,仓库 values-local.yaml 目前对 PostgreSQL / Redis 使用的是bitnamilegacy/postgresql:16.4.0-debian-12-r17、bitnamilegacy/redis:7.4.0-debian-12-r2的固定 tag 组合(固定 tag 保证本地安装可复现,避免latest漂移),这也是规避镜像消失的另一种思路。
3. kind 无法在 Apple Silicon 上运行
症状
[ERROR] preflight: running with swap on is not supported kube-scheduler refused connection kube-apiserver refused connection或强制DOCKER_DEFAULT_PLATFORM=linux/amd64时:
kubeadm init failed — k8s control plane binaries do not work under Rosetta根因
- ARM64 架构的 kind 集群:Bitnami 的 amd64 镜像无法通过
kind load docker-image正确载入(工具只传输了一个 317 字节的 manifest,而非真正的镜像层)。 - AMD64 架构的 kind 集群:Rosetta 2 不支持
kubeadm与 k8s 控制平面所需的全部系统调用。
修复 / 推荐方案
在 Apple Silicon Mac 上改用OrbStack 内置 Kubernetes而非 kind:
- 在 OrbStack 设置 UI 中启用 k8s;
- 执行
kubectl config use-context orbstack; - 无需创建集群,集群始终在运行。
local-up.sh目前强制要求 kind,脚本应增加--orbstack标志或自动探测 OrbStack。
如果确实要用 kind:使用 Intel Mac 或 Linux x86_64 机器,kind 在这些平台上工作正常。
4. OrbStack k8s 与 Docker 共享镜像仓库——无需 kind load
影响
在 OrbStack k8s 上运行时不需要kind load docker-image。任何docker build构建出的镜像会立即对 OrbStack k8s 的 Pod 可见——两者共享同一个 Docker socket。local-up.sh中原本的模式是:
docker build -t flexprice-app:local ... kind load docker-image flexprice-app:local --name "$CLUSTER_NAME"在 OrbStack 上应跳过kind load步骤。Helm values 已设置imagePullPolicy: IfNotPresent,Pod 会直接使用本地 daemon 中的镜像。
修复
更新local-up.sh,探测 OrbStack 后跳过 kind load:
if [[ "$KUBECTL_CONTEXT" == "orbstack" ]]; then info "OrbStack detected — skipping kind load (images shared via Docker daemon)" else kind load docker-image flexprice-app:local --name "$CLUSTER_NAME" fi5. Bitnami 安全校验拒绝 ECR 镜像仓库
症状
Helm upgrade 表面成功(exit code 0 是被管道掩盖的结果,见故障 13),但 Pod 报:
Unrecognized images: public.ecr.aws/bitnami/redis:7.4.3-debian-12-r0根因
Bitnami chart 会校验镜像必须来自其认可的「安全仓库」白名单,ECR Public 不在白名单中。
修复
global: security: allowInsecureImages: true只要 Bitnami 子 chart 使用 ECR Public 或任何非标准仓库,values-local.yaml中就必须设置该选项。
6. Temporal 默认部署 Elasticsearch——白白消耗 3 GiB
症状
阶段一helm install超时,卡在等待:
resource StatefulSet/flexprice/elasticsearch-master not ready. Ready: 0/3即便 chart 已配置 PostgreSQL 作为 visibility 存储,仍会部署 3 个 Elasticsearch 副本(每个约请求 1 GiB 内存)。
根因
temporalio/temporalchart(v0.74.0)默认elasticsearch.enabled: true。FlexPrice 的values.yaml正确配置了 Temporal 使用 PostgreSQL 做 visibility,但没有显式关闭 Elasticsearch。
修复
temporal: elasticsearch: enabled: false7. Temporal server 忽略 chart 生成的 ConfigMap,读取内嵌 Cassandra 配置
症状
Temporal 的四个 server Pod(frontend、history、matching、worker)全部 crash-loop:
Loading configuration from environment variables only Processing config file as template; filename=config_template_embedded.yaml Unable to load configuration: Persistence.DataStoresdefault.Cassandra.Hosts: zero value.根因
Temporal server v1.30.3 改变了配置加载行为:默认读取内嵌的配置模板(该模板使用 Cassandra)。Helm chart 会生成一份 PostgreSQL 配置的 ConfigMap 并挂载到/etc/temporal/config/config_template.yaml,但除非显式告知 server 使用该文件,否则 server 会忽略它。
chart 支持两种配置模板格式:
dockerize:Go 模板,{{ .Env.X }}语法(用于旧版使用 dockerize 的镜像);sprig:{{ env "X" | quote }}语法 +# enable-template标记(用于 server v1.30+)。
chart 默认configMapsToMount: "dockerize",对 v1.30+ 是错误的。
修复
temporal: server: setConfigFilePath: true # 注入 TEMPORAL_SERVER_CONFIG_FILE_PATH 环境变量 configMapsToMount: "sprig" # 使用 server v1.30+ 原生可处理的 sprig 模板验证
修复后 server 日志应显示:
{"msg":"Starting server for services","value":{"frontend":{}}}而不再是 Cassandra 报错。
加固建议:FlexPrice 的values.yaml中temporal:段应默认带上这两项设置(chart 已固定server.image.tag: 1.30.3)。仓库 values-local.yaml 中已经落实了该修复:configMapsToMount: "sprig"、setConfigFilePath: true,并同时关闭了prometheus、elasticsearch、grafana、cassandra、mysql、temporal 自带的postgresql(复用 FlexPrice 自己的 postgresql 子 chart),Temporal 的 default/visibility 两套 persistence 均指向flexprice-postgresql服务上的temporal与temporal_visibility数据库。
8. 6 GiB 节点内存压力:OOMKill 循环
症状
Pod(尤其 PostgreSQL)运行 1–3 分钟后反复被 OOMKill(exit code 137)。
根因
默认内存限额合计约为 6 GiB OrbStack 节点的127%:
- ClickHouse:4 GiB(values.yaml 默认值);
- Kafka controller × 3:每个约 768 MiB,合计 2.3 GiB;
- Temporal 监控栈(Prometheus + Grafana + Alertmanager):约 1.5 GiB;
- 其余组件:约 2 GiB。
在values-local.yaml中应用的修复
| 服务 | 修复前 | 修复后 |
|---|---|---|
| ClickHouse limit | 4 GiB | 1 GiB |
| Kafka controller 副本数 | 3 | 1 |
| Kafka controller limit | 768 MiB | 512 MiB |
| Kafka broker limit | 不限 | 512 MiB |
| PostgreSQL limit | 192 MiB | 512 MiB |
| Prometheus | 启用 | 禁用 |
| Grafana | 启用 | 禁用 |
| Elasticsearch | 启用 | 禁用 |
结果
内存限额从约 127% 压到约 101%,节点 MemoryPressure 解除。
加固建议:values-local.yaml应作为带预配置资源限额的模板随仓库发布。当前默认值适合生产,但让 chart 在开发者笔记本上几乎无法运行。对照仓库当前 values-local.yaml,可以看到已落实的瘦身:ClickHouse standalone 模式 limit 2 GiB / request 1 GiB,Kafka 关闭 Bitnami 子 chart(改用 confluentinc/cp-kafka 手写模板,单副本)、internal 组件 limit 1 GiB / request 512 MiB,API/Consumer 各 1 副本且 limit 512 MiB,Worker limit 256 MiB,Temporal server limit 512 MiB。
9. Temporal schema 迁移期间 PostgreSQL 被 OOMKill
症状
当flexprice-temporal-schema-*Job 的 init 容器(对 postgres 执行 SQL 迁移)运行时,PostgreSQL Pod 反复 OOMKill(exit code 137)。
根因
Bitnami PostgreSQL chart 默认只有 192 MiB 内存限额。Temporal 的 schema 迁移工具会并发运行 SQL 操作(6 个 init 容器,部分并行),PostgreSQL 需要远超 192 MiB 的内存。
修复
postgresql: primary: resources: requests: memory: "256Mi" limits: memory: "512Mi"注意:这是一个级联问题——若 PostgreSQL 在 Temporal schema Job 的 init 容器运行期间被 OOMKill,该 init 容器随即失败。Job 会按指数退避重试,PostgreSQL 恢复后重试即可成功,但这会制造令人困惑的失败噪音。
10. 缩减副本后 Kafka controller 仲裁破裂
症状
把kafka.controller.replicaCount从 3 减到 1 后,唯一的 kafka-controller Pod 崩溃:
UnknownHostException: flexprice-kafka-controller-1.flexprice-kafka-controller-headless... UnknownHostException: flexprice-kafka-controller-2.flexprice-kafka-controller-headless... ERROR [RaftManager id=0] Graceful shutdown of RaftClient failed: TimeoutException根因
Kafka controller 的 PVC 中存储的 KRaft 元数据仍引用全部三个 controller ID(0、1、2)。单个 controller 无法组成仲裁(3 个节点需要多数即 2 个),于是持续尝试联系缺失的 controller。
修复
删除过期的 PVC 以强制重新初始化:
kubectl delete pod flexprice-kafka-controller-0 -n flexprice --force --grace-period=0 kubectl delete pvc>helm status flexprice -n flexprice | grep STATUS # STATUS: pending-install (或 pending-upgrade)修复
定位并删除处于 pending 状态的 helm release Secret:
kubectl get secret -n flexprice -l "owner=helm,name=flexprice" -o name # 找到 label 中 status=pending-install 或 pending-upgrade 的那个 kubectl get secret sh.helm.release.v1.flexprice.v3 \ -n flexprice -o jsonpath='{.metadata.labels.status}' # 删除以解除锁 kubectl delete secret sh.helm.release.v1.flexprice.v3 -n flexprice12. Ingress 主机名不匹配
症状
http://api.flexprice.local/health返回 nginx 404,尽管 API Pod 是健康的。
根因
values.yaml中 ingress 默认主机为flexprice.example.com。文档/脚本要求把api.flexprice.local加入/etc/hosts,但 ingress 并未配置匹配该主机名。
在values-local.yaml中修复
ingress: hosts: - host: api.flexprice.local paths: - path: / pathType: Prefix temporalIngress: host: temporal.flexprice.local关于路由前缀的说明
API 的健康检查端点是/health(而非/v1/health)。ingress 把/下所有路径都路由到 API 服务,因此:
http://api.flexprice.local/health→{"status":"ok"}✅http://api.flexprice.local/v1/health→ 404(不存在该路由)✅ 符合预期
对照仓库当前 values-local.yaml,ingress、frontendIngress(host:flexprice.local)、temporalIngress(host:temporal.flexprice.local)三个 Ingress 块均已启用并指向 nginx class。
13. local-up.sh 管道退出码被掩盖
症状
即使 helm 返回错误,local-up.sh仍显示成功(打印 "Phase 1 complete")。
根因
helm upgrade ... 2>&1 | tail -5; echo "exit: $?"echo "exit: $?"捕获的是tail的退出码而非 helm 的。只要tail成功打印了输出,无论 helm 是否失败,tail都返回 0。
修复
方案一:使用set -o pipefail(脚本头部已有,但只作用于最外层管道)或显式捕获退出码:
helm upgrade ... 2>&1 | tee /tmp/helm-out.log HELM_EXIT=${PIPESTATUS[0]} tail -5 /tmp/helm-out.log [[ $HELM_EXIT -eq 0 ]] || die "helm upgrade failed (exit $HELM_EXIT)"方案二:干脆不把 helm 输出接管道:
helm upgrade ... || die "helm upgrade failed"四、加固路线图:把本地安装推向「一键可用」
必须修复(在宣称「一键」之前)
- 让
local-up.sh支持 OrbStack——跳过 kind 集群创建与kind load,增加自动探测或--orbstack标志; - 随仓库发布
values-local.yaml模板(当前已提交于 internal/ee/infrastructure/helm/values-local.yaml),预配置全部必填密码、ECR 镜像仓库、Temporal 配置与资源限额; - 修复
values.yaml中 Bitnami 镜像仓库默认值——postgresql.image.registry、redis.image.registry、kafka.image.registry默认改为public.ecr.aws; - 修复
values.yaml的 Temporal 配置默认值——由于 chart 固定了 server v1.30.3,应默认设置temporal.server.setConfigFilePath: true与temporal.server.configMapsToMount: "sprig"; - 修复内存限额——ClickHouse 4 GiB 对本地开发过高,默认应为 1 GiB 或参数化;
- 在 README 中文档化必填值——显式点名
postgres.password、clickhouse.password、auth.secret、secrets.encryptionKey。
锦上添花
- 在
local-up.sh中加入/etc/hosts指引——探测 OrbStack ingress IP 并打印确切的echo命令; - Temporal UI ingress——在 values-local.yaml 中加入
temporalIngress并实测; - 健康检查脚本——提供
verify-local.sh,逐个访问各服务健康端点并报告 pass/fail; - 清理脚本——
helm uninstall flexprice -n flexprice && kubectl delete namespace flexprice并清理 PVC。
五、OrbStack 专属注意事项
OrbStack Kubernetes IP
OrbStack 内置 k8s 集群的 ingress IP 为192.168.139.2(可能因环境而异,用kubectl get svc -n ingress-nginx确认)。写入/etc/hosts:
192.168.139.2 api.flexprice.local temporal.flexprice.local flexprice.localOrbStack Docker / k8s 镜像共享
宿主机构建的 Docker 镜像可立即被 OrbStack k8s 的 Pod 使用,无需kind load。原因是 OrbStack k8s 与 Docker 共享同一个 containerd/OCI 镜像存储。
Rosetta 2 与 amd64 容器
OrbStack 通过 Apple 的 Rosetta 2 翻译层透明运行 amd64 容器镜像。这对用户态进程(数据库、消息代理、应用服务器)有效;但对 k8s 控制平面本身无效——这正是 amd64 kind 集群无法在 Apple Silicon 上运行的原因。
内存分配
OrbStack 默认虚拟机获取宿主机约 50% 的内存。16 GiB 的 MacBook 上 VM 约分到 8 GiB,全套优化后的 FlexPrice 栈在 6 GiB 内可舒适运行。OrbStack VM 内存在Settings → Resources中配置。
端口 80/443
OrbStack k8s 直接在宿主机上暴露 ingress-nginx controller(无需端口转发)。ingress load balancer 会拿到真实 IP,可直接写入/etc/hosts。
六、常用速查命令
# 查看全部 Pod kubectl get pods -n flexprice # API 健康检查 curl http://api.flexprice.local/health # Temporal UI open http://temporal.flexprice.local # 直连 PostgreSQL kubectl exec -it flexprice-postgresql-0 -n flexprice -- \ psql -U flexprice -d flexprice # 直连 ClickHouse kubectl exec -it flexprice-clickhouse-0 -n flexprice -- \ clickhouse-client --user=default --password=flexprice123 --database=flexprice # 查看 API 日志 kubectl logs -n flexprice -l app.kubernetes.io/component=api -f # 镜像重建后重启应用 Pod kubectl rollout restart deployment flexprice-api flexprice-consumer flexprice-worker -n flexprice # 解除 helm pending 锁 kubectl delete secret -n flexprice \ $(kubectl get secret -n flexprice -l "owner=helm,name=flexprice" \ -o jsonpath='{.items[?(@.metadata.labels.status=="pending-upgrade")].metadata.name}') # 卸载清理 helm uninstall flexprice -n flexprice kubectl delete namespace flexprice七、故障分类速览
| # | 故障 | 一句话根因 | 核心修复点 |
|---|---|---|---|
| 1 | 必填值缺失 | Secret 模板对 4 个键使用required且默认值为空 | 在 values 覆盖文件中补齐密码与密钥 |
| 2 | Bitnami 镜像 404 | Docker Hub 已移除版本化 tag | 改用public.ecr.aws仓库 |
| 3 | kind 无法启动 | Rosetta 不支持 k8s 控制平面 / ARM 无法 load amd64 镜像 | 改用 OrbStack 内置 k8s |
| 4 | kind load 多余 | OrbStack 与 Docker 共享镜像存储 | 检测到 orbstack 时跳过 kind load |
| 5 | 镜像被安全校验拒绝 | Bitnami 白名单不含 ECR | global.security.allowInsecureImages: true |
| 6 | 白耗 3 GiB | Temporal chart 默认开 Elasticsearch | temporal.elasticsearch.enabled: false |
| 7 | Temporal 崩溃循环 | v1.30+ 读取内嵌 Cassandra 模板 | setConfigFilePath: true+configMapsToMount: "sprig" |
| 8 | 内存 OOMKill | 默认限额合计超节点 127% | 压 ClickHouse/Kafka、关 Prometheus/Grafana/ES |
| 9 | PG 迁移期 OOM | 192 MiB 限额扛不住并发迁移 | PostgreSQL 限额升至 256Mi/512Mi |
| 10 | Kafka 仲裁破裂 | 旧 PVC 元数据仍引用 3 个 controller | 删除过期 PVC 重新初始化 |
| 11 | helm 死锁 | 超时遗留 pending 状态 | 删除对应 release Secret |
| 12 | Ingress 404 | 默认主机与本地域名不匹配 | 覆盖 ingress hosts 与 temporalIngress host |
| 13 | 退出码被掩盖 | 管道让$?变成 tail 的退出码 | PIPESTATUS[0]或set -o pipefail |
八、延伸阅读
- 本地 kind 工作流与
provision.sh参数: internal/ee/infrastructure/helm/README.md - 全部 values 键的内联文档(资源限额、ingress、Temporal、迁移步骤等): internal/ee/infrastructure/helm/flexprice/values.yaml
- 本地开发覆盖层(已落实本文多数修复): internal/ee/infrastructure/helm/values-local.yaml
- Secret 渲染与必填校验逻辑: internal/ee/infrastructure/helm/flexprice/templates/app/secret.yaml
- chart 依赖与版本: internal/ee/infrastructure/helm/flexprice/Chart.yaml
- kind 集群配置(端口映射到 ingress-nginx): internal/ee/infrastructure/helm/kind-cluster.yaml
【免费下载链接】flexprice
Usage-based pricing and billing for developers 🔓 Cloud or self-hosted ⚙️ No-code UI 💰 Realtime usage metering 🎟 Credits & top-ups 🔑 Control feature access
相关推荐
OpenShell RPM 部署故障排查与升级实战指南
OpenShell RPM 部署故障排查与升级实战指南 本指南面向在 Fedora/RHEL 系系统上通过 RPM 包部署 OpenShell 网关(gatew
人工智能AI Agent自主智能体Agent 沙箱AI 安全治理形式化验证后端CLIOpenJarvis macOS 安装完全指南:Apple Silicon 与 Intel 上的本地 AI 部署实战
OpenJarvis macOS 安装完全指南:Apple Silicon 与 Intel 上的本地 AI 部署实战 OpenJarvis 是面向个人设备的本地
一个 Skill 文件、33 类模式:Humanizer 一次改写去掉 AI 写作痕迹
一个 Skill 文件、33 类模式:Humanizer 一次改写去掉 AI 写作痕迹 Humanizer 是给用 AI 写初稿的人准备的写作去 AI 化 ag
AI 技能AI 写作
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考