news 2026/10/8 1:53:16

使用 Helm 在 Kubernetes 上部署 Mercure Hub:完整配置与源码级解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用 Helm 在 Kubernetes 上部署 Mercure Hub:完整配置与源码级解析

【免费下载链接】charts

⚠️(OBSOLETE) Curated applications for Kubernetes

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

Mercure 是一种允许服务器向浏览器及其他 HTTP 客户端实时推送数据更新的开放协议,具有便捷、快速、可靠且低功耗(battery-efficient)的特点。本篇文章以 charts 仓库中 stable/mercure 官方 Helm Chart 为核心,完整讲解如何在 Kubernetes 集群上通过 Helm 部署 Mercure Hub,逐项解读 Chart 暴露的全部配置参数(JWT 鉴权、传输层、超时、CORS、监控指标等),并结合 Chart 的模板源码说明每个参数如何落地为容器的环境变量与 Secret,帮助读者实现一套可复制、可调优的实时推送基础设施。

Chart 概览与废弃状态说明

在开始之前,需要先明确该 Chart 的当前状态:

  • 仓库归档:charts 仓库自 2020 年 11 月 13 日起不再更新(见根目录的 Repo Archive Notice),helm/charts 官方仓库整体进入废弃归档流程。
  • Chart 废弃:Chart.yaml 中deprecated: true,明确指出该 Chart 已废弃且不再维护。
  • 版本信息:Chart 版本4.0.3,对应的应用版本appVersion: 0.10.0(即 Mercure Hub 镜像版本);Chart 关键字为mercure、hub、push、streaming-api、async-api。

虽然 Chart 已废弃,但其整体结构完整、配置参数丰富,对于理解「如何将外部服务打包为 Kubernetes Helm Chart」以及「Mercure Hub 的部署与配置模型」仍有较高的参考价值。历史版本用户亦可据此进行升级与排障。

前置条件

根据 README.md,部署本 Chart 需要满足:

  • Kubernetes 1.4+,且启用 Beta API(早期版本需要extensions/v1beta1等 Beta API 支持;Ingress 模板中通过semverCompare ">=1.14-0"判断使用networking.k8s.io/v1beta1还是extensions/v1beta1,见 ingress.yaml)。
  • PV provisioner 支持:默认的 BoltDB 传输(transport)需要底层基础设施提供持久卷供给能力,用于保存历史数据。

安装与卸载 Chart

快速安装

使用默认配置安装(release 名称由 Helm 自动生成):

$ helm install stable/mercure

指定 release 名称为my-release:

$ helm install --name my-release stable/mercure

该命令会以默认配置在集群中部署 Mercure Hub。可以使用helm list查看所有已安装的 release。

卸载

$ helm delete my-release

该命令会移除与 Chart 关联的所有 Kubernetes 组件,并删除该 release。

核心配置参数详解

README 提供了完整的可配置参数表,这也是本 Chart 的核心内容。以下按「Hub 功能参数」「安全与鉴权」「传输与超时」「镜像与部署」几个维度逐项展开。

Hub 核心功能参数

参数说明默认值
transportUrl历史数据库的 URL 表示形式(对应 Mercure 官方文档中的 Bolt 适配器)bolt://updates.db?size=0&cleanup_frequency=0.3
allowAnonymous设为true时,允许没有有效 JWT 的订阅者连接false
subscriptions设为true时,暴露订阅 Web API,并在 Hub 与订阅者之间建立或关闭订阅时派发私有更新false
metrics设为true时,启用/metricsHTTP 端点,以 OpenMetrics(Prometheus)格式提供 Hub 监控指标false
metricsLogin启用 metrics 后,访问/metrics端点允许的用户的登录名mercure
metricsPassword启用 metrics 后,访问/metrics端点允许的用户的密码随机字符串
corsAllowedOrigins允许的 CORS 源列表,可包含*表示允许所有[]
publishAllowedOrigins允许发布(publish)的源列表(仅在使用 cookie 鉴权时适用)[]
debug设为true启用调试模式(打印恢复栈跟踪)false
demo设为true启用演示模式(当debug为true时自动启用)false
logFormat日志格式FLUENTD

安全与 JWT 鉴权参数

参数说明默认值
jwtAlgorithm发布者和订阅者使用的 JWT 验证算法,如HS256(默认)或RS512HS256
jwtKey发布者和订阅者共用的 JWT 密钥随机字符串
publisherJwtKey验证发布者 JWT 所需的密钥,可省略以使用jwtKey空
subscriberJwtKey验证订阅者 JWT 所需的密钥,可省略以使用jwtKey空

传输与超时参数

参数说明默认值
heartbeatInterval心跳间隔(对某些代理和旧浏览器有用)0s
readTimeout读取完整请求(含 body)的最大时长,设为0s可禁用5s
writeTimeout响应写入超时前的最大时长,设为0s可禁用60s
dispatchTimeout单次更新派发的最大时长,设为0s可禁用5s
useForwardedHeaders使用X-Forwarded-For、X-Real-IP获取客户端 IP,用X-Forwarded-Proto或X-Forwarded-Scheme获取 scheme,用X-Forwarded-Host获取 host,以及 RFC 7239 的Forwarded头。启用后,反向代理必须覆盖或移除这些头,否则存在安全风险false
compress设为false可禁用 HTTP 压缩支持true
license使用的许可证(仅对 HA 版本有用)空

镜像与部署参数

参数说明默认值
image.repository容器镜像仓库dunglas/mercure
image.tag容器镜像标签v0.3.2(README) /v0.10(values.yaml 实际值)
image.pullPolicy镜像拉取策略IfNotPresent
nameOverride名称覆盖空
fullnameOverride完整名称覆盖空
service.typeService 类型README 中为NodePort,values.yaml 实际默认ClusterIP
service.portService 端口80
ingress.enabled是否启用 Ingressfalse
ingress.annotationsIngress 注解{}
ingress.hostsIngress 接受的 hostname[{ host: chart-example.local, paths: [] }](values.yaml 中为mercure.local)
ingress.tlsIngress TLS 配置[]
serviceAccount.create是否为应用创建专用 ServiceAccounttrue
serviceAccount.name启用serviceAccount.create时的 ServiceAccount 名称,否则随机生成nil
podSecurityContextPod 安全上下文{}
securityContext容器安全上下文{}
resources容器资源请求与限制{}
nodeSelector节点标签选择器{}
tolerationsPod 污点容忍{}

注意:README 中的参数表与 values.yaml 实际默认值存在少量差异(如image.tag、service.type、ingress.hosts),这是 README 未随版本同步所致。以 values.yaml 中的实际默认值为准。

此外,values.yaml 还包含两个 README 参数表之外的关键配置:

  • backendConfig:enabled: false,timeoutSec: 30。GCP 负载均衡器默认在连接 30 秒后终止连接,可通过启用 backendConfig 并调整timeoutSec属性来解决(对应 Mercure 项目 issue #106 的场景)。
  • replicaCount: 1:如果使用 BoltDB 传输(默认),replicaCount 必须为 1,因为 BoltDB 不支持多副本共享同一数据库文件。

两种参数配置方式

方式一:--set命令行参数

使用--set key=value[,key=value]为helm install指定参数。例如:

$ helm install --name my-release --set jwtKey=FooBar,corsAllowedOrigins=example.com stable/mercure

上述命令将 JWT 密钥设置为FooBar,并允许从example.com提供页面的客户端连接到 Hub。

方式二:-f指定 YAML 文件

将配置写入 YAML 文件后,通过-f参数传入:

$ helm install --name my-release -f values.yaml stable/mercure

完整的默认配置可直接参考 values.yaml,在此基础上进行覆盖即可。

源码级解析:配置参数如何注入容器

仅了解参数含义是不够的,还需要理解这些参数如何生效。本 Chart 通过ConfigMap + Secret + 环境变量三层机制完成配置下发。

布尔与列表参数的编码方式

configmap.yaml 将多数参数写入 ConfigMap:

  • 布尔参数编码为"1"/"0",例如allowAnonymous、subscriptions、metrics、debug、demo、compress、useForwardedHeaders;
  • 列表参数(corsAllowedOrigins、publishAllowedOrigins)通过join " "以空格分隔拼成单个字符串;
  • logFormat会被upper转为大写;
  • 各类超时参数(heartbeatInterval、readTimeout、writeTimeout、dispatchTimeout)以字符串形式原样保留。

ConfigMap 还带有helm.sh/hook: pre-install,pre-upgrade与helm.sh/hook-delete-policy: before-hook-creation注解,确保在安装/升级前创建并在下次 hook 执行前删除重建。

敏感参数的 Secret 化与随机生成

secret.yaml 将敏感信息写入 Kubernetes Secret 并做 Base64 编码:

  • transportUrl:直接编码;
  • jwtKey:若未配置,自动用randAlphaNum 12生成 12 位随机字符串;
  • metricsPassword:同样在未配置时随机生成 12 位字符串;
  • publisherJwtKey、subscriberJwtKey、license:均编码写入。

这意味着:如果你在安装时未显式指定jwtKey,Helm 会为每个 release 生成独立的随机密钥,两个 release 之间互不通用——生产环境请务必通过--set jwtKey=...或 values 文件显式指定。

环境变量的注入方式

deployment.yaml 通过valueFrom将上述配置逐一注入容器环境变量:

  • 常规参数(ALLOW_ANONYMOUS、METRICS、CORS_ALLOWED_ORIGINS、JWT_ALGORITHM等)来自configMapKeyRef;
  • 敏感参数(TRANSPORT_URL、JWT_KEY、METRICS_PASSWORD、PUBLISHER_JWT_KEY、SUBSCRIBER_JWT_KEY、LICENSE)来自secretKeyRef。

环境变量名与参数名一一对应(如jwtAlgorithm→JWT_ALGORITHM),这些正是 Mercure Hub 镜像官方读取的环境变量命名规范,因此 Chart 参数与 Hub 容器能力完全对齐。此外 Deployment 上带有checksum/config与checksum/secret注解,配置变更时会自动触发 Pod 滚动更新,无需手动重启。

健康检查

Deployment 同时配置了livenessProbe与readinessProbe,均通过 HTTP GET 请求/healthz端口进行探测,保证 Hub 异常时能被自动重启或从 Service 端点摘除。

网络与外部访问

Service

service.yaml 定义 Service,默认类型ClusterIP、端口 80,targetPort: http。若启用backendConfig,Service 会附带 GCP BackendConfig 注解:

beta.cloud.google.com/backend-config: '{"default": "<release-name>-mercure"}'

同时 backend-config.yaml 会创建一个cloud.google.com/v1beta1的BackendConfig资源,用于调整负载均衡器的timeoutSec。

Ingress

ingress.yaml 在ingress.enabled: true时创建 Ingress:

  • 根据集群版本自动选择networking.k8s.io/v1beta1(>= 1.14)或extensions/v1beta1API;
  • 支持ingress.annotations、ingress.hosts(host + paths)与ingress.tls(secretName + hosts)配置。

访问地址获取

安装完成后,NOTES.txt 会根据部署形态给出访问指引:

  • 启用 Ingress:直接输出http(s)://<host>/<path>;
  • NodePort 类型:通过kubectl读取 NodePort 与节点 IP,输出http://$NODE_IP:$NODE_PORT;
  • LoadBalancer 类型:提示等待外部 IP 就绪,可通过kubectl get svc -w观察状态,并输出http://$SERVICE_IP:<port>;
  • ClusterIP 类型:使用kubectl port-forward <pod> 8080:80转发本地端口,访问http://127.0.0.1:8080。

安装验证

Chart 内置了连接性测试:tests/test-connection.yaml 创建一个 busybox Pod,通过wget访问<release>-mercure:<service.port>验证 Service 可达。安装后可执行:

$ helm test my-release

部署注意事项与最佳实践

综合 README、values.yaml 与模板源码,实际部署时建议重点关注以下几点:

  1. 单副本约束:默认 BoltDB 传输不支持多副本,replicaCount必须保持为 1;如需横向扩容,需要切换到支持集群化的传输(transport)后端。
  2. 显式指定 JWT 密钥:jwtKey默认随机生成,跨 release 不共享;生产环境务必显式设置,并可通过publisherJwtKey/subscriberJwtKey实现发布者与订阅者密钥分离(支持RS512等非对称算法)。
  3. 匿名与订阅功能默认关闭:allowAnonymous、subscriptions默认false,按需开启,避免未授权订阅与额外 API 暴露。
  4. 监控指标按需开启:metrics: true会暴露/metrics端点(OpenMetrics/Prometheus 格式),注意通过metricsLogin/metricsPassword保护,密码默认随机生成,需要提前从 Secret 中读取。
  5. 反向代理场景:若 Hub 位于反向代理之后,启用useForwardedHeaders前必须确保代理覆盖/移除相关头,否则存在 IP 伪造风险。
  6. GCP 负载均衡:若使用 GKE,建议启用backendConfig并适当调大timeoutSec(默认 30s 会断开长连接),避免实时推送连接被过早终止。
  7. 长连接超时:SSE 长连接场景下,writeTimeout默认 60s,dispatchTimeout默认 5s,heartbeatInterval默认0s;可根据实际网络与代理环境调整,必要时将readTimeout/writeTimeout设为0s以禁用超时。

小结

通过本文,读者可以掌握从helm install stable/mercure到精细调优的完整链路:理解每个配置参数的语义与默认值,了解 JWT 鉴权、BoltDB 传输、监控与 CORS 等核心能力的启用方式,并借助模板源码厘清「values 参数 → ConfigMap/Secret → 容器环境变量」的配置下发机制。尽管该 Chart 已随 charts 仓库归档废弃,但其参数模型与 Helm 模板组织方式,对部署 Mercure Hub 及编写同类服务型 Chart 仍具有直接的参考价值。

【免费下载链接】charts

⚠️(OBSOLETE) Curated applications for Kubernetes

项目地址:https://gitcode.com/gh_mirrors/chart/charts
点击查看免费下载
上一篇:WaveTools鸣潮工具箱:3个核心功能让游戏体验提升200%的专业解决方案
下一篇:WaveTools鸣潮工具箱:如何用免费工具提升游戏体验300%

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

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

DeepSeek 配向量库:企业知识大脑检索实战与调优

简介&#xff1a;这份PDF文档面向希望将大模型能力落地到企业知识管理的技术开发人员与架构师&#xff0c;围绕DeepSeek与向量数据库的协同应用展开&#xff0c;帮助解决传统关键词检索难以应对复杂语义查询、知识更新滞后等痛点。文档共22页&#xff0c;以1个PDF文件交付&…

作者头像 李华
网站建设 2026/10/8 1:51:21

NVIDIA T3 GPU大模型推理部署实战:TensorRT-LLM与FP8量化优化全记录

做AI推理部署这些年&#xff0c;最烦的一件事就是“模型能跑”和“模型能跑得快”完全两码事。尤其是当你手里拿到一张新卡&#xff0c;想让它把算力吃满&#xff0c;而不是在那儿闲等&#xff0c;这个过程踩坑能踩到怀疑人生。最近我一直在折腾的一个项目&#xff0c;代号就叫…

作者头像 李华
网站建设 2026/10/8 1:50:14

K8S微服务部署方案:从原理到实践,避开常见坑

简介&#xff1a;这份文档面向正在推进微服务架构落地的架构师、运维工程师与技术决策者&#xff0c;围绕K8S容器云平台给出可参考的部署方案&#xff0c;帮助解决服务依赖、服务发现、负载均衡、集群管理与有状态数据管理等微服务化过程中的典型难题。资源包内仅含1个docx文档…

作者头像 李华
网站建设 2026/10/8 1:45:45

用 wazero CLI 运行 WebAssembly 命令行应用:examples/cli 示例全解析

开发工具系统底层 【免费下载链接】wazero wazero: the zero dependency WebAssembly runtime for Go developers 项目地址&#xff1a; https://gitcode.com/gh_mirrors/wa/wazero 点击查看 免费下载 本篇技术指南以 wazero 仓库中的 examples/cli 示例为骨架&#xff0c;讲解…

作者头像 李华