跳到主要内容

集群部署-kubernetes -待完善

Deployment 部署

OpenIM Server 部署

资源要求

  • CPU:2 核心
  • 内存:4 GiB
  • 磁盘使用:20 GiB(在节点上)

前提条件

确保您已经部署了以下组件:

  • Redis
  • MongoDB
  • Kafka
  • MinIO

原生部署

进入目标目录

cd ./deployments/deploy/

部署配置和依赖

更新您的 openim-config.yml 配置映射。您可以查阅官方文档获取更多详情。

openim-config.yml 中,您需要修改以下配置:

discovery.yml

  • kubernetes.namespace:默认是 default,您可以将其更改为您的 namespace。

mongodb.yml

  • address:设置为已部署的 MongoDB 地址或 Mongo 服务名称和端口。
  • database:设置为您的 MongoDB 数据库名称(需要事先创建数据库)。
  • authSource:设置为您的 MongoDB 用户认证源数据库(authSource 是指定与用户凭证关联的数据库名称,用户需要在该数据库中创建)。

kafka.yml

  • address:设置为已部署的 Kafka 地址或 Kafka 服务名称和端口。

redis.yml

  • address:设置为已部署的 Redis 地址或 Redis 服务名称和端口。

minio.yml

  • internalAddress:设置为已部署的 MinIO 服务名称和端口。
  • externalAddress:设置为您已暴露的 MinIO 外部地址。

设置 Secret

Secret 是一个包含少量敏感数据的对象。例如密码和密钥。Secret 类似于 ConfigMaps

Redis:

redis-secret.yml 中更新 redis-password 的值,将其设置为您的 Redis 密码,需进行 base64 编码。

apiVersion: v1
kind: Secret
metadata:
name: openim-redis-secret
...
data:
redis-password: b3BlbklNMTIz # update to your redis password encoded in base64, if need empty, you can set to ""

Mongo:

mongo-secret.yml 文件中更新 mongo_openim_usernamemongo_openim_password 的值,将其设置为您的 MongoDB 用户名和密码,需进行 base64 编码。

apiVersion: v1
kind: Secret
metadata:
name: openim-mongo-secret
type: Opaque
data:
mongo_openim_username: b3BlbklN # update to your mongo username encoded in base64, if need empty, you can set to "" (this user credentials need in authSource database)
mongo_openim_password: b3BlbklNMTIz # update to your mongo password encoded in base64, if need empty, you can set to ""

Minio:

minio-secret.yml 文件中更新 minio-root-userminio-root-password 的值,将其设置为您的 MinIO accessKeyIDsecretAccessKey,需进行 base64 编码。

apiVersion: v1
kind: Secret
metadata:
name: openim-minio-secret
type: Opaque
data:
minio-root-user: cm9vdA== # update to your minio accessKeyID encoded in base64, if need empty, you can set to ""
minio-root-password: b3BlbklNMTIz # update to your minio secretAccessKey encoded in base64, if need empty, you can set to ""

Kafka:

kafka-secret.yml 文件中更新 kafka-password 的值,将其设置为您的 Kafka 密码,需进行 base64 编码。

apiVersion: v1
kind: Secret
metadata:
name: openim-kafka-secret
type: Opaque
data:
kafka-password: '' # update to your kafka password encoded in base64, if need empty, you can set to ""

应用 Secrets

kubectl apply -f redis-secret.yml -f minio-secret.yml -f mongo-secret.yml -f kafka-secret.yml

应用所有配置

kubectl apply -f ./openim-config.yml

注意:如果您使用的是 default 命名空间,您可以执行 clusterRile.yml 来为默认服务账户创建集群角色绑定。

您可以在 openim-config.yml 中的 discovery.yml 文件中修改命名空间,改变 kubernetes.namespace 为您的命名空间。

执行 clusterRole.yml

kubectl apply -f ./clusterRole.yml

运行所有 Deployment 和 Service

注意:在部署主要应用程序之前,请确保像 MinIO、Redis 和 Kafka 这样的基础设施服务已经运行。

kubectl apply \
-f openim-api-deployment.yml \
-f openim-api-service.yml \
-f openim-crontask-deployment.yml \
-f openim-rpc-user-deployment.yml \
-f openim-rpc-user-service.yml \
-f openim-msggateway-deployment.yml \
-f openim-msggateway-service.yml \
-f openim-push-deployment.yml \
-f openim-push-service.yml \
-f openim-msgtransfer-service.yml \
-f openim-msgtransfer-deployment.yml \
-f openim-rpc-conversation-deployment.yml \
-f openim-rpc-conversation-service.yml \
-f openim-rpc-auth-deployment.yml \
-f openim-rpc-auth-service.yml \
-f openim-rpc-group-deployment.yml \
-f openim-rpc-group-service.yml \
-f openim-rpc-friend-deployment.yml \
-f openim-rpc-friend-service.yml \
-f openim-rpc-msg-deployment.yml \
-f openim-rpc-msg-service.yml \
-f openim-rpc-third-deployment.yml \
-f openim-rpc-third-service.yml

认证

在部署完成后,您可以使用以下检测已部署的信息:

# Check the status of all pods
kubectl get pods

# Check the status of services
kubectl get svc

# Check the status of deployments
kubectl get deployments

# View all resources
kubectl get all

清除所有部署内容

kubectl delete -f ./

注意事项:

  • 如果您为部署使用了特定的命名空间,请在 kubectl 命令中添加 -n <namespace> 参数。

OpenIM Chat 部署

先决条件

  • 确保已部署 OpenIM Server 及其依赖项。
    • Redis
    • MongoDB
    • Kafka
    • MinIO
  • 暴露 OpenIM Server 的相应服务和端口。

部署 OpenIM Chat

Chat 依赖于 OpenIM Server,因此您需要先部署 OpenIM Server。

进入目标目录

cd deployments/deploy

修改 ConfigMap

您需要修改 chat-config.yml 文件以匹配您的环境。重点关注以下字段: discovery.yml

  • kubernetes.namespace: 默认是 default,您可以将其更改为您的命名空间。

mongodb.yml

  • address:设置为已部署的 MongoDB 地址或 Mongo 服务名称和端口。

  • database:设置为您的 MongoDB 数据库名称(需要事先创建数据库)。

  • authSource:设置为您的 MongoDB 用户认证源数据库(authSource 是指定与用户凭证关联的数据库名称,用户需要在该数据库中创建)。

    redis.yml

  • address: 设置为已部署的 Redis 地址或 Redis 服务名称和端口。

share.yml

  • openIM.apiURL: 修改为您的 IM Server API 地址或使用您的 openim-api 服务名称和端口
  • openIM.secret: 与 IM Server share.secret 值相同。

设置 secret

Secret 是一个包含少量敏感数据的对象。例如密码和密钥。Secret 类似于 ConfigMaps。

Redis:

redis-secret.yml 中更新 redis-password 的值,将其设置为您的 Redis 密码,需进行 base64 编码。

apiVersion: v1
kind: Secret
metadata:
name: openim-redis-secret
type: Opaque
data:
redis-password: b3BlbklNMTIz # update to your redis password encoded in base64, if need empty, you can set to ""

Mongo:

mongo-secret.yml 文件中更新 mongo_openim_usernamemongo_openim_password 的值,将其设置为您的 MongoDB 用户名和密码,需进行 base64 编码。

apiVersion: v1
kind: Secret
metadata:
name: openim-mongo-secret
type: Opaque
data:
mongo_openim_username: b3BlbklN # update to your mongo username encoded in base64, if need empty, you can set to "" (this user credentials need in authSource database)
mongo_openim_password: b3BlbklNMTIz # update to your mongo password encoded in base64, if need empty, you can set to ""

应用 Secrets

kubectl apply -f redis-secret.yml -f mongo-secret.yml

应用配置和服务

部署配置和服务

kubectl apply -f chat-config.yml -f openim-admin-api-service.yml -f openim-chat-api-service.yml -f openim-admin-rpc-service.yml -f openim-chat-rpc-service.yml

启动 Chat 部署

kubectl apply -f openim-chat-api-deployment.yml -f openim-admin-api-deployment.yml -f openim-chat-rpc-deployment.yml -f openim-admin-rpc-deployment.yml

验证

部署完成后,您可以验证部署状态。

# Check the status of all pods
kubectl get pods

# Check the status of services
kubectl get svc

# Check the status of deployments
kubectl get deployments

# View all resources
kubectl get all

清除所有部署内容

kubectl delete -f ./

注意事项:

  • 如果您为部署使用了特定的命名空间,请在 kubectl 命令中添加 -n <namespace> 参数。