部署到 Kubernetes
Kubernetes 是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。在本教程中,我们将使用 Helm —— Kubernetes 的包管理工具,来简化部署过程。
技术架构
Univer 的后端服务在 Kubernetes 上的部署将涉及以下组件:
- Kubernetes Cluster:你的应用程序将在这里运行。
- helm:用于在 Kubernetes 上部署和管理应用程序的工具。需要 helm 3 版本。
- PostgreSQL + RabbitMQ
安装 Helm
访问 Helm 的 官方安装页面 并按照指南安装 Helm。 验证 Helm 是否安装成功,运行以下命令:
helm version
部署
准备 Kubernetes 集群
确保你有一个运行中的 Kubernetes 集群。如果你使用的是云服务提供商,如 Google Kubernetes Engine (GKE) 或 Amazon Elastic Kubernetes Service (EKS),请按照他们的指南创建集群。
部署 Univer 服务
- 使用 Helm 安装 Univer 服务:
helm install -n univer --create-namespace \
--set global.istioNamespace="univer" \
univer-stack oci://univer-acr-registry.cn-shenzhen.cr.aliyuncs.com/helm-charts/univer-stack
kubectl rollout restart -n univer deployment/collaboration-server
kubectl rollout restart -n univer deployment/universer
- 检查部署状态:
kubectl get pods
- 部署可观测性组件(可选):
helm upgrade --install -n univer-observability --create-namespace \
--set global.univerNamespace="univer" \
univer-observability oci://univer-acr-registry.cn-shenzhen.cr.aliyuncs.com/helm-charts/univer-observability
验证部署
# 可以简单修改本地 hosts 文件来解析域名。
# 默认域名: univer.example.com
open: http://univer.example.com/sheet/
离线部署
下载离线安装包
点击链接下载离线安装包,将安装包解压到服务器。
tar -xvf installation-package.tar # 解压命令,将文件名替换为实际文件名
上传镜像到私有仓库
记住,在跑脚本前你需要本地先登陆到你的私有镜像仓库。
bash load-image.sh --registry ${YOUR_REGISTRY} --namespace ${YOUR_IMAGE_NAMESPACE}
安装服务
脚本依赖 helm
和 kubectl
客户端工具。
bash install.sh
验证服务是否可用
# 可以简单修改本地 hosts 文件来解析域名。
# 默认域名: univer.example.com
Visit: http://univer.example.com/sheet/
卸载
bash uninstall.sh
自定义配置
默认配置可以参考 https://github.com/dream-num/helm-charts 仓库,或者执行 helm show values oci://univer-acr-registry.cn-shenzhen.cr.aliyuncs.com/helm-charts/univer-observability
获取。
根据 helm 官方指引,你可以配置一个 values.yaml ,然后执行 helm upgrade --values values.yaml ...
来更新服务。
USIP
universer:
config:
usip:
enabled: true
uri:
userinfo: "http://192.168.1.100:8080/userinfo"
collaborators: "http://192.168.1.100:8080/collaborators"
role: "http://192.168.1.100:8080/role"
credential: "http://192.168.1.100:8080/credential"
Database
修改配置使用自己的数据库。
universer:
config:
database:
driver: postgresql
host: 192.168.1.100
port: 5432
dbname: univer
username: postgres
password: postgres
temporal:
server:
config:
persistence:
default:
driver: "sql"
sql:
driver: "postgres12"
host: 192.168.1.100
port: 5432
database: temporal
user: postgres
password: postgres
visibility:
driver: "sql"
sql:
driver: "postgres12"
host: 192.168.1.100
port: 5432
database: temporal_visibility
user: postgres
password: postgres
postgresql:
enabled: false # 不使用默认部署的数据库
Redis
修改配置使用自己的 Redis
universer:
config:
redis:
poolSize: 100
# 如果是 redis 集群,可以用逗分隔多个地址
# 例如:192.168.1.100:6379,192.168.1.101:6379
addr: 192.168.1.100:6379
read_timeout: 1s
write_timeout: 1s
db: 0
username: ""
password: ""
redis:
enabled: false
S3
修改配置以使用自己的对象存储
universer:
config:
s3:
accessKeyID: admin
accessKeySecret: minioadmin
region: "us-east-1"
endpoint: http://192.168.1.100:9000
endpointPublic: ""
usePathStyle: true
defaultBucket: univer
minio:
enabled: false
RabbitMQ
universer:
config:
rabbitmq:
cluster:
enabled: true
# use comma to separate multiple addresses
# for example: RABBITMQ_CLUSTER_ADDR=192.168.1.2:5672,192.168.1.5:5672,192.168.1.7:5672
addr: "192.168.1.2:5672"
username: "admin"
password: "rabbitmq"
vhost: "/"
schema: amqp
rabbitmq:
enabled: false
常见问题
服务未启动: 检查 Kubernetes 的 Pod 是否正常运行,查看日志以确定问题所在。
下载不了 OCI 制品?
helm
版本要求大于等于 3,如果版本低于 3.8,需要通过 export HELM_EXPERIMENTAL_OCI=1
设置环境变量来开启 OCI 特性,详情请查看 helm 官方文档。