This is an automated email from the ASF dual-hosted git repository.
caigy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/rocketmq-docker.git
The following commit(s) were added to refs/heads/master by this push:
new 6caf9c7 [ISSUE #66] Add rocketmq5.x helm chart for CI (#69)
6caf9c7 is described below
commit 6caf9c7c8ad201876be294ecad39389cf1d191b2
Author: yueya <[email protected]>
AuthorDate: Mon Feb 6 14:14:06 2023 +0800
[ISSUE #66] Add rocketmq5.x helm chart for CI (#69)
* add helm chart use by ci
* update build-image-local.sh
* update dockerfile.sh
* update dockerfile.sh
* update dockerfile.sh
* update dockerfile.sh
* update helm
* update dockerfile
* update dockerfile
* update proxy deployment.yaml and Dockerfile-centos
* update helm chart
* update helm chart
* update dockerfile
* update build-image-local.sh
* update build-image-local.sh
* update build-image-local.sh
* update customize.sh
* update build-image-local.sh
* update dockerfile
* support jacoco
* support jacoco
* support jacoco
* support jacoco
* support jacoco
* update script
* update scripts
* update scripts
---------
Co-authored-by: 月伢 <[email protected]>
---
image-build-ci/Dockerfile-alpine | 81 ++++++++
image-build-ci/Dockerfile-centos | 87 +++++++++
image-build-ci/Dockerfile-ubuntu | 87 +++++++++
image-build-ci/build-image-local.sh | 80 ++++++++
image-build-ci/scripts/runbroker-customize.sh | 156 ++++++++++++++++
image-build-ci/scripts/runserver-customize.sh | 142 ++++++++++++++
rocketmq-k8s-helm/.helmignore | 23 +++
rocketmq-k8s-helm/Chart.yaml | 24 +++
rocketmq-k8s-helm/templates/broker/NOTES.txt | 1 +
.../templates/broker/_brokerconfig.tpl | 49 +++++
rocketmq-k8s-helm/templates/broker/_helpers.tpl | 70 +++++++
rocketmq-k8s-helm/templates/broker/configmap.yaml | 8 +
rocketmq-k8s-helm/templates/broker/service.yaml | 15 ++
.../templates/broker/statefulset.yaml | 102 +++++++++++
rocketmq-k8s-helm/templates/nameserver/NOTES.txt | 23 +++
.../templates/nameserver/_helpers.tpl | 59 ++++++
.../templates/nameserver/configmap.yaml | 10 +
.../templates/nameserver/deployment.yaml | 69 +++++++
.../templates/nameserver/service.yaml | 15 ++
rocketmq-k8s-helm/templates/proxy/_helpers.tpl | 47 +++++
rocketmq-k8s-helm/templates/proxy/_proxyconfig.tpl | 26 +++
rocketmq-k8s-helm/templates/proxy/configmap.yaml | 6 +
rocketmq-k8s-helm/templates/proxy/deployment.yaml | 80 ++++++++
rocketmq-k8s-helm/templates/proxy/service.yaml | 19 ++
rocketmq-k8s-helm/values.yaml | 203 +++++++++++++++++++++
25 files changed, 1482 insertions(+)
diff --git a/image-build-ci/Dockerfile-alpine b/image-build-ci/Dockerfile-alpine
new file mode 100644
index 0000000..61c7ee5
--- /dev/null
+++ b/image-build-ci/Dockerfile-alpine
@@ -0,0 +1,81 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+ARG BASE_IMAGE
+FROM $BASE_IMAGE
+
+RUN apk add --no-cache bash gettext nmap-ncat openssl busybox-extras
libc6-compat
+
+ARG user=rocketmq
+ARG group=rocketmq
+ARG uid=3000
+ARG gid=3000
+
+# RocketMQ is run with user `rocketmq`, uid = 3000
+# If you bind mount a volume from the host or a data container,
+# ensure you use the same uid
+RUN addgroup --gid ${gid} ${group} \
+ && adduser --uid ${uid} -G ${group} ${user} -s /bin/bash -D
+
+ARG version
+
+# Rocketmq version
+ENV ROCKETMQ_VERSION ${version}
+
+# Rocketmq home
+ENV ROCKETMQ_HOME /home/rocketmq/rocketmq-${ROCKETMQ_VERSION}
+
+WORKDIR ${ROCKETMQ_HOME}
+
+# Install
+COPY rocketmq/ ${ROCKETMQ_HOME}/dist
+
+RUN mv ${ROCKETMQ_HOME}/dist/rocketmq*/rocketmq*/* ${ROCKETMQ_HOME}/; \
+ rm -rf ${ROCKETMQ_HOME}/dist; \
+ ls ${ROCKETMQ_HOME}
+
+# Copy customized scripts
+COPY scripts ${ROCKETMQ_HOME}/bin/
+
+RUN chown -R ${uid}:${gid} ${ROCKETMQ_HOME}
+
+
+# Expose namesrv&proxy port
+EXPOSE 9876 8080 8081 7001
+
+RUN mv ${ROCKETMQ_HOME}/bin/runserver-customize.sh
${ROCKETMQ_HOME}/bin/runserver.sh \
+ && chmod a+x ${ROCKETMQ_HOME}/bin/runserver.sh \
+ && chmod a+x ${ROCKETMQ_HOME}/bin/mqadmin \
+ && chmod a+x ${ROCKETMQ_HOME}/bin/mqnamesrv \
+ && chmod a+x ${ROCKETMQ_HOME}/bin/mqproxy
+
+# Expose broker port
+EXPOSE 10909 10911 10912
+
+RUN mv ${ROCKETMQ_HOME}/bin/runbroker-customize.sh
${ROCKETMQ_HOME}/bin/runbroker.sh \
+ && chmod a+x ${ROCKETMQ_HOME}/bin/runbroker.sh \
+ && chmod a+x ${ROCKETMQ_HOME}/bin/mqbroker
+
+# Export Java options
+RUN export JAVA_OPT=" -Duser.home=/opt"
+
+# Add ${JAVA_HOME}/lib/ext as java.ext.dirs
+RUN sed -i
's/${JAVA_HOME}\/jre\/lib\/ext/${JAVA_HOME}\/jre\/lib\/ext:${JAVA_HOME}\/lib\/ext/'
${ROCKETMQ_HOME}/bin/tools.sh
+
+USER ${user}
+
+WORKDIR ${ROCKETMQ_HOME}/bin
\ No newline at end of file
diff --git a/image-build-ci/Dockerfile-centos b/image-build-ci/Dockerfile-centos
new file mode 100644
index 0000000..ea71dd0
--- /dev/null
+++ b/image-build-ci/Dockerfile-centos
@@ -0,0 +1,87 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+ARG BASE_IMAGE
+FROM $BASE_IMAGE
+
+RUN yum install -y java-1.8.0-openjdk-devel.x86_64 unzip gettext nmap-ncat
openssl, which gnupg, telnet \
+ && yum clean all -y
+
+# FROM openjdk:8-jdk
+# RUN apt-get update && apt-get install -y --no-install-recommends \
+# bash libapr1 unzip telnet wget gnupg ca-certificates \
+# && rm -rf /var/lib/apt/lists/*
+
+ARG user=rocketmq
+ARG group=rocketmq
+ARG uid=3000
+ARG gid=3000
+
+# RocketMQ is run with user `rocketmq`, uid = 3000
+# If you bind mount a volume from the host or a data container,
+# ensure you use the same uid
+RUN groupadd -g ${gid} ${group} \
+ && useradd -u ${uid} -g ${gid} -m -s /bin/bash ${user}
+
+ARG version
+
+# Rocketmq version
+ENV ROCKETMQ_VERSION ${version}
+
+# Rocketmq home
+ENV ROCKETMQ_HOME /home/rocketmq/rocketmq-${ROCKETMQ_VERSION}
+
+WORKDIR ${ROCKETMQ_HOME}
+
+# Install
+COPY rocketmq/ ${ROCKETMQ_HOME}/dist
+
+RUN mv ${ROCKETMQ_HOME}/dist/rocketmq*/rocketmq*/* ${ROCKETMQ_HOME}/; \
+ rm -rf ${ROCKETMQ_HOME}/dist; \
+ ls ${ROCKETMQ_HOME}
+
+# Copy customized scripts
+COPY scripts ${ROCKETMQ_HOME}/bin/
+
+RUN chown -R ${uid}:${gid} ${ROCKETMQ_HOME}
+
+
+# Expose namesrv&proxy port
+EXPOSE 9876 8080 8081 7001
+
+RUN mv ${ROCKETMQ_HOME}/bin/runserver-customize.sh
${ROCKETMQ_HOME}/bin/runserver.sh \
+ && chmod a+x ${ROCKETMQ_HOME}/bin/runserver.sh \
+ && chmod a+x ${ROCKETMQ_HOME}/bin/mqadmin \
+ && chmod a+x ${ROCKETMQ_HOME}/bin/mqnamesrv \
+ && chmod a+x ${ROCKETMQ_HOME}/bin/mqproxy
+
+# Expose broker port
+EXPOSE 10909 10911 10912
+
+RUN mv ${ROCKETMQ_HOME}/bin/runbroker-customize.sh
${ROCKETMQ_HOME}/bin/runbroker.sh \
+ && chmod a+x ${ROCKETMQ_HOME}/bin/runbroker.sh \
+ && chmod a+x ${ROCKETMQ_HOME}/bin/mqbroker
+
+# export Java options
+RUN export JAVA_OPT=" -Duser.home=/opt"
+
+# Add ${JAVA_HOME}/lib/ext as java.ext.dirs
+RUN sed -i
's/${JAVA_HOME}\/jre\/lib\/ext/${JAVA_HOME}\/jre\/lib\/ext:${JAVA_HOME}\/lib\/ext/'
${ROCKETMQ_HOME}/bin/tools.sh
+
+USER ${user}
+
+WORKDIR ${ROCKETMQ_HOME}/bin
diff --git a/image-build-ci/Dockerfile-ubuntu b/image-build-ci/Dockerfile-ubuntu
new file mode 100644
index 0000000..7298988
--- /dev/null
+++ b/image-build-ci/Dockerfile-ubuntu
@@ -0,0 +1,87 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+ARG BASE_IMAGE
+FROM $BASE_IMAGE
+
+RUN apt-get update && apt-get install -y --no-install-recommends \
+ bash unzip telnet wget gnupg ca-certificates
+
+ARG user=rocketmq
+ARG group=rocketmq
+ARG uid=3000
+ARG gid=3000
+
+# RocketMQ is run with user `rocketmq`, uid = 3000
+# If you bind mount a volume from the host or a data container,
+# ensure you use the same uid
+RUN groupadd -g ${gid} ${group} \
+ && useradd -u ${uid} -g ${gid} -m -s /bin/bash ${user}
+
+ARG version
+
+# Rocketmq version
+ENV ROCKETMQ_VERSION ${version}
+
+# Rocketmq home
+ENV ROCKETMQ_HOME /home/rocketmq/rocketmq-${ROCKETMQ_VERSION}
+
+WORKDIR ${ROCKETMQ_HOME}
+
+# Install
+COPY rocketmq/ ${ROCKETMQ_HOME}/dist
+
+RUN mv ${ROCKETMQ_HOME}/dist/rocketmq*/rocketmq*/* ${ROCKETMQ_HOME}/; \
+ rm -rf ${ROCKETMQ_HOME}/dist; \
+ ls ${ROCKETMQ_HOME}
+
+# Copy customized scripts
+COPY scripts ${ROCKETMQ_HOME}/bin/
+
+RUN chown -R ${uid}:${gid} ${ROCKETMQ_HOME}
+
+
+# Expose namesrv&proxy port
+EXPOSE 9876 8080 8081 7001 2023
+
+RUN wget
https://repo1.maven.org/maven2/org/jacoco/jacoco/0.8.8/jacoco-0.8.8.zip -O
jacoco-0.8.8.zip && \
+unzip jacoco-0.8.8.zip -d jacoco
+
+ENV
JAVA_OPT="-javaagent:${ROCKETMQ_HOME}/jacoco/lib/jacocoagent.jar=includes=*,output=tcpserver,port=2023,address=0.0.0.0"
+
+RUN mv ${ROCKETMQ_HOME}/bin/runserver-customize.sh
${ROCKETMQ_HOME}/bin/runserver.sh \
+ && chmod a+x ${ROCKETMQ_HOME}/bin/runserver.sh \
+ && chmod a+x ${ROCKETMQ_HOME}/bin/mqadmin \
+ && chmod a+x ${ROCKETMQ_HOME}/bin/mqnamesrv \
+ && chmod a+x ${ROCKETMQ_HOME}/bin/mqproxy
+
+# Expose broker port
+EXPOSE 10909 10911 10912
+
+RUN mv ${ROCKETMQ_HOME}/bin/runbroker-customize.sh
${ROCKETMQ_HOME}/bin/runbroker.sh \
+ && chmod a+x ${ROCKETMQ_HOME}/bin/runbroker.sh \
+ && chmod a+x ${ROCKETMQ_HOME}/bin/mqbroker
+
+# export Java options
+RUN export JAVA_OPT=" -Duser.home=/opt"
+
+# Add ${JAVA_HOME}/lib/ext as java.ext.dirs
+RUN sed -i
's/${JAVA_HOME}\/jre\/lib\/ext/${JAVA_HOME}\/jre\/lib\/ext:${JAVA_HOME}\/lib\/ext/'
${ROCKETMQ_HOME}/bin/tools.sh
+
+USER ${user}
+
+WORKDIR ${ROCKETMQ_HOME}/bin
diff --git a/image-build-ci/build-image-local.sh
b/image-build-ci/build-image-local.sh
new file mode 100755
index 0000000..3eeca9e
--- /dev/null
+++ b/image-build-ci/build-image-local.sh
@@ -0,0 +1,80 @@
+#!/usr/bin/env bash
+
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+if [ $# -lt 6 ]; then
+ echo -e "Usage: sh $0 ROCKETMQ_VERSION BASE_IMAGE JAVA_VERSION IMAGE_REPO
IMAGE_REPO_USERNAME IMAGE_REPO_PASSWORD"
+ exit -1
+fi
+
+ROCKETMQ_VERSION=$1
+BASE_IMAGE=$2
+JAVA_VERSION=$3
+IMAGE_REPO=$4
+IMAGE_REPO_USERNAME=$5
+IMAGE_REPO_PASSWORD=$6
+
+TAG=${ROCKETMQ_VERSION}-$(echo $BASE_IMAGE | sed -e "s/:/-/g")
+
+cp -r ../../rocketmq ./
+
+docker login --username=$IMAGE_REPO_USERNAME --password=$IMAGE_REPO_PASSWORD
${IMAGE_REPO%%/*}
+
+# Build rocketmq
+case "${BASE_IMAGE}" in
+#alpine)
+# if [ "$JAVA_VERSION" -eq 8 ]; then
+# docker build --no-cache -f Dockerfile-alpine -t ${IMAGE_REPO}:${TAG}
--build-arg version=${ROCKETMQ_VERSION} --build-arg
BASE_IMAGE=eclipse-temurin:8-jre-alpine .
+# elif [ "$JAVA_VERSION" -eq 11 ]; then
+# docker build --no-cache -f Dockerfile-alpine -t ${IMAGE_REPO}:${TAG}
--build-arg version=${ROCKETMQ_VERSION} --build-arg
BASE_IMAGE=eclipse-temurin:11-jre-alpine .
+# else
+# echo "in ${BASE_IMAGE}, jdk ${JAVA_VERSION} is not supported, supported
java versions: 8, 11"
+# fi
+# ;;
+#centos)
+# if [ "$JAVA_VERSION" -eq 8 ]; then
+# docker build --no-cache -f Dockerfile-centos -t ${IMAGE_REPO}:${TAG}
--build-arg version=${ROCKETMQ_VERSION} --build-arg
BASE_IMAGE=eclipse-temurin:8-centos7 .
+# elif [ "$JAVA_VERSION" -eq 11 ]; then
+# docker build --no-cache -f Dockerfile-centos -t ${IMAGE_REPO}:${TAG}
--build-arg version=${ROCKETMQ_VERSION} --build-arg
BASE_IMAGE=eclipse-temurin:11-centos7 .
+# else
+# echo "in ${BASE_IMAGE}, jdk ${JAVA_VERSION} is not supported, supported
java versions: 8, 11"
+# fi
+# ;;
+ubuntu)
+ if [ "$JAVA_VERSION" -eq 8 ]; then
+ docker build --no-cache -f Dockerfile-ubuntu -t ${IMAGE_REPO}:${TAG}
--build-arg version=${ROCKETMQ_VERSION} --build-arg
BASE_IMAGE=eclipse-temurin:8-jre .
+# elif [ "$JAVA_VERSION" -eq 11 ]; then
+# docker build --no-cache -f Dockerfile-ubuntu -t ${IMAGE_REPO}:${TAG}
--build-arg version=${ROCKETMQ_VERSION} --build-arg
BASE_IMAGE=eclipse-temurin:11-jre .
+ else
+ echo "in ${BASE_IMAGE}, jdk ${JAVA_VERSION} is not supported, supported
java versions: 8, 11"
+ fi
+ ;;
+#windows)
+# if [ "$JAVA_VERSION" -eq 8 ]; then
+# docker build --no-cache -f Dockerfile-windows -t ${IMAGE_REPO}:${TAG}
--build-arg version=${ROCKETMQ_VERSION} --build-arg
BASE_IMAGE=eclipse-temurin:8-jre-windowsservercore .
+# elif [ "$JAVA_VERSION" -eq 11 ]; then
+# docker build --no-cache -f Dockerfile-windows -t ${IMAGE_REPO}:${TAG}
--build-arg version=${ROCKETMQ_VERSION} --build-arg
BASE_IMAGE=eclipse-temurin:11-jre-windowsservercore .
+# else
+# echo "in ${BASE_IMAGE}, jdk ${JAVA_VERSION} is not supported, supported
java versions: 8, 11"
+# fi
+# ;;
+*)
+ echo "${BASE_IMAGE} is not supported, supported base images: ubuntu, centos,
alpine, windows"
+ exit -1
+ ;;
+esac
+
+docker push ${IMAGE_REPO}:${TAG}
diff --git a/image-build-ci/scripts/runbroker-customize.sh
b/image-build-ci/scripts/runbroker-customize.sh
new file mode 100755
index 0000000..ae780aa
--- /dev/null
+++ b/image-build-ci/scripts/runbroker-customize.sh
@@ -0,0 +1,156 @@
+#!/bin/bash
+
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#===========================================================================================
+# Java Environment Setting
+#===========================================================================================
+error_exit ()
+{
+ echo "ERROR: $1 !!"
+ exit 1
+}
+
+find_java_home()
+{
+ case "`uname`" in
+ Darwin)
+ JAVA_HOME=$(/usr/libexec/java_home)
+ ;;
+ *)
+ JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))
+ ;;
+ esac
+}
+
+find_java_home
+
+[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=$HOME/jdk/java
+[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java
+[ ! -e "$JAVA_HOME/bin/java" ] && error_exit "Please set the JAVA_HOME
variable in your environment, We need java(x64)!"
+
+export JAVA_HOME
+export JAVA="$JAVA_HOME/bin/java"
+export BASE_DIR=$(dirname $0)/..
+export CLASSPATH=.:${BASE_DIR}/conf:${CLASSPATH}
+
+#===========================================================================================
+# JVM Configuration
+#===========================================================================================
+calculate_heap_sizes()
+{
+ case "`uname`" in
+ Linux)
+ system_memory_in_mb=`free -m| sed -n '2p' | awk '{print $2}'`
+ system_cpu_cores=`egrep -c 'processor([[:space:]]+):.*'
/proc/cpuinfo`
+ ;;
+ FreeBSD)
+ system_memory_in_bytes=`sysctl hw.physmem | awk '{print $2}'`
+ system_memory_in_mb=`expr $system_memory_in_bytes / 1024 / 1024`
+ system_cpu_cores=`sysctl hw.ncpu | awk '{print $2}'`
+ ;;
+ SunOS)
+ system_memory_in_mb=`prtconf | awk '/Memory size:/ {print $3}'`
+ system_cpu_cores=`psrinfo | wc -l`
+ ;;
+ Darwin)
+ system_memory_in_bytes=`sysctl hw.memsize | awk '{print $2}'`
+ system_memory_in_mb=`expr $system_memory_in_bytes / 1024 / 1024`
+ system_cpu_cores=`sysctl hw.ncpu | awk '{print $2}'`
+ ;;
+ *)
+ # assume reasonable defaults for e.g. a modern desktop or
+ # cheap server
+ system_memory_in_mb="2048"
+ system_cpu_cores="2"
+ ;;
+ esac
+
+ # some systems like the raspberry pi don't report cores, use at least 1
+ if [ "$system_cpu_cores" -lt "1" ]
+ then
+ system_cpu_cores="1"
+ fi
+
+ # set max heap size based on the following
+ # max(min(1/2 ram, 1024MB), min(1/4 ram, 8GB))
+ # calculate 1/2 ram and cap to 1024MB
+ # calculate 1/4 ram and cap to 8192MB
+ # pick the max
+ half_system_memory_in_mb=`expr $system_memory_in_mb / 2`
+ quarter_system_memory_in_mb=`expr $half_system_memory_in_mb / 2`
+ if [ "$half_system_memory_in_mb" -gt "1024" ]
+ then
+ half_system_memory_in_mb="1024"
+ fi
+ if [ "$quarter_system_memory_in_mb" -gt "8192" ]
+ then
+ quarter_system_memory_in_mb="8192"
+ fi
+ if [ "$half_system_memory_in_mb" -gt "$quarter_system_memory_in_mb" ]
+ then
+ max_heap_size_in_mb="$half_system_memory_in_mb"
+ else
+ max_heap_size_in_mb="$quarter_system_memory_in_mb"
+ fi
+ MAX_HEAP_SIZE="${max_heap_size_in_mb}M"
+
+ # Young gen: min(max_sensible_per_modern_cpu_core * num_cores, 1/4 * heap
size)
+ max_sensible_yg_per_core_in_mb="100"
+ max_sensible_yg_in_mb=`expr $max_sensible_yg_per_core_in_mb "*"
$system_cpu_cores`
+
+ desired_yg_in_mb=`expr $max_heap_size_in_mb / 4`
+
+ if [ "$desired_yg_in_mb" -gt "$max_sensible_yg_in_mb" ]
+ then
+ HEAP_NEWSIZE="${max_sensible_yg_in_mb}M"
+ else
+ HEAP_NEWSIZE="${desired_yg_in_mb}M"
+ fi
+}
+
+calculate_heap_sizes
+
+# Dynamically calculate parameters, for reference.
+Xms=$MAX_HEAP_SIZE
+Xmx=$MAX_HEAP_SIZE
+Xmn=$HEAP_NEWSIZE
+MaxDirectMemorySize=$MAX_HEAP_SIZE
+# Set for `JAVA_OPT`.
+JAVA_OPT="${JAVA_OPT} -server -Xms${Xms} -Xmx${Xmx} -Xmn${Xmn}"
+JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m
-XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30
-XX:SoftRefLRUPolicyMSPerMB=0 -XX:SurvivorRatio=8"
+JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:/dev/shm/mq_gc_%p.log
-XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime
-XX:+PrintAdaptiveSizePolicy"
+JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5
-XX:GCLogFileSize=30m"
+JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow"
+JAVA_OPT="${JAVA_OPT} -XX:+AlwaysPreTouch"
+JAVA_OPT="${JAVA_OPT} -XX:MaxDirectMemorySize=${MaxDirectMemorySize}"
+JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages -XX:-UseBiasedLocking"
+JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib"
+#JAVA_OPT="${JAVA_OPT} -Xdebug
-Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n"
+JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}"
+JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"
+
+numactl --interleave=all pwd > /dev/null 2>&1
+if [ $? -eq 0 ]
+then
+ if [ -z "$RMQ_NUMA_NODE" ] ; then
+ numactl --interleave=all $JAVA ${JAVA_OPT} $@
+ else
+ numactl --cpunodebind=$RMQ_NUMA_NODE --membind=$RMQ_NUMA_NODE
$JAVA ${JAVA_OPT} $@
+ fi
+else
+ $JAVA ${JAVA_OPT} $@
+fi
diff --git a/image-build-ci/scripts/runserver-customize.sh
b/image-build-ci/scripts/runserver-customize.sh
new file mode 100755
index 0000000..92f685b
--- /dev/null
+++ b/image-build-ci/scripts/runserver-customize.sh
@@ -0,0 +1,142 @@
+#!/bin/bash
+
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#===========================================================================================
+# Java Environment Setting
+#===========================================================================================
+error_exit ()
+{
+ echo "ERROR: $1 !!"
+ exit 1
+}
+
+find_java_home()
+{
+ case "`uname`" in
+ Darwin)
+ JAVA_HOME=$(/usr/libexec/java_home)
+ ;;
+ *)
+ JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))
+ ;;
+ esac
+}
+
+find_java_home
+
+[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=$HOME/jdk/java
+[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java
+[ ! -e "$JAVA_HOME/bin/java" ] && error_exit "Please set the JAVA_HOME
variable in your environment, We need java(x64)!"
+
+export JAVA_HOME
+export JAVA="$JAVA_HOME/bin/java"
+export BASE_DIR=$(dirname $0)/..
+export CLASSPATH=.:${BASE_DIR}/conf:${CLASSPATH}
+
+#===========================================================================================
+# JVM Configuration
+#===========================================================================================
+calculate_heap_sizes()
+{
+ case "`uname`" in
+ Linux)
+ system_memory_in_mb=`free -m| sed -n '2p' | awk '{print $2}'`
+ system_cpu_cores=`egrep -c 'processor([[:space:]]+):.*'
/proc/cpuinfo`
+ ;;
+ FreeBSD)
+ system_memory_in_bytes=`sysctl hw.physmem | awk '{print $2}'`
+ system_memory_in_mb=`expr $system_memory_in_bytes / 1024 / 1024`
+ system_cpu_cores=`sysctl hw.ncpu | awk '{print $2}'`
+ ;;
+ SunOS)
+ system_memory_in_mb=`prtconf | awk '/Memory size:/ {print $3}'`
+ system_cpu_cores=`psrinfo | wc -l`
+ ;;
+ Darwin)
+ system_memory_in_bytes=`sysctl hw.memsize | awk '{print $2}'`
+ system_memory_in_mb=`expr $system_memory_in_bytes / 1024 / 1024`
+ system_cpu_cores=`sysctl hw.ncpu | awk '{print $2}'`
+ ;;
+ *)
+ # assume reasonable defaults for e.g. a modern desktop or
+ # cheap server
+ system_memory_in_mb="2048"
+ system_cpu_cores="2"
+ ;;
+ esac
+
+ # some systems like the raspberry pi don't report cores, use at least 1
+ if [ "$system_cpu_cores" -lt "1" ]
+ then
+ system_cpu_cores="1"
+ fi
+
+ # set max heap size based on the following
+ # max(min(1/2 ram, 1024MB), min(1/4 ram, 8GB))
+ # calculate 1/2 ram and cap to 1024MB
+ # calculate 1/4 ram and cap to 8192MB
+ # pick the max
+ half_system_memory_in_mb=`expr $system_memory_in_mb / 2`
+ quarter_system_memory_in_mb=`expr $half_system_memory_in_mb / 2`
+ if [ "$half_system_memory_in_mb" -gt "1024" ]
+ then
+ half_system_memory_in_mb="1024"
+ fi
+ if [ "$quarter_system_memory_in_mb" -gt "8192" ]
+ then
+ quarter_system_memory_in_mb="8192"
+ fi
+ if [ "$half_system_memory_in_mb" -gt "$quarter_system_memory_in_mb" ]
+ then
+ max_heap_size_in_mb="$half_system_memory_in_mb"
+ else
+ max_heap_size_in_mb="$quarter_system_memory_in_mb"
+ fi
+ MAX_HEAP_SIZE="${max_heap_size_in_mb}M"
+
+ # Young gen: min(max_sensible_per_modern_cpu_core * num_cores, 1/4 * heap
size)
+ max_sensible_yg_per_core_in_mb="100"
+ max_sensible_yg_in_mb=`expr $max_sensible_yg_per_core_in_mb "*"
$system_cpu_cores`
+
+ desired_yg_in_mb=`expr $max_heap_size_in_mb / 4`
+
+ if [ "$desired_yg_in_mb" -gt "$max_sensible_yg_in_mb" ]
+ then
+ HEAP_NEWSIZE="${max_sensible_yg_in_mb}M"
+ else
+ HEAP_NEWSIZE="${desired_yg_in_mb}M"
+ fi
+}
+
+calculate_heap_sizes
+
+# Dynamically calculate parameters, for reference.
+Xms=$MAX_HEAP_SIZE
+Xmx=$MAX_HEAP_SIZE
+Xmn=$HEAP_NEWSIZE
+# Set for `JAVA_OPT`.
+JAVA_OPT="${JAVA_OPT} -server -Xms${Xms} -Xmx${Xmx} -Xmn${Xmn}"
+JAVA_OPT="${JAVA_OPT} -XX:+UseConcMarkSweepGC
-XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70
-XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0
-XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8 -XX:-UseParNewGC"
+JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:/dev/shm/rmq_srv_gc.log
-XX:+PrintGCDetails"
+JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow"
+JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages"
+JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib"
+#JAVA_OPT="${JAVA_OPT} -Xdebug
-Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n"
+JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}"
+JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"
+
+$JAVA ${JAVA_OPT} $@
diff --git a/rocketmq-k8s-helm/.helmignore b/rocketmq-k8s-helm/.helmignore
new file mode 100644
index 0000000..0e8a0eb
--- /dev/null
+++ b/rocketmq-k8s-helm/.helmignore
@@ -0,0 +1,23 @@
+# Patterns to ignore when building packages.
+# This supports shell glob matching, relative path matching, and
+# negation (prefixed with !). Only one pattern per line.
+.DS_Store
+# Common VCS dirs
+.git/
+.gitignore
+.bzr/
+.bzrignore
+.hg/
+.hgignore
+.svn/
+# Common backup files
+*.swp
+*.bak
+*.tmp
+*.orig
+*~
+# Various IDEs
+.project
+.idea/
+*.tmproj
+.vscode/
diff --git a/rocketmq-k8s-helm/Chart.yaml b/rocketmq-k8s-helm/Chart.yaml
new file mode 100644
index 0000000..559a412
--- /dev/null
+++ b/rocketmq-k8s-helm/Chart.yaml
@@ -0,0 +1,24 @@
+apiVersion: v2
+name: rocketmq
+description: A Helm chart for Kubernetes
+
+# A chart can be either an 'application' or a 'library' chart.
+#
+# Application charts are a collection of templates that can be packaged into
versioned archives
+# to be deployed.
+#
+# Library charts provide useful utilities or functions for the chart
developer. They're included as
+# a dependency of application charts to inject those utilities and functions
into the rendering
+# pipeline. Library charts do not define any templates and therefore cannot be
deployed.
+type: application
+
+# This is the chart version. This version number should be incremented each
time you make changes
+# to the chart and its templates, including the app version.
+# Versions are expected to follow Semantic Versioning (https://semver.org/)
+version: 0.0.1
+
+# This is the version number of the application being deployed. This version
number should be
+# incremented each time you make changes to the application. Versions are not
expected to
+# follow Semantic Versioning. They should reflect the version the application
is using.
+# It is recommended to use it with quotes.
+appVersion: "1.16.0"
diff --git a/rocketmq-k8s-helm/templates/broker/NOTES.txt
b/rocketmq-k8s-helm/templates/broker/NOTES.txt
new file mode 100644
index 0000000..0a6fe66
--- /dev/null
+++ b/rocketmq-k8s-helm/templates/broker/NOTES.txt
@@ -0,0 +1 @@
+1. Get the application URL by running these commands:
\ No newline at end of file
diff --git a/rocketmq-k8s-helm/templates/broker/_brokerconfig.tpl
b/rocketmq-k8s-helm/templates/broker/_brokerconfig.tpl
new file mode 100644
index 0000000..f2dd23d
--- /dev/null
+++ b/rocketmq-k8s-helm/templates/broker/_brokerconfig.tpl
@@ -0,0 +1,49 @@
+{{- define "rocketmq-broker.config" -}}
+{{- $name := include "rocketmq-broker.fullname" . }}
+{{- $clusterName := include "rocketmq-broker.clusterName" . }}
+{{- $brokerNamePrefix := include "rocketmq-broker.brokerNamePrefix" . }}
+{{- $config := .Values.broker.config }}
+{{- $replicaCount := .Values.broker.replicaCount | int }}
+{{- range $index := until $replicaCount }}
+ {{ $name }}-{{ $index }}: |
+ brokerClusterName={{ $clusterName }}
+ brokerName={{ $brokerNamePrefix }}-{{ $index }}
+ enableNameServerAddressResolve=true
+
+ # common configs
+ traceOn=true
+ autoCreateTopicEnable=false
+ autoCreateSubscriptionGroup=true
+ enableIncrementalTopicCreation=true
+ generateConfigForScaleOutEnable=false
+ enableNotifyAfterPopOrderLockRelease=true
+ autoMessageVersionOnTopicLen=true
+
+ # pop config
+ enablePopBufferMerge=true
+ enableConsumePopRetryTopic=true
+ enableConsumePullRetryTopic=true
+ enableSkipLongWaitAck=true
+
+ # Store config
+ flushDiskType=SYNC_FLUSH
+
+ # Enable SQL92
+ enablePropertyFilter=true
+
+ # Transaction config
+ transactionCheckMaxTimeInMs=14400000
+ transactionCheckInterval=60000
+
+ # Delay config
+ timerWheelEnable=true
+ timerMaxDelaySec=86400
+
+ waitTimeMillsInSendQueue=900
+ maxMessageSize=5242880
+
+ # stream
+ litePullMessageEnable=true
+{{ $config | indent 4 }}
+{{- end }}
+{{- end }}
\ No newline at end of file
diff --git a/rocketmq-k8s-helm/templates/broker/_helpers.tpl
b/rocketmq-k8s-helm/templates/broker/_helpers.tpl
new file mode 100644
index 0000000..32a4b2f
--- /dev/null
+++ b/rocketmq-k8s-helm/templates/broker/_helpers.tpl
@@ -0,0 +1,70 @@
+{{/*
+Expand the name of the chart.
+*/}}
+{{- define "rocketmq-broker.name" -}}
+{{- default .Chart.Name .Values.broker.nameOverride | trunc 63 | trimSuffix
"-" }}
+{{- end }}
+
+{{/*
+Create a default fully qualified app name.
+We truncate at 63 chars because some Kubernetes name fields are limited to
this (by the DNS naming spec).
+If release name contains chart name it will be used as a full name.
+*/}}
+{{- define "rocketmq-broker.fullname" -}}
+{{- if .Values.broker.fullnameOverride }}
+{{- .Values.broker.fullnameOverride | trunc 63 | trimSuffix "-" }}
+{{- else }}
+{{- $name := default .Chart.Name .Values.broker.nameOverride }}
+{{- if contains $name .Release.Name }}
+{{- .Release.Name | trunc 63 | trimSuffix "-" }}
+{{- else }}
+{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
+{{- end }}
+{{- end }}
+{{- end }}
+
+{{/*
+Create chart name and version as used by the chart label.
+*/}}
+{{- define "rocketmq-broker.chart" -}}
+{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 |
trimSuffix "-" }}
+{{- end }}
+
+{{/*
+Common labels
+*/}}
+{{- define "rocketmq-broker.labels" -}}
+{{ include "rocketmq-broker.selectorLabels" . }}
+{{- if .Chart.AppVersion }}
+app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
+{{- end }}
+app.kubernetes.io/managed-by: {{ .Release.Service }}
+{{- end }}
+
+{{/*
+Selector labels
+*/}}
+{{- define "rocketmq-broker.selectorLabels" -}}
+app.kubernetes.io/name: {{ include "rocketmq-broker.name" . }}
+app.kubernetes.io/instance: {{ .Release.Name }}
+{{- end }}
+
+{{- define "rocketmq-broker.clusterName" -}}
+{{- if .Values.broker.conf.clusterNameOverride }}
+{{- .Values.broker.conf.clusterNameOverride | trunc 63 | trimSuffix "-" }}
+{{- else -}}
+DefaultCluster
+{{- end }}
+{{- end }}
+
+{{- define "rocketmq-broker.brokerNamePrefix" -}}
+{{- if .Values.broker.conf.brokerNamePrefixOverride }}
+{{- .Values.broker.conf.brokerNamePrefixOverride | trunc 63 | trimSuffix "-" }}
+{{- else }}
+{{- include "rocketmq-broker.fullname" . }}
+{{- end }}
+{{- end }}
+
+{{- define "rocketmq-broker.brokerImage" -}}
+{{ .Values.broker.image.repository }}:{{ .Values.broker.image.tag | default
.Chart.AppVersion }}
+{{- end }}
diff --git a/rocketmq-k8s-helm/templates/broker/configmap.yaml
b/rocketmq-k8s-helm/templates/broker/configmap.yaml
new file mode 100644
index 0000000..2265bef
--- /dev/null
+++ b/rocketmq-k8s-helm/templates/broker/configmap.yaml
@@ -0,0 +1,8 @@
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: broker-conf
+ labels:
+ {{- include "rocketmq-broker.labels" . | nindent 4 }}
+data:
+{{- include "rocketmq-broker.config" . }}
\ No newline at end of file
diff --git a/rocketmq-k8s-helm/templates/broker/service.yaml
b/rocketmq-k8s-helm/templates/broker/service.yaml
new file mode 100644
index 0000000..1fe13d2
--- /dev/null
+++ b/rocketmq-k8s-helm/templates/broker/service.yaml
@@ -0,0 +1,15 @@
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ include "rocketmq-broker.fullname" . }}
+ labels:
+ {{- include "rocketmq-broker.labels" . | nindent 4 }}
+spec:
+ ports:
+ - port: {{ .Values.broker.service.port }}
+ targetPort: broker-port
+ protocol: TCP
+ name: broker-port
+ selector:
+ {{- include "rocketmq-broker.selectorLabels" . | nindent 4 }}
+ clusterIP: None
diff --git a/rocketmq-k8s-helm/templates/broker/statefulset.yaml
b/rocketmq-k8s-helm/templates/broker/statefulset.yaml
new file mode 100644
index 0000000..a62cdf5
--- /dev/null
+++ b/rocketmq-k8s-helm/templates/broker/statefulset.yaml
@@ -0,0 +1,102 @@
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+ name: {{ include "rocketmq-broker.fullname" . }}
+spec:
+ replicas: {{ .Values.broker.replicaCount }}
+ serviceName: {{ include "rocketmq-broker.fullname" . }}
+ selector:
+ matchLabels:
+ {{- include "rocketmq-broker.selectorLabels" . | nindent 6 }}
+ podManagementPolicy: Parallel
+ updateStrategy:
+ type: RollingUpdate
+ template:
+ metadata:
+ labels:
+ {{- include "rocketmq-broker.selectorLabels" . | nindent 8 }}
+ spec:
+ imagePullSecrets:
+ - name: onetest-regcred
+ containers:
+ - name: broker
+ image: {{ include "rocketmq-broker.brokerImage" . }}
+ {{- if $.Values.broker.image.pullPolicy }}
+ imagePullPolicy: {{ $.Values.broker.image.pullPolicy }}
+ {{- end }}
+ command: [ "/bin/sh" ]
+ args: [ "-c", "./mqbroker -c /home/rocketmq/conf/$(POD_NAME)" ]
+ env:
+ - name: POD_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: POD_IP
+ valueFrom:
+ fieldRef:
+ fieldPath: status.podIP
+ - name: BROKER_MEM
+ value: {{ .Values.broker.jvmMemory }}
+ - name: NAMESRV_ADDR
+ value: {{ include "rocketmq-nameserver.fullname" . }}:9876
+ ports:
+ - name: broker
+ containerPort: 10911
+ protocol: TCP
+ - name: con-nameserver
+ containerPort: 10909
+ protocol: TCP
+ - name: ha
+ containerPort: 10912
+ protocol: TCP
+ - name: proxy
+ containerPort: 8081
+ protocol: TCP
+ readinessProbe:
+ failureThreshold: 3
+ initialDelaySeconds: 60
+ periodSeconds: 15
+ successThreshold: 1
+ tcpSocket:
+ port: 10911
+ timeoutSeconds: 1
+ livenessProbe:
+ failureThreshold: 3
+ initialDelaySeconds: 60
+ periodSeconds: 15
+ successThreshold: 1
+ tcpSocket:
+ port: 10911
+ timeoutSeconds: 1
+ resources:
+ {{- toYaml .Values.broker.resources | nindent 12 }}
+ volumeMounts:
+ - mountPath: /home/rocketmq/conf
+ name: broker-config
+ - mountPath: /home/rocketmq/logs
+ name: broker-storage
+ subPath: home/rocketmq/rocketmq-broker
+ - mountPath: /root/store
+ name: broker-storage
+ subPath: store/rocketmq-broker
+ {{- with .Values.broker.nodeSelector }}
+ nodeSelector:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ volumes:
+ - name: broker-config
+ configMap:
+ name: broker-conf
+ {{- if not $.Values.broker.persistence.enabled }}
+ - name: broker-storage
+ emptyDir: { }
+ {{- else }}
+ volumeClaimTemplates:
+ - metadata:
+ name: broker-storage
+ spec:
+ accessModes: [ "ReadWriteOnce" ]
+ resources:
+ requests:
+ storage: {{ .Values.broker.store.data.size }}
+ {{- end }}
\ No newline at end of file
diff --git a/rocketmq-k8s-helm/templates/nameserver/NOTES.txt
b/rocketmq-k8s-helm/templates/nameserver/NOTES.txt
new file mode 100644
index 0000000..7e35d14
--- /dev/null
+++ b/rocketmq-k8s-helm/templates/nameserver/NOTES.txt
@@ -0,0 +1,23 @@
+1. Get the application URL by running these commands:
+{{- if .Values.nameserver.ingress.enabled }}
+{{- range $host := .Values.nameserver.ingress.hosts }}
+ {{- range .paths }}
+ http{{ if $.Values.nameserver.ingress.tls }}s{{ end }}://{{ $host.host }}{{
.path }}
+ {{- end }}
+{{- end }}
+{{- else if contains "NodePort" .Values.nameserver.service.type }}
+ export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o
jsonpath="{.spec.ports[0].nodePort}" services {{ include
"rocketmq-nameserver.fullname" . }})
+ export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o
jsonpath="{.items[0].status.addresses[0].address}")
+ echo http://$NODE_IP:$NODE_PORT
+{{- else if contains "LoadBalancer" .Values.nameserver.service.type }}
+ NOTE: It may take a few minutes for the LoadBalancer IP to be available.
+ You can watch the status of by running 'kubectl get --namespace {{
.Release.Namespace }} svc -w {{ include "rocketmq-nameserver.fullname" . }}'
+ export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{
include "rocketmq-nameserver.fullname" . }} --template "{{"{{ range (index
.status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}")
+ echo http://$SERVICE_IP:{{ .Values.nameserver.service.port }}
+{{- else if contains "ClusterIP" .Values.nameserver.service.type }}
+ export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l
"app.kubernetes.io/name={{ include "rocketmq-nameserver.name" .
}},app.kubernetes.io/instance={{ .Release.Name }}" -o
jsonpath="{.items[0].metadata.name}")
+ export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }}
$POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
+ echo "Visit http://127.0.0.1:8080 to use your application"
+ kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME
8080:$CONTAINER_PORT
+{{- end }}
+helm ls --all-namespaces
\ No newline at end of file
diff --git a/rocketmq-k8s-helm/templates/nameserver/_helpers.tpl
b/rocketmq-k8s-helm/templates/nameserver/_helpers.tpl
new file mode 100644
index 0000000..8125311
--- /dev/null
+++ b/rocketmq-k8s-helm/templates/nameserver/_helpers.tpl
@@ -0,0 +1,59 @@
+{{/*
+Expand the name of the chart.
+*/}}
+{{- define "rocketmq-nameserver.name" -}}
+{{- default .Chart.Name .Values.nameserver.nameOverride | trunc 63 |
trimSuffix "-" }}
+{{- end }}
+
+{{/*
+Create a default fully qualified app name.
+We truncate at 63 chars because some Kubernetes name fields are limited to
this (by the DNS naming spec).
+If release name contains chart name it will be used as a full name.
+*/}}
+{{- define "rocketmq-nameserver.fullname" -}}
+{{- if .Values.nameserver.fullnameOverride }}
+{{- .Values.nameserver.fullnameOverride | trunc 63 | trimSuffix "-" }}
+{{- else }}
+{{- $name := default .Chart.Name .Values.nameserver.nameOverride }}
+{{- if contains $name .Release.Name }}
+{{- .Release.Name | trunc 63 | trimSuffix "-" }}
+{{- else }}
+{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
+{{- end }}
+{{- end }}
+{{- end }}
+
+{{/*
+Create chart name and version as used by the chart label.
+*/}}
+{{- define "rocketmq-nameserver.chart" -}}
+{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 |
trimSuffix "-" }}
+{{- end }}
+
+{{/*
+Common labels
+*/}}
+{{- define "rocketmq-nameserver.labels" -}}
+helm.sh/chart: {{ include "rocketmq-nameserver.chart" . }}
+{{ include "rocketmq-nameserver.selectorLabels" . }}
+{{- if .Chart.AppVersion }}
+app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
+{{- end }}
+app.kubernetes.io/managed-by: {{ .Release.Service }}
+{{- end }}
+
+{{/*
+Selector labels
+*/}}
+{{- define "rocketmq-nameserver.selectorLabels" -}}
+app.kubernetes.io/name: {{ include "rocketmq-nameserver.name" . }}
+app.kubernetes.io/instance: {{ .Release.Name }}
+{{- end }}
+
+{{- define "rocketmq-nameserver.namesrvImage" -}}
+{{ .Values.nameserver.image.repository }}:{{ .Values.nameserver.image.tag |
default .Chart.AppVersion }}
+{{- end }}
+
+{{- define "rocketmq-nameserver.port" -}}
+{{- .Values.nameserver.port }}
+{{- end }}
diff --git a/rocketmq-k8s-helm/templates/nameserver/configmap.yaml
b/rocketmq-k8s-helm/templates/nameserver/configmap.yaml
new file mode 100644
index 0000000..905255f
--- /dev/null
+++ b/rocketmq-k8s-helm/templates/nameserver/configmap.yaml
@@ -0,0 +1,10 @@
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: nameserver-conf
+ labels:
+ {{- include "rocketmq-nameserver.labels" . | nindent 4 }}
+data:
+ namesrv.p: |
+ listenPort={{ include "rocketmq-nameserver.port" . }}
+ {{ .Values.nameserver.configmap | indent 4 | trim }}
diff --git a/rocketmq-k8s-helm/templates/nameserver/deployment.yaml
b/rocketmq-k8s-helm/templates/nameserver/deployment.yaml
new file mode 100644
index 0000000..2debadb
--- /dev/null
+++ b/rocketmq-k8s-helm/templates/nameserver/deployment.yaml
@@ -0,0 +1,69 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: {{ include "rocketmq-nameserver.fullname" . }}
+spec:
+ replicas: {{ .Values.nameserver.replicaCount }}
+ selector:
+ matchLabels:
+ {{- include "rocketmq-nameserver.selectorLabels" . | nindent 6 }}
+ component: nameserver
+ template:
+ metadata:
+ labels:
+ {{- include "rocketmq-nameserver.selectorLabels" . | nindent 8 }}
+ component: nameserver
+ spec:
+ imagePullSecrets:
+ - name: onetest-regcred
+ containers:
+ - name: nameserver
+ image: {{ include "rocketmq-nameserver.namesrvImage" . }}
+ {{- if .Values.nameserver.image.pullPolicy }}
+ imagePullPolicy: {{ .Values.nameserver.image.pullPolicy | quote }}
+ {{- end }}
+ command: [ "/bin/sh" ]
+ args: [ "-c", "./mqnamesrv -c /home/rocketmq/config/namesrv.p" ]
+ env:
+ - name: JAVA_HEAP_SIZE
+ value: {{ .Values.nameserver.heapSize }}
+ ports:
+ - name: nameserver
+ containerPort: {{ include "rocketmq-nameserver.port" . }}
+ protocol: TCP
+ startupProbe:
+ tcpSocket:
+ port: nameserver
+ periodSeconds: 5
+ initialDelaySeconds: 20
+ failureThreshold: 3
+ livenessProbe:
+ tcpSocket:
+ port: nameserver
+ initialDelaySeconds: 5
+ periodSeconds: 5
+ failureThreshold: 3
+ readinessProbe:
+ tcpSocket:
+ port: nameserver
+ initialDelaySeconds: 5
+ periodSeconds: 5
+ timeoutSeconds: 1
+ failureThreshold: 3
+ resources:
+ {{- toYaml .Values.nameserver.resources | nindent 12 }}
+ volumeMounts:
+ - mountPath: /home/rocketmq/config
+ name: nameserver-config
+ - mountPath: /home/rocketmq/logs
+ name: nameserver-log
+ volumes:
+ - name: nameserver-config
+ configMap:
+ name: nameserver-conf
+ - name: nameserver-log
+ emptyDir: { }
+ {{- with .Values.nameserver.nodeSelector }}
+ nodeSelector:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
\ No newline at end of file
diff --git a/rocketmq-k8s-helm/templates/nameserver/service.yaml
b/rocketmq-k8s-helm/templates/nameserver/service.yaml
new file mode 100644
index 0000000..a285f20
--- /dev/null
+++ b/rocketmq-k8s-helm/templates/nameserver/service.yaml
@@ -0,0 +1,15 @@
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ include "rocketmq-nameserver.fullname" . }}
+ labels:
+ {{- include "rocketmq-nameserver.labels" . | nindent 4 }}
+spec:
+ clusterIP: None
+ ports:
+ - port: {{ .Values.nameserver.service.servicePort }}
+ targetPort: {{ include "rocketmq-nameserver.port" . }}
+ protocol: TCP
+ name: nameserver-service
+ selector:
+ {{- include "rocketmq-nameserver.selectorLabels" . | nindent 4 }}
diff --git a/rocketmq-k8s-helm/templates/proxy/_helpers.tpl
b/rocketmq-k8s-helm/templates/proxy/_helpers.tpl
new file mode 100644
index 0000000..2d5f168
--- /dev/null
+++ b/rocketmq-k8s-helm/templates/proxy/_helpers.tpl
@@ -0,0 +1,47 @@
+{{/*
+Expand the name of the chart.
+*/}}
+{{- define "rocketmq-proxy.name" -}}
+{{- default .Chart.Name .Values.proxy.nameOverride | trunc 63 | trimSuffix "-"
}}
+{{- end }}
+
+{{/*
+Create a default fully qualified app name.
+We truncate at 63 chars because some Kubernetes name fields are limited to
this (by the DNS naming spec).
+If release name contains chart name it will be used as a full name.
+*/}}
+{{- define "rocketmq-proxy.fullname" -}}
+{{- if .Values.proxy.fullnameOverride }}
+{{- .Values.proxy.fullnameOverride | trunc 63 | trimSuffix "-" }}
+{{- else }}
+{{- $name := default .Chart.Name .Values.proxy.nameOverride }}
+{{- if contains $name .Release.Name }}
+{{- .Release.Name | trunc 63 | trimSuffix "-" }}
+{{- else }}
+{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
+{{- end }}
+{{- end }}
+{{- end }}
+
+{{/*
+Common labels
+*/}}
+{{- define "rocketmq-proxy.labels" -}}
+{{ include "rocketmq-proxy.selectorLabels" . }}
+{{- if .Chart.AppVersion }}
+app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
+{{- end }}
+app.kubernetes.io/managed-by: {{ .Release.Service }}
+{{- end }}
+
+{{/*
+Selector labels
+*/}}
+{{- define "rocketmq-proxy.selectorLabels" -}}
+app.kubernetes.io/name: {{ include "rocketmq-proxy.name" . }}
+app.kubernetes.io/instance: {{ .Release.Name }}
+{{- end }}
+
+{{- define "rocketmq-proxy.proxyImage" -}}
+{{ .Values.proxy.image.repository }}:{{ .Values.proxy.image.tag | default
.Chart.AppVersion }}
+{{- end }}
diff --git a/rocketmq-k8s-helm/templates/proxy/_proxyconfig.tpl
b/rocketmq-k8s-helm/templates/proxy/_proxyconfig.tpl
new file mode 100644
index 0000000..f49655c
--- /dev/null
+++ b/rocketmq-k8s-helm/templates/proxy/_proxyconfig.tpl
@@ -0,0 +1,26 @@
+{{/*
+Using mergeOverwrite to merge configs from Values into regional config,
+valuse from .Values.config have the higher priority.
+*/}}
+
+{{- define "rocketmq-proxy.conf" -}}
+{{- $commonConf := fromYaml (include "rocketmq-proxy.common.conf" . ) -}}
+ rmq-proxy.json: |
+{{- mergeOverwrite $commonConf .Values.proxy.config | mustToPrettyJson |
nindent 4 }}
+{{- end }}
+{{- define "rocketmq-proxy.common.conf" -}}
+enableFlowControl: true
+enableFlowLimitAction: true
+metricCollectorMode: "proxy"
+longPollingReserveTimeInMillis: 1000
+maxMessageSize: 4194304
+maxUserPropertySize: 16384
+userPropertyMaxNum: 128
+maxMessageGroupSize: 64
+grpcClientProducerBackoffInitialMillis: 5
+grpcClientProducerBackoffMultiplier: 5
+grpcClientProducerBackoffMaxMillis: 1000
+transactionHeartbeatBatchNum: 1
+rocketMQClusterName: "{{ include "rocketmq-broker.clusterName" . }}"
+namesrvAddr: "{{ include "rocketmq-nameserver.fullname" . }}:9876"
+{{- end -}}
\ No newline at end of file
diff --git a/rocketmq-k8s-helm/templates/proxy/configmap.yaml
b/rocketmq-k8s-helm/templates/proxy/configmap.yaml
new file mode 100644
index 0000000..452e9e0
--- /dev/null
+++ b/rocketmq-k8s-helm/templates/proxy/configmap.yaml
@@ -0,0 +1,6 @@
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: proxy-conf
+data:
+ {{ include "rocketmq-proxy.conf" . }}
diff --git a/rocketmq-k8s-helm/templates/proxy/deployment.yaml
b/rocketmq-k8s-helm/templates/proxy/deployment.yaml
new file mode 100644
index 0000000..e1d697e
--- /dev/null
+++ b/rocketmq-k8s-helm/templates/proxy/deployment.yaml
@@ -0,0 +1,80 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: {{ include "rocketmq-proxy.fullname" . }}
+spec:
+{{- if not .Values.proxy.autoscaling.enabled }}
+ replicas: {{ .Values.proxy.replicaCount }}
+{{- end }}
+ selector:
+ matchLabels:
+ {{- include "rocketmq-proxy.selectorLabels" . | nindent 6 }}
+ template:
+ metadata:
+ {{- with .Values.proxy.podAnnotations }}
+ annotations:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ labels:
+ {{- include "rocketmq-proxy.selectorLabels" . | nindent 8 }}
+ spec:
+ imagePullSecrets:
+ - name: onetest-regcred
+ containers:
+ - name: proxy
+ image: {{ include "rocketmq-proxy.proxyImage" . }}
+ {{- if .Values.proxy.image.pullPolicy }}
+ imagePullPolicy: {{ .Values.proxy.image.pullPolicy | quote }}
+ {{- end }}
+ command: [ "/bin/sh" ]
+ args: [ "-c", "./mqproxy -pc
/home/rocketmq/rocketmq-proxy/configmap/rmq-proxy.json" ]
+ env:
+ - name: RMQ_PROXY_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: NAMESRV_ADDR
+ value: {{ include "rocketmq-nameserver.fullname" . }}:9876
+ - name: RMQ_PROXY_CONFIG_PATH
+ value: /home/rocketmq/rocketmq-proxy/configmap
+ lifecycle:
+ preStop:
+ exec:
+ command:
+ - sh
+ - ./bin/mqshutdown
+ - proxy
+ ports:
+ - name: remote
+ containerPort: 8080
+ protocol: TCP
+ - name: grpc
+ containerPort: 8081
+ protocol: TCP
+ startupProbe:
+ tcpSocket:
+ port: grpc
+ initialDelaySeconds: 10
+ failureThreshold: 30
+ periodSeconds: 10
+ readinessProbe:
+ tcpSocket:
+ port: grpc
+ periodSeconds: 5
+ livenessProbe:
+ tcpSocket:
+ port: grpc
+ periodSeconds: 10
+ resources:
+ {{- toYaml .Values.proxy.resources | nindent 12 }}
+ volumeMounts:
+ - name: conf
+ mountPath: /home/rocketmq/rocketmq-proxy/configmap/
+ volumes:
+ - name: conf
+ configMap:
+ name: proxy-conf
+ {{- with .Values.proxy.nodeSelector }}
+ nodeSelector:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
\ No newline at end of file
diff --git a/rocketmq-k8s-helm/templates/proxy/service.yaml
b/rocketmq-k8s-helm/templates/proxy/service.yaml
new file mode 100644
index 0000000..78732c3
--- /dev/null
+++ b/rocketmq-k8s-helm/templates/proxy/service.yaml
@@ -0,0 +1,19 @@
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ include "rocketmq-proxy.fullname" . }}
+ labels:
+ {{- include "rocketmq-proxy.labels" . | nindent 4 }}
+spec:
+ clusterIP: None
+ ports:
+ - port: {{ .Values.proxy.service.remotingInternetPort }}
+ targetPort: 7001
+ protocol: TCP
+ name: remoting-internet
+ - port: {{ .Values.proxy.service.grpcPort }}
+ targetPort: 8081
+ protocol: TCP
+ name: grpc
+ selector:
+ {{- include "rocketmq-proxy.selectorLabels" . | nindent 4 }}
\ No newline at end of file
diff --git a/rocketmq-k8s-helm/values.yaml b/rocketmq-k8s-helm/values.yaml
new file mode 100644
index 0000000..ad53487
--- /dev/null
+++ b/rocketmq-k8s-helm/values.yaml
@@ -0,0 +1,203 @@
+# Default values for rocketmq-proxy.
+# This is a YAML-formatted file.
+# Declare variables to be passed into your templates.
+
+nameserver:
+ replicaCount: 1
+ image:
+ pullPolicy: IfNotPresent
+ repository: "apache/rocketmq"
+ tag: "latest"
+
+ imagePullSecrets: [ ]
+ nameOverride: "nameserver"
+ fullnameOverride: ""
+
+ port: 9876
+ heapSize: "1792M"
+
+ serviceAccount:
+ # Specifies whether a service account should be created
+ create: false
+ # Annotations to add to the service account
+ annotations: { }
+ # The name of the service account to use.
+ # If not set and create is true, a name is generated using the fullname
template
+ name: ""
+
+ podAnnotations: { }
+ nodeSelector: { }
+
+ podSecurityContext:
+ { }
+ # fsGroup: 2000
+
+ service:
+ type: ClusterIP
+ servicePort: 9876
+ enableDraining: true
+ drainTimeout: 30
+
+ ingress:
+ enabled: false
+ className: ""
+ annotations:
+ { }
+ # kubernetes.io/ingress.class: nginx
+ # kubernetes.io/tls-acme: "true"
+ hosts:
+ - host: chart-example.local
+ paths:
+ - path: /
+ pathType: ImplementationSpecific
+ tls: [ ]
+ # - secretName: chart-example-tls
+ # hosts:
+ # - chart-example.local
+
+ persistence:
+ enabled: false
+ size: 8Gi
+
+ resources:
+ limits:
+ cpu: 1
+ memory: 2Gi
+ requests:
+ cpu: 250m
+ memory: 2Gi
+
+ autoscaling:
+ enabled: false
+ minReplicas: 1
+ maxReplicas: 100
+ targetCPUUtilizationPercentage: 80
+ # targetMemoryUtilizationPercentage: 80
+
+ configmap: |
+ defaultThreadPoolNums=4
+ deleteTopicWithBrokerRegistration=true
+
+
+proxy:
+ replicaCount: 1
+ image:
+ pullPolicy: IfNotPresent
+ repository: "apache/rocketmq"
+ tag: "latest"
+
+ imagePullSecrets: [ ]
+ nameOverride: "proxy"
+ fullnameOverride: ""
+
+ heapSize: "1920M"
+ maxDirectMemorySize: "384M"
+ rocketMQClusterName: "DefaultCluster"
+
+ config: { }
+
+ serviceAccount:
+ # Specifies whether a service account should be created
+ create: false
+ # Annotations to add to the service account
+ annotations: { }
+ # The name of the service account to use.
+ # If not set and create is true, a name is generated using the fullname
template
+ name: ""
+
+ podAnnotations:
+
+ service:
+ remotingInternetPort: 8080
+ grpcPort: 8081
+ adminPort: 8088
+ internet:
+ enabled: false
+ acl:
+ enabled: false
+ id: ""
+ configs:
+ - id: ""
+
+ ingress:
+ enabled: false
+ annotations: { }
+ # kubernetes.io/ingress.class: nginx
+ # kubernetes.io/tls-acme: "true"
+ hosts:
+ - host: chart-example.local
+ paths: [ ]
+ tls: [ ]
+ # - secretName: chart-example-tls
+ # hosts:
+ # - chart-example.local
+
+ resources:
+ limits:
+ cpu: 1
+ memory: 8Gi
+ requests:
+ cpu: 1
+ memory: 8Gi
+
+ autoscaling:
+ enabled: false
+ minReplicas: 1
+ maxReplicas: 100
+ targetCPUUtilizationPercentage: 80
+
+ nodeSelector: { }
+
+ tolerations: [ ]
+
+ affinity: { }
+
+
+broker:
+ replicaCount: 1
+ image:
+ pullPolicy: IfNotPresent
+ repository: "apache/rocketmq"
+ tag: "latest"
+
+ partition: 0
+ persistence:
+ enabled: false
+ size: 8Gi
+
+ nameOverride: "broker"
+ fullnameOverride: ""
+ namesrvAddr: ""
+
+ conf:
+ clusterNameOverride: ""
+ brokerNamePrefixOverride: ""
+ tlsMode: disabled
+ heapSize: "3G"
+ enableStartupProbe: false
+ startupProbeNamesrvAddr: ""
+ nameServerHeadlessAddr: ""
+
+ config: ""
+
+ store:
+ data:
+ size: 10Gi
+ log:
+ size: 10Gi
+
+ service:
+ port: 10911
+
+ jvmMemory: " -Xms4g -Xmx4g -Xmn2g -XX:MaxDirectMemorySize=8g "
+ resources:
+ limits:
+ cpu: 2
+ memory: 4Gi
+ requests:
+ cpu: 2
+ memory: 4Gi
+
+ nodeSelector: { }
+
+ tolerations: [ ]
\ No newline at end of file