Skip to content

Commit 7ce33f9

Browse files
committed
add rocketmq controller
Signed-off-by: dongjiang <dongjiang1989@126.com>
1 parent 2ff77cc commit 7ce33f9

File tree

11 files changed

+608
-0
lines changed

11 files changed

+608
-0
lines changed

addons/rocketmq/.helmignore

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
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/

addons/rocketmq/Chart.yaml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
apiVersion: v2
2+
name: rocketmq
3+
description: A Helm chart for Kubernetes
4+
5+
# A chart can be either an 'application' or a 'library' chart.
6+
#
7+
# Application charts are a collection of templates that can be packaged into versioned archives
8+
# to be deployed.
9+
#
10+
# Library charts provide useful utilities or functions for the chart developer. They're included as
11+
# a dependency of application charts to inject those utilities and functions into the rendering
12+
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
13+
type: application
14+
15+
# This is the chart version. This version number should be incremented each time you make changes
16+
# to the chart and its templates, including the app version.
17+
# Versions are expected to follow Semantic Versioning (https://semver.org/)
18+
version: 0.1.0
19+
20+
# This is the version number of the application being deployed. This version number should be
21+
# incremented each time you make changes to the application. Versions are not expected to
22+
# follow Semantic Versioning. They should reflect the version the application is using.
23+
# It is recommended to use it with quotes.
24+
appVersion: "5.3.2"
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
#!/bin/bash
2+
3+
# shellcheck disable=SC2034
4+
5+
java -version
6+
if [ $? -ne 0 ]; then
7+
echo "[ERROR] Missing java runtime"
8+
exit 50
9+
fi
10+
11+
if [ -z "${ROCKETMQ_HOME}" ]; then
12+
echo "[ERROR] Missing env ROCKETMQ_HOME"
13+
exit 50
14+
fi
15+
if [ -z "${ROCKETMQ_PROCESS_ROLE}" ]; then
16+
echo "[ERROR] Missing env ROCKETMQ_PROCESS_ROLE"
17+
exit 50
18+
fi
19+
20+
export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))
21+
export CLASSPATH=".:${ROCKETMQ_HOME}/conf:${ROCKETMQ_HOME}/lib/*:${CLASSPATH}"
22+
23+
JAVA_OPT="${JAVA_OPT} -server"
24+
if [ -n "$ROCKETMQ_JAVA_OPTIONS_OVERRIDE" ]; then
25+
JAVA_OPT="${JAVA_OPT} ${ROCKETMQ_JAVA_OPTIONS_OVERRIDE}"
26+
else
27+
JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC"
28+
JAVA_OPT="${JAVA_OPT} ${ROCKETMQ_JAVA_OPTIONS_EXT}"
29+
JAVA_OPT="${JAVA_OPT} ${ROCKETMQ_JAVA_OPTIONS_HEAP}"
30+
fi
31+
JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"
32+
33+
export BROKER_CONF_FILE="$HOME/broker.conf"
34+
export CONTROLLER_CONF_FILE="$HOME/controller.conf"
35+
36+
update_broker_conf() {
37+
local key=$1
38+
local value=$2
39+
sed -i "/^${key} *=/d" ${BROKER_CONF_FILE}
40+
echo "${key} = ${value}" >> ${BROKER_CONF_FILE}
41+
}
42+
43+
init_broker_role() {
44+
if [ "${ROCKETMQ_CONF_brokerRole}" = "SLAVE" ]; then
45+
update_broker_conf "brokerRole" "SLAVE"
46+
elif [ "${ROCKETMQ_CONF_brokerRole}" = "SYNC_MASTER" ]; then
47+
update_broker_conf "brokerRole" "SYNC_MASTER"
48+
else
49+
update_broker_conf "brokerRole" "ASYNC_MASTER"
50+
fi
51+
if echo "${ROCKETMQ_CONF_brokerId}" | grep -E '^[0-9]+$'; then
52+
update_broker_conf "brokerId" "${ROCKETMQ_CONF_brokerId}"
53+
fi
54+
}
55+
56+
init_broker_conf() {
57+
rm -f ${BROKER_CONF_FILE}
58+
cp /etc/rocketmq/broker-base.conf ${BROKER_CONF_FILE}
59+
echo "" >> ${BROKER_CONF_FILE}
60+
echo "# generated config" >> ${BROKER_CONF_FILE}
61+
broker_name_seq=${HOSTNAME##*-}
62+
if [ -n "$MY_POD_NAME" ]; then
63+
broker_name_seq=${MY_POD_NAME##*-}
64+
fi
65+
update_broker_conf "brokerName" "broker-g${broker_name_seq}"
66+
if [ "$enableControllerMode" != "true" ]; then
67+
init_broker_role
68+
fi
69+
echo "[exec] cat ${BROKER_CONF_FILE}"
70+
cat ${BROKER_CONF_FILE}
71+
}
72+
73+
init_acl_conf() {
74+
if [ -f /etc/rocketmq/acl/plain_acl.yml ]; then
75+
rm -f "${ROCKETMQ_HOME}/conf/plain_acl.yml"
76+
ln -sf "/etc/rocketmq/acl" "${ROCKETMQ_HOME}/conf/acl"
77+
fi
78+
}
79+
80+
init_controller_conf() {
81+
rm -f ${CONTROLLER_CONF_FILE}
82+
cp /etc/rocketmq/base-cm/controller-base.conf ${CONTROLLER_CONF_FILE}
83+
controllerDLegerSelfId="n${HOSTNAME##*-}"
84+
if [ -n "$MY_POD_NAME" ]; then
85+
controllerDLegerSelfId="n${MY_POD_NAME##*-}"
86+
fi
87+
sed -i "/^controllerDLegerSelfId *=/d" ${CONTROLLER_CONF_FILE}
88+
echo "controllerDLegerSelfId = ${controllerDLegerSelfId}" >> ${CONTROLLER_CONF_FILE}
89+
cat ${CONTROLLER_CONF_FILE}
90+
}
91+
92+
if [ "$ROCKETMQ_PROCESS_ROLE" = "broker" ]; then
93+
init_broker_conf
94+
init_acl_conf
95+
set -x
96+
java ${JAVA_OPT} org.apache.rocketmq.broker.BrokerStartup -c ${BROKER_CONF_FILE}
97+
elif [ "$ROCKETMQ_PROCESS_ROLE" = "controller" ]; then
98+
init_controller_conf
99+
set -x
100+
java ${JAVA_OPT} org.apache.rocketmq.controller.ControllerStartup -c ${CONTROLLER_CONF_FILE}
101+
elif [ "$ROCKETMQ_PROCESS_ROLE" = "nameserver" ] || [ "$ROCKETMQ_PROCESS_ROLE" = "mqnamesrv" ]; then
102+
set -x
103+
if [ "$enableControllerInNamesrv" = "true" ]; then
104+
init_controller_conf
105+
java ${JAVA_OPT} org.apache.rocketmq.namesrv.NamesrvStartup -c ${CONTROLLER_CONF_FILE}
106+
else
107+
java ${JAVA_OPT} org.apache.rocketmq.namesrv.NamesrvStartup
108+
fi
109+
elif [ "$ROCKETMQ_PROCESS_ROLE" = "proxy" ]; then
110+
set -x
111+
if [ -f $RMQ_PROXY_CONFIG_PATH ]; then
112+
java ${JAVA_OPT} org.apache.rocketmq.proxy.ProxyStartup -pc $RMQ_PROXY_CONFIG_PATH
113+
else
114+
java ${JAVA_OPT} org.apache.rocketmq.proxy.ProxyStartup
115+
fi
116+
else
117+
echo "[ERROR] Missing env ROCKETMQ_PROCESS_ROLE"
118+
exit 50
119+
fi

addons/rocketmq/templates/NOTES.txt

Whitespace-only changes.
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
{{/*
2+
Expand the name of the chart.
3+
*/}}
4+
{{- define "rocketmq.name" -}}
5+
{{- default .Chart.Name .Values.nameOverride | trunc 63 | 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 63 | trimSuffix "-" }}
16+
{{- else }}
17+
{{- $name := default .Chart.Name .Values.nameOverride }}
18+
{{- if contains $name .Release.Name }}
19+
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
20+
{{- else }}
21+
{{- printf "%s-%s" .Release.Name $name | trunc 63 | 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 63 | 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+
Common annotations
66+
*/}}
67+
{{- define "rocketmq.annotations" -}}
68+
{{ include "rocketmq.apiVersion" . }}
69+
{{- end }}
70+
71+
{{/*
72+
API version annotation
73+
*/}}
74+
{{- define "rocketmq.apiVersion" -}}
75+
kubeblocks.io/crd-api-version: apps.kubeblocks.io/v1
76+
{{- end }}
77+
78+
79+
{{/*
80+
controller
81+
*/}}
82+
{{- define "rocketmq.controller.fullname" -}}
83+
{{ include "rocketmq.fullname" . }}-controller
84+
{{- end -}}
85+
86+
{{/*
87+
controller
88+
*/}}
89+
{{- define "rocketmq.enableControllerInNamesrv" -}}
90+
{{- if and .Values.controllerModeEnabled (not .Values.controller.enabled) -}}
91+
{{- print "true" -}}
92+
{{- else -}}
93+
{{- print "false" -}}
94+
{{- end -}}
95+
{{- end -}}
96+
97+
{{/*
98+
rocketmq.controller.dlegerPeers
99+
*/}}
100+
{{- define "rocketmq.controller.dlegerPeers" -}}
101+
{{- $address := list -}}
102+
{{- $fullName := include "rocketmq.controller.fullname" . -}}
103+
{{- $headlessDomain := printf "%s.%s.svc" $fullName .Release.Namespace -}}
104+
{{- $replicaCount := int .Values.controller.replicaCount -}}
105+
{{- if eq (include "rocketmq.enableControllerInNamesrv" .) "true" -}}
106+
{{- $fullName = include "rocketmq.nameserver.fullname" . -}}
107+
{{- $headlessDomain = printf "%s-headless.%s.svc" $fullName .Release.Namespace -}}
108+
{{- $replicaCount = int .Values.nameserver.replicaCount -}}
109+
{{- end -}}
110+
{{- range $i := until $replicaCount -}}
111+
{{- $address = printf "n%d-%s-%d.%s:9878" $i $fullName $i $headlessDomain | append $address -}}
112+
{{- end -}}
113+
{{- join ";" $address -}}
114+
{{- end -}}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
{{/*
2+
Define cluster definition name, if resourceNamePrefix is specified, use it as clusterDefName
3+
*/}}
4+
{{- define "rocketmq.clusterDefName" -}}
5+
{{- if eq (len .Values.resourceNamePrefix) 0 -}}
6+
rocketmq
7+
{{- else -}}
8+
{{- .Values.resourceNamePrefix -}}
9+
{{- end -}}
10+
{{- end -}}
11+
12+
{{/*
13+
Define rocketmq component definition name prefix
14+
*/}}
15+
{{- define "rocketmq.cmpdNamePrefix" -}}
16+
{{- default "rocketmq" .Values.resourceNamePrefix -}}-
17+
{{- end -}}
18+
19+
{{/*
20+
Define rocketmq component definition name
21+
*/}}
22+
{{- define "rocketmq.cmpdName" -}}
23+
{{ include "rocketmq.cmpdNamePrefix" . }}{{ .Chart.Version }}
24+
{{- end -}}
25+
26+
{{/*
27+
Define rocketmq pcr definition name
28+
*/}}
29+
{{- define "rocketmq.pcrName" -}}
30+
{{ include "rocketmq.cmpdNamePrefix" . }}pcr
31+
{{- end -}}
32+
33+
{{/*
34+
Define rocketmq pcr definition name
35+
*/}}
36+
{{- define "rocketmq.paramsDefName" -}}
37+
{{ include "rocketmq.cmpdNamePrefix" . }}pd
38+
{{- end -}}
39+
40+
{{/*
41+
Define config constriant name
42+
*/}}
43+
{{- define "rocketmq.configConstraintName" -}}
44+
{{- if eq (len .Values.resourceNamePrefix) 0 -}}
45+
rocketmq-config-constraints
46+
{{- else -}}
47+
{{- .Values.resourceNamePrefix -}}-config-constraints
48+
{{- end -}}
49+
{{- end -}}
50+
51+
{{- define "rocketmq.configTplName" -}}
52+
{{- if eq (len .Values.resourceNamePrefix) 0 -}}
53+
rocketmq-config-template
54+
{{- else -}}
55+
{{- .Values.resourceNamePrefix -}}-config-template
56+
{{- end -}}
57+
{{- end -}}
58+
59+
{{- define "rocketmq.cmScriptsName" }}
60+
{{- if eq (len .Values.resourceNamePrefix) 0 -}}
61+
rocketmq-scripts
62+
{{- else -}}
63+
{{- .Values.resourceNamePrefix -}}-scripts
64+
{{- end -}}
65+
{{- end -}}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
apiVersion: apps.kubeblocks.io/v1
2+
kind: ClusterDefinition
3+
metadata:
4+
name: rocketmq
5+
labels:
6+
{{- include "rocketmq.labels" . | nindent 4 }}
7+
annotations:
8+
{{- include "rocketmq.apiVersion" . | nindent 4 }}
9+
spec:
10+
topologies:
11+
- name: clustermode
12+
components:
13+
- name: rocketmq
14+
compDef: {{ include "rocketmq.cmpdNamePrefix" . }}
15+
default: true

0 commit comments

Comments
 (0)