【免费下载链接】charts
⚠️(OBSOLETE) Curated applications for Kubernetes
本篇指南基于 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 rocketchat3.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 |
host | Rocket.Chat 主机名,同时用于 Ingress(启用时) | "" |
replicaCount | 副本数 | 1 |
smtp.enabled | 启用 SMTP 发送邮件 | false |
smtp.username | SMTP 账号 | "" |
smtp.password | SMTP 密码 | "" |
smtp.host | SMTP 服务器主机名 | "" |
smtp.port | SMTP 端口 | 587 |
extraEnv | 额外环境变量,使用tpl函数渲染,须为字符串 | "" |
podAntiAffinity | Pod 反亲和:soft(倾向不共节点)、hard(强制不共节点)、""(禁用) | "" |
podAntiAffinityTopologyKey | 反亲和的 topologyKey | kubernetes.io/hostname |
affinity | 自定义亲和规则 | {} |
minAvailable | PDB 最少可用 Pod 数/百分比 | 1 |
externalMongodbUrl | 外部 MongoDB 的 URL | "" |
externalMongodbOplogUrl | 外部 MongoDB OpLog URL,设置externalMongodbUrl后必填 | "" |
mongodb.enabled | 启用/禁用 MongoDB 依赖 | true |
persistence.enabled | 使用 PVC 持久化(使用默认且推荐的 GridFS 存储时不必启用) | false |
persistence.storageClass | PVC 存储类 | "" |
persistence.accessMode | PVC 访问模式 | ReadWriteOnce |
persistence.size | PVC 大小 | 8Gi |
persistence.existingClaim | 复用已有 PVC 名称 | "" |
resources | Pod 资源请求与限制 | {} |
securityContext.enabled | 启用 Pod 安全上下文 | true |
securityContext.runAsUser | 运行用户 | 999 |
securityContext.fsGroup | fs 组 | 999 |
serviceAccount.create | 是否创建 ServiceAccount | true |
serviceAccount.name | ServiceAccount 名称,未设置且 create 为 true 时用 fullname 模板生成 | "" |
ingress.enabled | 是否创建 Ingress | false |
ingress.annotations | Ingress 注解 | {} |
ingress.path | Ingress 路径 | / |
ingress.tls | IngressTLS 列表 | [] |
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.annotations | Service 注解 | {} |
service.labels | Service 额外标签 | {} |
service.type | Service 类型 | ClusterIP |
service.port | Service 端口 | 80 |
service.nodePort | NodePort 类型时使用的节点端口 | "" |
podLabels | Pod 额外标签 | {} |
podAnnotations | Pod 额外注解 | {} |
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: 17.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/rocketchatingress.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
相关推荐
ZeroTier One 点对点虚拟组网完整上手:从单命令到私有局域网
ZeroTier One 点对点虚拟组网完整上手:从单命令到私有局域网 三台设备分别挂在三个运营商的 NAT 后面,想拼出一个能互 ping 的私有局域网。Ze
OpenShell Helm Chart 部署指南:在 Kubernetes 上安装与配置 OpenShell 网关
OpenShell Helm Chart 部署指南:在 Kubernetes 上安装与配置 OpenShell 网关 导读 本文以 deploy/helm/op
人工智能AI Agent自主智能体Agent 沙箱AI 安全治理形式化验证后端CLIEMQX JWT 认证 JWKS 拉取客户端 HTTP/1.1 合规性修复:显式注入 `TE: trailers` 头
EMQX JWT 认证 JWKS 拉取客户端 HTTP/1.1 合规性修复:显式注入 TE: trailers 头 本篇文章围绕 EMQX 变更记录 fix 1
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考