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
kubeadmdoes not deleteetcdandcnirelated configurations. You need to manually clear them or usesealosfor uninstallation.$ sealos reset
If you are local, you can also test with Kind and Minikube, for example using Kind:
$ kind create cluster