You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rocketmq.apache.org by li...@apache.org on 2020/09/08 02:59:29 UTC

[rocketmq-operator] branch master updated: fix(*): fix store path and auto-set nameserver ip list (#46)

This is an automated email from the ASF dual-hosted git repository.

liurui pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/rocketmq-operator.git


The following commit(s) were added to refs/heads/master by this push:
     new 49cbc6d  fix(*): fix store path and auto-set nameserver ip list (#46)
49cbc6d is described below

commit 49cbc6d20c1fab16734ccdd56c7f1df1a25c2db5
Author: Rui Liu <24...@qq.com>
AuthorDate: Tue Sep 8 10:59:21 2020 +0800

    fix(*): fix store path and auto-set nameserver ip list (#46)
    
    Co-authored-by: liuruiyiyang <li...@apache.org>
---
 README.md                                       | 39 +++++++++++++++++++++----
 create-operator.sh                              |  2 +-
 deploy/operator.yaml                            |  2 +-
 example/rocketmq_v1alpha1_broker_cr.yaml        |  9 ++----
 example/rocketmq_v1alpha1_nameservice_cr.yaml   |  2 +-
 example/rocketmq_v1alpha1_rocketmq_cluster.yaml | 39 +++++++++++++++++++++----
 go.mod                                          |  4 +--
 images/broker/alpine/Dockerfile                 |  3 +-
 images/broker/alpine/build-broker-image.sh      |  5 ++--
 images/namesrv/alpine/Dockerfile                |  4 +--
 images/namesrv/alpine/build-namesrv-image.sh    |  5 ++--
 pkg/constants/constants.go                      | 15 ++++++----
 pkg/controller/broker/broker_controller.go      |  2 +-
 13 files changed, 94 insertions(+), 37 deletions(-)

diff --git a/README.md b/README.md
index ff844ef..cdd84dc 100644
--- a/README.md
+++ b/README.md
@@ -159,6 +159,22 @@ RocketMQ Operator provides several CRDs to allow users define their RocketMQ ser
 
 1. Check the file ```rocketmq_v1alpha1_rocketmq_cluster.yaml``` in the ```example``` directory, for example:
 ```
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: broker-config
+data:
+  # BROKER_MEM sets the broker JVM, if set to "" then Xms = Xmx = max(min(1/2 ram, 1024MB), min(1/4 ram, 8GB))
+  BROKER_MEM: ""
+  broker-common.conf: |
+    # brokerClusterName, brokerName, brokerId are automatically generated by the operator and do not set it manually!!!
+    deleteWhen=04
+    fileReservedTime=48
+    flushDiskType=ASYNC_FLUSH
+    # set brokerRole to ASYNC_MASTER or SYNC_MASTER. DO NOT set to SLAVE because the replica instance will automatically be set!!!
+    brokerRole=ASYNC_MASTER
+
+---
 apiVersion: rocketmq.apache.org/v1alpha1
 kind: Broker
 metadata:
@@ -169,12 +185,10 @@ spec:
   size: 1
   # nameServers is the [ip:port] list of name service
   nameServers: ""
-  # replicationMode is the broker replica sync mode, can be ASYNC or SYNC
-  replicationMode: ASYNC
   # replicaPerGroup is the number of each broker cluster
   replicaPerGroup: 1
   # brokerImage is the customized docker image repo of the RocketMQ broker
-  brokerImage: apacherocketmq/rocketmq-broker:4.5.0-alpine
+  brokerImage: apacherocketmq/rocketmq-broker:4.5.0-alpine-operator-0.3.0
   # imagePullPolicy is the image pull policy
   imagePullPolicy: Always
   # resources describes the compute resource requirements and limits
@@ -191,8 +205,23 @@ spec:
   storageMode: EmptyDir
   # hostPath is the local path to store data
   hostPath: /data/rocketmq/broker
-  # scalePodName is broker-[broker group number]-master-0
+  # scalePodName is [Broker name]-[broker group number]-master-0
   scalePodName: broker-0-master-0
+  # env defines custom env, e.g. BROKER_MEM
+  env:
+    - name: BROKER_MEM
+      valueFrom:
+        configMapKeyRef:
+          name: broker-config
+          key: BROKER_MEM
+  # volumes defines the broker.conf
+  volumes:
+    - name: broker-config
+      configMap:
+        name: broker-config
+        items:
+          - key: broker-common.conf
+            path: broker-common.conf
   # volumeClaimTemplates defines the storageClass
   volumeClaimTemplates:
     - metadata:
@@ -213,7 +242,7 @@ spec:
   # size is the the name service instance number of the name service cluster
   size: 1
   # nameServiceImage is the customized docker image repo of the RocketMQ name service
-  nameServiceImage: apacherocketmq/rocketmq-nameserver:4.5.0-alpine
+  nameServiceImage: apacherocketmq/rocketmq-nameserver:4.5.0-alpine-operator-0.3.0
   # imagePullPolicy is the image pull policy
   imagePullPolicy: Always
   # hostNetwork can be true or false
diff --git a/create-operator.sh b/create-operator.sh
index b589ad4..02f23b1 100755
--- a/create-operator.sh
+++ b/create-operator.sh
@@ -18,7 +18,7 @@
 set -eux;
 
 # You can change the DOCKERHUB_REPO to your docker repo for development purpose
-DOCKERHUB_REPO="apacherocketmq/rocketmq-operator:0.2.1"
+DOCKERHUB_REPO="apacherocketmq/rocketmq-operator:0.3.0-snapshot"
 # The version of RocketMQ including the Admin Tool
 ROCKETMQ_VERSION="4.5.0"
 
diff --git a/deploy/operator.yaml b/deploy/operator.yaml
index c096ad3..78c4cf9 100644
--- a/deploy/operator.yaml
+++ b/deploy/operator.yaml
@@ -31,7 +31,7 @@ spec:
       containers:
         - name: rocketmq-operator
           # Replace this with the built image name
-          image: apacherocketmq/rocketmq-operator:0.2.1
+          image: apacherocketmq/rocketmq-operator:0.3.0-snapshot
           command:
           - rocketmq-operator
           imagePullPolicy: Always
diff --git a/example/rocketmq_v1alpha1_broker_cr.yaml b/example/rocketmq_v1alpha1_broker_cr.yaml
index f6bea3b..e3d9bd3 100644
--- a/example/rocketmq_v1alpha1_broker_cr.yaml
+++ b/example/rocketmq_v1alpha1_broker_cr.yaml
@@ -18,17 +18,14 @@ kind: ConfigMap
 metadata:
   name: broker-config
 data:
-  BROKER_MEM: " -Xms4g -Xmx4g -Xmn2g "
+  BROKER_MEM: " -Xms2g -Xmx2g -Xmn1g "
   broker-common.conf: |
     # brokerClusterName, brokerName, brokerId are automatically generated by the operator and do not set it manually!!!
     deleteWhen=04
     fileReservedTime=48
     flushDiskType=ASYNC_FLUSH
-    # If it's a slave/replica, the brokerRole will automatically be set to SLAVE
+    # set brokerRole to ASYNC_MASTER or SYNC_MASTER. DO NOT set to SLAVE because the replica instance will automatically be set!!!
     brokerRole=ASYNC_MASTER
-    storePathCommitLog=/home/rocketmq/store/commitlog
-    storePathRootDir=/home/rocketmq/store/
-    storePathScheduledTempData=/home/rocketmq/store/scheduledtempdata
 
 ---
 apiVersion: rocketmq.apache.org/v1alpha1
@@ -44,7 +41,7 @@ spec:
   # replicaPerGroup is the number of each broker cluster
   replicaPerGroup: 1
   # brokerImage is the customized docker image repo of the RocketMQ broker
-  brokerImage: apacherocketmq/rocketmq-broker:4.5.0-alpine
+  brokerImage: apacherocketmq/rocketmq-broker:4.5.0-alpine-operator-0.3.0
   # imagePullPolicy is the image pull policy
   imagePullPolicy: Always
   # resources describes the compute resource requirements and limits
diff --git a/example/rocketmq_v1alpha1_nameservice_cr.yaml b/example/rocketmq_v1alpha1_nameservice_cr.yaml
index a7678aa..291d447 100644
--- a/example/rocketmq_v1alpha1_nameservice_cr.yaml
+++ b/example/rocketmq_v1alpha1_nameservice_cr.yaml
@@ -21,7 +21,7 @@ spec:
   # size is the the name service instance number of the name service cluster
   size: 1
   # nameServiceImage is the customized docker image repo of the RocketMQ name service
-  nameServiceImage: apacherocketmq/rocketmq-nameserver:4.5.0-alpine
+  nameServiceImage: apacherocketmq/rocketmq-nameserver:4.5.0-alpine-operator-0.3.0
   # imagePullPolicy is the image pull policy
   imagePullPolicy: Always
   # hostNetwork can be true or false
diff --git a/example/rocketmq_v1alpha1_rocketmq_cluster.yaml b/example/rocketmq_v1alpha1_rocketmq_cluster.yaml
index f39a2f3..afb01e5 100644
--- a/example/rocketmq_v1alpha1_rocketmq_cluster.yaml
+++ b/example/rocketmq_v1alpha1_rocketmq_cluster.yaml
@@ -13,6 +13,22 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: broker-config
+data:
+  # BROKER_MEM sets the broker JVM, if set to "" then Xms = Xmx = max(min(1/2 ram, 1024MB), min(1/4 ram, 8GB))
+  BROKER_MEM: " -Xms2g -Xmx2g -Xmn1g "
+  broker-common.conf: |
+    # brokerClusterName, brokerName, brokerId are automatically generated by the operator and do not set it manually!!!
+    deleteWhen=04
+    fileReservedTime=48
+    flushDiskType=ASYNC_FLUSH
+    # set brokerRole to ASYNC_MASTER or SYNC_MASTER. DO NOT set to SLAVE because the replica instance will automatically be set!!!
+    brokerRole=ASYNC_MASTER
+
+---
 apiVersion: rocketmq.apache.org/v1alpha1
 kind: Broker
 metadata:
@@ -23,12 +39,10 @@ spec:
   size: 1
   # nameServers is the [ip:port] list of name service
   nameServers: ""
-  # replicationMode is the broker replica sync mode, can be ASYNC or SYNC
-  replicationMode: ASYNC
   # replicaPerGroup is the number of each broker cluster
   replicaPerGroup: 1
   # brokerImage is the customized docker image repo of the RocketMQ broker
-  brokerImage: apacherocketmq/rocketmq-broker:4.5.0-alpine
+  brokerImage: apacherocketmq/rocketmq-broker:4.5.0-alpine-operator-0.3.0
   # imagePullPolicy is the image pull policy
   imagePullPolicy: Always
   # resources describes the compute resource requirements and limits
@@ -45,8 +59,23 @@ spec:
   storageMode: EmptyDir
   # hostPath is the local path to store data
   hostPath: /data/rocketmq/broker
-  # scalePodName is broker-[broker group number]-master-0
+  # scalePodName is [Broker name]-[broker group number]-master-0
   scalePodName: broker-0-master-0
+  # env defines custom env, e.g. BROKER_MEM
+  env:
+    - name: BROKER_MEM
+      valueFrom:
+        configMapKeyRef:
+          name: broker-config
+          key: BROKER_MEM
+  # volumes defines the broker.conf
+  volumes:
+    - name: broker-config
+      configMap:
+        name: broker-config
+        items:
+          - key: broker-common.conf
+            path: broker-common.conf
   # volumeClaimTemplates defines the storageClass
   volumeClaimTemplates:
     - metadata:
@@ -67,7 +96,7 @@ spec:
   # size is the the name service instance number of the name service cluster
   size: 1
   # nameServiceImage is the customized docker image repo of the RocketMQ name service
-  nameServiceImage: apacherocketmq/rocketmq-nameserver:4.5.0-alpine
+  nameServiceImage: apacherocketmq/rocketmq-nameserver:4.5.0-alpine-operator-0.3.0
   # imagePullPolicy is the image pull policy
   imagePullPolicy: Always
   # hostNetwork can be true or false
diff --git a/go.mod b/go.mod
index 637947e..51349d8 100644
--- a/go.mod
+++ b/go.mod
@@ -17,7 +17,7 @@ require (
 	github.com/go-logr/zapr v0.1.1 // indirect
 	github.com/go-openapi/jsonpointer v0.19.0 // indirect
 	github.com/go-openapi/jsonreference v0.19.0 // indirect
-	github.com/go-openapi/spec v0.19.0 // indirect
+	github.com/go-openapi/spec v0.19.0
 	github.com/go-openapi/swag v0.19.0 // indirect
 	github.com/gobuffalo/envy v1.6.15 // indirect
 	github.com/gobwas/glob v0.2.3 // indirect
@@ -69,7 +69,7 @@ require (
 	k8s.io/gengo v0.0.0-20190327210449-e17681d19d3a // indirect
 	k8s.io/helm v2.13.0+incompatible // indirect
 	k8s.io/klog v0.2.0 // indirect
-	k8s.io/kube-openapi v0.0.0-20180711000925-0cf8f7e6ed1d // indirect
+	k8s.io/kube-openapi v0.0.0-20180711000925-0cf8f7e6ed1d
 	sigs.k8s.io/controller-runtime v0.1.10
 	sigs.k8s.io/controller-tools v0.1.8 // indirect
 	sigs.k8s.io/yaml v1.1.0 // indirect
diff --git a/images/broker/alpine/Dockerfile b/images/broker/alpine/Dockerfile
index ef36b44..571451c 100644
--- a/images/broker/alpine/Dockerfile
+++ b/images/broker/alpine/Dockerfile
@@ -25,7 +25,7 @@ ARG version
 ENV ROCKETMQ_VERSION ${version}
 
 # Rocketmq home
-ENV ROCKETMQ_HOME  /home/rocketmq/broker
+ENV ROCKETMQ_HOME  /root/rocketmq/broker
 
 WORKDIR  ${ROCKETMQ_HOME}
 
@@ -34,7 +34,6 @@ RUN set -eux; \
     apk add --virtual .build-deps curl gnupg unzip; \
     curl https://archive.apache.org/dist/rocketmq/${ROCKETMQ_VERSION}/rocketmq-all-${ROCKETMQ_VERSION}-bin-release.zip -o rocketmq.zip; \
     curl https://archive.apache.org/dist/rocketmq/${ROCKETMQ_VERSION}/rocketmq-all-${ROCKETMQ_VERSION}-bin-release.zip.asc -o rocketmq.zip.asc; \
-    #https://www.apache.org/dist/rocketmq/KEYS
 	curl https://www.apache.org/dist/rocketmq/KEYS -o KEYS; \
 	\
 	gpg --import KEYS; \
diff --git a/images/broker/alpine/build-broker-image.sh b/images/broker/alpine/build-broker-image.sh
index e02c1ee..7d424cd 100755
--- a/images/broker/alpine/build-broker-image.sh
+++ b/images/broker/alpine/build-broker-image.sh
@@ -34,9 +34,10 @@ fi
 
 ROCKETMQ_VERSION=$1
 DOCKERHUB_REPO=apacherocketmq/rocketmq-broker
+IMAGE_NAME=${DOCKERHUB_REPO}:${ROCKETMQ_VERSION}-alpine-operator-0.3.0
 
 checkVersion $ROCKETMQ_VERSION
 
-docker build -t ${DOCKERHUB_REPO}:${ROCKETMQ_VERSION}-alpine --build-arg version=${ROCKETMQ_VERSION} .
+docker build -t $IMAGE_NAME --build-arg version=${ROCKETMQ_VERSION} .
 
-docker push ${DOCKERHUB_REPO}:${ROCKETMQ_VERSION}-alpine
+docker push $IMAGE_NAME
diff --git a/images/namesrv/alpine/Dockerfile b/images/namesrv/alpine/Dockerfile
index b105d4a..73c1f18 100644
--- a/images/namesrv/alpine/Dockerfile
+++ b/images/namesrv/alpine/Dockerfile
@@ -25,7 +25,7 @@ ARG version
 ENV ROCKETMQ_VERSION ${version}
 
 # Rocketmq home
-ENV ROCKETMQ_HOME  /home/rocketmq/nameserver
+ENV ROCKETMQ_HOME  /root/rocketmq/nameserver
 
 WORKDIR  ${ROCKETMQ_HOME}
 
@@ -34,9 +34,7 @@ RUN set -eux; \
     apk add --virtual .build-deps curl gnupg unzip; \
     curl https://archive.apache.org/dist/rocketmq/${ROCKETMQ_VERSION}/rocketmq-all-${ROCKETMQ_VERSION}-bin-release.zip -o rocketmq.zip; \
     curl https://archive.apache.org/dist/rocketmq/${ROCKETMQ_VERSION}/rocketmq-all-${ROCKETMQ_VERSION}-bin-release.zip.asc -o rocketmq.zip.asc; \
-    #https://www.apache.org/dist/rocketmq/KEYS
 	curl https://www.apache.org/dist/rocketmq/KEYS -o KEYS; \
-	\
 	gpg --import KEYS; \
     gpg --batch --verify rocketmq.zip.asc rocketmq.zip; \
     unzip rocketmq.zip; \
diff --git a/images/namesrv/alpine/build-namesrv-image.sh b/images/namesrv/alpine/build-namesrv-image.sh
index d598522..c8dce11 100755
--- a/images/namesrv/alpine/build-namesrv-image.sh
+++ b/images/namesrv/alpine/build-namesrv-image.sh
@@ -34,9 +34,10 @@ fi
 
 ROCKETMQ_VERSION=$1
 DOCKERHUB_REPO=apacherocketmq/rocketmq-nameserver
+IMAGE_NAME=${DOCKERHUB_REPO}:${ROCKETMQ_VERSION}-alpine-operator-0.3.0
 
 checkVersion $ROCKETMQ_VERSION
 
-docker build -t ${DOCKERHUB_REPO}:${ROCKETMQ_VERSION}-alpine --build-arg version=${ROCKETMQ_VERSION} .
+docker build -t $IMAGE_NAME --build-arg version=${ROCKETMQ_VERSION} .
 
-docker push ${DOCKERHUB_REPO}:${ROCKETMQ_VERSION}-alpine
+docker push $IMAGE_NAME
\ No newline at end of file
diff --git a/pkg/constants/constants.go b/pkg/constants/constants.go
index bc35a31..5ebf7da 100644
--- a/pkg/constants/constants.go
+++ b/pkg/constants/constants.go
@@ -19,6 +19,9 @@
 package constants
 
 const (
+	// TODO: get paths by container ENV or actual value instead of fixed constant
+	DataPath = "/root"
+
 	// BrokerContainerName is the name of broker container
 	BrokerContainerName = "broker"
 
@@ -29,16 +32,16 @@ const (
 	AdminToolDir = "/home/rocketmq/operator/bin/mqadmin"
 
 	// StoreConfigDir is the directory of config file
-	StoreConfigDir = "/home/rocketmq/store/config"
+	StoreConfigDir = DataPath + "/store/config"
 
 	// TopicJsonDir is the directory of topics.json
-	TopicJsonDir = "/home/rocketmq/store/config/topics.json"
+	TopicJsonDir = StoreConfigDir + "/topics.json"
 
 	// SubscriptionGroupJsonDir is the directory of subscriptionGroup.json
-	SubscriptionGroupJsonDir = "/home/rocketmq/store/config/subscriptionGroup.json"
+	SubscriptionGroupJsonDir = StoreConfigDir + "/subscriptionGroup.json"
 
 	// BrokerConfigDir is the directory of the mounted config file
-	BrokerConfigPath = "/home/rocketmq/broker/conf"
+	BrokerConfigPath = DataPath + "/rocketmq/broker/conf"
 
 	// BrokerConfigName is the name of mounted configuration file
 	BrokerConfigName = "broker-common.conf"
@@ -62,10 +65,10 @@ const (
 	EnvBrokerName = "BROKER_NAME"
 
 	// LogMountPath is the directory of RocketMQ log files
-	LogMountPath = "/root/logs"
+	LogMountPath = DataPath + "/logs"
 
 	// StoreMountPath is the directory of RocketMQ store files
-	StoreMountPath = "/root/store"
+	StoreMountPath = DataPath + "/store"
 
 	// LogSubPathName is the sub-path name of log dir under mounted host dir
 	LogSubPathName = "logs"
diff --git a/pkg/controller/broker/broker_controller.go b/pkg/controller/broker/broker_controller.go
index 73d34dc..5b2de77 100644
--- a/pkg/controller/broker/broker_controller.go
+++ b/pkg/controller/broker/broker_controller.go
@@ -456,7 +456,7 @@ func (r *ReconcileBroker) getBrokerStatefulSet(broker *rocketmqv1alpha1.Broker,
 func getENV(broker *rocketmqv1alpha1.Broker, replicaIndex int, brokerGroupIndex int)  []corev1.EnvVar {
 	envs := []corev1.EnvVar{{
 		Name:  cons.EnvNameServiceAddress,
-		Value: broker.Spec.NameServers,
+		Value: share.NameServersStr,
 	}, {
 		Name:  cons.EnvBrokerId,
 		Value: strconv.Itoa(replicaIndex),