news 2026/11/2 14:34:58

Rocket.Chat Helm Chart 部署指南:Kubernetes 上的团队聊天平台安装、配置与高可用扩展

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Rocket.Chat Helm Chart 部署指南:Kubernetes 上的团队聊天平台安装、配置与高可用扩展

【免费下载链接】charts

⚠️(OBSOLETE) Curated applications for Kubernetes

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

本篇指南基于 stable/rocketchat/README.md 及其仓库源码,系统讲解如何通过 Helm 在 Kubernetes 集群中部署 Rocket.Chat 团队聊天平台。你将掌握一键安装、MongoDB 数据库绑定、SMTP 邮件、Ingress 暴露、弹性伸缩与 PodDisruptionBudget 高可用配置,以及从旧版本无损升级的完整实操方案。

注意:本仓库已于 2020 年 11 月归档,stable/rocketchatChart 已标记为 deprecated(详见 Chart.yaml),不再更新。文中命令与配置以仓库当前内容为准,适用于归档快照的复现、学习与迁移参考。

一、Chart 概览与工作原理

Rocket.Chat 是一款免费、开源、不限用户数的团队聊天软件,用于替代邮件、HipChat 与 Slack 等封闭式协作工具。本 Chart 使用 Helm 包管理器在 Kubernetes 上启动一个完整的 Rocket.Chat 部署,核心组件包括:

  • Rocket.Chat 应用 Deployment:运行官方镜像docker.io/rocketchat/rocket.chat,暴露容器端口3000(见 deployment.yaml)。
  • MongoDB 依赖:Chart 通过 requirements.yaml 声明对stable/mongodb(版本 7.x)的可选依赖,默认以 ReplicaSet 模式部署一个 Primary 实例,这是 Rocket.Chat 1.x 及以后版本的运行前提。
  • 配套 Kubernetes 资源:Service、Ingress、Secret、PVC、ServiceAccount 与 PodDisruptionBudget,全部由 templates 目录下的模板渲染生成。

Chart 元信息(Chart.yaml)显示:appVersion: 3.6.0、version: 2.0.10,关键词涵盖 chat、communication、web、nodejs、meteor 等,适合快速定位。

二、快速安装(TL;DR)

使用一条命令完成带随机 MongoDB 密码的安装:

$ helm install stable/rocketchat --set mongodb.mongodbPassword=$(echo -n $(openssl rand -base64 32)),mongodb.mongodbRootPassword=$(echo -n $(openssl rand -base64 32))

命令说明:

  • mongodb.mongodbPassword为 Rocket.Chat 应用连接 MongoDB 的业务账号密码;
  • mongodb.mongodbRootPassword为 MongoDB root 账号密码,root 凭证将用于连接 MongoDB OpLog(见 README.md 的 Database Setup 警告);
  • 若不设置密码,模板渲染时会通过required函数强制报错,防止无密码部署(见 secret.yaml)。

2.1 前置条件

  • Kubernetes 集群与 Helm 客户端可用;
  • 默认情况下,stable/mongodb依赖图要求底层基础设施支持 PV(Persistent Volume),可通过mongodb.persistence.enabled=false关闭;
  • 使用归档仓库需先在本地配置stable/rocketchat的 Chart 路径或镜像源。

三、安装与卸载

3.1 安装

以 release 名称rocketchat安装:

$ helm install --name rocketchat stable/rocketchat

参数--name指定 release 名称,所有资源对象名均以rocketchat-前缀命名(见 _helpers.tpl 的rocketchat.fullname定义:{Release.Name}-{Chart.Name},并截断至 63 字符以满足 DNS 规范)。

3.2 卸载

$ helm delete rocketchat

3.3 安装后访问方式

Chart 的 NOTES.txt 提供了三种接入方式:

  • 集群内 DNS 访问:http://rocketchat-rocketchat.<namespace>
  • 本地端口转发:
$ kubectl port-forward --namespace <namespace> $(kubectl get pods --namespace <namespace> -l "app.kubernetes.io/name=rocketchat,app.kubernetes.io/instance=<release>" -o jsonpath='{ .items[0].metadata.name }') 8888:3000
  • 进入容器调试:
$ kubectl exec -i -t --namespace <namespace> $(kubectl get pods --namespace <namespace> -l "app.kubernetes.io/name=rocketchat,app.kubernetes.io/instance=<release>" -o jsonpath='{.items[0].metadata.name}') /bin/sh
  • 跟踪日志:
$ kubectl logs -f --namespace <namespace> $(kubectl get pods --namespace <namespace> -l "app.kubernetes.io/name=rocketchat,app.kubernetes.io/instance=<release>" -o jsonpath='{ .items[0].metadata.name }')

四、完整配置参数

以下参数表来自 README.md 并对照 values.yaml 校正了实际默认值,可通过--set key=value[,key=value]传入,或使用-f values.yaml指定 YAML 文件。

参数描述默认值
image.repository镜像仓库docker.io/rocketchat/rocket.chat
image.tag镜像标签(values.yaml 实际为3.6.0)3.2.2
image.pullPolicy镜像拉取策略IfNotPresent
hostRocket.Chat 主机名,同时用于 Ingress(启用时)""
replicaCount副本数1
smtp.enabled启用 SMTP 发送邮件false
smtp.usernameSMTP 账号""
smtp.passwordSMTP 密码""
smtp.hostSMTP 服务器主机名""
smtp.portSMTP 端口587
extraEnv额外环境变量,使用tpl函数渲染,须为字符串""
podAntiAffinityPod 反亲和:soft(倾向不共节点)、hard(强制不共节点)、""(禁用)""
podAntiAffinityTopologyKey反亲和的 topologyKeykubernetes.io/hostname
affinity自定义亲和规则{}
minAvailablePDB 最少可用 Pod 数/百分比1
externalMongodbUrl外部 MongoDB 的 URL""
externalMongodbOplogUrl外部 MongoDB OpLog URL,设置externalMongodbUrl后必填""
mongodb.enabled启用/禁用 MongoDB 依赖true
persistence.enabled使用 PVC 持久化(使用默认且推荐的 GridFS 存储时不必启用)false
persistence.storageClassPVC 存储类""
persistence.accessModePVC 访问模式ReadWriteOnce
persistence.sizePVC 大小8Gi
persistence.existingClaim复用已有 PVC 名称""
resourcesPod 资源请求与限制{}
securityContext.enabled启用 Pod 安全上下文true
securityContext.runAsUser运行用户999
securityContext.fsGroupfs 组999
serviceAccount.create是否创建 ServiceAccounttrue
serviceAccount.nameServiceAccount 名称,未设置且 create 为 true 时用 fullname 模板生成""
ingress.enabled是否创建 Ingressfalse
ingress.annotationsIngress 注解{}
ingress.pathIngress 路径/
ingress.tlsIngressTLS 列表[]
livenessProbe.enabled开启存活探针true
livenessProbe.initialDelaySeconds探针启动延迟60
livenessProbe.periodSeconds探针周期15
livenessProbe.timeoutSeconds探针超时5
livenessProbe.failureThreshold连续失败阈值3
livenessProbe.successThreshold连续成功阈值1
readinessProbe.enabled开启就绪探针true
readinessProbe.initialDelaySeconds探针启动延迟10
readinessProbe.periodSeconds探针周期15
readinessProbe.timeoutSeconds探针超时5
readinessProbe.failureThreshold连续失败阈值3
readinessProbe.successThreshold连续成功阈值1
service.annotationsService 注解{}
service.labelsService 额外标签{}
service.typeService 类型ClusterIP
service.portService 端口80
service.nodePortNodePort 类型时使用的节点端口""
podLabelsPod 额外标签{}
podAnnotationsPod 额外注解{}

4.1 使用 values 文件安装

$ helm install --name rocketchat -f values.yaml stable/rocketchat

完整的可编辑模板见 stable/rocketchat/values.yaml,其中包含大量注释示例,例如host、extraEnv的MONGO_OPTIONS、externalMongodbUrl的 URL 格式、resources的512Mi/300m示例等。

五、数据库设置

Rocket.Chat 使用 MongoDB 持久化数据。默认情况下 Chart 会部署stable/mongodb依赖,并以 ReplicaSet 模式创建单个 Primary 实例——这是 Rocket.Chat 1.x 及以后版本运行的最低要求。使用默认配置时,务必至少设置mongodb.mongodbRootPassword、mongodb.mongodbUsername与mongodb.mongodbPassword三个值;更多 MongoDB 配置请参考 stable/mongodb 文档。

5.1 数据库连接 URI 的生成机制

从源码看,MongoDB 连接信息不是写死在 Deployment 中,而是由 secret.yaml 动态拼装并 Base64 编码后存入 Secret,Deployment 再通过secretKeyRef注入环境变量(见 deployment.yaml):

{{- $fullname := include "rocketchat.mongodb.fullname" . -}} {{- $username := required "Please specify a MongoDB username" .Values.mongodb.mongodbUsername }} {{- $password := required "Please specify a MongoDB password" .Values.mongodb.mongodbPassword }} {{- $rootPassword := required "Please specify a MongoDB password" .Values.mongodb.mongodbRootPassword }} {{- $rsName := .Values.mongodb.replicaSet.name }} {{- $port := .Values.mongodb.service.port }} {{- $dbname := required "Please specify a MongoDB database" .Values.mongodb.mongodbDatabase }} mongo-uri: {{ printf "mongodb://%s:%s@%s:%.0f/%s" $username $password $fullname $port $dbname | b64enc | quote }} mongo-oplog-uri: {{ printf "mongodb://root:%s@%s:%.0f/local?replicaSet=%s&authSource=admin" $rootPassword $fullname $port $rsName | b64enc | quote }}

要点:

  • 应用连接串(MONGO_URL)使用业务账号访问rocketchat数据库;
  • OpLog 连接串(MONGO_OPLOG_URL)使用root 凭证访问local库,并携带replicaSet名称与authSource=admin,这是 Rocket.Chat 高可用模式读取副本集变更流的必需配置;
  • 所有必填项缺失时模板渲染直接报错,从机制上杜绝了弱配置部署。

同时,Deployment 模板为 Pod 注入DEPLOY_PLATFORM=helm-chart与INSTANCE_IP(取自status.podIP),并在注解中写入checksum/secret(Secret 内容的 SHA256),使 Secret 变更后 Pod 自动滚动更新。

5.2 使用外部数据库

若已有 MongoDB 实例,可禁用内置依赖并指定连接信息:

$ helm install --name rocketchat stable/rocketchat \ --set mongodb.enabled=false \ --set externalMongodbUrl="mongodb://user:password@localhost:27017/rocketchat" \ --set externalMongodbOplogUrl="mongodb://user:password@localhost:27017/local?replicaSet=rs0&authSource=admin"

外部数据库模式下,secret.yaml 会直接使用这两个 URL 生成mongo-uri与mongo-oplog-uri,且externalMongodbOplogUrl为required必填项——因为 Rocket.Chat 1.x 依赖 OpLog 实现实时同步,缺少它将无法正常工作。

六、配置额外环境变量

extraEnv使用 Helm 的tpl函数渲染,因此内容必须写成字符串形式(YAML 块标量),且可以引用.Values等模板上下文。示例:

extraEnv: | - name: MONGO_OPTIONS value: '{"ssl": "true"}'

在 values.yaml 中还给出了另一个常用示例——直接覆盖 OpLog 连接:

extraEnv: # | # - name: MONGO_OPLOG_URL # value: mongodb://oploguser:password@rocket-1:27017/local&replicaSet=rs0

从实现看,deployment.yaml 通过{{ tpl .Values.extraEnv $ | indent 8 }}将内容渲染进容器env数组,因此它本质上是任意合法的 env 条目列表,适用于注入ROOT_URL覆盖、MONGO_OPTIONS等任意 Rocket.Chat 环境变量。

七、增加服务器容量与高可用(HA)配置

7.1 水平扩容

Rocket.Chat 服务实例支持跨集群可用资源水平扩展:

$ kubectl scale --replicas=3 deployment/rocketchat

或通过--set replicaCount=3在安装时指定。扩容后多副本共享同一个 MongoDB ReplicaSet,Rocket.Chat 通过MONGO_OPLOG_URL感知实时变更。

7.2 Pod 反亲和

为避免多副本被调度到同一节点(故障时整体不可用),可配置反亲和:

podAntiAffinity: soft # 倾向不共节点,无硬性保证 podAntiAffinity: hard # 强制不共节点 podAntiAffinity: "" # 禁用反亲和 podAntiAffinityTopologyKey: kubernetes.io/hostname # 可改为 failure-domain.beta.kubernetes.io/zone

源码实现(deployment.yaml):

  • soft渲染为preferredDuringSchedulingIgnoredDuringExecution,权重 100,按 topologyKey 匹配同 Chart 副本;
  • hard渲染为requiredDuringSchedulingIgnoredDuringExecution,硬性约束;
  • 同时支持affinity字段传入任意自定义亲和规则,两者可叠加。

7.3 PodDisruptionBudget

当replicaCount > 1时,模板自动生成 PDB(见 poddisruptionbudget.yaml),minAvailable默认1,保证节点维护/驱逐时始终有可用副本:

minAvailable: 1

7.4 持久化与数据卷

Rocket.Chat 的默认(且推荐)文件存储方式是 MongoDB GridFS,因此 values.yaml 中persistence.enabled默认为false,此时 Deployment 的/app/uploads挂载emptyDir(见 deployment.yaml)。如需本地持久化上传文件,可启用 PVC:

persistence: enabled: true storageClass: "" # "-" 表示禁用动态供给;留空使用集群默认供给器(AWS gp2、GKE standard 等) accessMode: ReadWriteOnce size: 8Gi existingClaim: "" # 复用已有 PVC 时填写名称

对应模板 pvc.yaml 会创建ReadWriteOnce、8Gi的 PVC,storageClass为-时渲染为空字符串以禁用动态供给。注意:上传数据实际存储于 MongoDB 时,该 PVC 仅承载/app/uploads本地文件。

7.5 探针与滚动更新

Deployment 默认启用 HTTP 探针,请求路径为/api/info、端口为容器http(3000):

  • liveness:initialDelaySeconds=60、periodSeconds=15、timeout=5、failureThreshold=3;
  • readiness:initialDelaySeconds=10,其余同上。

滚动更新策略为maxSurge: 1、maxUnavailable: 1(deployment.yaml),配合 readiness 探针可安全灰度替换旧副本。

八、网络暴露:Service 与 Ingress

8.1 Service

service.yaml 生成 Service,默认ClusterIP,端口80转发到容器http端口3000;设为NodePort时可指定service.nodePort。也支持注解(如 AWS 负载均衡器内部模式service.beta.kubernetes.io/aws-load-balancer-internal)与自定义 labels。

8.2 Ingress

设置host并启用 Ingress 后对外提供服务:

$ helm install --set host=chat.yourdomain.com --set ingress.enabled=true stable/rocketchat

ingress.yaml 支持:

  • ingress.path(默认/)与ingress.annotations(如kubernetes.io/ingress.class: nginx);
  • ingress.tls列表,每个条目含hosts与secretName,自动生成 Ingress TLS 段。

同时,设置host后 Deployment 会自动注入ROOT_URL=https://<host>环境变量(见 deployment.yaml),使 Rocket.Chat 生成的链接与访问域名一致。

九、SMTP 邮件配置

启用 SMTP 后,Chart 会将账号信息拼装为smtp://user:pass@host:port并 Base64 编码写入 Secret(secret.yaml),Deployment 据此注入MAIL_URL环境变量(deployment.yaml)。配置示例:

smtp: enabled: true username: noreply@example.com password: "your-smtp-password" host: smtp.example.com port: 587

十、升级注意事项

10.1 升级至 1.1.0(Rocket.Chat 1.x)

Rocket.Chat 1.x 要求 MongoDB 以 ReplicaSet 运行。使用内置stable/mongodb依赖(mongodb.enabled=true)时,启用 ReplicaSet 会删除原有 PVC 并重建新卷。务必先备份当前 MongoDB 数据,升级完成后恢复数据,否则将丢失聊天记录。

10.2 从 1.0.0 之前版本升级

向后兼容性需要手动修正 Deployment 标签。假设 release 名为rocketchat,升级前先执行:

$ kubectl delete deployment rocketchat-rocketchat --cascade=false

该命令以不级联删除的方式摘除旧 Deployment(--cascade=false),保留 Pod 运行直至新版替换完成,是规避标签不匹配导致滚动更新失控的官方推荐工作流。

十一、CI 验证与最佳实践参考

仓库内置了 Chart 校验配置 stable/rocketchat/ci/ci-values.yaml,给出了生产化部署的关键取值:

host: rocketchat.example.com ingress: enabled: true mongodb: mongodbRootPassword: <强随机 root 密码> mongodbPassword: <强随机业务密码>

结合前文可以总结一套推荐部署组合:强随机 MongoDB 密码(README 推荐用openssl rand -base64 32生成)+ 外部域名host+ 启用 Ingress +podAntiAffinity: soft/hard+replicaCount >= 2+minAvailable: 1+ 开启探针。这组配置同时覆盖了单机体验与多副本高可用两类场景,可作为实际部署的起点模板。

【免费下载链接】charts

⚠️(OBSOLETE) Curated applications for Kubernetes

项目地址:https://gitcode.com/gh_mirrors/chart/charts
点击查看免费下载
上一篇:LeaguePrank核心原理完整指南:英雄联盟lockfile解析与LCU API本地认证机制
下一篇:256字节keyBox逐行拆解:ncmdumpGUI中RC4密钥排布算法深度剖析

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

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

【电机滤波例程3】新息协方差自适应扩展卡尔曼滤波(EKF)原理,MATLAB。PMSM电流测量噪声在线调整。附下载链接

完整代码&#xff0c;附下载链接。包运行成功 文章目录总述实现流程输出说明运行结果MATLAB源代码总述 采用表贴式永磁同步电机模型&#xff0c;满足 LdLqp.L。通过已知αβ电压驱动机电状态预测&#xff0c;以αβ电流为量测修正电流、机械转速和电角度。 扩展卡尔曼滤波利用…

作者头像 李华