├── .github └── workflows │ ├── docker-publish.yml │ ├── helm-release.yml │ └── oss-upload.yml ├── .gitignore ├── README.md ├── charts ├── rocketmq-cluster │ ├── .helmignore │ ├── Chart.yaml │ ├── README.md │ ├── templates │ │ ├── NOTES.txt │ │ ├── _helpers.tpl │ │ ├── broker │ │ │ ├── acl-config.yaml │ │ │ └── statefulset.yaml │ │ ├── configmap.yaml │ │ ├── controller │ │ │ ├── statefulset.yaml │ │ │ └── svc-headless.yaml │ │ ├── dashboard │ │ │ ├── configmap.yaml │ │ │ ├── deployment.yaml │ │ │ ├── ingress.yaml │ │ │ └── service.yaml │ │ ├── nameserver │ │ │ ├── statefulset.yaml │ │ │ ├── svc-headless.yaml │ │ │ └── svc.yaml │ │ └── proxy │ │ │ ├── deployment.yaml │ │ │ └── service.yaml │ └── values.yaml └── rocketmq │ ├── .helmignore │ ├── Chart.yaml │ ├── README.md │ ├── templates │ ├── NOTES.txt │ ├── _helpers.tpl │ ├── broker │ │ ├── acl-config.yaml │ │ └── statefulset.yaml │ ├── configmap.yaml │ ├── controller │ │ ├── statefulset.yaml │ │ └── svc-headless.yaml │ ├── dashboard │ │ ├── configmap.yaml │ │ ├── deployment.yaml │ │ ├── ingress.yaml │ │ └── service.yaml │ ├── nameserver │ │ ├── statefulset.yaml │ │ ├── svc-headless.yaml │ │ └── svc.yaml │ └── proxy │ │ ├── deployment.yaml │ │ └── service.yaml │ └── values.yaml ├── docker ├── Dockerfile ├── broker-base.conf ├── entrypoint.sh └── mq-server-start.sh └── examples ├── experimental ├── README.md ├── acl-only.yaml ├── acl-test.yaml ├── ha-test.yaml ├── minikube-common.yaml └── proxy.yaml ├── production.yaml ├── proxy-test.yaml └── test.yaml /.github/workflows/docker-publish.yml: -------------------------------------------------------------------------------- 1 | name: Docker Publish 2 | 3 | on: 4 | workflow_dispatch: ## on button click 5 | schedule: 6 | - cron: '0 1/11 * * *' 7 | push: 8 | paths: 9 | - 'docker/*' 10 | - '!docker/*.md' 11 | - '.github/workflows/docker*' 12 | branches: 13 | - main 14 | - stable 15 | tags: 16 | - v[0-9]* 17 | 18 | env: 19 | APP_VERSION_LATEST: "5.1.4" 20 | 21 | jobs: 22 | docker: 23 | runs-on: ubuntu-latest 24 | steps: 25 | - 26 | name: Checkout 27 | uses: actions/checkout@v3 28 | - 29 | name: Set up QEMU 30 | uses: docker/setup-qemu-action@v3 31 | - 32 | name: Set up Docker Buildx 33 | uses: docker/setup-buildx-action@v3 34 | - 35 | name: Set outputs 36 | id: vars 37 | env: 38 | DOCKERHUB_TOKEN: "${{ secrets.DOCKERHUB_TOKEN }}" 39 | run: | 40 | set -x 41 | sha_short=$(git rev-parse --short HEAD) 42 | echo "sha_short=$sha_short" >> $GITHUB_OUTPUT 43 | echo "[env] GITHUB_REF_NAME: $GITHUB_REF_NAME" 44 | if echo "$GITHUB_REF_NAME" | grep -E 'v[0-9.]+(-.*)?'; then 45 | app_version=$(echo "$GITHUB_REF_NAME" | cut -d "-" -f1 | sed 's/^v//') 46 | dl_url="https://dist.apache.org/repos/dist/release/rocketmq/${app_version}/rocketmq-all-${app_version}-bin-release.zip" 47 | curl -sI "$dl_url" | grep '200 OK' 48 | if [[ $? == "0" ]]; then 49 | echo "is_release=true" >> $GITHUB_OUTPUT 50 | echo "app_version=${app_version}" >> $GITHUB_OUTPUT 51 | echo "app_version_short=$(echo $app_version | sed -E 's/.[0-9]+$//')" >> $GITHUB_OUTPUT 52 | sha_tag="v${app_version}-${sha_short}" 53 | echo "sha_tag=$sha_tag" >> $GITHUB_OUTPUT 54 | if [[ "$app_version" == "$APP_VERSION_LATEST" ]]; then 55 | echo "latest_or_sha=latest" >> $GITHUB_OUTPUT 56 | else 57 | echo "latest_or_sha=$sha_tag" >> $GITHUB_OUTPUT 58 | fi 59 | fi 60 | fi 61 | if echo "$DOCKERHUB_TOKEN" | grep -Eo '^[a-zA-Z]' > /dev/null ; then 62 | echo "dockerhub_token_ok=true" >> $GITHUB_OUTPUT 63 | else 64 | exit "500" 65 | fi 66 | - 67 | name: Login to Docker Hub 68 | uses: docker/login-action@v3 69 | if: steps.vars.outputs.dockerhub_token_ok == 'true' 70 | with: 71 | username: ${{ secrets.DOCKERHUB_USERNAME }} 72 | password: ${{ secrets.DOCKERHUB_TOKEN }} 73 | - 74 | name: Docker build testing 75 | uses: docker/build-push-action@v5 76 | if: github.ref_name == 'main' 77 | with: 78 | context: docker/ 79 | platforms: linux/amd64,linux/arm64 80 | push: true 81 | cache-from: type=gha 82 | cache-to: type=gha,mode=max 83 | tags: | 84 | ${{ vars.CR_REPO }}:snapshot 85 | - 86 | name: Docker build pre 87 | uses: docker/build-push-action@v5 88 | if: github.ref_name == 'stable' 89 | with: 90 | context: docker/ 91 | platforms: linux/amd64,linux/arm64 92 | push: true 93 | cache-from: type=gha 94 | cache-to: type=gha,mode=max 95 | tags: | 96 | ${{ vars.CR_REPO }}:pre-${{ steps.vars.outputs.sha_short }} 97 | - 98 | name: Build and push 99 | uses: docker/build-push-action@v5 100 | if: steps.vars.outputs.is_release == 'true' 101 | with: 102 | context: docker/ 103 | platforms: linux/amd64,linux/arm64 104 | push: true 105 | cache-from: type=gha 106 | cache-to: type=gha,mode=max 107 | build-args: | 108 | app_version=${{ steps.vars.outputs.app_version }} 109 | tags: | 110 | ${{ vars.CR_REPO }}:${{ steps.vars.outputs.sha_tag }} 111 | ${{ vars.CR_REPO }}:${{ steps.vars.outputs.latest_or_sha }} 112 | ${{ vars.CR_REPO }}:v${{ steps.vars.outputs.app_version_short }} 113 | ${{ vars.CR_REPO }}:v${{ steps.vars.outputs.app_version }} 114 | -------------------------------------------------------------------------------- /.github/workflows/helm-release.yml: -------------------------------------------------------------------------------- 1 | name: Release Charts 2 | 3 | on: 4 | workflow_dispatch: ## on button click 5 | push: 6 | paths: 7 | - 'charts/*/Chart.yaml' 8 | branches: 9 | - main 10 | 11 | jobs: 12 | release: 13 | runs-on: ubuntu-latest 14 | steps: 15 | - 16 | name: Checkout 17 | uses: actions/checkout@v3 18 | with: 19 | fetch-depth: 0 20 | - 21 | name: Configure Git 22 | run: | 23 | git config user.name "$GITHUB_ACTOR" 24 | git config user.email "$GITHUB_ACTOR@users.noreply.github.com" 25 | - 26 | name: Run chart-releaser 27 | uses: helm/chart-releaser-action@v1.5.0 28 | env: 29 | CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}" 30 | CR_RELEASE_NAME_TEMPLATE: "{{ .Name }}-{{ .Version }}" 31 | -------------------------------------------------------------------------------- /.github/workflows/oss-upload.yml: -------------------------------------------------------------------------------- 1 | name: OSS Upload 2 | 3 | on: 4 | workflow_run: 5 | workflows: ["Release Charts"] 6 | types: [completed] 7 | branches: 8 | - main 9 | #push: 10 | # branches: 11 | # - gh-pages 12 | 13 | jobs: 14 | oss: 15 | runs-on: ubuntu-latest 16 | steps: 17 | - 18 | name: Checkout 19 | uses: actions/checkout@v3 20 | with: 21 | fetch-depth: 0 22 | - 23 | name: Upload to OSS 24 | if: ${{ vars.OSS_MIRROR_ENABLED == 'true' }} 25 | shell: bash 26 | env: 27 | DL_URL_OSS: "https://gosspublic.alicdn.com/ossutil/1.7.1/ossutil64" 28 | OSS_KEY_ID: "${{ secrets.OSS_KEY_ID }}" 29 | OSS_KEY_SECRET: "${{ secrets.OSS_KEY_SECRET }}" 30 | OSS_EP: "${{ vars.OSS_EP }}" 31 | OSS_BUCKET: "${{ vars.OSS_BUCKET }}" 32 | CHART_INDEX_URL: "${{ vars.CHART_INDEX_URL }}" 33 | CHART_NAME: rocketmq 34 | MIRROR_HOST: "${{ vars.MIRROR_HOST }}" 35 | run: | 36 | export ALIOSS="${HOME}/bin/ossutil" 37 | mkdir -p $(dirname $ALIOSS) 38 | curl -o $ALIOSS -L $DL_URL_OSS 39 | chmod a+rx $ALIOSS 40 | $ALIOSS config -e $OSS_EP -i $OSS_KEY_ID -k $OSS_KEY_SECRET 41 | git branch -a 42 | git show remotes/origin/gh-pages:index.yaml > /tmp/index.yaml 43 | head -n50 /tmp/index.yaml 44 | if head -n50 /tmp/index.yaml | grep -E '^apiVersion:' ; then 45 | sed -i 's%- https://github\.com/%- https://'${MIRROR_HOST}'/github/%g' /tmp/index.yaml 46 | $ALIOSS cp -f /tmp/index.yaml \ 47 | "oss://${OSS_BUCKET}/${CHART_NAME}/index.yaml" \ 48 | --meta "content-type:text/plain; charset=utf-8" 49 | fi 50 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | _mq-deploy/ 2 | _dev/ 3 | _tmp/ 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # RocketMQ Helm Chart 2 | 3 | https://github.com/itboon/rocketmq-helm 4 | 5 | ## 版本兼容性 6 | 7 | - Kubernetes 1.18+ 8 | - Helm 3.3+ 9 | - RocketMQ `>= 4.5` 10 | 11 | ## 添加 helm 仓库 12 | 13 | ``` shell 14 | ## 添加 helm 仓库 15 | helm repo add rocketmq-repo https://helm-charts.itboon.top/rocketmq 16 | helm repo update rocketmq-repo 17 | ``` 18 | 19 | ## 部署案例 20 | 21 | ``` shell 22 | ## 部署一个最小化的 rocketmq 集群 23 | ## 这里关闭持久化存储,仅演示部署效果 24 | helm upgrade --install rocketmq \ 25 | --namespace rocketmq-demo \ 26 | --create-namespace \ 27 | --set broker.persistence.enabled="false" \ 28 | rocketmq-repo/rocketmq 29 | ``` 30 | 31 | ``` shell 32 | ## 部署测试集群, 启用 Dashboard (默认已开启持久化存储) 33 | helm upgrade --install rocketmq \ 34 | --namespace rocketmq-demo \ 35 | --create-namespace \ 36 | --set dashboard.enabled="true" \ 37 | rocketmq-repo/rocketmq 38 | ``` 39 | 40 | ### 部署高可用集群版 41 | 42 | ``` shell 43 | ## rocketmq-cluster 默认部署 2个 master 节点 44 | ## 每个 master 具有1个副节点,共4个 broker 节点 45 | helm upgrade --install rocketmq \ 46 | --namespace rocketmq-demo \ 47 | --create-namespace \ 48 | rocketmq-repo/rocketmq-cluster 49 | 50 | ``` 51 | 52 | ``` shell 53 | ## 部署 3个 master 节点,每个 master 具有1个副节点,共6个 broker 节点 54 | helm upgrade --install rocketmq \ 55 | --namespace rocketmq-demo \ 56 | --create-namespace \ 57 | --set broker.size.master="3" \ 58 | rocketmq-repo/rocketmq-cluster 59 | 60 | ``` 61 | 62 | ``` shell 63 | ## 调整内存配额 64 | helm upgrade --install rocketmq \ 65 | --namespace rocketmq-demo \ 66 | --create-namespace \ 67 | --set broker.master.jvm.maxHeapSize="4G" \ 68 | --set broker.master.resources.requests.memory="6Gi" \ 69 | rocketmq-repo/rocketmq-cluster 70 | 71 | ``` 72 | 73 | > 具体资源配额请根据实际环境调整,参考 [examples](https://github.com/itboon/rocketmq-helm/tree/main/examples) 74 | 75 | ## 部署详情 76 | 77 | ### 集群外访问 78 | 79 | #### 通过 proxy 实现集群外访问 80 | 81 | 可以将 proxy 暴露到集群外,支持 `LoadBalancer` 和 `NodePort` 82 | 83 | > proxy 是 RocketMQ 5.x 版本新增的模块,这种模式能够更好的适应复杂的网络环境,尤其是 k8s 集群内外互通,详情请参考[官方文档](https://rocketmq.apache.org/version/#whats-new-in-rocketmq-50) 84 | 85 | ``` yaml 86 | proxy: 87 | service: 88 | annotations: {} 89 | type: NodePort ## LoadBalancer or NodePort 90 | ``` 91 | 92 | #### hostNetwork 93 | 94 | broker 支持 `hostNetwork`,即 pod 使用主机网络命名空间,这种方式的缺点是每个 node 节点最多只能调度一个 broker 95 | 96 | ``` yaml 97 | broker: 98 | hostNetwork: true 99 | 100 | nameserver: 101 | service: 102 | type: NodePort ## LoadBalancer or NodePort 103 | ``` 104 | 105 | 建议优先使用 proxy 实现集群外访问,`hostNetwork` 作为向下兼容的备选方案。 106 | 107 | > 仅 broker 支持 `hostNetwork`,其他组件可以使用 `NodePort` 108 | 109 | ### 可选组件 110 | 111 | ``` yaml 112 | ## 关闭 proxy 113 | proxy: 114 | enabled: false ## 默认 true 115 | 116 | ## 关闭 dashboard 117 | dashboard: 118 | enabled: false ## 默认 true 119 | ``` 120 | 121 | ### Dashboard 登录认证 122 | 123 | Dashboard admin 帐号密码: 124 | 125 | ``` yaml 126 | dashboard: 127 | enabled: true 128 | auth: 129 | enabled: true 130 | users: 131 | - name: admin 132 | password: admin 133 | isAdmin: true 134 | - name: user01 135 | password: userPass 136 | ``` 137 | 138 | ### 镜像仓库 139 | 140 | ``` yaml 141 | image: 142 | repository: apache/rocketmq 143 | # tag: 5.2.0 144 | tag: 4.9.7 145 | ``` 146 | 147 | ### 部署特定版本 148 | 149 | ``` shell 150 | helm upgrade --install rocketmq \ 151 | --namespace rocketmq-demo \ 152 | --create-namespace \ 153 | --set image.tag="5.2.0" \ 154 | rocketmq-repo/rocketmq 155 | ``` 156 | 157 | ### 内存管理 158 | 159 | 集群每个模块提供堆内存管理,例如 `--set broker.master.jvm.maxHeapSize="1024M"` 将堆内存设置为 `1024M`,默认 `Xms` `Xmx` 相等。堆内存配额应该与 Pod `resources` 相匹配。 160 | 161 | > 可使用 `jvm.javaOptsOverride` 对 jvm 参数进行修改,设置了此参数则 `maxHeapSize` 失效。 162 | 163 | ```yaml 164 | broker: 165 | master: 166 | jvm: 167 | maxHeapSize: 1024M 168 | # javaOptsOverride: "-Xms1024M -Xmx1024M -XX:+UseG1GC" 169 | resources: 170 | requests: 171 | cpu: 100m 172 | memory: 2Gi 173 | 174 | nameserver: 175 | jvm: 176 | maxHeapSize: 1024M 177 | # javaOptsOverride: "-Xms1024M -Xmx1024M -XX:+UseG1GC" 178 | resources: 179 | requests: 180 | cpu: 100m 181 | memory: 2Gi 182 | ``` 183 | 184 | ## Broker 集群架构 185 | 186 | ### 单 Master 模式 187 | 188 | ``` yaml 189 | broker: 190 | size: 191 | master: 1 192 | replica: 0 193 | ``` 194 | 195 | ### 多 Master 模式 196 | 197 | 一个集群无Slave,全是Master,例如2个Master或者3个Master,这种模式的优缺点如下: 198 | 199 | - 优点:配置简单,单个Master宕机或重启维护对应用无影响,性能最高; 200 | - 缺点:单台机器宕机期间,这台机器上未被消费的消息在机器恢复之前不可订阅,消息实时性会受到影响。 201 | 202 | ``` yaml 203 | broker: 204 | size: 205 | master: 3 206 | replica: 0 207 | ``` 208 | 209 | ### 多 Master 多 Slave 模式 210 | 211 | 每个Master配置一个Slave,有多对Master-Slave,HA采用异步复制方式,主备有短暂消息延迟(毫秒级),这种模式的优缺点如下: 212 | 213 | - 优点:Master宕机后,消费者仍然可以从Slave消费,而且此过程对应用透明,不需要人工干预,性能同多Master模式几乎一样。 214 | 215 | ``` yaml 216 | broker: 217 | size: 218 | master: 3 219 | replica: 1 220 | # 3个 master 节点,每个 master 具有1个副节点,共6个 broker 节点 221 | ``` 222 | -------------------------------------------------------------------------------- /charts/rocketmq-cluster/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *.orig 18 | *~ 19 | # Various IDEs 20 | .project 21 | .idea/ 22 | *.tmproj 23 | .vscode/ 24 | -------------------------------------------------------------------------------- /charts/rocketmq-cluster/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: rocketmq-cluster 3 | description: RocketMQ Helm chart 4 | type: application 5 | 6 | version: 12.4.0 7 | appVersion: '5.3.2' 8 | 9 | maintainers: 10 | - name: itboon 11 | url: 'https://github.com/itboon/rocketmq-helm' 12 | 13 | keywords: 14 | - rocketmq 15 | - kubernetes 16 | - apache -------------------------------------------------------------------------------- /charts/rocketmq-cluster/README.md: -------------------------------------------------------------------------------- 1 | # RocketMQ Helm Chart 2 | 3 | https://github.com/itboon/rocketmq-helm 4 | 5 | ## 版本兼容性 6 | 7 | - Kubernetes 1.18+ 8 | - Helm 3.3+ 9 | - RocketMQ `>= 4.5` 10 | 11 | ## 添加 helm 仓库 12 | 13 | ``` shell 14 | ## 添加 helm 仓库 15 | helm repo add rocketmq-repo https://helm-charts.itboon.top/rocketmq 16 | helm repo update rocketmq-repo 17 | ``` 18 | 19 | ## 部署案例 20 | 21 | ``` shell 22 | ## 部署一个最小化的 rocketmq 集群 23 | ## 这里关闭持久化存储,仅演示部署效果 24 | helm upgrade --install rocketmq \ 25 | --namespace rocketmq-demo \ 26 | --create-namespace \ 27 | --set broker.persistence.enabled="false" \ 28 | rocketmq-repo/rocketmq 29 | ``` 30 | 31 | ``` shell 32 | ## 部署测试集群, 启用 Dashboard (默认已开启持久化存储) 33 | helm upgrade --install rocketmq \ 34 | --namespace rocketmq-demo \ 35 | --create-namespace \ 36 | --set dashboard.enabled="true" \ 37 | rocketmq-repo/rocketmq 38 | ``` 39 | 40 | ### 部署高可用集群版 41 | 42 | ``` shell 43 | ## rocketmq-cluster 默认部署 2个 master 节点 44 | ## 每个 master 具有1个副节点,共4个 broker 节点 45 | helm upgrade --install rocketmq \ 46 | --namespace rocketmq-demo \ 47 | --create-namespace \ 48 | rocketmq-repo/rocketmq-cluster 49 | 50 | ``` 51 | 52 | ``` shell 53 | ## 部署 3个 master 节点,每个 master 具有1个副节点,共6个 broker 节点 54 | helm upgrade --install rocketmq \ 55 | --namespace rocketmq-demo \ 56 | --create-namespace \ 57 | --set broker.size.master="3" \ 58 | rocketmq-repo/rocketmq-cluster 59 | 60 | ``` 61 | 62 | ``` shell 63 | ## 调整内存配额 64 | helm upgrade --install rocketmq \ 65 | --namespace rocketmq-demo \ 66 | --create-namespace \ 67 | --set broker.master.jvm.maxHeapSize="4G" \ 68 | --set broker.master.resources.requests.memory="6Gi" \ 69 | rocketmq-repo/rocketmq-cluster 70 | 71 | ``` 72 | 73 | > 具体资源配额请根据实际环境调整,参考 [examples](https://github.com/itboon/rocketmq-helm/tree/main/examples) 74 | 75 | ## 部署详情 76 | 77 | ### 集群外访问 78 | 79 | #### 通过 proxy 实现集群外访问 80 | 81 | 可以将 proxy 暴露到集群外,支持 `LoadBalancer` 和 `NodePort` 82 | 83 | > proxy 是 RocketMQ 5.x 版本新增的模块,这种模式能够更好的适应复杂的网络环境,尤其是 k8s 集群内外互通,详情请参考[官方文档](https://rocketmq.apache.org/version/#whats-new-in-rocketmq-50) 84 | 85 | ``` yaml 86 | proxy: 87 | service: 88 | annotations: {} 89 | type: NodePort ## LoadBalancer or NodePort 90 | ``` 91 | 92 | #### hostNetwork 93 | 94 | broker 支持 `hostNetwork`,即 pod 使用主机网络命名空间,这种方式的缺点是每个 node 节点最多只能调度一个 broker 95 | 96 | ``` yaml 97 | broker: 98 | hostNetwork: true 99 | 100 | nameserver: 101 | service: 102 | type: NodePort ## LoadBalancer or NodePort 103 | ``` 104 | 105 | 建议优先使用 proxy 实现集群外访问,`hostNetwork` 作为向下兼容的备选方案。 106 | 107 | > 仅 broker 支持 `hostNetwork`,其他组件可以使用 `NodePort` 108 | 109 | ### 可选组件 110 | 111 | ``` yaml 112 | ## 关闭 proxy 113 | proxy: 114 | enabled: false ## 默认 true 115 | 116 | ## 关闭 dashboard 117 | dashboard: 118 | enabled: false ## 默认 true 119 | ``` 120 | 121 | ### Dashboard 登录认证 122 | 123 | Dashboard admin 帐号密码: 124 | 125 | ``` yaml 126 | dashboard: 127 | enabled: true 128 | auth: 129 | enabled: true 130 | users: 131 | - name: admin 132 | password: admin 133 | isAdmin: true 134 | - name: user01 135 | password: userPass 136 | ``` 137 | 138 | ### 镜像仓库 139 | 140 | ``` yaml 141 | image: 142 | repository: apache/rocketmq 143 | # tag: 5.2.0 144 | tag: 4.9.7 145 | ``` 146 | 147 | ### 部署特定版本 148 | 149 | ``` shell 150 | helm upgrade --install rocketmq \ 151 | --namespace rocketmq-demo \ 152 | --create-namespace \ 153 | --set image.tag="5.2.0" \ 154 | rocketmq-repo/rocketmq 155 | ``` 156 | 157 | ### 内存管理 158 | 159 | 集群每个模块提供堆内存管理,例如 `--set broker.master.jvm.maxHeapSize="1024M"` 将堆内存设置为 `1024M`,默认 `Xms` `Xmx` 相等。堆内存配额应该与 Pod `resources` 相匹配。 160 | 161 | > 可使用 `jvm.javaOptsOverride` 对 jvm 参数进行修改,设置了此参数则 `maxHeapSize` 失效。 162 | 163 | ```yaml 164 | broker: 165 | master: 166 | jvm: 167 | maxHeapSize: 1024M 168 | # javaOptsOverride: "-Xms1024M -Xmx1024M -XX:+UseG1GC" 169 | resources: 170 | requests: 171 | cpu: 100m 172 | memory: 2Gi 173 | 174 | nameserver: 175 | jvm: 176 | maxHeapSize: 1024M 177 | # javaOptsOverride: "-Xms1024M -Xmx1024M -XX:+UseG1GC" 178 | resources: 179 | requests: 180 | cpu: 100m 181 | memory: 2Gi 182 | ``` 183 | -------------------------------------------------------------------------------- /charts/rocketmq-cluster/templates/NOTES.txt: -------------------------------------------------------------------------------- 1 | >>> Nameserver Address: 2 | {{- printf "%s.%s.svc:9876\n" (include "rocketmq.nameserver.fullname" .) (.Release.Namespace) | nindent 4 }} 3 | 4 | {{- if .Values.proxy.enabled }} 5 | >>> Proxy Remoting Address: 6 | {{- printf "%s.%s.svc:8080" (include "rocketmq.proxy.fullname" .) (.Release.Namespace) | nindent 4 }} 7 | 8 | >>> Proxy gRPC Address: 9 | {{- printf "%s.%s.svc:8081\n" (include "rocketmq.proxy.fullname" .) (.Release.Namespace) | nindent 4 }} 10 | {{- end }} 11 | 12 | {{- if .Values.dashboard.enabled }} 13 | {{- if .Values.dashboard.ingress.enabled }} 14 | >>> Visit RocketMQ Dashboard: 15 | {{- range $host := .Values.dashboard.ingress.hosts }} 16 | http{{ if $.Values.dashboard.ingress.tls }}s{{ end }}://{{ $host.host }}/ 17 | {{- end }} 18 | {{- end }} 19 | 20 | {{- if and .Values.dashboard.auth .Values.dashboard.auth.enabled }} 21 | >>> RocketMQ Dashboard Auth: 22 | {{- range .Values.dashboard.auth.users }} 23 | {{- printf "username: %s\tpassword: %s" .name .password | nindent 6 }} 24 | {{- end }} 25 | Modify "{{ include "rocketmq.dashboard.configmap.fullname" . }}" configmap to change the password 26 | {{- end }} 27 | {{- end }} 28 | 29 | {{- if .Values.controllerModeEnabled }} 30 | {{- $brokerReplicaCount := .Values.broker.size.replica | int }} 31 | {{- if eq $brokerReplicaCount 0 }} 32 | {{ include "rocketmq.noticeValues.controllerMode" . | fail }} 33 | {{- else }} 34 | {{ include "rocketmq.noticeValues.controllerMode" . }} 35 | {{- end }} 36 | {{- end }} -------------------------------------------------------------------------------- /charts/rocketmq-cluster/templates/_helpers.tpl: -------------------------------------------------------------------------------- 1 | {{/* 2 | Expand the name of the chart. 3 | */}} 4 | {{- define "rocketmq.name" -}} 5 | {{- default .Chart.Name .Values.nameOverride | trunc 35 | trimSuffix "-" }} 6 | {{- end }} 7 | 8 | {{/* 9 | Create a default fully qualified app name. 10 | We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). 11 | If release name contains chart name it will be used as a full name. 12 | */}} 13 | {{- define "rocketmq.fullname" -}} 14 | {{- if .Values.fullnameOverride }} 15 | {{- .Values.fullnameOverride | trunc 35 | trimSuffix "-" }} 16 | {{- else }} 17 | {{- $name := default .Chart.Name .Values.nameOverride }} 18 | {{- if contains $name .Release.Name }} 19 | {{- .Release.Name | trunc 35 | trimSuffix "-" }} 20 | {{- else }} 21 | {{- printf "%s-%s" .Release.Name $name | trunc 35 | trimSuffix "-" }} 22 | {{- end }} 23 | {{- end }} 24 | {{- end }} 25 | 26 | {{/* 27 | Create chart name and version as used by the chart label. 28 | */}} 29 | {{- define "rocketmq.chart" -}} 30 | {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 35 | trimSuffix "-" }} 31 | {{- end }} 32 | 33 | {{/* 34 | Common labels 35 | */}} 36 | {{- define "rocketmq.labels" -}} 37 | helm.sh/chart: {{ include "rocketmq.chart" . }} 38 | {{ include "rocketmq.selectorLabels" . }} 39 | {{- if .Chart.AppVersion }} 40 | app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} 41 | {{- end }} 42 | app.kubernetes.io/managed-by: {{ .Release.Service }} 43 | {{- end }} 44 | 45 | {{/* 46 | Selector labels 47 | */}} 48 | {{- define "rocketmq.selectorLabels" -}} 49 | app.kubernetes.io/name: {{ include "rocketmq.name" . }} 50 | app.kubernetes.io/instance: {{ .Release.Name }} 51 | {{- end }} 52 | 53 | {{/* 54 | Create the name of the service account to use 55 | */}} 56 | {{- define "rocketmq.serviceAccountName" -}} 57 | {{- if .Values.serviceAccount.create }} 58 | {{- default (include "rocketmq.fullname" .) .Values.serviceAccount.name }} 59 | {{- else }} 60 | {{- default "default" .Values.serviceAccount.name }} 61 | {{- end }} 62 | {{- end }} 63 | 64 | {{/* 65 | configmap 66 | */}} 67 | {{- define "rocketmq.configmap.fullname" -}} 68 | {{ include "rocketmq.fullname" . }}-server-config 69 | {{- end }} 70 | 71 | {{/* 72 | acl configmap 73 | */}} 74 | {{- define "rocketmq.acl.configmap.fullname" -}} 75 | {{ include "rocketmq.fullname" . }}-acl-cm 76 | {{- end }} 77 | 78 | {{/* 79 | broker-cm 80 | */}} 81 | {{- define "rocketmq.broker.configmap.fullname" -}} 82 | {{ include "rocketmq.fullname" . }}-broker-cm 83 | {{- end }} 84 | 85 | {{/* 86 | nameserver 87 | */}} 88 | {{- define "rocketmq.nameserver.fullname" -}} 89 | {{ include "rocketmq.fullname" . }}-nameserver 90 | {{- end }} 91 | 92 | {{/* 93 | proxy 94 | */}} 95 | {{- define "rocketmq.proxy.fullname" -}} 96 | {{ include "rocketmq.fullname" . }}-proxy 97 | {{- end }} 98 | 99 | {{/* 100 | dashboard 101 | */}} 102 | {{- define "rocketmq.dashboard.fullname" -}} 103 | {{ include "rocketmq.fullname" . }}-dashboard 104 | {{- end }} 105 | 106 | {{/* 107 | dashboard-cm 108 | */}} 109 | {{- define "rocketmq.dashboard.configmap.fullname" -}} 110 | {{ include "rocketmq.dashboard.fullname" . }}-cm 111 | {{- end }} 112 | 113 | {{/* 114 | dashboard 115 | */}} 116 | {{- define "rocketmq.dashboard.dataPath" -}} 117 | /tmp/rocketmq-console/data 118 | {{- end }} 119 | 120 | {{/* 121 | env NAMESRV_ADDR 122 | */}} 123 | {{- define "rocketmq.nameserver.addr" -}} 124 | {{- $nsFullName := include "rocketmq.nameserver.fullname" . -}} 125 | {{- $headlessDomain := printf "%s-headless.%s.svc" $nsFullName .Release.Namespace -}} 126 | {{- $address := list -}} 127 | {{- $replicaCount := int .Values.nameserver.replicaCount -}} 128 | {{- range $i := until $replicaCount -}} 129 | {{- $address = printf "%s-%d.%s:9876" $nsFullName $i $headlessDomain | append $address -}} 130 | {{- end -}} 131 | {{- join ";" $address -}} 132 | {{- end -}} 133 | 134 | 135 | {{/* 136 | controller 137 | */}} 138 | {{- define "rocketmq.controller.fullname" -}} 139 | {{ include "rocketmq.fullname" . }}-controller 140 | {{- end -}} 141 | 142 | {{/* 143 | controller 144 | */}} 145 | {{- define "rocketmq.enableControllerInNamesrv" -}} 146 | {{- if and .Values.controllerModeEnabled (not .Values.controller.enabled) -}} 147 | {{- print "true" -}} 148 | {{- else -}} 149 | {{- print "false" -}} 150 | {{- end -}} 151 | {{- end -}} 152 | 153 | {{/* 154 | rocketmq.broker.controllerAddr 155 | */}} 156 | {{- define "rocketmq.broker.controllerAddr" -}} 157 | {{- $address := list -}} 158 | {{- $fullName := include "rocketmq.controller.fullname" . -}} 159 | {{- $headlessDomain := printf "%s.%s.svc" $fullName .Release.Namespace -}} 160 | {{- $replicaCount := int .Values.controller.replicaCount -}} 161 | {{- if eq (include "rocketmq.enableControllerInNamesrv" .) "true" -}} 162 | {{- $fullName = include "rocketmq.nameserver.fullname" . -}} 163 | {{- $headlessDomain = printf "%s-headless.%s.svc" $fullName .Release.Namespace -}} 164 | {{- $replicaCount = int .Values.nameserver.replicaCount -}} 165 | {{- end -}} 166 | {{- range $i := until $replicaCount -}} 167 | {{- $address = printf "%s-%d.%s:9878" $fullName $i $headlessDomain | append $address -}} 168 | {{- end -}} 169 | {{- join ";" $address -}} 170 | {{- end -}} 171 | 172 | {{/* 173 | rocketmq.controller.dlegerPeers 174 | */}} 175 | {{- define "rocketmq.controller.dlegerPeers" -}} 176 | {{- $address := list -}} 177 | {{- $fullName := include "rocketmq.controller.fullname" . -}} 178 | {{- $headlessDomain := printf "%s.%s.svc" $fullName .Release.Namespace -}} 179 | {{- $replicaCount := int .Values.controller.replicaCount -}} 180 | {{- if eq (include "rocketmq.enableControllerInNamesrv" .) "true" -}} 181 | {{- $fullName = include "rocketmq.nameserver.fullname" . -}} 182 | {{- $headlessDomain = printf "%s-headless.%s.svc" $fullName .Release.Namespace -}} 183 | {{- $replicaCount = int .Values.nameserver.replicaCount -}} 184 | {{- end -}} 185 | {{- range $i := until $replicaCount -}} 186 | {{- $address = printf "n%d-%s-%d.%s:9878" $i $fullName $i $headlessDomain | append $address -}} 187 | {{- end -}} 188 | {{- join ";" $address -}} 189 | {{- end -}} 190 | 191 | {{/* 192 | rocketmq.noticeValues.controllerMode 193 | */}} 194 | {{- define "rocketmq.noticeValues.controllerMode" -}} 195 | {{ if .Values.controllerModeEnabled }} 196 | Notice about controller mode: 197 | Controller mode is an experimental feature, you can disable it (--set conrtollerModeEnabled=false) 198 | If you decide to enable controller mode, you need to note: 199 | {{- $brokerReplicaCount := .Values.broker.size.replica | int }} 200 | {{- if lt $brokerReplicaCount 2 }} 201 | The minimum number of replica is 1, and the recommended number of replica is 2 202 | Please set a valid number of replica (--set broker.size.replica=2) 203 | {{- end }} 204 | {{- if eq (include "rocketmq.enableControllerInNamesrv" .) "true" }} 205 | Controller roles require persistent storage (--set nameserver.persistence.enabled=true) 206 | {{- else }} 207 | Controller roles require persistent storage (--set controller.persistence.enabled=true) 208 | {{- end }} 209 | {{- end }} 210 | {{- end }} -------------------------------------------------------------------------------- /charts/rocketmq-cluster/templates/broker/acl-config.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.broker.aclConfigMapEnabled -}} 2 | apiVersion: v1 3 | kind: ConfigMap 4 | metadata: 5 | name: {{ include "rocketmq.acl.configmap.fullname" . }} 6 | data: 7 | plain_acl.yml: | 8 | {{- if .Values.broker.aclConfig }} 9 | {{- .Values.broker.aclConfig | nindent 4 }} 10 | {{- else }} 11 | globalWhiteRemoteAddresses: 12 | - '*' 13 | - 10.*.*.* 14 | - 192.168.*.* 15 | accounts: 16 | - accessKey: RocketMQ 17 | secretKey: 12345678 18 | whiteRemoteAddress: 19 | admin: false 20 | defaultTopicPerm: DENY 21 | defaultGroupPerm: SUB 22 | topicPerms: 23 | - topicA=DENY 24 | - topicB=PUB|SUB 25 | - topicC=SUB 26 | groupPerms: 27 | # the group should convert to retry topic 28 | - groupA=DENY 29 | - groupB=PUB|SUB 30 | - groupC=SUB 31 | - accessKey: rocketmq2 32 | secretKey: 12345678 33 | whiteRemoteAddress: 192.168.*.* 34 | # if it is admin, it could access all resources 35 | admin: true 36 | {{- end }} 37 | {{- end }} -------------------------------------------------------------------------------- /charts/rocketmq-cluster/templates/broker/statefulset.yaml: -------------------------------------------------------------------------------- 1 | {{- $fullName := include "rocketmq.fullname" . -}} 2 | {{- $clusterRole := "broker" -}} 3 | {{- $configmapName := include "rocketmq.configmap.fullname" . -}} 4 | {{- $masterSize := int .Values.broker.size.master -}} 5 | {{- $replicaCount := int (add1 .Values.broker.size.replica) -}} 6 | {{- $image := printf "%s:%s" .Values.image.repository .Values.image.tag -}} 7 | {{- range $brokerId := until $replicaCount -}} 8 | {{- $brokerFullName := printf "%s-broker-master" $fullName -}} 9 | {{- $maxHeapSize := $.Values.broker.master.jvm.maxHeapSize -}} 10 | {{- $javaOptsOverride := $.Values.broker.master.jvm.javaOptsOverride -}} 11 | {{- $brokerRole := $.Values.broker.master.brokerRole -}} 12 | {{- $brokerConfigKey := "broker-master.conf" -}} 13 | {{- if gt $brokerId 0 }} 14 | {{- $brokerFullName = printf "%s-broker-replica-id%d" $fullName $brokerId -}} 15 | {{- $maxHeapSize = $.Values.broker.replica.jvm.maxHeapSize -}} 16 | {{- $javaOptsOverride = $.Values.broker.replica.jvm.javaOptsOverride -}} 17 | {{- $brokerRole = "SLAVE" -}} 18 | {{- $brokerConfigKey = "broker-slave.conf" -}} 19 | {{- end }} 20 | --- 21 | apiVersion: apps/v1 22 | kind: StatefulSet 23 | metadata: 24 | name: {{ $brokerFullName }} 25 | labels: 26 | {{- include "rocketmq.labels" $ | nindent 4 }} 27 | {{- with $.Values.broker.labels }} 28 | {{- toYaml . | nindent 4 }} 29 | {{- end }} 30 | {{- with $.Values.broker.annotations }} 31 | annotations: 32 | {{- toYaml . | nindent 4 }} 33 | {{- end }} 34 | spec: 35 | minReadySeconds: {{ $.Values.broker.minReadySeconds | default 20 }} 36 | replicas: {{ $masterSize }} 37 | podManagementPolicy: {{ $.Values.broker.podManagementPolicy | default "OrderedReady" }} 38 | {{- with $.Values.broker.updateStrategy }} 39 | updateStrategy: 40 | {{- toYaml . | nindent 4 }} 41 | {{- end }} 42 | selector: 43 | matchLabels: 44 | {{- include "rocketmq.selectorLabels" $ | nindent 6 }} 45 | component: {{ $clusterRole }} 46 | broker: {{ $brokerFullName }} 47 | serviceName: "" 48 | template: 49 | metadata: 50 | annotations: 51 | checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") $ | sha256sum }} 52 | {{- with $.Values.broker.podAnnotations }} 53 | {{- toYaml . | nindent 8 }} 54 | {{- end }} 55 | labels: 56 | {{- include "rocketmq.selectorLabels" $ | nindent 8 }} 57 | component: {{ $clusterRole }} 58 | broker: {{ $brokerFullName }} 59 | {{- with $.Values.broker.podLabels }} 60 | {{- toYaml . | nindent 8 }} 61 | {{- end }} 62 | spec: 63 | {{- with $.Values.broker.imagePullSecrets | default $.Values.image.pullSecrets }} 64 | imagePullSecrets: 65 | {{- toYaml . | nindent 8 }} 66 | {{- end }} 67 | {{- with $.Values.broker.nodeSelector }} 68 | nodeSelector: 69 | {{- toYaml . | nindent 8 }} 70 | {{- end }} 71 | {{- if not $.Values.broker.affinityOverride }} 72 | affinity: 73 | podAntiAffinity: 74 | preferredDuringSchedulingIgnoredDuringExecution: 75 | - weight: 5 76 | podAffinityTerm: 77 | labelSelector: 78 | matchLabels: 79 | {{- include "rocketmq.selectorLabels" $ | nindent 18 }} 80 | component: broker 81 | topologyKey: kubernetes.io/hostname 82 | {{- else if $.Values.broker.affinityOverride }} 83 | affinity: 84 | {{- toYaml $.Values.broker.affinityOverride | nindent 8 }} 85 | {{- end }} 86 | {{- with $.Values.broker.tolerations }} 87 | tolerations: 88 | {{- toYaml . | nindent 8 }} 89 | {{- end }} 90 | securityContext: 91 | {{- if $.Values.broker.podSecurityContext }} 92 | {{- toYaml $.Values.broker.podSecurityContext | nindent 8 }} 93 | {{- else if $.Values.podSecurityContext }} 94 | {{- toYaml $.Values.podSecurityContext | nindent 8 }} 95 | {{- end }} 96 | containers: 97 | - name: broker 98 | image: {{ $image | quote }} 99 | imagePullPolicy: {{ $.Values.image.pullPolicy | default "IfNotPresent" }} 100 | {{- with $.Values.broker.containerSecurityContext }} 101 | securityContext: 102 | {{- toYaml . | nindent 10 }} 103 | {{- end }} 104 | command: 105 | - sh 106 | - /mq-server-start.sh 107 | env: 108 | - name: MY_POD_NAME 109 | valueFrom: 110 | fieldRef: 111 | fieldPath: metadata.name 112 | - name: ROCKETMQ_PROCESS_ROLE 113 | value: {{ $clusterRole }} 114 | - name: NAMESRV_ADDR 115 | value: {{ include "rocketmq.nameserver.addr" $ }} 116 | - name: ROCKETMQ_CONF_brokerId 117 | value: {{ $brokerId | quote }} 118 | - name: ROCKETMQ_CONF_brokerRole 119 | value: {{ $brokerRole | quote }} 120 | - name: ROCKETMQ_JAVA_OPTIONS_HEAP 121 | value: {{ printf "-Xms%s -Xmx%s" $maxHeapSize $maxHeapSize }} 122 | {{- if $javaOptsOverride }} 123 | - name: ROCKETMQ_JAVA_OPTIONS_OVERRIDE 124 | value: {{ $javaOptsOverride }} 125 | {{- end }} 126 | {{- if and $.Values.controllerModeEnabled }} 127 | - name: enableControllerMode 128 | value: "true" 129 | {{- end }} 130 | {{- with $.Values.broker.commonEnvs }} 131 | {{- toYaml . | nindent 8 }} 132 | {{- end }} 133 | {{- with $.Values.broker.extraEnvs }} 134 | {{- toYaml . | nindent 8 }} 135 | {{- end }} 136 | ports: 137 | - containerPort: 10909 138 | name: vip 139 | protocol: TCP 140 | - containerPort: 10911 141 | name: main 142 | protocol: TCP 143 | - containerPort: 10912 144 | name: ha 145 | protocol: TCP 146 | resources: 147 | {{- if eq $brokerId 0 }} 148 | {{- toYaml $.Values.broker.master.resources | nindent 10 }} 149 | {{- else }} 150 | {{- toYaml $.Values.broker.replica.resources | nindent 10 }} 151 | {{- end }} 152 | {{- with $.Values.broker.readinessProbe }} 153 | readinessProbe: 154 | {{- toYaml . | nindent 10 }} 155 | {{- end }} 156 | {{- with $.Values.broker.livenessProbe }} 157 | livenessProbe: 158 | {{- toYaml . | nindent 10 }} 159 | {{- end }} 160 | lifecycle: 161 | preStop: 162 | exec: 163 | command: ["sh", "-c", "sleep 5; ./mqshutdown broker"] 164 | volumeMounts: 165 | - mountPath: /home/rocketmq/logs 166 | name: broker-storage 167 | subPath: rocketmq-broker/logs 168 | - mountPath: /home/rocketmq/store 169 | name: broker-storage 170 | subPath: rocketmq-broker/store 171 | - mountPath: /etc/rocketmq/broker-base.conf 172 | name: broker-base-config 173 | subPath: broker-base.conf 174 | - mountPath: /mq-server-start.sh 175 | name: mq-server-start-sh 176 | subPath: mq-server-start.sh 177 | {{- if $.Values.broker.aclConfigMapEnabled }} 178 | - mountPath: /etc/rocketmq/acl 179 | name: acl-config 180 | {{- end }} 181 | {{- if $.Values.broker.hostNetwork }} 182 | hostNetwork: true 183 | dnsPolicy: ClusterFirstWithHostNet 184 | {{- else }} 185 | dnsPolicy: {{ $.Values.broker.dnsPolicy | default "ClusterFirst" }} 186 | {{- end }} 187 | terminationGracePeriodSeconds: {{ $.Values.broker.terminationGracePeriodSeconds | default 30 }} 188 | volumes: 189 | - configMap: 190 | items: 191 | - key: broker-base.conf 192 | path: broker-base.conf 193 | name: {{ $configmapName }} 194 | name: broker-base-config 195 | - configMap: 196 | items: 197 | - key: mq-server-start.sh 198 | path: mq-server-start.sh 199 | name: {{ $configmapName }} 200 | defaultMode: 0755 201 | name: mq-server-start-sh 202 | {{- if $.Values.broker.aclConfigMapEnabled }} 203 | - configMap: 204 | name: {{ include "rocketmq.acl.configmap.fullname" $ }} 205 | name: acl-config 206 | {{- end }} 207 | {{- if not $.Values.broker.persistence.enabled }} 208 | - name: broker-storage 209 | emptyDir: {} 210 | {{- else }} 211 | volumeClaimTemplates: 212 | - metadata: 213 | name: broker-storage 214 | {{- with $.Values.broker.persistence.annotations }} 215 | annotations: 216 | {{- toYaml . | nindent 10 }} 217 | {{- end }} 218 | spec: 219 | accessModes: 220 | {{- with $.Values.broker.persistence.accessModes }} 221 | {{- toYaml . | nindent 10 }} 222 | {{- else }} 223 | - ReadWriteOnce 224 | {{- end }} 225 | {{- with $.Values.broker.persistence.storageClass }} 226 | storageClassName: {{ if (eq "-" .) }}""{{ else }}{{ . }}{{ end }} 227 | {{- end }} 228 | resources: 229 | requests: 230 | storage: {{ $.Values.broker.persistence.size | quote }} 231 | {{- with $.Values.broker.persistence.selector }} 232 | selector: 233 | {{- toYaml . | nindent 10 }} 234 | {{- end }} 235 | {{- end }} 236 | {{- end }} -------------------------------------------------------------------------------- /charts/rocketmq-cluster/templates/configmap.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ include "rocketmq.configmap.fullname" . }} 5 | data: 6 | broker-base.conf: | 7 | {{- range $key, $value := .Values.broker.config }} 8 | {{ $key }} = {{ $value }} 9 | {{- end }} 10 | {{- if and .Values.controllerModeEnabled }} 11 | enableControllerMode = true 12 | controllerAddr = {{ include "rocketmq.broker.controllerAddr" . }} 13 | {{- end }} 14 | brokerClusterName = {{ .Values.clusterName }} 15 | controller-base.conf: | 16 | {{- range $key, $value := .Values.controller.config }} 17 | {{ $key }} = {{ $value }} 18 | {{- end }} 19 | {{- if eq (include "rocketmq.enableControllerInNamesrv" $) "true" }} 20 | enableControllerInNamesrv = true 21 | {{- end }} 22 | controllerDLegerPeers = {{ include "rocketmq.controller.dlegerPeers" $ }} 23 | controllerStorePath = /home/rocketmq/controller-data 24 | proxy.json: | 25 | { 26 | "rocketMQClusterName": "{{ .Values.clusterName }}" 27 | } 28 | mq-server-start.sh: | 29 | java -version 30 | if [ $? -ne 0 ]; then 31 | echo "[ERROR] Missing java runtime" 32 | exit 50 33 | fi 34 | if [ -z "${ROCKETMQ_HOME}" ]; then 35 | echo "[ERROR] Missing env ROCKETMQ_HOME" 36 | exit 50 37 | fi 38 | if [ -z "${ROCKETMQ_PROCESS_ROLE}" ]; then 39 | echo "[ERROR] Missing env ROCKETMQ_PROCESS_ROLE" 40 | exit 50 41 | fi 42 | 43 | export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java)))) 44 | export CLASSPATH=".:${ROCKETMQ_HOME}/conf:${ROCKETMQ_HOME}/lib/*:${CLASSPATH}" 45 | 46 | JAVA_OPT="${JAVA_OPT} -server" 47 | if [ -n "$ROCKETMQ_JAVA_OPTIONS_OVERRIDE" ]; then 48 | JAVA_OPT="${JAVA_OPT} ${ROCKETMQ_JAVA_OPTIONS_OVERRIDE}" 49 | else 50 | JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC" 51 | JAVA_OPT="${JAVA_OPT} ${ROCKETMQ_JAVA_OPTIONS_EXT}" 52 | JAVA_OPT="${JAVA_OPT} ${ROCKETMQ_JAVA_OPTIONS_HEAP}" 53 | fi 54 | JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}" 55 | 56 | export BROKER_CONF_FILE="$HOME/broker.conf" 57 | export CONTROLLER_CONF_FILE="$HOME/controller.conf" 58 | 59 | update_broker_conf() { 60 | local key=$1 61 | local value=$2 62 | sed -i "/^${key} *=/d" ${BROKER_CONF_FILE} 63 | echo "${key} = ${value}" >> ${BROKER_CONF_FILE} 64 | } 65 | 66 | init_broker_role() { 67 | if [ "${ROCKETMQ_CONF_brokerRole}" = "SLAVE" ]; then 68 | update_broker_conf "brokerRole" "SLAVE" 69 | elif [ "${ROCKETMQ_CONF_brokerRole}" = "SYNC_MASTER" ]; then 70 | update_broker_conf "brokerRole" "SYNC_MASTER" 71 | else 72 | update_broker_conf "brokerRole" "ASYNC_MASTER" 73 | fi 74 | if echo "${ROCKETMQ_CONF_brokerId}" | grep -E '^[0-9]+$'; then 75 | update_broker_conf "brokerId" "${ROCKETMQ_CONF_brokerId}" 76 | fi 77 | } 78 | 79 | init_broker_conf() { 80 | rm -f ${BROKER_CONF_FILE} 81 | cp /etc/rocketmq/broker-base.conf ${BROKER_CONF_FILE} 82 | echo "" >> ${BROKER_CONF_FILE} 83 | echo "# generated config" >> ${BROKER_CONF_FILE} 84 | broker_name_seq=${HOSTNAME##*-} 85 | if [ -n "$MY_POD_NAME" ]; then 86 | broker_name_seq=${MY_POD_NAME##*-} 87 | fi 88 | update_broker_conf "brokerName" "broker-g${broker_name_seq}" 89 | if [ "$enableControllerMode" != "true" ]; then 90 | init_broker_role 91 | fi 92 | echo "[exec] cat ${BROKER_CONF_FILE}" 93 | cat ${BROKER_CONF_FILE} 94 | } 95 | 96 | init_acl_conf() { 97 | if [ -f /etc/rocketmq/acl/plain_acl.yml ]; then 98 | rm -f "${ROCKETMQ_HOME}/conf/plain_acl.yml" 99 | ln -sf "/etc/rocketmq/acl" "${ROCKETMQ_HOME}/conf/acl" 100 | fi 101 | } 102 | 103 | init_controller_conf() { 104 | rm -f ${CONTROLLER_CONF_FILE} 105 | cp /etc/rocketmq/base-cm/controller-base.conf ${CONTROLLER_CONF_FILE} 106 | controllerDLegerSelfId="n${HOSTNAME##*-}" 107 | if [ -n "$MY_POD_NAME" ]; then 108 | controllerDLegerSelfId="n${MY_POD_NAME##*-}" 109 | fi 110 | sed -i "/^controllerDLegerSelfId *=/d" ${CONTROLLER_CONF_FILE} 111 | echo "controllerDLegerSelfId = ${controllerDLegerSelfId}" >> ${CONTROLLER_CONF_FILE} 112 | cat ${CONTROLLER_CONF_FILE} 113 | } 114 | 115 | if [ "$ROCKETMQ_PROCESS_ROLE" = "broker" ]; then 116 | init_broker_conf 117 | init_acl_conf 118 | set -x 119 | java ${JAVA_OPT} org.apache.rocketmq.broker.BrokerStartup -c ${BROKER_CONF_FILE} 120 | elif [ "$ROCKETMQ_PROCESS_ROLE" = "controller" ]; then 121 | init_controller_conf 122 | set -x 123 | java ${JAVA_OPT} org.apache.rocketmq.controller.ControllerStartup -c ${CONTROLLER_CONF_FILE} 124 | elif [ "$ROCKETMQ_PROCESS_ROLE" = "nameserver" ] || [ "$ROCKETMQ_PROCESS_ROLE" = "mqnamesrv" ]; then 125 | set -x 126 | if [ "$enableControllerInNamesrv" = "true" ]; then 127 | init_controller_conf 128 | java ${JAVA_OPT} org.apache.rocketmq.namesrv.NamesrvStartup -c ${CONTROLLER_CONF_FILE} 129 | else 130 | java ${JAVA_OPT} org.apache.rocketmq.namesrv.NamesrvStartup 131 | fi 132 | elif [ "$ROCKETMQ_PROCESS_ROLE" = "proxy" ]; then 133 | set -x 134 | if [ -f $RMQ_PROXY_CONFIG_PATH ]; then 135 | java ${JAVA_OPT} org.apache.rocketmq.proxy.ProxyStartup -pc $RMQ_PROXY_CONFIG_PATH 136 | else 137 | java ${JAVA_OPT} org.apache.rocketmq.proxy.ProxyStartup 138 | fi 139 | else 140 | echo "[ERROR] Missing env ROCKETMQ_PROCESS_ROLE" 141 | exit 50 142 | fi -------------------------------------------------------------------------------- /charts/rocketmq-cluster/templates/controller/statefulset.yaml: -------------------------------------------------------------------------------- 1 | {{- with .Values.controller -}} 2 | {{- if and .enabled -}} 3 | {{- $clusterRole := "controller" -}} 4 | {{- $image := printf "%s:%s" $.Values.image.repository $.Values.image.tag }} 5 | apiVersion: apps/v1 6 | kind: StatefulSet 7 | metadata: 8 | name: {{ include "rocketmq.controller.fullname" $ | quote }} 9 | labels: 10 | {{- include "rocketmq.labels" $ | nindent 4 }} 11 | {{- with .labels }} 12 | {{- toYaml . | nindent 4 }} 13 | {{- end }} 14 | {{- with .annotations }} 15 | annotations: 16 | {{- toYaml . | nindent 4 }} 17 | {{- end }} 18 | spec: 19 | minReadySeconds: {{ .minReadySeconds | default 20 }} 20 | replicas: {{ .replicaCount }} 21 | podManagementPolicy: {{ .podManagementPolicy | default "Parallel" }} 22 | {{- with .updateStrategy }} 23 | updateStrategy: 24 | {{- toYaml . | nindent 4 }} 25 | {{- end }} 26 | selector: 27 | matchLabels: 28 | {{- include "rocketmq.selectorLabels" $ | nindent 6 }} 29 | component: {{ $clusterRole }} 30 | serviceName: {{ include "rocketmq.controller.fullname" $ | quote }} 31 | template: 32 | metadata: 33 | annotations: 34 | checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") $ | sha256sum }} 35 | {{- with .podAnnotations }} 36 | {{- toYaml . | nindent 8 }} 37 | {{- end }} 38 | labels: 39 | {{- include "rocketmq.selectorLabels" $ | nindent 8 }} 40 | component: {{ $clusterRole }} 41 | {{- with .podLabels }} 42 | {{- toYaml . | nindent 8 }} 43 | {{- end }} 44 | spec: 45 | {{- with .imagePullSecrets | default $.Values.image.pullSecrets }} 46 | imagePullSecrets: 47 | {{- toYaml . | nindent 8 }} 48 | {{- end }} 49 | {{- with .nodeSelector }} 50 | nodeSelector: 51 | {{- toYaml . | nindent 8 }} 52 | {{- end }} 53 | {{- if not .affinityOverride }} 54 | affinity: 55 | podAntiAffinity: 56 | preferredDuringSchedulingIgnoredDuringExecution: 57 | - weight: 5 58 | podAffinityTerm: 59 | labelSelector: 60 | matchLabels: 61 | {{- include "rocketmq.selectorLabels" $ | nindent 18 }} 62 | component: nameserver 63 | topologyKey: kubernetes.io/hostname 64 | {{- else if .affinityOverride }} 65 | affinity: 66 | {{- toYaml .affinityOverride | nindent 8 }} 67 | {{- end }} 68 | {{- with .tolerations }} 69 | tolerations: 70 | {{- toYaml . | nindent 8 }} 71 | {{- end }} 72 | securityContext: 73 | {{- if .podSecurityContext }} 74 | {{- toYaml .podSecurityContext | nindent 8 }} 75 | {{- else if $.Values.podSecurityContext }} 76 | {{- toYaml $.Values.podSecurityContext | nindent 8 }} 77 | {{- end }} 78 | containers: 79 | - name: nameserver 80 | image: {{ $image | quote }} 81 | imagePullPolicy: {{ $.Values.image.pullPolicy | default "IfNotPresent" }} 82 | {{- with .containerSecurityContext }} 83 | securityContext: 84 | {{- toYaml . | nindent 10 }} 85 | {{- end }} 86 | command: 87 | - sh 88 | - /mq-server-start.sh 89 | env: 90 | - name: ROCKETMQ_PROCESS_ROLE 91 | value: {{ $clusterRole }} 92 | - name: CONTROLLER_CONF_FILE 93 | value: /etc/rocketmq/controller.conf 94 | {{- if .jvm }} 95 | {{- with .jvm.maxHeapSize }} 96 | - name: ROCKETMQ_JAVA_OPTIONS_HEAP 97 | value: {{ printf "-Xms%s -Xmx%s" . . | quote }} 98 | {{- end }} 99 | {{- with .jvm.javaOptsOverride }} 100 | - name: ROCKETMQ_JAVA_OPTIONS_OVERRIDE 101 | value: {{ . | quote }} 102 | {{- end }} 103 | {{- end }} 104 | ports: 105 | - containerPort: 9878 106 | name: main 107 | protocol: TCP 108 | resources: 109 | {{- toYaml .resources | nindent 10 }} 110 | {{- with .readinessProbe }} 111 | readinessProbe: 112 | {{- toYaml . | nindent 10 }} 113 | {{- end }} 114 | {{- with .livenessProbe }} 115 | livenessProbe: 116 | {{- toYaml . | nindent 10 }} 117 | {{- end }} 118 | lifecycle: 119 | preStop: 120 | exec: 121 | command: ["sh", "-c", "sleep 5; ./mqshutdown controller"] 122 | volumeMounts: 123 | - mountPath: /mq-server-start.sh 124 | name: mq-server-start-sh 125 | subPath: mq-server-start.sh 126 | - mountPath: /etc/rocketmq/base-cm 127 | name: base-cm 128 | - mountPath: /home/rocketmq/controller-data 129 | name: data 130 | subPath: controller-data 131 | - mountPath: /home/rocketmq/logs 132 | name: data 133 | subPath: logs 134 | dnsPolicy: ClusterFirst 135 | terminationGracePeriodSeconds: {{ .terminationGracePeriodSeconds | default 15 }} 136 | volumes: 137 | - configMap: 138 | items: 139 | - key: mq-server-start.sh 140 | path: mq-server-start.sh 141 | name: {{ include "rocketmq.configmap.fullname" $ }} 142 | defaultMode: 0755 143 | name: mq-server-start-sh 144 | - configMap: 145 | name: {{ include "rocketmq.configmap.fullname" $ }} 146 | name: base-cm 147 | {{- if not .persistence.enabled }} 148 | - name: data 149 | emptyDir: {} 150 | {{- else }} 151 | volumeClaimTemplates: 152 | - metadata: 153 | name: data 154 | {{- with .persistence.annotations }} 155 | annotations: 156 | {{- toYaml . | nindent 10 }} 157 | {{- end }} 158 | spec: 159 | accessModes: 160 | {{- with .persistence.accessModes }} 161 | {{- toYaml . | nindent 10 }} 162 | {{- else }} 163 | - ReadWriteOnce 164 | {{- end }} 165 | {{- with .persistence.storageClass }} 166 | storageClassName: {{ if (eq "-" .) }}""{{ else }}{{ . }}{{ end }} 167 | {{- end }} 168 | resources: 169 | requests: 170 | storage: {{ .persistence.size | quote }} 171 | {{- with .persistence.selector }} 172 | selector: 173 | {{- toYaml . | nindent 10 }} 174 | {{- end }} 175 | {{- end }} 176 | {{- end }} 177 | {{- end }} -------------------------------------------------------------------------------- /charts/rocketmq-cluster/templates/controller/svc-headless.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.controller.enabled -}} 2 | {{- with .Values.controller.service -}} 3 | apiVersion: v1 4 | kind: Service 5 | metadata: 6 | name: {{ include "rocketmq.controller.fullname" $ }} 7 | labels: 8 | {{- include "rocketmq.labels" $ | nindent 4 }} 9 | component: controller 10 | {{- with .labels }} 11 | {{- toYaml . | nindent 4 }} 12 | {{- end }} 13 | {{- with .annotations }} 14 | annotations: 15 | {{- toYaml . | nindent 4 }} 16 | {{- end }} 17 | spec: 18 | clusterIP: "None" 19 | publishNotReadyAddresses: true 20 | ports: 21 | - port: 9878 22 | protocol: TCP 23 | targetPort: 9878 24 | selector: 25 | {{- include "rocketmq.selectorLabels" $ | nindent 4 }} 26 | component: controller 27 | {{- end }} 28 | {{- end }} -------------------------------------------------------------------------------- /charts/rocketmq-cluster/templates/dashboard/configmap.yaml: -------------------------------------------------------------------------------- 1 | {{- with .Values.dashboard }} 2 | {{- if and .enabled .auth .auth.enabled -}} 3 | apiVersion: v1 4 | kind: ConfigMap 5 | metadata: 6 | name: {{ include "rocketmq.dashboard.configmap.fullname" $ | quote }} 7 | data: 8 | {{- if .auth.users }} 9 | users.properties: | 10 | {{- range .auth.users }} 11 | {{ .name }}={{ .password }}{{ if .isAdmin }},1{{ end }} 12 | {{- end }} 13 | {{- else }} 14 | users.properties: | 15 | admin=admin,1 16 | {{- end }} 17 | {{- end }} 18 | {{- end }} -------------------------------------------------------------------------------- /charts/rocketmq-cluster/templates/dashboard/deployment.yaml: -------------------------------------------------------------------------------- 1 | {{- with .Values.dashboard -}} 2 | {{- if .enabled -}} 3 | apiVersion: apps/v1 4 | kind: Deployment 5 | metadata: 6 | name: {{ include "rocketmq.dashboard.fullname" $ | quote }} 7 | labels: 8 | {{- include "rocketmq.labels" $ | nindent 4 }} 9 | {{- with .labels }} 10 | {{- toYaml . | nindent 4 }} 11 | {{- end }} 12 | {{- with .annotations }} 13 | annotations: 14 | {{- toYaml . | nindent 4 }} 15 | {{- end }} 16 | spec: 17 | replicas: {{ .replicaCount }} 18 | selector: 19 | matchLabels: 20 | {{- include "rocketmq.selectorLabels" $ | nindent 6 }} 21 | component: dashboard 22 | template: 23 | metadata: 24 | annotations: 25 | checksum/config: {{ include (print $.Template.BasePath "/dashboard/configmap.yaml") $ | sha256sum }} 26 | {{- with .podAnnotations }} 27 | {{- toYaml . | nindent 8 }} 28 | {{- end }} 29 | labels: 30 | {{- include "rocketmq.selectorLabels" $ | nindent 8 }} 31 | component: dashboard 32 | {{- with .podLabels}} 33 | {{- toYaml . | nindent 8 }} 34 | {{- end }} 35 | spec: 36 | {{- with .imagePullSecrets | default $.Values.image.pullSecrets }} 37 | imagePullSecrets: 38 | {{- toYaml . | nindent 8 }} 39 | {{- end }} 40 | containers: 41 | - name: dashboard 42 | image: {{ printf "%s:%s" .image.repository .image.tag | quote }} 43 | imagePullPolicy: {{ .image.pullPolicy | default "IfNotPresent" }} 44 | env: 45 | - name: JAVA_OPTS 46 | {{- $namesrvAddr := printf "%s.%s.svc:9876" (include "rocketmq.nameserver.fullname" $) $.Release.Namespace }} 47 | value: {{ printf "-XX:MaxHeapSize=%s -Drocketmq.namesrv.addr=%s" .jvm.maxHeapSize $namesrvAddr }} 48 | {{- if .auth.enabled }} 49 | - name: rocketmq.config.loginRequired 50 | value: "true" 51 | - name: rocketmq.config.dataPath 52 | value: {{ include "rocketmq.dashboard.dataPath" $ }} 53 | {{- end }} 54 | ports: 55 | - name: http 56 | containerPort: 8080 57 | protocol: TCP 58 | resources: 59 | {{- toYaml .resources | nindent 10 }} 60 | {{- with .livenessProbe }} 61 | livenessProbe: 62 | {{- toYaml . | nindent 12 }} 63 | {{- end }} 64 | {{- with .readinessProbe }} 65 | readinessProbe: 66 | {{- toYaml . | nindent 12 }} 67 | {{- end }} 68 | {{- if .auth.enabled }} 69 | volumeMounts: 70 | - mountPath: "{{ include "rocketmq.dashboard.dataPath" $ }}/users.properties" 71 | name: dashboard-cm 72 | subPath: users.properties 73 | {{- end }} 74 | terminationGracePeriodSeconds: {{ .terminationGracePeriodSeconds | default 5 }} 75 | {{- if .auth.enabled }} 76 | volumes: 77 | - configMap: 78 | items: 79 | - key: users.properties 80 | path: users.properties 81 | name: {{ include "rocketmq.dashboard.configmap.fullname" $ }} 82 | name: dashboard-cm 83 | {{- end }} 84 | {{- end }} 85 | {{- end }} -------------------------------------------------------------------------------- /charts/rocketmq-cluster/templates/dashboard/ingress.yaml: -------------------------------------------------------------------------------- 1 | {{- with .Values.dashboard.ingress -}} 2 | {{- if and .enabled $.Values.dashboard.enabled -}} 3 | {{- $fullName := include "rocketmq.dashboard.fullname" $ -}} 4 | {{- if and .className (not (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion)) }} 5 | {{- if not (hasKey .annotations "kubernetes.io/ingress.class") }} 6 | {{- $_ := set .annotations "kubernetes.io/ingress.class" .className}} 7 | {{- end }} 8 | {{- end }} 9 | {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion -}} 10 | apiVersion: networking.k8s.io/v1 11 | {{- else if semverCompare ">=1.14-0" $.Capabilities.KubeVersion.GitVersion -}} 12 | apiVersion: networking.k8s.io/v1beta1 13 | {{- else -}} 14 | apiVersion: extensions/v1beta1 15 | {{- end }} 16 | kind: Ingress 17 | metadata: 18 | name: {{ $fullName }} 19 | labels: 20 | {{- include "rocketmq.labels" $ | nindent 4 }} 21 | {{- with .annotations }} 22 | annotations: 23 | {{- toYaml . | nindent 4 }} 24 | {{- end }} 25 | spec: 26 | {{- if and .className (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} 27 | ingressClassName: {{ .className }} 28 | {{- end }} 29 | {{- if .tls }} 30 | tls: 31 | {{- range .tls }} 32 | - hosts: 33 | {{- range .hosts }} 34 | - {{ . | quote }} 35 | {{- end }} 36 | secretName: {{ .secretName }} 37 | {{- end }} 38 | {{- end }} 39 | rules: 40 | {{- range .hosts }} 41 | - host: {{ .host | quote }} 42 | http: 43 | paths: 44 | - path: / 45 | pathType: Prefix 46 | backend: 47 | {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} 48 | service: 49 | name: {{ $fullName }} 50 | port: 51 | number: 8080 52 | {{- else }} 53 | serviceName: {{ $fullName }} 54 | servicePort: 8080 55 | {{- end }} 56 | {{- end }} 57 | {{- end }} 58 | {{- end }} -------------------------------------------------------------------------------- /charts/rocketmq-cluster/templates/dashboard/service.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.dashboard.enabled -}} 2 | {{- with .Values.dashboard.service -}} 3 | apiVersion: v1 4 | kind: Service 5 | metadata: 6 | name: {{ include "rocketmq.dashboard.fullname" $ }} 7 | labels: 8 | {{- include "rocketmq.labels" $ | nindent 4 }} 9 | component: dashboard 10 | {{- with .labels }} 11 | {{- toYaml . | nindent 4 }} 12 | {{- end }} 13 | {{- with .annotations }} 14 | annotations: 15 | {{- toYaml . | nindent 4 }} 16 | {{- end }} 17 | spec: 18 | ports: 19 | - port: 8080 20 | protocol: TCP 21 | targetPort: 8080 22 | {{- if and (eq .type "NodePort") .nodePort }} 23 | nodePort: {{ .nodePort }} 24 | {{- end }} 25 | {{- with .additionalPorts }} 26 | {{- toYaml . | nindent 2 }} 27 | {{- end }} 28 | selector: 29 | {{- include "rocketmq.selectorLabels" $ | nindent 4 }} 30 | component: dashboard 31 | {{- with .type }} 32 | type: {{ . | quote }} 33 | {{- end }} 34 | {{- with .clusterIP }} 35 | clusterIP: {{ . | quote }} 36 | {{- end }} 37 | {{- if and (eq "LoadBalancer" .type) .loadBalancerIP }} 38 | loadBalancerIP: {{ .loadBalancerIP | quote }} 39 | {{- end }} 40 | {{- with .loadBalancerClass }} 41 | loadBalancerClass: {{ . | quote }} 42 | {{- end }} 43 | {{- with .externalTrafficPolicy }} 44 | externalTrafficPolicy: {{ . | quote }} 45 | {{- end }} 46 | {{- with .sessionAffinity }} 47 | sessionAffinity: {{ . | quote }} 48 | {{- end }} 49 | {{- end }} 50 | {{- end }} -------------------------------------------------------------------------------- /charts/rocketmq-cluster/templates/nameserver/statefulset.yaml: -------------------------------------------------------------------------------- 1 | {{- with .Values.nameserver -}} 2 | {{- $clusterRole := "nameserver" -}} 3 | {{- $configmapName := include "rocketmq.configmap.fullname" $ -}} 4 | {{- $image := printf "%s:%s" $.Values.image.repository $.Values.image.tag }} 5 | apiVersion: apps/v1 6 | kind: StatefulSet 7 | metadata: 8 | name: {{ include "rocketmq.nameserver.fullname" $ | quote }} 9 | labels: 10 | {{- include "rocketmq.labels" $ | nindent 4 }} 11 | {{- with .labels }} 12 | {{- toYaml . | nindent 4 }} 13 | {{- end }} 14 | {{- with .annotations }} 15 | annotations: 16 | {{- toYaml . | nindent 4 }} 17 | {{- end }} 18 | spec: 19 | minReadySeconds: {{ .minReadySeconds | default 20 }} 20 | replicas: {{ .replicaCount }} 21 | podManagementPolicy: {{ .podManagementPolicy | default "Parallel" }} 22 | {{- with .updateStrategy }} 23 | updateStrategy: 24 | {{- toYaml . | nindent 4 }} 25 | {{- end }} 26 | selector: 27 | matchLabels: 28 | {{- include "rocketmq.selectorLabels" $ | nindent 6 }} 29 | component: {{ $clusterRole }} 30 | serviceName: "{{ include "rocketmq.nameserver.fullname" $ }}-headless" 31 | template: 32 | metadata: 33 | annotations: 34 | checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") $ | sha256sum }} 35 | {{- with .podAnnotations }} 36 | {{- toYaml . | nindent 8 }} 37 | {{- end }} 38 | labels: 39 | {{- include "rocketmq.selectorLabels" $ | nindent 8 }} 40 | component: {{ $clusterRole }} 41 | {{- with .podLables }} 42 | {{- toYaml . | nindent 8 }} 43 | {{- end }} 44 | spec: 45 | {{- with .imagePullSecrets | default $.Values.image.pullSecrets }} 46 | imagePullSecrets: 47 | {{- toYaml . | nindent 8 }} 48 | {{- end }} 49 | {{- with .nodeSelector }} 50 | nodeSelector: 51 | {{- toYaml . | nindent 8 }} 52 | {{- end }} 53 | {{- if not .affinityOverride }} 54 | affinity: 55 | podAntiAffinity: 56 | preferredDuringSchedulingIgnoredDuringExecution: 57 | - weight: 5 58 | podAffinityTerm: 59 | labelSelector: 60 | matchLabels: 61 | {{- include "rocketmq.selectorLabels" $ | nindent 18 }} 62 | component: nameserver 63 | topologyKey: kubernetes.io/hostname 64 | {{- else if .affinityOverride }} 65 | affinity: 66 | {{- toYaml .affinityOverride | nindent 8 }} 67 | {{- end }} 68 | {{- with .tolerations }} 69 | tolerations: 70 | {{- toYaml . | nindent 8 }} 71 | {{- end }} 72 | securityContext: 73 | {{- if .podSecurityContext }} 74 | {{- toYaml .podSecurityContext | nindent 8 }} 75 | {{- else if $.Values.podSecurityContext }} 76 | {{- toYaml $.Values.podSecurityContext | nindent 8 }} 77 | {{- end }} 78 | containers: 79 | - name: nameserver 80 | image: {{ $image | quote }} 81 | imagePullPolicy: {{ $.Values.image.pullPolicy | default "IfNotPresent" }} 82 | {{- with .containerSecurityContext }} 83 | securityContext: 84 | {{- toYaml . | nindent 10 }} 85 | {{- end }} 86 | command: 87 | - sh 88 | - /mq-server-start.sh 89 | env: 90 | - name: ROCKETMQ_PROCESS_ROLE 91 | value: {{ $clusterRole }} 92 | - name: ROCKETMQ_JAVA_OPTIONS_HEAP 93 | {{- $maxHeapSize := .jvm.maxHeapSize }} 94 | value: {{ printf "-Xms%s -Xmx%s" $maxHeapSize $maxHeapSize }} 95 | {{- if and .jvm .jvm.javaOptsOverride }} 96 | - name: ROCKETMQ_JAVA_OPTIONS_OVERRIDE 97 | value: {{ .jvm.javaOptsOverride | quote }} 98 | {{- end }} 99 | {{- if eq (include "rocketmq.enableControllerInNamesrv" $) "true" }} 100 | - name: enableControllerInNamesrv 101 | value: "true" 102 | {{- end }} 103 | ports: 104 | - containerPort: 9876 105 | name: main 106 | protocol: TCP 107 | resources: 108 | {{- toYaml .resources | nindent 10 }} 109 | {{- with .readinessProbe }} 110 | readinessProbe: 111 | {{- toYaml . | nindent 10 }} 112 | {{- end }} 113 | {{- with .livenessProbe }} 114 | livenessProbe: 115 | {{- toYaml . | nindent 10 }} 116 | {{- end }} 117 | lifecycle: 118 | preStop: 119 | exec: 120 | command: ["sh", "-c", "sleep 5; ./mqshutdown namesrv"] 121 | volumeMounts: 122 | - mountPath: /mq-server-start.sh 123 | name: mq-server-start-sh 124 | subPath: mq-server-start.sh 125 | - mountPath: /etc/rocketmq/base-cm 126 | name: base-cm 127 | - mountPath: /home/rocketmq/logs 128 | name: nameserver-storage 129 | subPath: logs 130 | {{- if eq (include "rocketmq.enableControllerInNamesrv" $) "true" }} 131 | - mountPath: /home/rocketmq/controller-data 132 | name: nameserver-storage 133 | subPath: controller-data 134 | {{- end }} 135 | dnsPolicy: ClusterFirst 136 | terminationGracePeriodSeconds: {{ .terminationGracePeriodSeconds | default 15 }} 137 | volumes: 138 | - configMap: 139 | items: 140 | - key: mq-server-start.sh 141 | path: mq-server-start.sh 142 | name: {{ $configmapName }} 143 | defaultMode: 0755 144 | name: mq-server-start-sh 145 | - configMap: 146 | name: {{ include "rocketmq.configmap.fullname" $ }} 147 | name: base-cm 148 | {{- if not .persistence.enabled }} 149 | - name: nameserver-storage 150 | emptyDir: {} 151 | {{- else }} 152 | volumeClaimTemplates: 153 | - metadata: 154 | name: nameserver-storage 155 | {{- with .persistence.annotations }} 156 | annotations: 157 | {{- toYaml . | nindent 10 }} 158 | {{- end }} 159 | spec: 160 | accessModes: 161 | {{- with .persistence.accessModes }} 162 | {{- toYaml . | nindent 10 }} 163 | {{- else }} 164 | - ReadWriteOnce 165 | {{- end }} 166 | {{- with .persistence.storageClass }} 167 | storageClassName: {{ if (eq "-" .) }}""{{ else }}{{ . }}{{ end }} 168 | {{- end }} 169 | resources: 170 | requests: 171 | storage: {{ .persistence.size | quote }} 172 | {{- with .persistence.selector }} 173 | selector: 174 | {{- toYaml . | nindent 10 }} 175 | {{- end }} 176 | {{- end }} 177 | {{- end }} -------------------------------------------------------------------------------- /charts/rocketmq-cluster/templates/nameserver/svc-headless.yaml: -------------------------------------------------------------------------------- 1 | {{- $headless := .Values.nameserver.headlessService | default dict -}} 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | name: "{{ include "rocketmq.nameserver.fullname" $ }}-headless" 6 | labels: 7 | {{- include "rocketmq.labels" $ | nindent 4 }} 8 | component: nameserver 9 | {{- with $headless.annotations }} 10 | annotations: 11 | {{- toYaml . | nindent 4 }} 12 | {{- end }} 13 | spec: 14 | clusterIP: "None" 15 | publishNotReadyAddresses: true 16 | ports: 17 | - port: 9876 18 | protocol: TCP 19 | targetPort: 9876 20 | {{- with $headless.additionalPorts }} 21 | {{- toYaml . | nindent 2 }} 22 | {{- end }} 23 | selector: 24 | {{- include "rocketmq.selectorLabels" $ | nindent 4 }} 25 | component: nameserver 26 | -------------------------------------------------------------------------------- /charts/rocketmq-cluster/templates/nameserver/svc.yaml: -------------------------------------------------------------------------------- 1 | {{- with .Values.nameserver.service -}} 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | name: {{ include "rocketmq.nameserver.fullname" $ }} 6 | labels: 7 | {{- include "rocketmq.labels" $ | nindent 4 }} 8 | component: nameserver 9 | {{- with .labels }} 10 | {{- toYaml . | nindent 4 }} 11 | {{- end }} 12 | {{- with .annotations }} 13 | annotations: 14 | {{- toYaml . | nindent 4 }} 15 | {{- end }} 16 | spec: 17 | ports: 18 | - port: 9876 19 | protocol: TCP 20 | targetPort: 9876 21 | {{- if and (eq .type "NodePort") .nodePort }} 22 | nodePort: {{ .nodePort }} 23 | {{- end }} 24 | {{- with .additionalPorts }} 25 | {{- toYaml . | nindent 2 }} 26 | {{- end }} 27 | selector: 28 | {{- include "rocketmq.selectorLabels" $ | nindent 4 }} 29 | component: nameserver 30 | {{- with .type }} 31 | type: {{ . | quote }} 32 | {{- end }} 33 | {{- with .clusterIP }} 34 | clusterIP: {{ . | quote }} 35 | {{- end }} 36 | {{- if and (eq "LoadBalancer" .type) .loadBalancerIP }} 37 | loadBalancerIP: {{ .loadBalancerIP | quote }} 38 | {{- end }} 39 | {{- with .loadBalancerClass }} 40 | loadBalancerClass: {{ . | quote }} 41 | {{- end }} 42 | {{- with .externalTrafficPolicy }} 43 | externalTrafficPolicy: {{ . | quote }} 44 | {{- end }} 45 | {{- with .sessionAffinity }} 46 | sessionAffinity: {{ . | quote }} 47 | {{- end }} 48 | {{- end }} -------------------------------------------------------------------------------- /charts/rocketmq-cluster/templates/proxy/deployment.yaml: -------------------------------------------------------------------------------- 1 | {{- with .Values.proxy -}} 2 | {{- if .enabled -}} 3 | {{- $clusterRole := "proxy" -}} 4 | {{- $configmapName := include "rocketmq.configmap.fullname" $ -}} 5 | {{- $image := printf "%s:%s" $.Values.image.repository $.Values.image.tag }} 6 | apiVersion: apps/v1 7 | kind: Deployment 8 | metadata: 9 | name: {{ include "rocketmq.proxy.fullname" $ | quote }} 10 | labels: 11 | {{- include "rocketmq.labels" $ | nindent 4 }} 12 | {{- with .labels }} 13 | {{- toYaml . | nindent 4 }} 14 | {{- end }} 15 | {{- with .annotations }} 16 | annotations: 17 | {{- toYaml . | nindent 4 }} 18 | {{- end }} 19 | spec: 20 | minReadySeconds: {{ .minReadySeconds | default 20 }} 21 | replicas: {{ .replicaCount }} 22 | {{- with .updateStrategy }} 23 | updateStrategy: 24 | {{- toYaml . | nindent 4 }} 25 | {{- end }} 26 | selector: 27 | matchLabels: 28 | {{- include "rocketmq.selectorLabels" $ | nindent 6 }} 29 | component: {{ $clusterRole }} 30 | template: 31 | metadata: 32 | annotations: 33 | checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") $ | sha256sum }} 34 | {{- with .podAnnotations }} 35 | {{- toYaml . | nindent 8 }} 36 | {{- end }} 37 | labels: 38 | {{- include "rocketmq.selectorLabels" $ | nindent 8 }} 39 | component: {{ $clusterRole }} 40 | {{- with .podLabels }} 41 | {{- toYaml . | nindent 8 }} 42 | {{- end }} 43 | spec: 44 | {{- with .imagePullSecrets | default $.Values.image.pullSecrets }} 45 | imagePullSecrets: 46 | {{- toYaml . | nindent 8 }} 47 | {{- end }} 48 | {{- with .nodeSelector }} 49 | nodeSelector: 50 | {{- toYaml . | nindent 8 }} 51 | {{- end }} 52 | {{- if not .affinityOverride }} 53 | affinity: 54 | podAntiAffinity: 55 | preferredDuringSchedulingIgnoredDuringExecution: 56 | - weight: 5 57 | podAffinityTerm: 58 | labelSelector: 59 | matchLabels: 60 | {{- include "rocketmq.selectorLabels" $ | nindent 18 }} 61 | component: proxy 62 | topologyKey: kubernetes.io/hostname 63 | {{- else if .affinityOverride }} 64 | affinity: 65 | {{- toYaml .affinityOverride | nindent 8 }} 66 | {{- end }} 67 | {{- with .tolerations }} 68 | tolerations: 69 | {{- toYaml . | nindent 8 }} 70 | {{- end }} 71 | securityContext: 72 | {{- if .podSecurityContext }} 73 | {{- toYaml .podSecurityContext | nindent 8 }} 74 | {{- else if $.Values.podSecurityContext }} 75 | {{- toYaml $.Values.podSecurityContext | nindent 8 }} 76 | {{- end }} 77 | containers: 78 | - name: proxy 79 | image: {{ $image | quote }} 80 | imagePullPolicy: {{ $.Values.image.pullPolicy | default "IfNotPresent" }} 81 | {{- with .containerSecurityContext }} 82 | securityContext: 83 | {{- toYaml . | nindent 10 }} 84 | {{- end }} 85 | command: 86 | - sh 87 | - /mq-server-start.sh 88 | env: 89 | - name: NAMESRV_ADDR 90 | value: {{ include "rocketmq.nameserver.addr" $ }} 91 | - name: ROCKETMQ_PROCESS_ROLE 92 | value: {{ $clusterRole }} 93 | - name: RMQ_PROXY_CONFIG_PATH 94 | value: /etc/rocketmq/proxy.json 95 | - name: ROCKETMQ_JAVA_OPTIONS_HEAP 96 | {{- $maxHeapSize := .jvm.maxHeapSize }} 97 | value: {{ printf "-Xms%s -Xmx%s" $maxHeapSize $maxHeapSize }} 98 | {{- if and .jvm .jvm.javaOptsOverride }} 99 | - name: ROCKETMQ_JAVA_OPTIONS_OVERRIDE 100 | value: {{ .jvm.javaOptsOverride | quote }} 101 | {{- end }} 102 | ports: 103 | - name: main 104 | containerPort: 8080 105 | protocol: TCP 106 | - name: grpc 107 | containerPort: 8081 108 | protocol: TCP 109 | resources: 110 | {{- toYaml .resources | nindent 10 }} 111 | {{- with .readinessProbe }} 112 | readinessProbe: 113 | {{- toYaml . | nindent 10 }} 114 | {{- end }} 115 | {{- with .livenessProbe }} 116 | livenessProbe: 117 | {{- toYaml . | nindent 10 }} 118 | {{- end }} 119 | lifecycle: 120 | preStop: 121 | exec: 122 | command: ["sh", "-c", "sleep 5; ./mqshutdown {{ $clusterRole }}"] 123 | volumeMounts: 124 | - mountPath: /mq-server-start.sh 125 | name: mq-server-start-sh 126 | subPath: mq-server-start.sh 127 | - mountPath: /etc/rocketmq/proxy.json 128 | name: proxy-json 129 | subPath: proxy.json 130 | dnsPolicy: ClusterFirst 131 | terminationGracePeriodSeconds: {{ .terminationGracePeriodSeconds | default 15 }} 132 | volumes: 133 | - configMap: 134 | items: 135 | - key: mq-server-start.sh 136 | path: mq-server-start.sh 137 | name: {{ $configmapName }} 138 | defaultMode: 0755 139 | name: mq-server-start-sh 140 | - configMap: 141 | items: 142 | - key: proxy.json 143 | path: proxy.json 144 | name: {{ $configmapName }} 145 | name: proxy-json 146 | {{- end }} 147 | {{- end }} -------------------------------------------------------------------------------- /charts/rocketmq-cluster/templates/proxy/service.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.proxy.enabled -}} 2 | {{- with .Values.proxy.service -}} 3 | {{- $clusterRole := "proxy" -}} 4 | apiVersion: v1 5 | kind: Service 6 | metadata: 7 | name: {{ include "rocketmq.proxy.fullname" $ }} 8 | labels: 9 | {{- include "rocketmq.labels" $ | nindent 4 }} 10 | component: {{ $clusterRole }} 11 | {{- with .labels }} 12 | {{- toYaml . | nindent 4 }} 13 | {{- end }} 14 | {{- with .annotations }} 15 | annotations: 16 | {{- toYaml . | nindent 4 }} 17 | {{- end }} 18 | spec: 19 | ports: 20 | - port: 8080 21 | name: main 22 | protocol: TCP 23 | targetPort: 8080 24 | {{- if and (eq .type "NodePort") .nodePort }} 25 | nodePort: {{ .nodePort }} 26 | {{- end }} 27 | - port: 8081 28 | name: grpc 29 | protocol: TCP 30 | targetPort: 8081 31 | {{- if and (eq .type "NodePort") .nodePortGrpc }} 32 | nodePort: {{ .nodePortGrpc }} 33 | {{- end }} 34 | {{- with .additionalPorts }} 35 | {{- toYaml . | nindent 2 }} 36 | {{- end }} 37 | selector: 38 | {{- include "rocketmq.selectorLabels" $ | nindent 4 }} 39 | component: {{ $clusterRole }} 40 | {{- with .type }} 41 | type: {{ . | quote }} 42 | {{- end }} 43 | {{- with .clusterIP }} 44 | clusterIP: {{ . | quote }} 45 | {{- end }} 46 | {{- if and (eq "LoadBalancer" .type) .loadBalancerIP }} 47 | loadBalancerIP: {{ .loadBalancerIP | quote }} 48 | {{- end }} 49 | {{- with .loadBalancerClass }} 50 | loadBalancerClass: {{ . | quote }} 51 | {{- end }} 52 | {{- with .externalTrafficPolicy }} 53 | externalTrafficPolicy: {{ . | quote }} 54 | {{- end }} 55 | {{- with .sessionAffinity }} 56 | sessionAffinity: {{ . | quote }} 57 | {{- end }} 58 | {{- end }} 59 | {{- end }} -------------------------------------------------------------------------------- /charts/rocketmq-cluster/values.yaml: -------------------------------------------------------------------------------- 1 | clusterName: "rocketmq-helm" 2 | nameOverride: rocketmq 3 | 4 | image: 5 | repository: "apache/rocketmq" 6 | tag: "5.3.2" 7 | pullPolicy: IfNotPresent 8 | pullSecrets: [] 9 | # - name: secretName 10 | 11 | podSecurityContext: 12 | fsGroup: 3000 13 | runAsUser: 3000 14 | 15 | broker: 16 | size: 17 | master: 2 18 | replica: 1 19 | 20 | # podSecurityContext: {} 21 | # containerSecurityContext: {} 22 | 23 | master: 24 | brokerRole: ASYNC_MASTER 25 | jvm: 26 | maxHeapSize: 2048M 27 | # javaOptsOverride: "" 28 | resources: 29 | limits: 30 | cpu: 4 31 | memory: 16Gi 32 | requests: 33 | cpu: 200m 34 | memory: 3Gi 35 | 36 | replica: 37 | jvm: 38 | maxHeapSize: 1300M 39 | # javaOptsOverride: "" 40 | resources: 41 | limits: 42 | cpu: 4 43 | memory: 16Gi 44 | requests: 45 | cpu: 50m 46 | memory: 2Gi 47 | 48 | hostNetwork: false 49 | 50 | persistence: 51 | enabled: true 52 | size: 20Gi 53 | #storageClass: "gp2" 54 | 55 | aclConfigMapEnabled: false 56 | aclConfig: | 57 | globalWhiteRemoteAddresses: 58 | - '*' 59 | - 10.*.*.* 60 | - 192.168.*.* 61 | 62 | config: 63 | ## brokerClusterName brokerName brokerRole brokerId 由内置脚本自动生成 64 | deleteWhen: "04" 65 | fileReservedTime: "48" 66 | flushDiskType: "ASYNC_FLUSH" 67 | waitTimeMillsInSendQueue: "1000" 68 | # aclEnable: true 69 | 70 | affinityOverride: {} 71 | tolerations: [] 72 | nodeSelector: {} 73 | 74 | ## broker.readinessProbe 75 | readinessProbe: 76 | tcpSocket: 77 | port: main 78 | initialDelaySeconds: 10 79 | periodSeconds: 10 80 | timeoutSeconds: 3 81 | failureThreshold: 6 82 | 83 | nameserver: 84 | replicaCount: 3 85 | 86 | jvm: 87 | maxHeapSize: 600M 88 | # javaOptsOverride: "" 89 | 90 | resources: 91 | limits: 92 | cpu: 2 93 | memory: 6Gi 94 | ephemeral-storage: 8Gi 95 | requests: 96 | cpu: 100m 97 | memory: 1Gi 98 | ephemeral-storage: 1Gi 99 | 100 | persistence: 101 | enabled: false 102 | size: 20Gi 103 | #storageClass: "gp2" 104 | 105 | affinityOverride: {} 106 | tolerations: [] 107 | nodeSelector: {} 108 | 109 | ## nameserver.readinessProbe 110 | readinessProbe: 111 | tcpSocket: 112 | port: main 113 | initialDelaySeconds: 10 114 | periodSeconds: 10 115 | timeoutSeconds: 3 116 | failureThreshold: 6 117 | 118 | ## nameserver.service 119 | service: 120 | annotations: {} 121 | type: ClusterIP 122 | 123 | proxy: 124 | enabled: true 125 | replicaCount: 2 126 | jvm: 127 | maxHeapSize: 1300M 128 | # javaOptsOverride: "" 129 | 130 | resources: 131 | limits: 132 | cpu: 2 133 | memory: 6Gi 134 | requests: 135 | cpu: 100m 136 | memory: 2Gi 137 | 138 | affinityOverride: {} 139 | tolerations: [] 140 | nodeSelector: {} 141 | 142 | ## proxy.readinessProbe 143 | readinessProbe: 144 | tcpSocket: 145 | port: main 146 | initialDelaySeconds: 10 147 | periodSeconds: 10 148 | timeoutSeconds: 3 149 | failureThreshold: 6 150 | 151 | ## proxy.service 152 | service: 153 | annotations: {} 154 | type: ClusterIP 155 | 156 | dashboard: 157 | enabled: true 158 | replicaCount: 1 159 | image: 160 | repository: "apacherocketmq/rocketmq-dashboard" 161 | pullPolicy: IfNotPresent 162 | tag: "1.0.0" 163 | 164 | auth: 165 | enabled: true 166 | users: 167 | - name: admin 168 | password: admin 169 | isAdmin: true 170 | - name: user01 171 | password: userPass 172 | 173 | jvm: 174 | maxHeapSize: 600M 175 | 176 | resources: 177 | limits: 178 | cpu: 1 179 | memory: 2Gi 180 | requests: 181 | cpu: 20m 182 | memory: 1Gi 183 | 184 | ## dashboard.readinessProbe 185 | readinessProbe: 186 | failureThreshold: 6 187 | httpGet: 188 | path: / 189 | port: http 190 | livenessProbe: {} 191 | 192 | service: 193 | annotations: {} 194 | type: ClusterIP 195 | # nodePort: 31007 196 | 197 | ingress: 198 | enabled: false 199 | className: "" 200 | annotations: {} 201 | # nginx.ingress.kubernetes.io/whitelist-source-range: 10.0.0.0/8,124.160.30.50 202 | hosts: 203 | - host: rocketmq-dashboard.example.com 204 | tls: [] 205 | # - secretName: example-tls 206 | # hosts: 207 | # - rocketmq-dashboard.example.com 208 | 209 | ## controller mode is an experimental feature 210 | controllerModeEnabled: false 211 | controller: 212 | enabled: false 213 | replicaCount: 3 214 | jvm: 215 | maxHeapSize: 600M 216 | # javaOptsOverride: "" 217 | resources: 218 | limits: 219 | cpu: 2 220 | memory: 6Gi 221 | requests: 222 | cpu: 100m 223 | memory: 1Gi 224 | persistence: 225 | enabled: true 226 | size: 20Gi 227 | accessModes: 228 | - ReadWriteOnce 229 | 230 | ## controller.service 231 | service: 232 | annotations: {} 233 | 234 | ## controller.config 235 | config: 236 | controllerDLegerGroup: group1 237 | enableElectUncleanMaster: false 238 | notifyBrokerRoleChanged: true 239 | 240 | ## controller.readinessProbe 241 | readinessProbe: 242 | tcpSocket: 243 | port: main 244 | initialDelaySeconds: 10 245 | periodSeconds: 10 246 | timeoutSeconds: 3 247 | failureThreshold: 6 -------------------------------------------------------------------------------- /charts/rocketmq/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *.orig 18 | *~ 19 | # Various IDEs 20 | .project 21 | .idea/ 22 | *.tmproj 23 | .vscode/ 24 | -------------------------------------------------------------------------------- /charts/rocketmq/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v2 2 | name: rocketmq 3 | description: RocketMQ Helm chart 4 | type: application 5 | 6 | version: 12.4.0 7 | appVersion: '5.3.2' 8 | 9 | maintainers: 10 | - name: itboon 11 | url: 'https://github.com/itboon/rocketmq-helm' 12 | 13 | keywords: 14 | - rocketmq 15 | - kubernetes 16 | - apache -------------------------------------------------------------------------------- /charts/rocketmq/README.md: -------------------------------------------------------------------------------- 1 | # RocketMQ Helm Chart 2 | 3 | https://github.com/itboon/rocketmq-helm 4 | 5 | ## 版本兼容性 6 | 7 | - Kubernetes 1.18+ 8 | - Helm 3.3+ 9 | - RocketMQ `>= 4.5` 10 | 11 | ## 添加 helm 仓库 12 | 13 | ``` shell 14 | ## 添加 helm 仓库 15 | helm repo add rocketmq-repo https://helm-charts.itboon.top/rocketmq 16 | helm repo update rocketmq-repo 17 | ``` 18 | 19 | ## 部署案例 20 | 21 | ``` shell 22 | ## 部署一个最小化的 rocketmq 集群 23 | ## 这里关闭持久化存储,仅演示部署效果 24 | helm upgrade --install rocketmq \ 25 | --namespace rocketmq-demo \ 26 | --create-namespace \ 27 | --set broker.persistence.enabled="false" \ 28 | rocketmq-repo/rocketmq 29 | ``` 30 | 31 | ``` shell 32 | ## 部署测试集群, 启用 Dashboard (默认已开启持久化存储) 33 | helm upgrade --install rocketmq \ 34 | --namespace rocketmq-demo \ 35 | --create-namespace \ 36 | --set dashboard.enabled="true" \ 37 | rocketmq-repo/rocketmq 38 | ``` 39 | 40 | ### 部署高可用集群版 41 | 42 | ``` shell 43 | ## rocketmq-cluster 默认部署 2个 master 节点 44 | ## 每个 master 具有1个副节点,共4个 broker 节点 45 | helm upgrade --install rocketmq \ 46 | --namespace rocketmq-demo \ 47 | --create-namespace \ 48 | rocketmq-repo/rocketmq-cluster 49 | 50 | ``` 51 | 52 | ``` shell 53 | ## 部署 3个 master 节点,每个 master 具有1个副节点,共6个 broker 节点 54 | helm upgrade --install rocketmq \ 55 | --namespace rocketmq-demo \ 56 | --create-namespace \ 57 | --set broker.size.master="3" \ 58 | rocketmq-repo/rocketmq-cluster 59 | 60 | ``` 61 | 62 | ``` shell 63 | ## 调整内存配额 64 | helm upgrade --install rocketmq \ 65 | --namespace rocketmq-demo \ 66 | --create-namespace \ 67 | --set broker.master.jvm.maxHeapSize="4G" \ 68 | --set broker.master.resources.requests.memory="6Gi" \ 69 | rocketmq-repo/rocketmq-cluster 70 | 71 | ``` 72 | 73 | > 具体资源配额请根据实际环境调整,参考 [examples](https://github.com/itboon/rocketmq-helm/tree/main/examples) 74 | 75 | ## 部署详情 76 | 77 | ### 集群外访问 78 | 79 | #### 通过 proxy 实现集群外访问 80 | 81 | 可以将 proxy 暴露到集群外,支持 `LoadBalancer` 和 `NodePort` 82 | 83 | > proxy 是 RocketMQ 5.x 版本新增的模块,这种模式能够更好的适应复杂的网络环境,尤其是 k8s 集群内外互通,详情请参考[官方文档](https://rocketmq.apache.org/version/#whats-new-in-rocketmq-50) 84 | 85 | ``` yaml 86 | proxy: 87 | service: 88 | annotations: {} 89 | type: NodePort ## LoadBalancer or NodePort 90 | ``` 91 | 92 | #### hostNetwork 93 | 94 | broker 支持 `hostNetwork`,即 pod 使用主机网络命名空间,这种方式的缺点是每个 node 节点最多只能调度一个 broker 95 | 96 | ``` yaml 97 | broker: 98 | hostNetwork: true 99 | 100 | nameserver: 101 | service: 102 | type: NodePort ## LoadBalancer or NodePort 103 | ``` 104 | 105 | 建议优先使用 proxy 实现集群外访问,`hostNetwork` 作为向下兼容的备选方案。 106 | 107 | > 仅 broker 支持 `hostNetwork`,其他组件可以使用 `NodePort` 108 | 109 | ### 可选组件 110 | 111 | ``` yaml 112 | ## 关闭 proxy 113 | proxy: 114 | enabled: false ## 默认 true 115 | 116 | ## 关闭 dashboard 117 | dashboard: 118 | enabled: false ## 默认 true 119 | ``` 120 | 121 | ### Dashboard 登录认证 122 | 123 | Dashboard admin 帐号密码: 124 | 125 | ``` yaml 126 | dashboard: 127 | enabled: true 128 | auth: 129 | enabled: true 130 | users: 131 | - name: admin 132 | password: admin 133 | isAdmin: true 134 | - name: user01 135 | password: userPass 136 | ``` 137 | 138 | ### 镜像仓库 139 | 140 | ``` yaml 141 | image: 142 | repository: apache/rocketmq 143 | # tag: 5.2.0 144 | tag: 4.9.7 145 | ``` 146 | 147 | ### 部署特定版本 148 | 149 | ``` shell 150 | helm upgrade --install rocketmq \ 151 | --namespace rocketmq-demo \ 152 | --create-namespace \ 153 | --set image.tag="5.2.0" \ 154 | rocketmq-repo/rocketmq 155 | ``` 156 | 157 | ### 内存管理 158 | 159 | 集群每个模块提供堆内存管理,例如 `--set broker.master.jvm.maxHeapSize="1024M"` 将堆内存设置为 `1024M`,默认 `Xms` `Xmx` 相等。堆内存配额应该与 Pod `resources` 相匹配。 160 | 161 | > 可使用 `jvm.javaOptsOverride` 对 jvm 参数进行修改,设置了此参数则 `maxHeapSize` 失效。 162 | 163 | ```yaml 164 | broker: 165 | master: 166 | jvm: 167 | maxHeapSize: 1024M 168 | # javaOptsOverride: "-Xms1024M -Xmx1024M -XX:+UseG1GC" 169 | resources: 170 | requests: 171 | cpu: 100m 172 | memory: 2Gi 173 | 174 | nameserver: 175 | jvm: 176 | maxHeapSize: 1024M 177 | # javaOptsOverride: "-Xms1024M -Xmx1024M -XX:+UseG1GC" 178 | resources: 179 | requests: 180 | cpu: 100m 181 | memory: 2Gi 182 | ``` 183 | -------------------------------------------------------------------------------- /charts/rocketmq/templates/NOTES.txt: -------------------------------------------------------------------------------- 1 | >>> Nameserver Address: 2 | {{- printf "%s.%s.svc:9876\n" (include "rocketmq.nameserver.fullname" .) (.Release.Namespace) | nindent 4 }} 3 | 4 | {{- if .Values.proxy.enabled }} 5 | >>> Proxy Remoting Address: 6 | {{- printf "%s.%s.svc:8080" (include "rocketmq.proxy.fullname" .) (.Release.Namespace) | nindent 4 }} 7 | 8 | >>> Proxy gRPC Address: 9 | {{- printf "%s.%s.svc:8081\n" (include "rocketmq.proxy.fullname" .) (.Release.Namespace) | nindent 4 }} 10 | {{- end }} 11 | 12 | {{- if .Values.dashboard.enabled }} 13 | {{- if .Values.dashboard.ingress.enabled }} 14 | >>> Visit RocketMQ Dashboard: 15 | {{- range $host := .Values.dashboard.ingress.hosts }} 16 | http{{ if $.Values.dashboard.ingress.tls }}s{{ end }}://{{ $host.host }}/ 17 | {{- end }} 18 | {{- end }} 19 | 20 | {{- if and .Values.dashboard.auth .Values.dashboard.auth.enabled }} 21 | >>> RocketMQ Dashboard Auth: 22 | {{- range .Values.dashboard.auth.users }} 23 | {{- printf "username: %s\tpassword: %s" .name .password | nindent 6 }} 24 | {{- end }} 25 | Modify "{{ include "rocketmq.dashboard.configmap.fullname" . }}" configmap to change the password 26 | {{- end }} 27 | {{- end }} 28 | 29 | {{- if .Values.controllerModeEnabled }} 30 | {{- $brokerReplicaCount := .Values.broker.size.replica | int }} 31 | {{- if eq $brokerReplicaCount 0 }} 32 | {{ include "rocketmq.noticeValues.controllerMode" . | fail }} 33 | {{- else }} 34 | {{ include "rocketmq.noticeValues.controllerMode" . }} 35 | {{- end }} 36 | {{- end }} -------------------------------------------------------------------------------- /charts/rocketmq/templates/_helpers.tpl: -------------------------------------------------------------------------------- 1 | {{/* 2 | Expand the name of the chart. 3 | */}} 4 | {{- define "rocketmq.name" -}} 5 | {{- default .Chart.Name .Values.nameOverride | trunc 35 | trimSuffix "-" }} 6 | {{- end }} 7 | 8 | {{/* 9 | Create a default fully qualified app name. 10 | We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). 11 | If release name contains chart name it will be used as a full name. 12 | */}} 13 | {{- define "rocketmq.fullname" -}} 14 | {{- if .Values.fullnameOverride }} 15 | {{- .Values.fullnameOverride | trunc 35 | trimSuffix "-" }} 16 | {{- else }} 17 | {{- $name := default .Chart.Name .Values.nameOverride }} 18 | {{- if contains $name .Release.Name }} 19 | {{- .Release.Name | trunc 35 | trimSuffix "-" }} 20 | {{- else }} 21 | {{- printf "%s-%s" .Release.Name $name | trunc 35 | trimSuffix "-" }} 22 | {{- end }} 23 | {{- end }} 24 | {{- end }} 25 | 26 | {{/* 27 | Create chart name and version as used by the chart label. 28 | */}} 29 | {{- define "rocketmq.chart" -}} 30 | {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 35 | trimSuffix "-" }} 31 | {{- end }} 32 | 33 | {{/* 34 | Common labels 35 | */}} 36 | {{- define "rocketmq.labels" -}} 37 | helm.sh/chart: {{ include "rocketmq.chart" . }} 38 | {{ include "rocketmq.selectorLabels" . }} 39 | {{- if .Chart.AppVersion }} 40 | app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} 41 | {{- end }} 42 | app.kubernetes.io/managed-by: {{ .Release.Service }} 43 | {{- end }} 44 | 45 | {{/* 46 | Selector labels 47 | */}} 48 | {{- define "rocketmq.selectorLabels" -}} 49 | app.kubernetes.io/name: {{ include "rocketmq.name" . }} 50 | app.kubernetes.io/instance: {{ .Release.Name }} 51 | {{- end }} 52 | 53 | {{/* 54 | Create the name of the service account to use 55 | */}} 56 | {{- define "rocketmq.serviceAccountName" -}} 57 | {{- if .Values.serviceAccount.create }} 58 | {{- default (include "rocketmq.fullname" .) .Values.serviceAccount.name }} 59 | {{- else }} 60 | {{- default "default" .Values.serviceAccount.name }} 61 | {{- end }} 62 | {{- end }} 63 | 64 | {{/* 65 | configmap 66 | */}} 67 | {{- define "rocketmq.configmap.fullname" -}} 68 | {{ include "rocketmq.fullname" . }}-server-config 69 | {{- end }} 70 | 71 | {{/* 72 | acl configmap 73 | */}} 74 | {{- define "rocketmq.acl.configmap.fullname" -}} 75 | {{ include "rocketmq.fullname" . }}-acl-cm 76 | {{- end }} 77 | 78 | {{/* 79 | broker-cm 80 | */}} 81 | {{- define "rocketmq.broker.configmap.fullname" -}} 82 | {{ include "rocketmq.fullname" . }}-broker-cm 83 | {{- end }} 84 | 85 | {{/* 86 | nameserver 87 | */}} 88 | {{- define "rocketmq.nameserver.fullname" -}} 89 | {{ include "rocketmq.fullname" . }}-nameserver 90 | {{- end }} 91 | 92 | {{/* 93 | proxy 94 | */}} 95 | {{- define "rocketmq.proxy.fullname" -}} 96 | {{ include "rocketmq.fullname" . }}-proxy 97 | {{- end }} 98 | 99 | {{/* 100 | dashboard 101 | */}} 102 | {{- define "rocketmq.dashboard.fullname" -}} 103 | {{ include "rocketmq.fullname" . }}-dashboard 104 | {{- end }} 105 | 106 | {{/* 107 | dashboard-cm 108 | */}} 109 | {{- define "rocketmq.dashboard.configmap.fullname" -}} 110 | {{ include "rocketmq.dashboard.fullname" . }}-cm 111 | {{- end }} 112 | 113 | {{/* 114 | dashboard 115 | */}} 116 | {{- define "rocketmq.dashboard.dataPath" -}} 117 | /tmp/rocketmq-console/data 118 | {{- end }} 119 | 120 | {{/* 121 | env NAMESRV_ADDR 122 | */}} 123 | {{- define "rocketmq.nameserver.addr" -}} 124 | {{- $nsFullName := include "rocketmq.nameserver.fullname" . -}} 125 | {{- $headlessDomain := printf "%s-headless.%s.svc" $nsFullName .Release.Namespace -}} 126 | {{- $address := list -}} 127 | {{- $replicaCount := int .Values.nameserver.replicaCount -}} 128 | {{- range $i := until $replicaCount -}} 129 | {{- $address = printf "%s-%d.%s:9876" $nsFullName $i $headlessDomain | append $address -}} 130 | {{- end -}} 131 | {{- join ";" $address -}} 132 | {{- end -}} 133 | 134 | 135 | {{/* 136 | controller 137 | */}} 138 | {{- define "rocketmq.controller.fullname" -}} 139 | {{ include "rocketmq.fullname" . }}-controller 140 | {{- end -}} 141 | 142 | {{/* 143 | controller 144 | */}} 145 | {{- define "rocketmq.enableControllerInNamesrv" -}} 146 | {{- if and .Values.controllerModeEnabled (not .Values.controller.enabled) -}} 147 | {{- print "true" -}} 148 | {{- else -}} 149 | {{- print "false" -}} 150 | {{- end -}} 151 | {{- end -}} 152 | 153 | {{/* 154 | rocketmq.broker.controllerAddr 155 | */}} 156 | {{- define "rocketmq.broker.controllerAddr" -}} 157 | {{- $address := list -}} 158 | {{- $fullName := include "rocketmq.controller.fullname" . -}} 159 | {{- $headlessDomain := printf "%s.%s.svc" $fullName .Release.Namespace -}} 160 | {{- $replicaCount := int .Values.controller.replicaCount -}} 161 | {{- if eq (include "rocketmq.enableControllerInNamesrv" .) "true" -}} 162 | {{- $fullName = include "rocketmq.nameserver.fullname" . -}} 163 | {{- $headlessDomain = printf "%s-headless.%s.svc" $fullName .Release.Namespace -}} 164 | {{- $replicaCount = int .Values.nameserver.replicaCount -}} 165 | {{- end -}} 166 | {{- range $i := until $replicaCount -}} 167 | {{- $address = printf "%s-%d.%s:9878" $fullName $i $headlessDomain | append $address -}} 168 | {{- end -}} 169 | {{- join ";" $address -}} 170 | {{- end -}} 171 | 172 | {{/* 173 | rocketmq.controller.dlegerPeers 174 | */}} 175 | {{- define "rocketmq.controller.dlegerPeers" -}} 176 | {{- $address := list -}} 177 | {{- $fullName := include "rocketmq.controller.fullname" . -}} 178 | {{- $headlessDomain := printf "%s.%s.svc" $fullName .Release.Namespace -}} 179 | {{- $replicaCount := int .Values.controller.replicaCount -}} 180 | {{- if eq (include "rocketmq.enableControllerInNamesrv" .) "true" -}} 181 | {{- $fullName = include "rocketmq.nameserver.fullname" . -}} 182 | {{- $headlessDomain = printf "%s-headless.%s.svc" $fullName .Release.Namespace -}} 183 | {{- $replicaCount = int .Values.nameserver.replicaCount -}} 184 | {{- end -}} 185 | {{- range $i := until $replicaCount -}} 186 | {{- $address = printf "n%d-%s-%d.%s:9878" $i $fullName $i $headlessDomain | append $address -}} 187 | {{- end -}} 188 | {{- join ";" $address -}} 189 | {{- end -}} 190 | 191 | {{/* 192 | rocketmq.noticeValues.controllerMode 193 | */}} 194 | {{- define "rocketmq.noticeValues.controllerMode" -}} 195 | {{ if .Values.controllerModeEnabled }} 196 | Notice about controller mode: 197 | Controller mode is an experimental feature, you can disable it (--set conrtollerModeEnabled=false) 198 | If you decide to enable controller mode, you need to note: 199 | {{- $brokerReplicaCount := .Values.broker.size.replica | int }} 200 | {{- if lt $brokerReplicaCount 2 }} 201 | The minimum number of replica is 1, and the recommended number of replica is 2 202 | Please set a valid number of replica (--set broker.size.replica=2) 203 | {{- end }} 204 | {{- if eq (include "rocketmq.enableControllerInNamesrv" .) "true" }} 205 | Controller roles require persistent storage (--set nameserver.persistence.enabled=true) 206 | {{- else }} 207 | Controller roles require persistent storage (--set controller.persistence.enabled=true) 208 | {{- end }} 209 | {{- end }} 210 | {{- end }} -------------------------------------------------------------------------------- /charts/rocketmq/templates/broker/acl-config.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.broker.aclConfigMapEnabled -}} 2 | apiVersion: v1 3 | kind: ConfigMap 4 | metadata: 5 | name: {{ include "rocketmq.acl.configmap.fullname" . }} 6 | data: 7 | plain_acl.yml: | 8 | {{- if .Values.broker.aclConfig }} 9 | {{- .Values.broker.aclConfig | nindent 4 }} 10 | {{- else }} 11 | globalWhiteRemoteAddresses: 12 | - '*' 13 | - 10.*.*.* 14 | - 192.168.*.* 15 | accounts: 16 | - accessKey: RocketMQ 17 | secretKey: 12345678 18 | whiteRemoteAddress: 19 | admin: false 20 | defaultTopicPerm: DENY 21 | defaultGroupPerm: SUB 22 | topicPerms: 23 | - topicA=DENY 24 | - topicB=PUB|SUB 25 | - topicC=SUB 26 | groupPerms: 27 | # the group should convert to retry topic 28 | - groupA=DENY 29 | - groupB=PUB|SUB 30 | - groupC=SUB 31 | - accessKey: rocketmq2 32 | secretKey: 12345678 33 | whiteRemoteAddress: 192.168.*.* 34 | # if it is admin, it could access all resources 35 | admin: true 36 | {{- end }} 37 | {{- end }} -------------------------------------------------------------------------------- /charts/rocketmq/templates/broker/statefulset.yaml: -------------------------------------------------------------------------------- 1 | {{- $fullName := include "rocketmq.fullname" . -}} 2 | {{- $clusterRole := "broker" -}} 3 | {{- $configmapName := include "rocketmq.configmap.fullname" . -}} 4 | {{- $masterSize := int .Values.broker.size.master -}} 5 | {{- $replicaCount := int (add1 .Values.broker.size.replica) -}} 6 | {{- $image := printf "%s:%s" .Values.image.repository .Values.image.tag -}} 7 | {{- range $brokerId := until $replicaCount -}} 8 | {{- $brokerFullName := printf "%s-broker-master" $fullName -}} 9 | {{- $maxHeapSize := $.Values.broker.master.jvm.maxHeapSize -}} 10 | {{- $javaOptsOverride := $.Values.broker.master.jvm.javaOptsOverride -}} 11 | {{- $brokerRole := $.Values.broker.master.brokerRole -}} 12 | {{- $brokerConfigKey := "broker-master.conf" -}} 13 | {{- if gt $brokerId 0 }} 14 | {{- $brokerFullName = printf "%s-broker-replica-id%d" $fullName $brokerId -}} 15 | {{- $maxHeapSize = $.Values.broker.replica.jvm.maxHeapSize -}} 16 | {{- $javaOptsOverride = $.Values.broker.replica.jvm.javaOptsOverride -}} 17 | {{- $brokerRole = "SLAVE" -}} 18 | {{- $brokerConfigKey = "broker-slave.conf" -}} 19 | {{- end }} 20 | --- 21 | apiVersion: apps/v1 22 | kind: StatefulSet 23 | metadata: 24 | name: {{ $brokerFullName }} 25 | labels: 26 | {{- include "rocketmq.labels" $ | nindent 4 }} 27 | {{- with $.Values.broker.labels }} 28 | {{- toYaml . | nindent 4 }} 29 | {{- end }} 30 | {{- with $.Values.broker.annotations }} 31 | annotations: 32 | {{- toYaml . | nindent 4 }} 33 | {{- end }} 34 | spec: 35 | minReadySeconds: {{ $.Values.broker.minReadySeconds | default 20 }} 36 | replicas: {{ $masterSize }} 37 | podManagementPolicy: {{ $.Values.broker.podManagementPolicy | default "OrderedReady" }} 38 | {{- with $.Values.broker.updateStrategy }} 39 | updateStrategy: 40 | {{- toYaml . | nindent 4 }} 41 | {{- end }} 42 | selector: 43 | matchLabels: 44 | {{- include "rocketmq.selectorLabels" $ | nindent 6 }} 45 | component: {{ $clusterRole }} 46 | broker: {{ $brokerFullName }} 47 | serviceName: "" 48 | template: 49 | metadata: 50 | annotations: 51 | checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") $ | sha256sum }} 52 | {{- with $.Values.broker.podAnnotations }} 53 | {{- toYaml . | nindent 8 }} 54 | {{- end }} 55 | labels: 56 | {{- include "rocketmq.selectorLabels" $ | nindent 8 }} 57 | component: {{ $clusterRole }} 58 | broker: {{ $brokerFullName }} 59 | {{- with $.Values.broker.podLabels }} 60 | {{- toYaml . | nindent 8 }} 61 | {{- end }} 62 | spec: 63 | {{- with $.Values.broker.imagePullSecrets | default $.Values.image.pullSecrets }} 64 | imagePullSecrets: 65 | {{- toYaml . | nindent 8 }} 66 | {{- end }} 67 | {{- with $.Values.broker.nodeSelector }} 68 | nodeSelector: 69 | {{- toYaml . | nindent 8 }} 70 | {{- end }} 71 | {{- if not $.Values.broker.affinityOverride }} 72 | affinity: 73 | podAntiAffinity: 74 | preferredDuringSchedulingIgnoredDuringExecution: 75 | - weight: 5 76 | podAffinityTerm: 77 | labelSelector: 78 | matchLabels: 79 | {{- include "rocketmq.selectorLabels" $ | nindent 18 }} 80 | component: broker 81 | topologyKey: kubernetes.io/hostname 82 | {{- else if $.Values.broker.affinityOverride }} 83 | affinity: 84 | {{- toYaml $.Values.broker.affinityOverride | nindent 8 }} 85 | {{- end }} 86 | {{- with $.Values.broker.tolerations }} 87 | tolerations: 88 | {{- toYaml . | nindent 8 }} 89 | {{- end }} 90 | securityContext: 91 | {{- if $.Values.broker.podSecurityContext }} 92 | {{- toYaml $.Values.broker.podSecurityContext | nindent 8 }} 93 | {{- else if $.Values.podSecurityContext }} 94 | {{- toYaml $.Values.podSecurityContext | nindent 8 }} 95 | {{- end }} 96 | containers: 97 | - name: broker 98 | image: {{ $image | quote }} 99 | imagePullPolicy: {{ $.Values.image.pullPolicy | default "IfNotPresent" }} 100 | {{- with $.Values.broker.containerSecurityContext }} 101 | securityContext: 102 | {{- toYaml . | nindent 10 }} 103 | {{- end }} 104 | command: 105 | - sh 106 | - /mq-server-start.sh 107 | env: 108 | - name: MY_POD_NAME 109 | valueFrom: 110 | fieldRef: 111 | fieldPath: metadata.name 112 | - name: ROCKETMQ_PROCESS_ROLE 113 | value: {{ $clusterRole }} 114 | - name: NAMESRV_ADDR 115 | value: {{ include "rocketmq.nameserver.addr" $ }} 116 | - name: ROCKETMQ_CONF_brokerId 117 | value: {{ $brokerId | quote }} 118 | - name: ROCKETMQ_CONF_brokerRole 119 | value: {{ $brokerRole | quote }} 120 | - name: ROCKETMQ_JAVA_OPTIONS_HEAP 121 | value: {{ printf "-Xms%s -Xmx%s" $maxHeapSize $maxHeapSize }} 122 | {{- if $javaOptsOverride }} 123 | - name: ROCKETMQ_JAVA_OPTIONS_OVERRIDE 124 | value: {{ $javaOptsOverride }} 125 | {{- end }} 126 | {{- if and $.Values.controllerModeEnabled }} 127 | - name: enableControllerMode 128 | value: "true" 129 | {{- end }} 130 | {{- with $.Values.broker.commonEnvs }} 131 | {{- toYaml . | nindent 8 }} 132 | {{- end }} 133 | {{- with $.Values.broker.extraEnvs }} 134 | {{- toYaml . | nindent 8 }} 135 | {{- end }} 136 | ports: 137 | - containerPort: 10909 138 | name: vip 139 | protocol: TCP 140 | - containerPort: 10911 141 | name: main 142 | protocol: TCP 143 | - containerPort: 10912 144 | name: ha 145 | protocol: TCP 146 | resources: 147 | {{- if eq $brokerId 0 }} 148 | {{- toYaml $.Values.broker.master.resources | nindent 10 }} 149 | {{- else }} 150 | {{- toYaml $.Values.broker.replica.resources | nindent 10 }} 151 | {{- end }} 152 | {{- with $.Values.broker.readinessProbe }} 153 | readinessProbe: 154 | {{- toYaml . | nindent 10 }} 155 | {{- end }} 156 | {{- with $.Values.broker.livenessProbe }} 157 | livenessProbe: 158 | {{- toYaml . | nindent 10 }} 159 | {{- end }} 160 | lifecycle: 161 | preStop: 162 | exec: 163 | command: ["sh", "-c", "sleep 5; ./mqshutdown broker"] 164 | volumeMounts: 165 | - mountPath: /home/rocketmq/logs 166 | name: broker-storage 167 | subPath: rocketmq-broker/logs 168 | - mountPath: /home/rocketmq/store 169 | name: broker-storage 170 | subPath: rocketmq-broker/store 171 | - mountPath: /etc/rocketmq/broker-base.conf 172 | name: broker-base-config 173 | subPath: broker-base.conf 174 | - mountPath: /mq-server-start.sh 175 | name: mq-server-start-sh 176 | subPath: mq-server-start.sh 177 | {{- if $.Values.broker.aclConfigMapEnabled }} 178 | - mountPath: /etc/rocketmq/acl 179 | name: acl-config 180 | {{- end }} 181 | {{- if $.Values.broker.hostNetwork }} 182 | hostNetwork: true 183 | dnsPolicy: ClusterFirstWithHostNet 184 | {{- else }} 185 | dnsPolicy: {{ $.Values.broker.dnsPolicy | default "ClusterFirst" }} 186 | {{- end }} 187 | terminationGracePeriodSeconds: {{ $.Values.broker.terminationGracePeriodSeconds | default 30 }} 188 | volumes: 189 | - configMap: 190 | items: 191 | - key: broker-base.conf 192 | path: broker-base.conf 193 | name: {{ $configmapName }} 194 | name: broker-base-config 195 | - configMap: 196 | items: 197 | - key: mq-server-start.sh 198 | path: mq-server-start.sh 199 | name: {{ $configmapName }} 200 | defaultMode: 0755 201 | name: mq-server-start-sh 202 | {{- if $.Values.broker.aclConfigMapEnabled }} 203 | - configMap: 204 | name: {{ include "rocketmq.acl.configmap.fullname" $ }} 205 | name: acl-config 206 | {{- end }} 207 | {{- if not $.Values.broker.persistence.enabled }} 208 | - name: broker-storage 209 | emptyDir: {} 210 | {{- else }} 211 | volumeClaimTemplates: 212 | - metadata: 213 | name: broker-storage 214 | {{- with $.Values.broker.persistence.annotations }} 215 | annotations: 216 | {{- toYaml . | nindent 10 }} 217 | {{- end }} 218 | spec: 219 | accessModes: 220 | {{- with $.Values.broker.persistence.accessModes }} 221 | {{- toYaml . | nindent 10 }} 222 | {{- else }} 223 | - ReadWriteOnce 224 | {{- end }} 225 | {{- with $.Values.broker.persistence.storageClass }} 226 | storageClassName: {{ if (eq "-" .) }}""{{ else }}{{ . }}{{ end }} 227 | {{- end }} 228 | resources: 229 | requests: 230 | storage: {{ $.Values.broker.persistence.size | quote }} 231 | {{- with $.Values.broker.persistence.selector }} 232 | selector: 233 | {{- toYaml . | nindent 10 }} 234 | {{- end }} 235 | {{- end }} 236 | {{- end }} -------------------------------------------------------------------------------- /charts/rocketmq/templates/configmap.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ include "rocketmq.configmap.fullname" . }} 5 | data: 6 | broker-base.conf: | 7 | {{- range $key, $value := .Values.broker.config }} 8 | {{ $key }} = {{ $value }} 9 | {{- end }} 10 | {{- if and .Values.controllerModeEnabled }} 11 | enableControllerMode = true 12 | controllerAddr = {{ include "rocketmq.broker.controllerAddr" . }} 13 | {{- end }} 14 | brokerClusterName = {{ .Values.clusterName }} 15 | controller-base.conf: | 16 | {{- range $key, $value := .Values.controller.config }} 17 | {{ $key }} = {{ $value }} 18 | {{- end }} 19 | {{- if eq (include "rocketmq.enableControllerInNamesrv" $) "true" }} 20 | enableControllerInNamesrv = true 21 | {{- end }} 22 | controllerDLegerPeers = {{ include "rocketmq.controller.dlegerPeers" $ }} 23 | controllerStorePath = /home/rocketmq/controller-data 24 | proxy.json: | 25 | { 26 | "rocketMQClusterName": "{{ .Values.clusterName }}" 27 | } 28 | mq-server-start.sh: | 29 | java -version 30 | if [ $? -ne 0 ]; then 31 | echo "[ERROR] Missing java runtime" 32 | exit 50 33 | fi 34 | if [ -z "${ROCKETMQ_HOME}" ]; then 35 | echo "[ERROR] Missing env ROCKETMQ_HOME" 36 | exit 50 37 | fi 38 | if [ -z "${ROCKETMQ_PROCESS_ROLE}" ]; then 39 | echo "[ERROR] Missing env ROCKETMQ_PROCESS_ROLE" 40 | exit 50 41 | fi 42 | 43 | export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java)))) 44 | export CLASSPATH=".:${ROCKETMQ_HOME}/conf:${ROCKETMQ_HOME}/lib/*:${CLASSPATH}" 45 | 46 | JAVA_OPT="${JAVA_OPT} -server" 47 | if [ -n "$ROCKETMQ_JAVA_OPTIONS_OVERRIDE" ]; then 48 | JAVA_OPT="${JAVA_OPT} ${ROCKETMQ_JAVA_OPTIONS_OVERRIDE}" 49 | else 50 | JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC" 51 | JAVA_OPT="${JAVA_OPT} ${ROCKETMQ_JAVA_OPTIONS_EXT}" 52 | JAVA_OPT="${JAVA_OPT} ${ROCKETMQ_JAVA_OPTIONS_HEAP}" 53 | fi 54 | JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}" 55 | 56 | export BROKER_CONF_FILE="$HOME/broker.conf" 57 | export CONTROLLER_CONF_FILE="$HOME/controller.conf" 58 | 59 | update_broker_conf() { 60 | local key=$1 61 | local value=$2 62 | sed -i "/^${key} *=/d" ${BROKER_CONF_FILE} 63 | echo "${key} = ${value}" >> ${BROKER_CONF_FILE} 64 | } 65 | 66 | init_broker_role() { 67 | if [ "${ROCKETMQ_CONF_brokerRole}" = "SLAVE" ]; then 68 | update_broker_conf "brokerRole" "SLAVE" 69 | elif [ "${ROCKETMQ_CONF_brokerRole}" = "SYNC_MASTER" ]; then 70 | update_broker_conf "brokerRole" "SYNC_MASTER" 71 | else 72 | update_broker_conf "brokerRole" "ASYNC_MASTER" 73 | fi 74 | if echo "${ROCKETMQ_CONF_brokerId}" | grep -E '^[0-9]+$'; then 75 | update_broker_conf "brokerId" "${ROCKETMQ_CONF_brokerId}" 76 | fi 77 | } 78 | 79 | init_broker_conf() { 80 | rm -f ${BROKER_CONF_FILE} 81 | cp /etc/rocketmq/broker-base.conf ${BROKER_CONF_FILE} 82 | echo "" >> ${BROKER_CONF_FILE} 83 | echo "# generated config" >> ${BROKER_CONF_FILE} 84 | broker_name_seq=${HOSTNAME##*-} 85 | if [ -n "$MY_POD_NAME" ]; then 86 | broker_name_seq=${MY_POD_NAME##*-} 87 | fi 88 | update_broker_conf "brokerName" "broker-g${broker_name_seq}" 89 | if [ "$enableControllerMode" != "true" ]; then 90 | init_broker_role 91 | fi 92 | echo "[exec] cat ${BROKER_CONF_FILE}" 93 | cat ${BROKER_CONF_FILE} 94 | } 95 | 96 | init_acl_conf() { 97 | if [ -f /etc/rocketmq/acl/plain_acl.yml ]; then 98 | rm -f "${ROCKETMQ_HOME}/conf/plain_acl.yml" 99 | ln -sf "/etc/rocketmq/acl" "${ROCKETMQ_HOME}/conf/acl" 100 | fi 101 | } 102 | 103 | init_controller_conf() { 104 | rm -f ${CONTROLLER_CONF_FILE} 105 | cp /etc/rocketmq/base-cm/controller-base.conf ${CONTROLLER_CONF_FILE} 106 | controllerDLegerSelfId="n${HOSTNAME##*-}" 107 | if [ -n "$MY_POD_NAME" ]; then 108 | controllerDLegerSelfId="n${MY_POD_NAME##*-}" 109 | fi 110 | sed -i "/^controllerDLegerSelfId *=/d" ${CONTROLLER_CONF_FILE} 111 | echo "controllerDLegerSelfId = ${controllerDLegerSelfId}" >> ${CONTROLLER_CONF_FILE} 112 | cat ${CONTROLLER_CONF_FILE} 113 | } 114 | 115 | if [ "$ROCKETMQ_PROCESS_ROLE" = "broker" ]; then 116 | init_broker_conf 117 | init_acl_conf 118 | set -x 119 | java ${JAVA_OPT} org.apache.rocketmq.broker.BrokerStartup -c ${BROKER_CONF_FILE} 120 | elif [ "$ROCKETMQ_PROCESS_ROLE" = "controller" ]; then 121 | init_controller_conf 122 | set -x 123 | java ${JAVA_OPT} org.apache.rocketmq.controller.ControllerStartup -c ${CONTROLLER_CONF_FILE} 124 | elif [ "$ROCKETMQ_PROCESS_ROLE" = "nameserver" ] || [ "$ROCKETMQ_PROCESS_ROLE" = "mqnamesrv" ]; then 125 | set -x 126 | if [ "$enableControllerInNamesrv" = "true" ]; then 127 | init_controller_conf 128 | java ${JAVA_OPT} org.apache.rocketmq.namesrv.NamesrvStartup -c ${CONTROLLER_CONF_FILE} 129 | else 130 | java ${JAVA_OPT} org.apache.rocketmq.namesrv.NamesrvStartup 131 | fi 132 | elif [ "$ROCKETMQ_PROCESS_ROLE" = "proxy" ]; then 133 | set -x 134 | if [ -f $RMQ_PROXY_CONFIG_PATH ]; then 135 | java ${JAVA_OPT} org.apache.rocketmq.proxy.ProxyStartup -pc $RMQ_PROXY_CONFIG_PATH 136 | else 137 | java ${JAVA_OPT} org.apache.rocketmq.proxy.ProxyStartup 138 | fi 139 | else 140 | echo "[ERROR] Missing env ROCKETMQ_PROCESS_ROLE" 141 | exit 50 142 | fi -------------------------------------------------------------------------------- /charts/rocketmq/templates/controller/statefulset.yaml: -------------------------------------------------------------------------------- 1 | {{- with .Values.controller -}} 2 | {{- if and .enabled -}} 3 | {{- $clusterRole := "controller" -}} 4 | {{- $image := printf "%s:%s" $.Values.image.repository $.Values.image.tag }} 5 | apiVersion: apps/v1 6 | kind: StatefulSet 7 | metadata: 8 | name: {{ include "rocketmq.controller.fullname" $ | quote }} 9 | labels: 10 | {{- include "rocketmq.labels" $ | nindent 4 }} 11 | {{- with .labels }} 12 | {{- toYaml . | nindent 4 }} 13 | {{- end }} 14 | {{- with .annotations }} 15 | annotations: 16 | {{- toYaml . | nindent 4 }} 17 | {{- end }} 18 | spec: 19 | minReadySeconds: {{ .minReadySeconds | default 20 }} 20 | replicas: {{ .replicaCount }} 21 | podManagementPolicy: {{ .podManagementPolicy | default "Parallel" }} 22 | {{- with .updateStrategy }} 23 | updateStrategy: 24 | {{- toYaml . | nindent 4 }} 25 | {{- end }} 26 | selector: 27 | matchLabels: 28 | {{- include "rocketmq.selectorLabels" $ | nindent 6 }} 29 | component: {{ $clusterRole }} 30 | serviceName: {{ include "rocketmq.controller.fullname" $ | quote }} 31 | template: 32 | metadata: 33 | annotations: 34 | checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") $ | sha256sum }} 35 | {{- with .podAnnotations }} 36 | {{- toYaml . | nindent 8 }} 37 | {{- end }} 38 | labels: 39 | {{- include "rocketmq.selectorLabels" $ | nindent 8 }} 40 | component: {{ $clusterRole }} 41 | {{- with .podLabels }} 42 | {{- toYaml . | nindent 8 }} 43 | {{- end }} 44 | spec: 45 | {{- with .imagePullSecrets | default $.Values.image.pullSecrets }} 46 | imagePullSecrets: 47 | {{- toYaml . | nindent 8 }} 48 | {{- end }} 49 | {{- with .nodeSelector }} 50 | nodeSelector: 51 | {{- toYaml . | nindent 8 }} 52 | {{- end }} 53 | {{- if not .affinityOverride }} 54 | affinity: 55 | podAntiAffinity: 56 | preferredDuringSchedulingIgnoredDuringExecution: 57 | - weight: 5 58 | podAffinityTerm: 59 | labelSelector: 60 | matchLabels: 61 | {{- include "rocketmq.selectorLabels" $ | nindent 18 }} 62 | component: nameserver 63 | topologyKey: kubernetes.io/hostname 64 | {{- else if .affinityOverride }} 65 | affinity: 66 | {{- toYaml .affinityOverride | nindent 8 }} 67 | {{- end }} 68 | {{- with .tolerations }} 69 | tolerations: 70 | {{- toYaml . | nindent 8 }} 71 | {{- end }} 72 | securityContext: 73 | {{- if .podSecurityContext }} 74 | {{- toYaml .podSecurityContext | nindent 8 }} 75 | {{- else if $.Values.podSecurityContext }} 76 | {{- toYaml $.Values.podSecurityContext | nindent 8 }} 77 | {{- end }} 78 | containers: 79 | - name: nameserver 80 | image: {{ $image | quote }} 81 | imagePullPolicy: {{ $.Values.image.pullPolicy | default "IfNotPresent" }} 82 | {{- with .containerSecurityContext }} 83 | securityContext: 84 | {{- toYaml . | nindent 10 }} 85 | {{- end }} 86 | command: 87 | - sh 88 | - /mq-server-start.sh 89 | env: 90 | - name: ROCKETMQ_PROCESS_ROLE 91 | value: {{ $clusterRole }} 92 | - name: CONTROLLER_CONF_FILE 93 | value: /etc/rocketmq/controller.conf 94 | {{- if .jvm }} 95 | {{- with .jvm.maxHeapSize }} 96 | - name: ROCKETMQ_JAVA_OPTIONS_HEAP 97 | value: {{ printf "-Xms%s -Xmx%s" . . | quote }} 98 | {{- end }} 99 | {{- with .jvm.javaOptsOverride }} 100 | - name: ROCKETMQ_JAVA_OPTIONS_OVERRIDE 101 | value: {{ . | quote }} 102 | {{- end }} 103 | {{- end }} 104 | ports: 105 | - containerPort: 9878 106 | name: main 107 | protocol: TCP 108 | resources: 109 | {{- toYaml .resources | nindent 10 }} 110 | {{- with .readinessProbe }} 111 | readinessProbe: 112 | {{- toYaml . | nindent 10 }} 113 | {{- end }} 114 | {{- with .livenessProbe }} 115 | livenessProbe: 116 | {{- toYaml . | nindent 10 }} 117 | {{- end }} 118 | lifecycle: 119 | preStop: 120 | exec: 121 | command: ["sh", "-c", "sleep 5; ./mqshutdown controller"] 122 | volumeMounts: 123 | - mountPath: /mq-server-start.sh 124 | name: mq-server-start-sh 125 | subPath: mq-server-start.sh 126 | - mountPath: /etc/rocketmq/base-cm 127 | name: base-cm 128 | - mountPath: /home/rocketmq/controller-data 129 | name: data 130 | subPath: controller-data 131 | - mountPath: /home/rocketmq/logs 132 | name: data 133 | subPath: logs 134 | dnsPolicy: ClusterFirst 135 | terminationGracePeriodSeconds: {{ .terminationGracePeriodSeconds | default 15 }} 136 | volumes: 137 | - configMap: 138 | items: 139 | - key: mq-server-start.sh 140 | path: mq-server-start.sh 141 | name: {{ include "rocketmq.configmap.fullname" $ }} 142 | defaultMode: 0755 143 | name: mq-server-start-sh 144 | - configMap: 145 | name: {{ include "rocketmq.configmap.fullname" $ }} 146 | name: base-cm 147 | {{- if not .persistence.enabled }} 148 | - name: data 149 | emptyDir: {} 150 | {{- else }} 151 | volumeClaimTemplates: 152 | - metadata: 153 | name: data 154 | {{- with .persistence.annotations }} 155 | annotations: 156 | {{- toYaml . | nindent 10 }} 157 | {{- end }} 158 | spec: 159 | accessModes: 160 | {{- with .persistence.accessModes }} 161 | {{- toYaml . | nindent 10 }} 162 | {{- else }} 163 | - ReadWriteOnce 164 | {{- end }} 165 | {{- with .persistence.storageClass }} 166 | storageClassName: {{ if (eq "-" .) }}""{{ else }}{{ . }}{{ end }} 167 | {{- end }} 168 | resources: 169 | requests: 170 | storage: {{ .persistence.size | quote }} 171 | {{- with .persistence.selector }} 172 | selector: 173 | {{- toYaml . | nindent 10 }} 174 | {{- end }} 175 | {{- end }} 176 | {{- end }} 177 | {{- end }} -------------------------------------------------------------------------------- /charts/rocketmq/templates/controller/svc-headless.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.controller.enabled -}} 2 | {{- with .Values.controller.service -}} 3 | apiVersion: v1 4 | kind: Service 5 | metadata: 6 | name: {{ include "rocketmq.controller.fullname" $ }} 7 | labels: 8 | {{- include "rocketmq.labels" $ | nindent 4 }} 9 | component: controller 10 | {{- with .labels }} 11 | {{- toYaml . | nindent 4 }} 12 | {{- end }} 13 | {{- with .annotations }} 14 | annotations: 15 | {{- toYaml . | nindent 4 }} 16 | {{- end }} 17 | spec: 18 | clusterIP: "None" 19 | publishNotReadyAddresses: true 20 | ports: 21 | - port: 9878 22 | protocol: TCP 23 | targetPort: 9878 24 | selector: 25 | {{- include "rocketmq.selectorLabels" $ | nindent 4 }} 26 | component: controller 27 | {{- end }} 28 | {{- end }} -------------------------------------------------------------------------------- /charts/rocketmq/templates/dashboard/configmap.yaml: -------------------------------------------------------------------------------- 1 | {{- with .Values.dashboard }} 2 | {{- if and .enabled .auth .auth.enabled -}} 3 | apiVersion: v1 4 | kind: ConfigMap 5 | metadata: 6 | name: {{ include "rocketmq.dashboard.configmap.fullname" $ | quote }} 7 | data: 8 | {{- if .auth.users }} 9 | users.properties: | 10 | {{- range .auth.users }} 11 | {{ .name }}={{ .password }}{{ if .isAdmin }},1{{ end }} 12 | {{- end }} 13 | {{- else }} 14 | users.properties: | 15 | admin=admin,1 16 | {{- end }} 17 | {{- end }} 18 | {{- end }} -------------------------------------------------------------------------------- /charts/rocketmq/templates/dashboard/deployment.yaml: -------------------------------------------------------------------------------- 1 | {{- with .Values.dashboard -}} 2 | {{- if .enabled -}} 3 | apiVersion: apps/v1 4 | kind: Deployment 5 | metadata: 6 | name: {{ include "rocketmq.dashboard.fullname" $ | quote }} 7 | labels: 8 | {{- include "rocketmq.labels" $ | nindent 4 }} 9 | {{- with .labels }} 10 | {{- toYaml . | nindent 4 }} 11 | {{- end }} 12 | {{- with .annotations }} 13 | annotations: 14 | {{- toYaml . | nindent 4 }} 15 | {{- end }} 16 | spec: 17 | replicas: {{ .replicaCount }} 18 | selector: 19 | matchLabels: 20 | {{- include "rocketmq.selectorLabels" $ | nindent 6 }} 21 | component: dashboard 22 | template: 23 | metadata: 24 | annotations: 25 | checksum/config: {{ include (print $.Template.BasePath "/dashboard/configmap.yaml") $ | sha256sum }} 26 | {{- with .podAnnotations }} 27 | {{- toYaml . | nindent 8 }} 28 | {{- end }} 29 | labels: 30 | {{- include "rocketmq.selectorLabels" $ | nindent 8 }} 31 | component: dashboard 32 | {{- with .podLabels}} 33 | {{- toYaml . | nindent 8 }} 34 | {{- end }} 35 | spec: 36 | {{- with .imagePullSecrets | default $.Values.image.pullSecrets }} 37 | imagePullSecrets: 38 | {{- toYaml . | nindent 8 }} 39 | {{- end }} 40 | containers: 41 | - name: dashboard 42 | image: {{ printf "%s:%s" .image.repository .image.tag | quote }} 43 | imagePullPolicy: {{ .image.pullPolicy | default "IfNotPresent" }} 44 | env: 45 | - name: JAVA_OPTS 46 | {{- $namesrvAddr := printf "%s.%s.svc:9876" (include "rocketmq.nameserver.fullname" $) $.Release.Namespace }} 47 | value: {{ printf "-XX:MaxHeapSize=%s -Drocketmq.namesrv.addr=%s" .jvm.maxHeapSize $namesrvAddr }} 48 | {{- if .auth.enabled }} 49 | - name: rocketmq.config.loginRequired 50 | value: "true" 51 | - name: rocketmq.config.dataPath 52 | value: {{ include "rocketmq.dashboard.dataPath" $ }} 53 | {{- end }} 54 | ports: 55 | - name: http 56 | containerPort: 8080 57 | protocol: TCP 58 | resources: 59 | {{- toYaml .resources | nindent 10 }} 60 | {{- with .livenessProbe }} 61 | livenessProbe: 62 | {{- toYaml . | nindent 12 }} 63 | {{- end }} 64 | {{- with .readinessProbe }} 65 | readinessProbe: 66 | {{- toYaml . | nindent 12 }} 67 | {{- end }} 68 | {{- if .auth.enabled }} 69 | volumeMounts: 70 | - mountPath: "{{ include "rocketmq.dashboard.dataPath" $ }}/users.properties" 71 | name: dashboard-cm 72 | subPath: users.properties 73 | {{- end }} 74 | terminationGracePeriodSeconds: {{ .terminationGracePeriodSeconds | default 5 }} 75 | {{- if .auth.enabled }} 76 | volumes: 77 | - configMap: 78 | items: 79 | - key: users.properties 80 | path: users.properties 81 | name: {{ include "rocketmq.dashboard.configmap.fullname" $ }} 82 | name: dashboard-cm 83 | {{- end }} 84 | {{- end }} 85 | {{- end }} -------------------------------------------------------------------------------- /charts/rocketmq/templates/dashboard/ingress.yaml: -------------------------------------------------------------------------------- 1 | {{- with .Values.dashboard.ingress -}} 2 | {{- if and .enabled $.Values.dashboard.enabled -}} 3 | {{- $fullName := include "rocketmq.dashboard.fullname" $ -}} 4 | {{- if and .className (not (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion)) }} 5 | {{- if not (hasKey .annotations "kubernetes.io/ingress.class") }} 6 | {{- $_ := set .annotations "kubernetes.io/ingress.class" .className}} 7 | {{- end }} 8 | {{- end }} 9 | {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion -}} 10 | apiVersion: networking.k8s.io/v1 11 | {{- else if semverCompare ">=1.14-0" $.Capabilities.KubeVersion.GitVersion -}} 12 | apiVersion: networking.k8s.io/v1beta1 13 | {{- else -}} 14 | apiVersion: extensions/v1beta1 15 | {{- end }} 16 | kind: Ingress 17 | metadata: 18 | name: {{ $fullName }} 19 | labels: 20 | {{- include "rocketmq.labels" $ | nindent 4 }} 21 | {{- with .annotations }} 22 | annotations: 23 | {{- toYaml . | nindent 4 }} 24 | {{- end }} 25 | spec: 26 | {{- if and .className (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} 27 | ingressClassName: {{ .className }} 28 | {{- end }} 29 | {{- if .tls }} 30 | tls: 31 | {{- range .tls }} 32 | - hosts: 33 | {{- range .hosts }} 34 | - {{ . | quote }} 35 | {{- end }} 36 | secretName: {{ .secretName }} 37 | {{- end }} 38 | {{- end }} 39 | rules: 40 | {{- range .hosts }} 41 | - host: {{ .host | quote }} 42 | http: 43 | paths: 44 | - path: / 45 | pathType: Prefix 46 | backend: 47 | {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} 48 | service: 49 | name: {{ $fullName }} 50 | port: 51 | number: 8080 52 | {{- else }} 53 | serviceName: {{ $fullName }} 54 | servicePort: 8080 55 | {{- end }} 56 | {{- end }} 57 | {{- end }} 58 | {{- end }} -------------------------------------------------------------------------------- /charts/rocketmq/templates/dashboard/service.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.dashboard.enabled -}} 2 | {{- with .Values.dashboard.service -}} 3 | apiVersion: v1 4 | kind: Service 5 | metadata: 6 | name: {{ include "rocketmq.dashboard.fullname" $ }} 7 | labels: 8 | {{- include "rocketmq.labels" $ | nindent 4 }} 9 | component: dashboard 10 | {{- with .labels }} 11 | {{- toYaml . | nindent 4 }} 12 | {{- end }} 13 | {{- with .annotations }} 14 | annotations: 15 | {{- toYaml . | nindent 4 }} 16 | {{- end }} 17 | spec: 18 | ports: 19 | - port: 8080 20 | protocol: TCP 21 | targetPort: 8080 22 | {{- if and (eq .type "NodePort") .nodePort }} 23 | nodePort: {{ .nodePort }} 24 | {{- end }} 25 | {{- with .additionalPorts }} 26 | {{- toYaml . | nindent 2 }} 27 | {{- end }} 28 | selector: 29 | {{- include "rocketmq.selectorLabels" $ | nindent 4 }} 30 | component: dashboard 31 | {{- with .type }} 32 | type: {{ . | quote }} 33 | {{- end }} 34 | {{- with .clusterIP }} 35 | clusterIP: {{ . | quote }} 36 | {{- end }} 37 | {{- if and (eq "LoadBalancer" .type) .loadBalancerIP }} 38 | loadBalancerIP: {{ .loadBalancerIP | quote }} 39 | {{- end }} 40 | {{- with .loadBalancerClass }} 41 | loadBalancerClass: {{ . | quote }} 42 | {{- end }} 43 | {{- with .externalTrafficPolicy }} 44 | externalTrafficPolicy: {{ . | quote }} 45 | {{- end }} 46 | {{- with .sessionAffinity }} 47 | sessionAffinity: {{ . | quote }} 48 | {{- end }} 49 | {{- end }} 50 | {{- end }} -------------------------------------------------------------------------------- /charts/rocketmq/templates/nameserver/statefulset.yaml: -------------------------------------------------------------------------------- 1 | {{- with .Values.nameserver -}} 2 | {{- $clusterRole := "nameserver" -}} 3 | {{- $configmapName := include "rocketmq.configmap.fullname" $ -}} 4 | {{- $image := printf "%s:%s" $.Values.image.repository $.Values.image.tag }} 5 | apiVersion: apps/v1 6 | kind: StatefulSet 7 | metadata: 8 | name: {{ include "rocketmq.nameserver.fullname" $ | quote }} 9 | labels: 10 | {{- include "rocketmq.labels" $ | nindent 4 }} 11 | {{- with .labels }} 12 | {{- toYaml . | nindent 4 }} 13 | {{- end }} 14 | {{- with .annotations }} 15 | annotations: 16 | {{- toYaml . | nindent 4 }} 17 | {{- end }} 18 | spec: 19 | minReadySeconds: {{ .minReadySeconds | default 20 }} 20 | replicas: {{ .replicaCount }} 21 | podManagementPolicy: {{ .podManagementPolicy | default "Parallel" }} 22 | {{- with .updateStrategy }} 23 | updateStrategy: 24 | {{- toYaml . | nindent 4 }} 25 | {{- end }} 26 | selector: 27 | matchLabels: 28 | {{- include "rocketmq.selectorLabels" $ | nindent 6 }} 29 | component: {{ $clusterRole }} 30 | serviceName: "{{ include "rocketmq.nameserver.fullname" $ }}-headless" 31 | template: 32 | metadata: 33 | annotations: 34 | checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") $ | sha256sum }} 35 | {{- with .podAnnotations }} 36 | {{- toYaml . | nindent 8 }} 37 | {{- end }} 38 | labels: 39 | {{- include "rocketmq.selectorLabels" $ | nindent 8 }} 40 | component: {{ $clusterRole }} 41 | {{- with .podLables }} 42 | {{- toYaml . | nindent 8 }} 43 | {{- end }} 44 | spec: 45 | {{- with .imagePullSecrets | default $.Values.image.pullSecrets }} 46 | imagePullSecrets: 47 | {{- toYaml . | nindent 8 }} 48 | {{- end }} 49 | {{- with .nodeSelector }} 50 | nodeSelector: 51 | {{- toYaml . | nindent 8 }} 52 | {{- end }} 53 | {{- if not .affinityOverride }} 54 | affinity: 55 | podAntiAffinity: 56 | preferredDuringSchedulingIgnoredDuringExecution: 57 | - weight: 5 58 | podAffinityTerm: 59 | labelSelector: 60 | matchLabels: 61 | {{- include "rocketmq.selectorLabels" $ | nindent 18 }} 62 | component: nameserver 63 | topologyKey: kubernetes.io/hostname 64 | {{- else if .affinityOverride }} 65 | affinity: 66 | {{- toYaml .affinityOverride | nindent 8 }} 67 | {{- end }} 68 | {{- with .tolerations }} 69 | tolerations: 70 | {{- toYaml . | nindent 8 }} 71 | {{- end }} 72 | securityContext: 73 | {{- if .podSecurityContext }} 74 | {{- toYaml .podSecurityContext | nindent 8 }} 75 | {{- else if $.Values.podSecurityContext }} 76 | {{- toYaml $.Values.podSecurityContext | nindent 8 }} 77 | {{- end }} 78 | containers: 79 | - name: nameserver 80 | image: {{ $image | quote }} 81 | imagePullPolicy: {{ $.Values.image.pullPolicy | default "IfNotPresent" }} 82 | {{- with .containerSecurityContext }} 83 | securityContext: 84 | {{- toYaml . | nindent 10 }} 85 | {{- end }} 86 | command: 87 | - sh 88 | - /mq-server-start.sh 89 | env: 90 | - name: ROCKETMQ_PROCESS_ROLE 91 | value: {{ $clusterRole }} 92 | - name: ROCKETMQ_JAVA_OPTIONS_HEAP 93 | {{- $maxHeapSize := .jvm.maxHeapSize }} 94 | value: {{ printf "-Xms%s -Xmx%s" $maxHeapSize $maxHeapSize }} 95 | {{- if and .jvm .jvm.javaOptsOverride }} 96 | - name: ROCKETMQ_JAVA_OPTIONS_OVERRIDE 97 | value: {{ .jvm.javaOptsOverride | quote }} 98 | {{- end }} 99 | {{- if eq (include "rocketmq.enableControllerInNamesrv" $) "true" }} 100 | - name: enableControllerInNamesrv 101 | value: "true" 102 | {{- end }} 103 | ports: 104 | - containerPort: 9876 105 | name: main 106 | protocol: TCP 107 | resources: 108 | {{- toYaml .resources | nindent 10 }} 109 | {{- with .readinessProbe }} 110 | readinessProbe: 111 | {{- toYaml . | nindent 10 }} 112 | {{- end }} 113 | {{- with .livenessProbe }} 114 | livenessProbe: 115 | {{- toYaml . | nindent 10 }} 116 | {{- end }} 117 | lifecycle: 118 | preStop: 119 | exec: 120 | command: ["sh", "-c", "sleep 5; ./mqshutdown namesrv"] 121 | volumeMounts: 122 | - mountPath: /mq-server-start.sh 123 | name: mq-server-start-sh 124 | subPath: mq-server-start.sh 125 | - mountPath: /etc/rocketmq/base-cm 126 | name: base-cm 127 | - mountPath: /home/rocketmq/logs 128 | name: nameserver-storage 129 | subPath: logs 130 | {{- if eq (include "rocketmq.enableControllerInNamesrv" $) "true" }} 131 | - mountPath: /home/rocketmq/controller-data 132 | name: nameserver-storage 133 | subPath: controller-data 134 | {{- end }} 135 | dnsPolicy: ClusterFirst 136 | terminationGracePeriodSeconds: {{ .terminationGracePeriodSeconds | default 15 }} 137 | volumes: 138 | - configMap: 139 | items: 140 | - key: mq-server-start.sh 141 | path: mq-server-start.sh 142 | name: {{ $configmapName }} 143 | defaultMode: 0755 144 | name: mq-server-start-sh 145 | - configMap: 146 | name: {{ include "rocketmq.configmap.fullname" $ }} 147 | name: base-cm 148 | {{- if not .persistence.enabled }} 149 | - name: nameserver-storage 150 | emptyDir: {} 151 | {{- else }} 152 | volumeClaimTemplates: 153 | - metadata: 154 | name: nameserver-storage 155 | {{- with .persistence.annotations }} 156 | annotations: 157 | {{- toYaml . | nindent 10 }} 158 | {{- end }} 159 | spec: 160 | accessModes: 161 | {{- with .persistence.accessModes }} 162 | {{- toYaml . | nindent 10 }} 163 | {{- else }} 164 | - ReadWriteOnce 165 | {{- end }} 166 | {{- with .persistence.storageClass }} 167 | storageClassName: {{ if (eq "-" .) }}""{{ else }}{{ . }}{{ end }} 168 | {{- end }} 169 | resources: 170 | requests: 171 | storage: {{ .persistence.size | quote }} 172 | {{- with .persistence.selector }} 173 | selector: 174 | {{- toYaml . | nindent 10 }} 175 | {{- end }} 176 | {{- end }} 177 | {{- end }} -------------------------------------------------------------------------------- /charts/rocketmq/templates/nameserver/svc-headless.yaml: -------------------------------------------------------------------------------- 1 | {{- $headless := .Values.nameserver.headlessService | default dict -}} 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | name: "{{ include "rocketmq.nameserver.fullname" $ }}-headless" 6 | labels: 7 | {{- include "rocketmq.labels" $ | nindent 4 }} 8 | component: nameserver 9 | {{- with $headless.annotations }} 10 | annotations: 11 | {{- toYaml . | nindent 4 }} 12 | {{- end }} 13 | spec: 14 | clusterIP: "None" 15 | publishNotReadyAddresses: true 16 | ports: 17 | - port: 9876 18 | protocol: TCP 19 | targetPort: 9876 20 | {{- with $headless.additionalPorts }} 21 | {{- toYaml . | nindent 2 }} 22 | {{- end }} 23 | selector: 24 | {{- include "rocketmq.selectorLabels" $ | nindent 4 }} 25 | component: nameserver 26 | -------------------------------------------------------------------------------- /charts/rocketmq/templates/nameserver/svc.yaml: -------------------------------------------------------------------------------- 1 | {{- with .Values.nameserver.service -}} 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | name: {{ include "rocketmq.nameserver.fullname" $ }} 6 | labels: 7 | {{- include "rocketmq.labels" $ | nindent 4 }} 8 | component: nameserver 9 | {{- with .labels }} 10 | {{- toYaml . | nindent 4 }} 11 | {{- end }} 12 | {{- with .annotations }} 13 | annotations: 14 | {{- toYaml . | nindent 4 }} 15 | {{- end }} 16 | spec: 17 | ports: 18 | - port: 9876 19 | protocol: TCP 20 | targetPort: 9876 21 | {{- if and (eq .type "NodePort") .nodePort }} 22 | nodePort: {{ .nodePort }} 23 | {{- end }} 24 | {{- with .additionalPorts }} 25 | {{- toYaml . | nindent 2 }} 26 | {{- end }} 27 | selector: 28 | {{- include "rocketmq.selectorLabels" $ | nindent 4 }} 29 | component: nameserver 30 | {{- with .type }} 31 | type: {{ . | quote }} 32 | {{- end }} 33 | {{- with .clusterIP }} 34 | clusterIP: {{ . | quote }} 35 | {{- end }} 36 | {{- if and (eq "LoadBalancer" .type) .loadBalancerIP }} 37 | loadBalancerIP: {{ .loadBalancerIP | quote }} 38 | {{- end }} 39 | {{- with .loadBalancerClass }} 40 | loadBalancerClass: {{ . | quote }} 41 | {{- end }} 42 | {{- with .externalTrafficPolicy }} 43 | externalTrafficPolicy: {{ . | quote }} 44 | {{- end }} 45 | {{- with .sessionAffinity }} 46 | sessionAffinity: {{ . | quote }} 47 | {{- end }} 48 | {{- end }} -------------------------------------------------------------------------------- /charts/rocketmq/templates/proxy/deployment.yaml: -------------------------------------------------------------------------------- 1 | {{- with .Values.proxy -}} 2 | {{- if .enabled -}} 3 | {{- $clusterRole := "proxy" -}} 4 | {{- $configmapName := include "rocketmq.configmap.fullname" $ -}} 5 | {{- $image := printf "%s:%s" $.Values.image.repository $.Values.image.tag }} 6 | apiVersion: apps/v1 7 | kind: Deployment 8 | metadata: 9 | name: {{ include "rocketmq.proxy.fullname" $ | quote }} 10 | labels: 11 | {{- include "rocketmq.labels" $ | nindent 4 }} 12 | {{- with .labels }} 13 | {{- toYaml . | nindent 4 }} 14 | {{- end }} 15 | {{- with .annotations }} 16 | annotations: 17 | {{- toYaml . | nindent 4 }} 18 | {{- end }} 19 | spec: 20 | minReadySeconds: {{ .minReadySeconds | default 20 }} 21 | replicas: {{ .replicaCount }} 22 | {{- with .updateStrategy }} 23 | updateStrategy: 24 | {{- toYaml . | nindent 4 }} 25 | {{- end }} 26 | selector: 27 | matchLabels: 28 | {{- include "rocketmq.selectorLabels" $ | nindent 6 }} 29 | component: {{ $clusterRole }} 30 | template: 31 | metadata: 32 | annotations: 33 | checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") $ | sha256sum }} 34 | {{- with .podAnnotations }} 35 | {{- toYaml . | nindent 8 }} 36 | {{- end }} 37 | labels: 38 | {{- include "rocketmq.selectorLabels" $ | nindent 8 }} 39 | component: {{ $clusterRole }} 40 | {{- with .podLabels }} 41 | {{- toYaml . | nindent 8 }} 42 | {{- end }} 43 | spec: 44 | {{- with .imagePullSecrets | default $.Values.image.pullSecrets }} 45 | imagePullSecrets: 46 | {{- toYaml . | nindent 8 }} 47 | {{- end }} 48 | {{- with .nodeSelector }} 49 | nodeSelector: 50 | {{- toYaml . | nindent 8 }} 51 | {{- end }} 52 | {{- if not .affinityOverride }} 53 | affinity: 54 | podAntiAffinity: 55 | preferredDuringSchedulingIgnoredDuringExecution: 56 | - weight: 5 57 | podAffinityTerm: 58 | labelSelector: 59 | matchLabels: 60 | {{- include "rocketmq.selectorLabels" $ | nindent 18 }} 61 | component: proxy 62 | topologyKey: kubernetes.io/hostname 63 | {{- else if .affinityOverride }} 64 | affinity: 65 | {{- toYaml .affinityOverride | nindent 8 }} 66 | {{- end }} 67 | {{- with .tolerations }} 68 | tolerations: 69 | {{- toYaml . | nindent 8 }} 70 | {{- end }} 71 | securityContext: 72 | {{- if .podSecurityContext }} 73 | {{- toYaml .podSecurityContext | nindent 8 }} 74 | {{- else if $.Values.podSecurityContext }} 75 | {{- toYaml $.Values.podSecurityContext | nindent 8 }} 76 | {{- end }} 77 | containers: 78 | - name: proxy 79 | image: {{ $image | quote }} 80 | imagePullPolicy: {{ $.Values.image.pullPolicy | default "IfNotPresent" }} 81 | {{- with .containerSecurityContext }} 82 | securityContext: 83 | {{- toYaml . | nindent 10 }} 84 | {{- end }} 85 | command: 86 | - sh 87 | - /mq-server-start.sh 88 | env: 89 | - name: NAMESRV_ADDR 90 | value: {{ include "rocketmq.nameserver.addr" $ }} 91 | - name: ROCKETMQ_PROCESS_ROLE 92 | value: {{ $clusterRole }} 93 | - name: RMQ_PROXY_CONFIG_PATH 94 | value: /etc/rocketmq/proxy.json 95 | - name: ROCKETMQ_JAVA_OPTIONS_HEAP 96 | {{- $maxHeapSize := .jvm.maxHeapSize }} 97 | value: {{ printf "-Xms%s -Xmx%s" $maxHeapSize $maxHeapSize }} 98 | {{- if and .jvm .jvm.javaOptsOverride }} 99 | - name: ROCKETMQ_JAVA_OPTIONS_OVERRIDE 100 | value: {{ .jvm.javaOptsOverride | quote }} 101 | {{- end }} 102 | ports: 103 | - name: main 104 | containerPort: 8080 105 | protocol: TCP 106 | - name: grpc 107 | containerPort: 8081 108 | protocol: TCP 109 | resources: 110 | {{- toYaml .resources | nindent 10 }} 111 | {{- with .readinessProbe }} 112 | readinessProbe: 113 | {{- toYaml . | nindent 10 }} 114 | {{- end }} 115 | {{- with .livenessProbe }} 116 | livenessProbe: 117 | {{- toYaml . | nindent 10 }} 118 | {{- end }} 119 | lifecycle: 120 | preStop: 121 | exec: 122 | command: ["sh", "-c", "sleep 5; ./mqshutdown {{ $clusterRole }}"] 123 | volumeMounts: 124 | - mountPath: /mq-server-start.sh 125 | name: mq-server-start-sh 126 | subPath: mq-server-start.sh 127 | - mountPath: /etc/rocketmq/proxy.json 128 | name: proxy-json 129 | subPath: proxy.json 130 | dnsPolicy: ClusterFirst 131 | terminationGracePeriodSeconds: {{ .terminationGracePeriodSeconds | default 15 }} 132 | volumes: 133 | - configMap: 134 | items: 135 | - key: mq-server-start.sh 136 | path: mq-server-start.sh 137 | name: {{ $configmapName }} 138 | defaultMode: 0755 139 | name: mq-server-start-sh 140 | - configMap: 141 | items: 142 | - key: proxy.json 143 | path: proxy.json 144 | name: {{ $configmapName }} 145 | name: proxy-json 146 | {{- end }} 147 | {{- end }} -------------------------------------------------------------------------------- /charts/rocketmq/templates/proxy/service.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.proxy.enabled -}} 2 | {{- with .Values.proxy.service -}} 3 | {{- $clusterRole := "proxy" -}} 4 | apiVersion: v1 5 | kind: Service 6 | metadata: 7 | name: {{ include "rocketmq.proxy.fullname" $ }} 8 | labels: 9 | {{- include "rocketmq.labels" $ | nindent 4 }} 10 | component: {{ $clusterRole }} 11 | {{- with .labels }} 12 | {{- toYaml . | nindent 4 }} 13 | {{- end }} 14 | {{- with .annotations }} 15 | annotations: 16 | {{- toYaml . | nindent 4 }} 17 | {{- end }} 18 | spec: 19 | ports: 20 | - port: 8080 21 | name: main 22 | protocol: TCP 23 | targetPort: 8080 24 | {{- if and (eq .type "NodePort") .nodePort }} 25 | nodePort: {{ .nodePort }} 26 | {{- end }} 27 | - port: 8081 28 | name: grpc 29 | protocol: TCP 30 | targetPort: 8081 31 | {{- if and (eq .type "NodePort") .nodePortGrpc }} 32 | nodePort: {{ .nodePortGrpc }} 33 | {{- end }} 34 | {{- with .additionalPorts }} 35 | {{- toYaml . | nindent 2 }} 36 | {{- end }} 37 | selector: 38 | {{- include "rocketmq.selectorLabels" $ | nindent 4 }} 39 | component: {{ $clusterRole }} 40 | {{- with .type }} 41 | type: {{ . | quote }} 42 | {{- end }} 43 | {{- with .clusterIP }} 44 | clusterIP: {{ . | quote }} 45 | {{- end }} 46 | {{- if and (eq "LoadBalancer" .type) .loadBalancerIP }} 47 | loadBalancerIP: {{ .loadBalancerIP | quote }} 48 | {{- end }} 49 | {{- with .loadBalancerClass }} 50 | loadBalancerClass: {{ . | quote }} 51 | {{- end }} 52 | {{- with .externalTrafficPolicy }} 53 | externalTrafficPolicy: {{ . | quote }} 54 | {{- end }} 55 | {{- with .sessionAffinity }} 56 | sessionAffinity: {{ . | quote }} 57 | {{- end }} 58 | {{- end }} 59 | {{- end }} -------------------------------------------------------------------------------- /charts/rocketmq/values.yaml: -------------------------------------------------------------------------------- 1 | clusterName: "rocketmq-helm" 2 | 3 | image: 4 | repository: "apache/rocketmq" 5 | tag: "5.3.2" 6 | pullPolicy: IfNotPresent 7 | pullSecrets: [] 8 | # - name: secretName 9 | 10 | podSecurityContext: 11 | fsGroup: 3000 12 | runAsUser: 3000 13 | 14 | broker: 15 | size: 16 | master: 1 17 | replica: 0 18 | 19 | # podSecurityContext: {} 20 | # containerSecurityContext: {} 21 | 22 | master: 23 | brokerRole: ASYNC_MASTER 24 | jvm: 25 | maxHeapSize: 1024M 26 | # javaOptsOverride: "" 27 | resources: 28 | limits: 29 | cpu: 4 30 | memory: 16Gi 31 | requests: 32 | cpu: 200m 33 | memory: 2Gi 34 | 35 | replica: 36 | jvm: 37 | maxHeapSize: 1024M 38 | # javaOptsOverride: "" 39 | resources: 40 | limits: 41 | cpu: 4 42 | memory: 16Gi 43 | requests: 44 | cpu: 50m 45 | memory: 2Gi 46 | 47 | hostNetwork: false 48 | 49 | persistence: 50 | enabled: true 51 | size: 20Gi 52 | #storageClass: "gp2" 53 | 54 | aclConfigMapEnabled: false 55 | aclConfig: | 56 | globalWhiteRemoteAddresses: 57 | - '*' 58 | - 10.*.*.* 59 | - 192.168.*.* 60 | 61 | config: 62 | ## brokerClusterName brokerName brokerRole brokerId 由内置脚本自动生成 63 | deleteWhen: "04" 64 | fileReservedTime: "48" 65 | flushDiskType: "ASYNC_FLUSH" 66 | waitTimeMillsInSendQueue: "1000" 67 | # aclEnable: true 68 | 69 | affinityOverride: {} 70 | tolerations: [] 71 | nodeSelector: {} 72 | 73 | ## broker.readinessProbe 74 | readinessProbe: 75 | tcpSocket: 76 | port: main 77 | initialDelaySeconds: 10 78 | periodSeconds: 10 79 | timeoutSeconds: 3 80 | failureThreshold: 6 81 | 82 | nameserver: 83 | replicaCount: 1 84 | 85 | jvm: 86 | maxHeapSize: 600M 87 | # javaOptsOverride: "" 88 | 89 | resources: 90 | limits: 91 | cpu: 2 92 | memory: 6Gi 93 | ephemeral-storage: 8Gi 94 | requests: 95 | cpu: 100m 96 | memory: 1Gi 97 | ephemeral-storage: 1Gi 98 | 99 | persistence: 100 | enabled: false 101 | size: 20Gi 102 | #storageClass: "gp2" 103 | 104 | affinityOverride: {} 105 | tolerations: [] 106 | nodeSelector: {} 107 | 108 | ## nameserver.readinessProbe 109 | readinessProbe: 110 | tcpSocket: 111 | port: main 112 | initialDelaySeconds: 10 113 | periodSeconds: 10 114 | timeoutSeconds: 3 115 | failureThreshold: 6 116 | 117 | ## nameserver.service 118 | service: 119 | annotations: {} 120 | type: ClusterIP 121 | 122 | proxy: 123 | enabled: true 124 | replicaCount: 1 125 | jvm: 126 | maxHeapSize: 600M 127 | # javaOptsOverride: "" 128 | 129 | resources: 130 | limits: 131 | cpu: 2 132 | memory: 6Gi 133 | requests: 134 | cpu: 100m 135 | memory: 1Gi 136 | 137 | affinityOverride: {} 138 | tolerations: [] 139 | nodeSelector: {} 140 | 141 | ## proxy.readinessProbe 142 | readinessProbe: 143 | tcpSocket: 144 | port: main 145 | initialDelaySeconds: 10 146 | periodSeconds: 10 147 | timeoutSeconds: 3 148 | failureThreshold: 6 149 | 150 | ## proxy.service 151 | service: 152 | annotations: {} 153 | type: ClusterIP 154 | 155 | dashboard: 156 | enabled: true 157 | replicaCount: 1 158 | image: 159 | repository: "apacherocketmq/rocketmq-dashboard" 160 | pullPolicy: IfNotPresent 161 | tag: "1.0.0" 162 | 163 | auth: 164 | enabled: true 165 | users: 166 | - name: admin 167 | password: admin 168 | isAdmin: true 169 | - name: user01 170 | password: userPass 171 | 172 | jvm: 173 | maxHeapSize: 256M 174 | 175 | resources: 176 | limits: 177 | cpu: 1 178 | memory: 2Gi 179 | requests: 180 | cpu: 20m 181 | memory: 512Mi 182 | 183 | ## dashboard.readinessProbe 184 | readinessProbe: 185 | failureThreshold: 6 186 | httpGet: 187 | path: / 188 | port: http 189 | livenessProbe: {} 190 | 191 | service: 192 | annotations: {} 193 | type: ClusterIP 194 | # nodePort: 31007 195 | 196 | ingress: 197 | enabled: false 198 | className: "" 199 | annotations: {} 200 | # nginx.ingress.kubernetes.io/whitelist-source-range: 10.0.0.0/8,124.160.30.50 201 | hosts: 202 | - host: rocketmq-dashboard.example.com 203 | tls: [] 204 | # - secretName: example-tls 205 | # hosts: 206 | # - rocketmq-dashboard.example.com 207 | 208 | ## controller mode is an experimental feature 209 | controllerModeEnabled: false 210 | controller: 211 | enabled: false 212 | jvm: 213 | maxHeapSize: 600M 214 | # javaOptsOverride: "" 215 | resources: 216 | limits: 217 | cpu: 2 218 | memory: 6Gi 219 | requests: 220 | cpu: 100m 221 | memory: 1Gi 222 | persistence: 223 | enabled: true 224 | size: 20Gi 225 | accessModes: 226 | - ReadWriteOnce 227 | 228 | ## controller.service 229 | service: 230 | annotations: {} 231 | 232 | ## controller.config 233 | config: 234 | controllerDLegerGroup: group1 235 | enableElectUncleanMaster: false 236 | notifyBrokerRoleChanged: true 237 | 238 | ## controller.readinessProbe 239 | readinessProbe: 240 | tcpSocket: 241 | port: main 242 | initialDelaySeconds: 10 243 | periodSeconds: 10 244 | timeoutSeconds: 3 245 | failureThreshold: 6 -------------------------------------------------------------------------------- /docker/Dockerfile: -------------------------------------------------------------------------------- 1 | # builder 2 | FROM alpine as builder 3 | 4 | ARG rocketmq_version=5.1.4 5 | 6 | ENV dl_url="https://dist.apache.org/repos/dist/release/rocketmq/${rocketmq_version}/rocketmq-all-${rocketmq_version}-bin-release.zip" 7 | 8 | RUN set -ex \ 9 | ; mkdir -pv /tmp/app \ 10 | ; wget "$dl_url" -O /tmp/app/rocketmq.zip \ 11 | ; cd /tmp/app && unzip rocketmq.zip \ 12 | ; rm -f /tmp/app/rocketmq.zip \ 13 | ; ls -alh /tmp/app \ 14 | ; mv rocketmq-* rocketmq 15 | 16 | # container 17 | FROM eclipse-temurin:17-jre-focal 18 | 19 | ENV ROCKETMQ_HOME="/opt/rocketmq" 20 | 21 | RUN set -ex \ 22 | ; useradd rocketmq --uid 1000 -m -s /bin/bash -d /home/rocketmq \ 23 | ; usermod -g root rocketmq \ 24 | ; mkdir -pv "$ROCKETMQ_HOME" "/etc/rocketmq" \ 25 | ; chown -R 1000:0 "$ROCKETMQ_HOME" "/etc/rocketmq" 26 | 27 | COPY --from=0 --chown=1000:0 /tmp/app/rocketmq "$ROCKETMQ_HOME" 28 | 29 | COPY mq-server-start.sh / 30 | COPY entrypoint.sh / 31 | COPY broker-base.conf /etc/rocketmq/ 32 | 33 | RUN set -ex \ 34 | ; rm -f "$ROCKETMQ_HOME/conf/plain_acl.yml" \ 35 | ; rm -rf "$ROCKETMQ_HOME/conf/acl" 36 | 37 | WORKDIR $ROCKETMQ_HOME 38 | EXPOSE 9876 10909 10911 10912 39 | 40 | ENTRYPOINT [ "/entrypoint.sh" ] 41 | CMD [ "start" ] -------------------------------------------------------------------------------- /docker/broker-base.conf: -------------------------------------------------------------------------------- 1 | brokerClusterName = DefaultCluster 2 | brokerName = broker-a 3 | brokerId = 0 4 | deleteWhen = 04 5 | fileReservedTime = 48 6 | brokerRole = ASYNC_MASTER 7 | flushDiskType = ASYNC_FLUSH -------------------------------------------------------------------------------- /docker/entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | check_runtime() { 4 | java -version 5 | if [[ $? -ne 0 ]]; then 6 | echo "[ERROR] Missing java" 7 | exit "500" 8 | fi 9 | } 10 | 11 | run_as_other_user_if_needed() { 12 | if [[ "$(id -u)" == "0" ]]; then 13 | # If running as root, drop to specified UID and run command 14 | exec chroot --userspec=1000:0 / "${@}" 15 | else 16 | # Either we are running in Openshift with random uid and are a member of the root group 17 | # or with a custom --user 18 | exec "${@}" 19 | fi 20 | } 21 | 22 | take_file_ownership() { 23 | if [[ "$(id -u)" == "0" ]]; then 24 | chown -R 1000:0 "$ROCKETMQ_HOME" 25 | mkdir -p /etc/rocketmq 26 | chown -R 1000:0 "/etc/rocketmq" 27 | if [[ -d "$HOME" ]]; then 28 | chown -R 1000:0 "$HOME" 29 | fi 30 | fi 31 | } 32 | 33 | start_server() { 34 | check_runtime 35 | run_as_other_user_if_needed "/mq-server-start.sh" 36 | } 37 | 38 | take_file_ownership 39 | if [[ "$@" = "start" ]]; then 40 | start_server 41 | elif echo "$@" | grep '/mq-server-start.sh$'; then 42 | start_server 43 | else 44 | exec "$@" 45 | fi 46 | -------------------------------------------------------------------------------- /docker/mq-server-start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | java -version 4 | if [ "$?" -ne 0 ]; then 5 | echo "[ERROR] Missing java runtime" 6 | exit 500 7 | fi 8 | if [ -z "${ROCKETMQ_HOME}" ]; then 9 | echo "[ERROR] Missing env ROCKETMQ_HOME" 10 | exit 500 11 | fi 12 | if [ -z "${ROCKETMQ_PROCESS_ROLE}" ]; then 13 | echo "[ERROR] Missing env ROCKETMQ_PROCESS_ROLE" 14 | exit 500 15 | fi 16 | 17 | export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java)))) 18 | export CLASSPATH=".:${ROCKETMQ_HOME}/conf:${ROCKETMQ_HOME}/lib/*:${CLASSPATH}" 19 | 20 | JAVA_OPT="${JAVA_OPT} -server" 21 | if [ -n $ROCKETMQ_JAVA_OPTIONS_OVERRIDE ]; then 22 | JAVA_OPT="${JAVA_OPT} ${ROCKETMQ_JAVA_OPTIONS_OVERRIDE}" 23 | else 24 | JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC" 25 | JAVA_OPT="${JAVA_OPT} ${ROCKETMQ_JAVA_OPTIONS_EXT}" 26 | JAVA_OPT="${JAVA_OPT} ${ROCKETMQ_JAVA_OPTIONS_HEAP}" 27 | fi 28 | JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}" 29 | 30 | export BROKER_CONF_FILE="/etc/rocketmq/broker.conf" 31 | update_broker_conf() { 32 | local key=$1 33 | local value=$2 34 | sed -i "/^${key} *=/d" ${BROKER_CONF_FILE} 35 | echo "${key} = ${value}" >> ${BROKER_CONF_FILE} 36 | } 37 | init_broker_conf() { 38 | rm -f ${BROKER_CONF_FILE} 39 | if [ -f "/etc/rocketmq/broker-base.conf" ]; then 40 | cp /etc/rocketmq/broker-base.conf ${BROKER_CONF_FILE} 41 | fi 42 | echo "" >> ${BROKER_CONF_FILE} 43 | echo "# generated config" >> ${BROKER_CONF_FILE} 44 | if [ -n "$ROCKETMQ_CONF_brokerName" ]; then 45 | update_broker_conf "brokerName" "$ROCKETMQ_CONF_brokerName" 46 | else 47 | local broker_name_seq=${HOSTNAME##*-} 48 | if echo "$broker_name_seq" | grep -E '^[0-9]{1,5}$'; then 49 | update_broker_conf "brokerName" "broker-g${broker_name_seq}" 50 | fi 51 | fi 52 | if [ "${ROCKETMQ_CONF_brokerRole}" == "SLAVE" ]; then 53 | update_broker_conf "brokerRole" "SLAVE" 54 | elif [ "${ROCKETMQ_CONF_brokerRole}" == "SYNC_MASTER" ]; then 55 | update_broker_conf "brokerRole" "SYNC_MASTER" 56 | else 57 | update_broker_conf "brokerRole" "ASYNC_MASTER" 58 | fi 59 | if echo "${ROCKETMQ_CONF_brokerId}" | grep -E '^[0-9]+$'; then 60 | update_broker_conf "brokerId" "${ROCKETMQ_CONF_brokerId}" 61 | fi 62 | echo "[exec] cat ${BROKER_CONF_FILE}" 63 | cat ${BROKER_CONF_FILE} 64 | } 65 | 66 | if [ "$ROCKETMQ_PROCESS_ROLE" == "broker" ]; then 67 | init_broker_conf 68 | set -x 69 | java ${JAVA_OPT} org.apache.rocketmq.broker.BrokerStartup -c ${BROKER_CONF_FILE} 70 | elif [ "$ROCKETMQ_PROCESS_ROLE" == "nameserver" ]; then 71 | set -x 72 | java ${JAVA_OPT} org.apache.rocketmq.namesrv.NamesrvStartup 73 | elif [ "$ROCKETMQ_PROCESS_ROLE" == "mqnamesrv" ]; then 74 | set -x 75 | java ${JAVA_OPT} org.apache.rocketmq.namesrv.NamesrvStartup 76 | elif [ "$ROCKETMQ_PROCESS_ROLE" == "proxy" ]; then 77 | set -x 78 | if [ -f $RMQ_PROXY_CONFIG_PATH ]; then 79 | java ${JAVA_OPT} org.apache.rocketmq.proxy.ProxyStartup -pc $RMQ_PROXY_CONFIG_PATH 80 | else 81 | java ${JAVA_OPT} org.apache.rocketmq.proxy.ProxyStartup 82 | fi 83 | else 84 | echo "[ERROR] Missing env ROCKETMQ_PROCESS_ROLE" 85 | exit 500 86 | fi -------------------------------------------------------------------------------- /examples/experimental/README.md: -------------------------------------------------------------------------------- 1 | # 部署案例 2 | 3 | 4 | 此处为实验性案例,不可用于生产。 5 | 6 | ## 部署 7 | 8 | ```shell 9 | # NodePort 10 | helm upgrade --install rocketmq \ 11 | --namespace rocketmq-demo \ 12 | --create-namespace \ 13 | --set broker.persistence.enabled="false" \ 14 | --set dashboard.service.type="NodePort" \ 15 | --set dashboard.service.nodePort="31007" \ 16 | ../../charts/rocketmq 17 | 18 | # cluster test 19 | helm upgrade --install rocketmq \ 20 | --namespace rocketmq-demo \ 21 | --create-namespace \ 22 | -f minikube-common.yaml \ 23 | ../../charts/rocketmq-cluster 24 | 25 | ``` -------------------------------------------------------------------------------- /examples/experimental/acl-only.yaml: -------------------------------------------------------------------------------- 1 | broker: 2 | aclConfigMapEnabled: true 3 | config: 4 | aclEnable: true 5 | 6 | # aclConfig: | 7 | # globalWhiteRemoteAddresses: 8 | # - '*' 9 | # - 10.*.*.* 10 | # - 192.168.*.* -------------------------------------------------------------------------------- /examples/experimental/acl-test.yaml: -------------------------------------------------------------------------------- 1 | ## 已关闭持久化存储 2 | 3 | clusterName: "cluster-experimental" 4 | 5 | image: 6 | # repository: "sir5kong/rocketmq" 7 | # pullPolicy: Always 8 | tag: "5.2.0" 9 | 10 | broker: 11 | size: 12 | master: 1 13 | replica: 0 14 | 15 | persistence: 16 | enabled: false 17 | 18 | master: 19 | jvm: 20 | maxHeapSize: 512M 21 | # javaOptsOverride: "-Xmx600M" 22 | resources: 23 | limits: 24 | cpu: 4 25 | memory: 16Gi 26 | requests: 27 | cpu: 50m 28 | memory: 1Gi 29 | 30 | aclConfigMapEnabled: true 31 | 32 | config: 33 | ## brokerClusterName brokerName brokerRole brokerId 由内置脚本自动生成 34 | deleteWhen: "04" 35 | fileReservedTime: "48" 36 | flushDiskType: "ASYNC_FLUSH" 37 | waitTimeMillsInSendQueue: "1000" 38 | aclEnable: true 39 | 40 | nameserver: 41 | replicaCount: 1 42 | jvm: 43 | maxHeapSize: 512M 44 | resources: 45 | requests: 46 | cpu: 50m 47 | memory: 1Gi 48 | 49 | dashboard: 50 | enabled: true 51 | replicaCount: 1 52 | 53 | ingress: 54 | enabled: false 55 | className: "nginx" 56 | hosts: 57 | - host: rocketmq-dashboard.example.com 58 | tls: [] 59 | # - secretName: example-tls 60 | # hosts: 61 | # - rocketmq-dashboard.example.com 62 | 63 | service: 64 | annotations: {} 65 | type: NodePort 66 | nodePort: 31007 -------------------------------------------------------------------------------- /examples/experimental/ha-test.yaml: -------------------------------------------------------------------------------- 1 | ## 已关闭持久化存储 2 | 3 | broker: 4 | persistence: 5 | enabled: false 6 | 7 | size: 8 | master: 2 9 | replica: 1 10 | 11 | master: 12 | jvm: 13 | maxHeapSize: 512M 14 | resources: 15 | limits: 16 | cpu: 4 17 | memory: 16Gi 18 | requests: 19 | cpu: 50m 20 | memory: 512Mi 21 | 22 | replica: 23 | jvm: 24 | maxHeapSize: 512M 25 | resources: 26 | limits: 27 | cpu: 4 28 | memory: 16Gi 29 | requests: 30 | cpu: 50m 31 | memory: 512Mi 32 | 33 | nameserver: 34 | replicaCount: 2 35 | jvm: 36 | maxHeapSize: 512M 37 | resources: 38 | limits: 39 | cpu: 4 40 | memory: 16Gi 41 | requests: 42 | cpu: 50m 43 | memory: 512Mi 44 | 45 | proxy: 46 | enabled: true 47 | replicaCount: 2 48 | jvm: 49 | maxHeapSize: 256M 50 | resources: 51 | limits: 52 | cpu: 4 53 | memory: 16Gi 54 | requests: 55 | cpu: 50m 56 | memory: 512Mi 57 | 58 | dashboard: 59 | enabled: true 60 | replicaCount: 1 61 | jvm: 62 | maxHeapSize: 256M 63 | resources: 64 | limits: 65 | cpu: 4 66 | memory: 16Gi 67 | requests: 68 | cpu: 50m 69 | memory: 512Mi 70 | service: 71 | annotations: {} 72 | type: NodePort 73 | nodePort: 31007 -------------------------------------------------------------------------------- /examples/experimental/minikube-common.yaml: -------------------------------------------------------------------------------- 1 | ## minikube 部署测试 2 | 3 | broker: 4 | persistence: 5 | enabled: false 6 | 7 | master: 8 | jvm: 9 | maxHeapSize: 512M 10 | resources: 11 | limits: 12 | cpu: 4 13 | memory: 16Gi 14 | requests: 15 | cpu: 50m 16 | memory: 512Mi 17 | 18 | replica: 19 | jvm: 20 | maxHeapSize: 300M 21 | resources: 22 | limits: 23 | cpu: 4 24 | memory: 16Gi 25 | requests: 26 | cpu: 50m 27 | memory: 300Mi 28 | 29 | nameserver: 30 | # replicaCount: 1 31 | jvm: 32 | maxHeapSize: 300M 33 | resources: 34 | limits: 35 | cpu: 4 36 | memory: 16Gi 37 | requests: 38 | cpu: 50m 39 | memory: 300Mi 40 | 41 | proxy: 42 | enabled: true 43 | replicaCount: 2 44 | jvm: 45 | maxHeapSize: 256M 46 | resources: 47 | limits: 48 | cpu: 4 49 | memory: 16Gi 50 | requests: 51 | cpu: 50m 52 | memory: 256Mi 53 | 54 | dashboard: 55 | enabled: true 56 | # replicaCount: 1 57 | jvm: 58 | maxHeapSize: 256M 59 | resources: 60 | limits: 61 | cpu: 4 62 | memory: 16Gi 63 | requests: 64 | cpu: 50m 65 | memory: 512Mi 66 | service: 67 | annotations: {} 68 | type: NodePort 69 | nodePort: 31007 -------------------------------------------------------------------------------- /examples/experimental/proxy.yaml: -------------------------------------------------------------------------------- 1 | ## 已关闭持久化存储 2 | 3 | clusterName: "cluster-experimental" 4 | 5 | image: 6 | repository: "apache/rocketmq" 7 | tag: "5.2.0" 8 | 9 | broker: 10 | size: 11 | master: 1 12 | replica: 0 13 | 14 | persistence: 15 | enabled: false 16 | 17 | master: 18 | jvm: 19 | maxHeapSize: 512M 20 | # javaOptsOverride: "" 21 | resources: 22 | limits: 23 | cpu: 4 24 | memory: 16Gi 25 | requests: 26 | cpu: 50m 27 | memory: 1Gi 28 | 29 | nameserver: 30 | replicaCount: 1 31 | jvm: 32 | maxHeapSize: 512M 33 | resources: 34 | requests: 35 | cpu: 50m 36 | memory: 1Gi 37 | 38 | proxy: 39 | enabled: true 40 | replicaCount: 1 41 | jvm: 42 | maxHeapSize: 512M 43 | resources: 44 | requests: 45 | cpu: 50m 46 | memory: 1Gi 47 | 48 | dashboard: 49 | enabled: true 50 | replicaCount: 1 51 | 52 | ingress: 53 | enabled: false 54 | className: "nginx" 55 | hosts: 56 | - host: rocketmq-dashboard.example.com 57 | tls: [] 58 | # - secretName: example-tls 59 | # hosts: 60 | # - rocketmq-dashboard.example.com -------------------------------------------------------------------------------- /examples/production.yaml: -------------------------------------------------------------------------------- 1 | # 集群名 2 | clusterName: "cluster-production" 3 | 4 | image: 5 | repository: "apache/rocketmq" 6 | tag: "5.2.0" 7 | 8 | broker: 9 | # 3个 master 节点,每个 master 具有1个副节点,共6个 broker 节点 10 | size: 11 | master: 3 12 | replica: 1 13 | 14 | persistence: 15 | enabled: true 16 | size: 20Gi 17 | #storageClass: gp2 18 | 19 | # 主节点资源分配 20 | master: 21 | brokerRole: ASYNC_MASTER 22 | jvm: 23 | maxHeapSize: 4096M 24 | resources: 25 | limits: 26 | cpu: 4 27 | memory: 16Gi 28 | requests: 29 | cpu: 500m 30 | memory: 8Gi 31 | 32 | # 副节点资源分配 33 | replica: 34 | jvm: 35 | maxHeapSize: 2048M 36 | resources: 37 | limits: 38 | cpu: 4 39 | memory: 16Gi 40 | requests: 41 | cpu: 100m 42 | memory: 4Gi 43 | 44 | nameserver: 45 | replicaCount: 3 46 | jvm: 47 | maxHeapSize: 1024M 48 | resources: 49 | limits: 50 | cpu: 4 51 | memory: 8Gi 52 | requests: 53 | cpu: 50m 54 | memory: 1Gi 55 | 56 | dashboard: 57 | enabled: true 58 | replicaCount: 1 59 | 60 | ingress: 61 | enabled: true 62 | className: "nginx" 63 | hosts: 64 | - host: rocketmq-dashboard.example.com 65 | tls: [] 66 | # - secretName: example-tls 67 | # hosts: 68 | # - rocketmq-dashboard.example.com 69 | -------------------------------------------------------------------------------- /examples/proxy-test.yaml: -------------------------------------------------------------------------------- 1 | clusterName: "cluster-test" 2 | 3 | image: 4 | repository: "apache/rocketmq" 5 | tag: "5.2.0" 6 | 7 | broker: 8 | size: 9 | master: 1 10 | replica: 0 11 | 12 | persistence: 13 | enabled: true 14 | size: 8Gi 15 | 16 | master: 17 | jvm: 18 | maxHeapSize: 1024M 19 | resources: 20 | requests: 21 | cpu: 100m 22 | memory: 2Gi 23 | 24 | nameserver: 25 | replicaCount: 1 26 | jvm: 27 | maxHeapSize: 512M 28 | resources: 29 | requests: 30 | cpu: 50m 31 | memory: 1Gi 32 | 33 | proxy: 34 | enabled: true 35 | replicaCount: 1 36 | jvm: 37 | maxHeapSize: 512M 38 | resources: 39 | requests: 40 | cpu: 50m 41 | memory: 1Gi 42 | 43 | dashboard: 44 | enabled: true 45 | replicaCount: 1 46 | 47 | ingress: 48 | enabled: false 49 | className: "nginx" 50 | hosts: 51 | - host: rocketmq-dashboard.example.com 52 | tls: [] 53 | # - secretName: example-tls 54 | # hosts: 55 | # - rocketmq-dashboard.example.com -------------------------------------------------------------------------------- /examples/test.yaml: -------------------------------------------------------------------------------- 1 | clusterName: "cluster-test" 2 | 3 | image: 4 | repository: "apache/rocketmq" 5 | tag: "5.2.0" 6 | 7 | broker: 8 | size: 9 | master: 1 10 | replica: 0 11 | 12 | persistence: 13 | enabled: true 14 | size: 8Gi 15 | 16 | master: 17 | jvm: 18 | maxHeapSize: 1024M 19 | resources: 20 | requests: 21 | cpu: 100m 22 | memory: 2Gi 23 | 24 | nameserver: 25 | replicaCount: 1 26 | jvm: 27 | maxHeapSize: 512M 28 | resources: 29 | requests: 30 | cpu: 50m 31 | memory: 1Gi 32 | 33 | dashboard: 34 | enabled: true 35 | replicaCount: 1 36 | 37 | ingress: 38 | enabled: false 39 | className: "nginx" 40 | hosts: 41 | - host: rocketmq-dashboard.example.com 42 | tls: [] 43 | # - secretName: example-tls 44 | # hosts: 45 | # - rocketmq-dashboard.example.com --------------------------------------------------------------------------------