news 2026/10/22 10:31:36

FlexPrice 本地 Kubernetes 部署故障排查与加固实战指南(Apple Silicon + OrbStack + Helm)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
FlexPrice 本地 Kubernetes 部署故障排查与加固实战指南(Apple Silicon + OrbStack + Helm)

【免费下载链接】flexprice

Usage-based pricing and billing for developers 🔓 Cloud or self-hosted ⚙️ No-code UI 💰 Realtime usage metering 🎟 Credits & top-ups 🔑 Control feature access

项目地址:https://gitcode.com/gh_mirrors/fl/flexprice
点击查看免费下载

本文以 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)
KubernetesOrbStack 内置 k8s 集群
Helm4.x(通过brew install helm安装)
Chartinternal/ee/infrastructure/helm/flexprice/,Chart.yaml 声明 v1.0.0
Temporalserver 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.password
  • clickhouse.password
  • auth.secret
  • secrets.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.aws

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

  1. 在 OrbStack 设置 UI 中启用 k8s;
  2. 执行kubectl config use-context orbstack;
  3. 无需创建集群,集群始终在运行。

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" fi

5. 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: false

7. 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 limit4 GiB1 GiB
Kafka controller 副本数31
Kafka controller limit768 MiB512 MiB
Kafka broker limit不限512 MiB
PostgreSQL limit192 MiB512 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 flexprice

12. 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"

四、加固路线图:把本地安装推向「一键可用」

必须修复(在宣称「一键」之前)

  1. 让local-up.sh支持 OrbStack——跳过 kind 集群创建与kind load,增加自动探测或--orbstack标志;
  2. 随仓库发布values-local.yaml模板(当前已提交于 internal/ee/infrastructure/helm/values-local.yaml),预配置全部必填密码、ECR 镜像仓库、Temporal 配置与资源限额;
  3. 修复values.yaml中 Bitnami 镜像仓库默认值——postgresql.image.registry、redis.image.registry、kafka.image.registry默认改为public.ecr.aws;
  4. 修复values.yaml的 Temporal 配置默认值——由于 chart 固定了 server v1.30.3,应默认设置temporal.server.setConfigFilePath: true与temporal.server.configMapsToMount: "sprig";
  5. 修复内存限额——ClickHouse 4 GiB 对本地开发过高,默认应为 1 GiB 或参数化;
  6. 在 README 中文档化必填值——显式点名postgres.password、clickhouse.password、auth.secret、secrets.encryptionKey。

锦上添花

  1. 在local-up.sh中加入/etc/hosts指引——探测 OrbStack ingress IP 并打印确切的echo命令;
  2. Temporal UI ingress——在 values-local.yaml 中加入temporalIngress并实测;
  3. 健康检查脚本——提供verify-local.sh,逐个访问各服务健康端点并报告 pass/fail;
  4. 清理脚本——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.local

OrbStack 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 覆盖文件中补齐密码与密钥
2Bitnami 镜像 404Docker Hub 已移除版本化 tag改用public.ecr.aws仓库
3kind 无法启动Rosetta 不支持 k8s 控制平面 / ARM 无法 load amd64 镜像改用 OrbStack 内置 k8s
4kind load 多余OrbStack 与 Docker 共享镜像存储检测到 orbstack 时跳过 kind load
5镜像被安全校验拒绝Bitnami 白名单不含 ECRglobal.security.allowInsecureImages: true
6白耗 3 GiBTemporal chart 默认开 Elasticsearchtemporal.elasticsearch.enabled: false
7Temporal 崩溃循环v1.30+ 读取内嵌 Cassandra 模板setConfigFilePath: true+configMapsToMount: "sprig"
8内存 OOMKill默认限额合计超节点 127%压 ClickHouse/Kafka、关 Prometheus/Grafana/ES
9PG 迁移期 OOM192 MiB 限额扛不住并发迁移PostgreSQL 限额升至 256Mi/512Mi
10Kafka 仲裁破裂旧 PVC 元数据仍引用 3 个 controller删除过期 PVC 重新初始化
11helm 死锁超时遗留 pending 状态删除对应 release Secret
12Ingress 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

项目地址:https://gitcode.com/gh_mirrors/fl/flexprice
点击查看免费下载
上一篇:Minimal Mistakes 按文章关闭评论:`comments: false` Front Matter 的优先级机制与源码实现解析
下一篇:Apache Druid Coordinator 服务深度解析:段管理、负载均衡与自动压缩机制

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/16 8:03:40

网页测试与网站测试:从页面到全站,系统梳理测试重点与流程

网页测试和网站测试,在我这些年做测试的过程中,被混着讲的情况见过太多。刚转测试的同学很容易以为网页测试就是打开页面点点点,网站测试就是把所有页面过一遍。如果只这么理解,最后的测试方案多半是一张没有重点的检查表&#xf…

作者头像 李华
网站建设 2026/10/16 10:30:08

搜索算法剪枝实战:可行性、最优性、记忆化与启发式优化指南

1. 从一个"跑不动"的搜索场景说起很多人第一次接触搜索算法,都是从八皇后、数独、迷宫寻路这类经典问题开始的。写出来的代码在小规模数据上跑得飞快,可一旦把规模放大——比如数独从 99 变成 1616,或者迷宫从 1010 变成 100100——…

作者头像 李华
网站建设 2026/10/16 8:23:17

gRPC传输机制本质:借HTTP/2之壳,行RPC之事

1. 项目概述:gRPC底层传输机制的本质不是“用HTTP2”,而是“借HTTP2的壳,做RPC的事”如果你刚接触gRPC,大概率会被官方文档里那句“gRPC基于HTTP/2”带偏——以为它只是把传统REST API换了个协议跑。我带过不少刚从Spring Boot转过…

作者头像 李华