5.8 KiB
OpenIM Application Containerization Deployment Guide
OpenIM supports a variety of cluster deployment methods, including but not limited to helm
, sealos
, kustomize
Various contributors, as well as previous official releases, have provided some referenceable solutions:
- k8s-jenkins Repository
- open-im-server-k8s-deploy Repository
- openim-charts Repository
- deploy-openim Repository
Dependency Check
Kubernetes: >= 1.16.0-0
Helm: >= 3.0
Minimum Configuration
The recommended minimum configuration for a production environment is as follows:
CPU: 4
Memory: 8G
Disk: 100G
Configuration File Generation
We have automated all the files, making the generation of configuration files optional for OpenIM. However, if you desire custom configurations, you can follow the steps below:
$ make init
# Alternatively, use script:
# ./scripts/init-config.sh
At this point, configuration files will be generated under deployments/openim/config
, which you can modify as per your requirements.
Cluster Setup
If you already have a kubernetes
cluster, or if you wish to build a kubernetes
cluster from scratch, you can skip this step.
For a quick start, I used sealos to rapidly set up the cluster, with sealos also being a wrapper for kubeadm at its core:
$ SEALOS_VERSION=`curl -s https://api.github.com/repos/labring/sealos/releases/latest | grep -oE '"tag_name": "[^"]+"' | head -n1 | cut -d'"' -f4` && \
curl -sfL https://raw.githubusercontent.com/labring/sealos/${SEALOS_VERSION}/scripts/install.sh |
sh -s ${SEALOS_VERSION} labring/sealos
Supported Versions:
- docker:
labring/kubernetes-docker
:(v1.24.0~v1.27.0) - containerd:
labring/kubernetes
:(v1.24.0~v1.27.0)
Cluster Installation:
Cluster details are as follows:
Hostname | IP Address | System Info |
---|---|---|
master01 | 10.0.0.9 | Linux VM-0-9-ubuntu 5.15.0-76-generic #83-Ubuntu SMP Thu Jun 15 19:16:32 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux |
node01 | 10.0.0.4 | Similar to master01 |
node02 | 10.0.0.10 | Similar to master01 |
$ export CLUSTER_USERNAME=ubuntu
$ export CLUSTER_PASSWORD=123456
$ sudo sealos run labring/kubernetes:v1.25.0 labring/helm:v3.8.2 labring/calico:v3.24.1 \
--masters 10.0.0.9 \
--nodes 10.0.0.4,10.0.0.10 \
-u "$CLUSTER_USERNAME" \
-p "$CLUSTER_PASSWORD"
Node Uninstallation method: using
kubeadm
for uninstallation does not removeetcd
andcni
related configurations. Manual clearance or usingsealos
for uninstallation is needed.$ sealos reset
If you are local, you can also use Kind and Minikube to test, for example, using Kind:
$ GO111MODULE="on" go get sigs.k8s.io/kind@v0.11.1
$ kind create cluster
Installing helm
Helm simplifies the deployment and management of Kubernetes applications to a large extent by offering version control and release management through packaging.
Using Script:
$ curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
Adding Repository:
$ helm repo add brigade https://openimsdk.github.io/openim-charts
OpenIM Image Strategy
Automated offerings include aliyun, ghcr, docker hub: Image Documentation
Local Test Build Method:
$ make image
This command assists in quickly building the required images locally. For a detailed build strategy, refer to the Build Documentation.
Installation
Explore our Helm-Charts repository and read through: Helm-Charts Repository
Using the helm charts repository, you can ignore the following configuration, but if you want to just use the server and scale on top of it, you can go ahead:
Use the Helm template to generate the deployment yaml file: openim-charts.yaml
Gen Image:
../scripts/genconfig.sh ../scripts/install/environment.sh ./templates/helm-image.yaml > ./charts/generated-configs/helm-image.yaml
Gen Charts:
for chart in ./charts/*/; do
if [[ "$chart" == *"generated-configs"* || "$chart" == *"helmfile.yaml"* ]]; then
continue
fi
if [ -f "${chart}values.yaml" ]; then
helm template "$chart" -f "./charts/generated-configs/helm-image.yaml" -f "./charts/generated-configs/config.yaml" -f "./charts/generated-configs/notification.yaml" >> openim-charts.yaml
else
helm template "$chart" >> openim-charts.yaml
fi
done
Use Helmfile:
GO111MODULE=on go get github.com/roboll/helmfile@latest
export MONGO_ADDRESS=im-mongo
export MONGO_PORT=27017
export REDIS_ADDRESS=im-redis-master
export REDIS_PORT=6379
export KAFKA_ADDRESS=im-kafka
export KAFKA_PORT=9092
export OBJECT_APIURL="https://openim.server.com/api"
export MINIO_ENDPOINT="http://im-minio:9000"
export MINIO_SIGN_ENDPOINT="https://openim.server.com/im-minio-api"
mkdir ./charts/generated-configs
../scripts/genconfig.sh ../scripts/install/environment.sh ./templates/config.yaml > ./charts/generated-configs/config.yaml
cp ../config/notification.yaml ./charts/generated-configs/notification.yaml
../scripts/genconfig.sh ../scripts/install/environment.sh ./templates/helm-image.yaml > ./charts/generated-configs/helm-image.yaml
helmfile apply