diff --git a/deployments/Readme.md b/deployments/Readme.md index a7b288130..775baaea0 100644 --- a/deployments/Readme.md +++ b/deployments/Readme.md @@ -1,175 +1,3 @@ # 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](https://github.com/OpenIMSDK/k8s-jenkins) -+ [open-im-server-k8s-deploy Repository](https://github.com/openimsdk/open-im-server-k8s-deploy) -+ [openim-charts Repository](https://github.com/OpenIMSDK/openim-charts) -+ [deploy-openim Repository](https://github.com/showurl/deploy-openim) - -### Dependency Check - -```bash -Kubernetes: >= 1.16.0-0 -Helm: >= 3.0 -``` - -### Minimum Configuration - -The recommended minimum configuration for a production environment is as follows: - -```yaml -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: - -```bash -$ 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](https://github.com/labring/sealos) to rapidly set up the 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: - -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 | - -```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" -``` - -> **Node** Uninstallation method: using `kubeadm` for uninstallation does not remove `etcd` and `cni` related configurations. Manual clearance or using `sealos` for uninstallation is needed. -> -> ```bash -> $ sealos reset -> ``` - -If you are local, you can also use Kind and Minikube to test, for example, using Kind: - -```bash -$ 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:** - -```bash -$ curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash -``` - -**Adding Repository:** - -```bash -$ helm repo add brigade https://openimsdk.github.io/openim-charts -``` - -### OpenIM Image Strategy - -Automated offerings include aliyun, ghcr, docker hub: [Image Documentation](https://github.com/openimsdk/open-im-server/blob/main/docs/contrib/images.md) - -**Local Test Build Method:** - -```bash -$ make image -``` - -> This command assists in quickly building the required images locally. For a detailed build strategy, refer to the [Build Documentation](https://github.com/openimsdk/open-im-server/blob/main/build/README.md). - -## Installation - -Explore our Helm-Charts repository and read through: [Helm-Charts Repository](https://github.com/openimsdk/helm-charts) - - -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:** - -```bash -../scripts/genconfig.sh ../scripts/install/environment.sh ./templates/helm-image.yaml > ./charts/generated-configs/helm-image.yaml -``` - -**Gen Charts:** - -```bash -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:** - -```bash -GO111MODULE=on go get github.com/roboll/helmfile@latest -``` - -```bash -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 -``` - -```bash -helmfile apply -``` +view deploy [README](./deploy/README.md) \ No newline at end of file diff --git a/deployments/deploy/README.md b/deployments/deploy/README.md index 0fa8697c8..d6b083bc5 100644 --- a/deployments/deploy/README.md +++ b/deployments/deploy/README.md @@ -1,25 +1,34 @@ # Kubernetes Deployment ## Resource Requests + - CPU: 2 cores - Memory: 4 GiB - Disk usage: 20 GiB (on Node) ## Origin Deploy + 1. Enter the target dir -`cd ./deployments/deploy/` + `cd ./deployments/deploy/` 2. Deploy configs and dependencies + Upate your `openim-config.yml` Apply all config and dependencies -`kubectl apply -f ./openim-config.yml -f ` +`kubectl apply -f ./openim-config.yml` + +> Attation: If you use `default` namespace, you can excute `clusterRile.yml` to create a cluster role binding for default service account. +> +> Namespace is modify to `discovery.yml` in `openim-config.yml`, you can change `kubernetes.namespace` to your namespace. + +Excute `clusterRole.yml` +`kubectl apply -f ./clusterRole.yml` Run infrasturcture components. `kubectl apply -f minio-service.yml -f minio-statefulset.yml -f mongo-service.yml -f mongo-statefulset.yml -f redis-service.yml -f redis-statefulset.yml -f kafka-service.yml -f kafka-statefulset.yml` ->Note: Ensure that infrastructure services like MinIO, Redis, and Kafka are running before deploying the main applications. - +> Note: Ensure that infrastructure services like MinIO, Redis, and Kafka are running before deploying the main applications. 3. run all deployments and services @@ -51,7 +60,7 @@ kubectl apply \ ``` 4. Verification -After deploying the services, verify that everything is running smoothly: + After deploying the services, verify that everything is running smoothly: ```bash # Check the status of all pods @@ -72,4 +81,5 @@ kubectl get all `kubectl delete -f ./` ### Notes: -- If you use a specific namespace for your deployment, be sure to append the -n flag to your kubectl commands. \ No newline at end of file + +- If you use a specific namespace for your deployment, be sure to append the -n flag to your kubectl commands.