k8s Deployment
OpenIM Application Containerization Deployment Guide
OpenIM supports various cluster deployment methods, including but not limited to helm
, sealos
, and kustomize
.
Several contributors and previous official versions have provided some reference 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 generating configuration files for OpenIM optional. However, if you wish to customize the configuration, you can follow these steps:
# Or use the script:
# ./scripts/init-config.sh
At this point, the configuration file will be generated under deployments/openim/config
, and you can modify it as needed.
Installing Helm
Helm simplifies the deployment and management of Kubernetes applications 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
The automated provision includes aliyun, ghcr, docker hub: Image documentation
Local testing build method:
$ make image
This command helps to quickly build the required images locally. For detailed building strategies, please refer to Build Documentation.
Installation
Browse our Helm-Charts repository and read carefully: Helm-Charts Repository
Using the helm charts repository, you can ignore the following configuration, but if you only want to use the server and expand on it, you can continue:
Using Helmfile:
GO111MODULE=on go get github.com/roboll/helmfile@latest
export MYSQL_ADDRESS=im-mysql
export MYSQL_PORT=3306
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/openim.yaml > ./charts/generated-configs/config.yaml
cp ../config/notification.yaml ./charts/generated-configs/notification.yaml
../scripts/genconfig
Cluster Setup Reference
If you already have a kubernetes
cluster, or if you want to build a kubernetes
cluster from scratch, you can skip this step.
For a quick start, I use sealos to quickly establish a cluster, with sealos also being a wrapper for kubeadm at its core:
``bash$ 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:
The details of the cluster are as follows:
| Hostname | IP Address | System Information |
| --------- | ---------- | ------------------------------------------------------------ |
| 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 |
```bash$ 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"
Note Uninstall method: Uninstalling with
kubeadm
does not deleteetcd
andcni
related configurations. You need to manually clear them or usesealos
for uninstallation.$ sealos reset
If you are local, you can also test with Kind and Minikube, for example using Kind:
$ kind create cluster