• 【云原生 | Kubernetes 系列】—K8S部署RocketMQ集群(双主双从+同步模式)


    【云原生 | Kubernetes 系列】—K8S部署RocketMQ集群(双主双从+同步模式)

    版权 本文为云录原创文章,转载无需和我联系,但请注明来自云录 https://www.yunzhuan.site
    

    rocketMQ高可用有很多种方式,比如:单机部署,多主集群,双主双从同步部署,双主双从异步部署,以及多主多从部署。部署集群可按照自己公司的实际情况进行部署。

    单机部署:只启动一个rocketMQ实例就可以了,一般常用来本机测试使用。原因:一旦rocketMQ因某些原因挂掉,导致mq无法使用,则我们服务器无法接受信息与消费信息等。

    多主集群:只部署mq主节点,无部署从节点。优点:配置简单,单个Master宕机或重启维护对应用无影响,即使机器宕机不可恢复情况下,也有其他主节点进行写入操作,

    消息也不会丢(异步刷盘丢失少量消息,同步刷盘一条不丢),性能最高;

    双主双从同步:部署四个节点,每个主节点都有一个从节点,主与从节点的信息通过同步的方式进行保存。优点:消息不会丢失,即:主节点挂了后,从节点的消息也不会造成丢失,只不过没法接受新消息,只能消费,但是能保证我消费的消息一定是准确的。缺点:客户端接受服务器响应时间长。可用于消息安全高的场景。

    双主双从异步:与双主双从一致,只不过在主从数据传输是通过异步的方式,优点:客户端能快速的接收到服务器的消息,缺点:主节点挂的情况,从节点会丢失一部分消息。可用于允许消息丢失,吞吐量高的情景。

    🍇 创建存储

    这里我用ceph,需要自己准备存储

    🍇 需要准备的材料 自行下载

    apache-maven-3.6.3-bin.tar.gz

    rocketmq-all-4.9.4-bin-release.zip

    rocketmq-dashboard-master.zip

    yarn-v1.22.10.tar.gz https://github.com/yarnpkg/yarn/releases/download/v1.22.10/yarn-v1.22.10.tar.gz

    🍋 创建RocketMQ集群(双主双从同步模式)

    制作rocketmq镜像

    [root rocketmqimage]# ll
    total 32200
    -rw-r--r--. 1 root   root        319 May 15 13:38 Dockerfile
    drwxr-xr-x. 6 root   root        103 May 15 13:37 rocketmq-all-4.9.4-bin-release
    -rw-rw-r--. 1 root root 32967749 May 15 13:31 rocketmq-all-4.9.4-bin-release.zip
    

    1:解压rocketmq-all-4.9.4-bin-release.zip 将runbroker.sh脚本文件里的内存设置调整小点

    unzip  rocketmq-all-4.9.4-bin-release.zip
    vim rocketmq-all-4.9.4-bin-release/bin/runbroker.sh
    JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g"
    

    2:准备dockerfile

    FROM openjdk:8
    RUN rm -f /etc/localtime \
    && ln -sv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo "Asia/Shanghai" > /etc/timezone
    ENV LANG en_US.UTF-8
    COPY rocketmq-all-4.9.4-bin-release  /usr/local/rocketmq-all-4.9.4-bin-release
    RUN  mkdir -p /data/rocketmq/store
    CMD ["/bin/bash"]
    

    3:制作镜像并上传到Harbor仓库

    docker build -t 127.0.0.1/rocketmq/rocketmq-4.9.3:1.0 .
    docker push  127.0.0.1/rocketmq/rocketmq-4.9.3:1.0
    

    制作nameserver的image镜像

    将上面rocketmq_image目录下的包rocketmq-all-4.9.4-bin-release 拷贝过来

    [root nameserver_image]# ll
    total 8
    -rw-r--r-- 1 root root 525 Aug 23  2022 Dockerfile
    -rw-r--r-- 1 root root  17 Aug 23  2022 namesrv.properties
    drwxr-xr-x 6 root root 103 May 15 13:56 rocketmq-all-4.9.4-bin-release
    

    1:准备 namesrv.properties 自定义nameserver的端口号

    [root nameserver_image]# cat namesrv.properties 
    listenPort=20801
    

    2:准备dockerfile

    [root nameserver_image]# cat Dockerfile 
    FROM openjdk:8
    RUN rm -f /etc/localtime \
    && ln -sv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo "Asia/Shanghai" > /etc/timezone
    ENV LANG en_US.UTF-8
    COPY rocketmq-all-4.9.4-bin-release  /usr/local/rocketmq-all-4.9.4-bin-release
    COPY namesrv.properties /usr/local/rocketmq-all-4.9.4-bin-release/conf/
    WORKDIR /usr/local/rocketmq-all-4.9.4-bin-release
    CMD ["/usr/local/rocketmq-all-4.9.4-bin-release/bin/mqnamesrv","-c","/usr/local/rocketmq-all-4.9.4-bin-release/conf/namesrv.properties"]
    

    3: 制作镜像并上传到Harbor仓库

    docker build -t 127.0.0.1/rocketmq/rocketmq_namesrv:4.9.3.1 .
    docker push  127.0.0.1/rocketmq/rocketmq_namesrv:4.9.3.1
    

    制作rocketmq的web可视化界面的image镜像

    [root rockermq_web]# ll
    total 14320
    drwxr-xr-x 6 root   root        99 Aug 23  2022 apache-maven-3.6.3
    -rw-rw-r-- 1 dotnet dotnet 9506321 Aug 23  2022 apache-maven-3.6.3-bin.tar.gz
    -rw-r--r-- 1 root   root       674 May 15 15:26 Dockerfile
    drwxr-xr-x 7 root   root       213 Apr 11  2022 rocketmq-dashboard-master
    -rw-rw-r-- 1 dotnet dotnet 3906355 Aug 23  2022 rocketmq-dashboard-master.zip
    -rw-rw-r-- 1 dotnet dotnet 1244965 May 15 15:21 yarn-v1.22.10.tar.gz
    

    1:下载rocketmq-dashboard-master.zip和apache-maven-3.6.3-bin.tar.gz 并解压 2:修改 dashboard配置

    vim rocketmq-dashboard-master/src/main/resources/application.yml
    修改内容:
    namesrvAddrs:
          - mq-namesrv.romq.svc.cluster.local:20801
    loginRequired: true 
    accessKey: rocketmq2  
    secretKey: 12345678   
    
    server:
      port: 8080
      servlet:
        encoding:
          charset: UTF-8
          enabled: true
          force: true
    ## SSL setting
    #  ssl:
    #    key-store: classpath:rmqcngkeystore.jks
    #    key-store-password: rocketmq
    #    key-store-type: PKCS12
    #    key-alias: rmqcngkey
    
    spring:
      application:
        name: rocketmq-dashboard
    
    logging:
      config: classpath:logback.xml
    
    rocketmq:
      config:
        # if this value is empty,use env value rocketmq.config.namesrvAddr  NAMESRV_ADDR | now, default localhost:9876
        # configure multiple namesrv addresses to manage multiple different clusters
        namesrvAddrs:
          - mq-namesrv.romq.svc.cluster.local:20801
        # if you use rocketmq version < 3.5.8, rocketmq.config.isVIPChannel should be false.default true
        isVIPChannel: false
        # timeout for mqadminExt, default 5000ms
        timeoutMillis:
        # rocketmq-console's data path:dashboard/monitor
        dataPath: /tmp/rocketmq-console/data
        # set it false if you don't want use dashboard.default true
        enableDashBoardCollect: true
        # set the message track trace topic if you don't want use the default one
        msgTrackTopicName:
        ticketKey: ticket
        # must create userInfo file: ${rocketmq.config.dataPath}/users.properties if the login is required
        loginRequired: true
        useTLS: false
        # set the accessKey and secretKey if you used acl设置acl权限
        accessKey: rocketmq2  # if version > 4.4.0 
        secretKey: 12345678   # if version > 4.4.0
    
    threadpool:
      config:
        coreSize: 10
        maxSize: 10
        keepAliveTime: 3000
        queueSize: 5000
    

    3:准备dockerfile

    [root rockermq_web]# cat Dockerfile 
    FROM openjdk:8
    RUN rm -f /etc/localtime \
    && ln -sv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo "Asia/Shanghai" > /etc/timezone
    ENV LANG en_US.UTF-8
    ENV MAVEN_HOME /usr/local/maven
    ENV PATH $PATH:$MAVEN_HOME/bin
    COPY rocketmq-dashboard-master   /usr/local/rocketmq-dashboard-master
    COPY yarn-v1.22.10.tar.gz       /root/.m2/repository/com/github/eirslett/yarn/1.22.10/
    COPY apache-maven-3.6.3 /usr/local/maven
    WORKDIR /usr/local/rocketmq-dashboard-master
    RUN mvn clean package -Dmaven.test.skip=true
    WORKDIR /usr/local/rocketmq-dashboard-master/target
    EXPOSE 8080
    CMD ["nohup","java","-jar","rocketmq-dashboard-1.0.1-SNAPSHOT.jar","&"]
    

    4:制作镜像并上传到Harbor仓库

    docker build -t 127.0.0.1/rocketmq/rocketmq-dashboard:v4.9.3.1 .
    docker push     127.0.0.1/rocketmq/rocketmq-dashboard:v4.9.3.1
    

    准备配置文件 configmap

    1:我的broker配置文件

    [root config]# ll
    total 16
    -rw-rw-r--. 1 dotnet dotnet 638 May 15 15:53 broker-a.properties
    -rw-rw-r--. 1 dotnet dotnet 630 May 15 15:53 broker-a-s.properties
    -rw-rw-r--. 1 dotnet dotnet 636 May 15 15:53 broker-b.properties
    -rw-rw-r--. 1 dotnet dotnet 632 May 15 15:53 broker-b-s.properties
    
    [root config]# cat broker-a.properties 
    brokerClusterName=rocketmq-cluster
    brokerName=broker-a
    brokerId=0
    namesrvAddr=mq-namesrv.romq.svc.cluster.local:20801
    defaultTopicQueueNums=4
    autoCreateTopicEnable=false
    autoCreateSubscriptionGroup=true
    brokerIP1=公网ip或是负载ip
    listenPort=30811
    deleteWhen=04
    fileReservedTime=48
    mapedFileSizeCommitLog=1073741824
    mapedFileSizeConsumeQueue=300000
    diskMaxUsedSpaceRatio=88
    storePathRootDir=/data/rocketmq/store
    maxMessageSize=65536
    #Broker 的角色
    #- ASYNC_MASTER 异步复制Master
    #- SYNC_MASTER 同步双写Master
    #- SLAVE
    brokerRole=SYNC_MASTER
    #刷盘方式
    #- ASYNC_FLUSH 异步刷盘
    #- SYNC_FLUSH 同步刷盘
    flushDiskType=SYNC_FLUSH
    aclEnable=true
    
    [root config]# cat broker-a-s.properties 
    brokerClusterName=rocketmq-cluster
    brokerName=broker-a
    brokerId=1
    namesrvAddr=mq-namesrv.romq.svc.cluster.local:20801
    defaultTopicQueueNums=4
    autoCreateTopicEnable=false
    autoCreateSubscriptionGroup=true
    brokerIP1=公网ip或是负载ip
    listenPort=30812
    deleteWhen=04
    fileReservedTime=48
    mapedFileSizeCommitLog=1073741824
    mapedFileSizeConsumeQueue=300000
    diskMaxUsedSpaceRatio=88
    storePathRootDir=/data/rocketmq/store
    maxMessageSize=65536
    brokerRole=SLAVE
    flushDiskType=SYNC_FLUSH
    aclEnable=true
    
    [root config]# cat broker-b.properties 
    brokerClusterName=rocketmq-cluster
    brokerName=broker-b
    brokerId=0
    namesrvAddr=mq-namesrv.romq.svc.cluster.local:20801
    defaultTopicQueueNums=4
    autoCreateTopicEnable=false
    autoCreateSubscriptionGroup=true
    brokerIP1=公网ip或是负载ip
    listenPort=30813
    deleteWhen=04
    fileReservedTime=48
    mapedFileSizeCommitLog=1073741824
    mapedFileSizeConsumeQueue=300000
    diskMaxUsedSpaceRatio=88
    storePathRootDir=/data/rocketmq/store
    maxMessageSize=65536
    brokerRole=SYNC_MASTER
    flushDiskType=SYNC_FLUSH
    aclEnable=true
    
    [root config]# cat broker-b-s.properties 
    brokerClusterName = rocketmq-cluster
    brokerName=broker-b
    brokerId=1
    namesrvAddr=mq-namesrv.romq.svc.cluster.local:20801
    defaultTopicQueueNums=4
    autoCreateTopicEnable=false
    autoCreateSubscriptionGroup=true
    brokerIP1=公网ip或是负载ip
    listenPort=30814
    deleteWhen=04
    fileReservedTime=48
    mapedFileSizeCommitLog=1073741824
    mapedFileSizeConsumeQueue=300000
    diskMaxUsedSpaceRatio=88
    storePathRootDir=/data/rocketmq/store
    maxMessageSize=65536
    brokerRole=SLAVE
    flushDiskType=SYNC_FLUSH
    aclEnable=true
    

    2:创建CM

    kubectl create configmap rocketmq-config --from-file=broker-a.properties --from-file=broker-b.properties --from-file=broker-a-s.properties --from-file=broker-b-s.properties -n romq
    

    准备Deploy

    1:我的deploy

    [root rocketmqDeploy]# ll
    total 24
    -rw-rw-r--. 1 dotnet dotnet 2908 May 15 16:50 broker-a-deployment.yaml
    -rw-rw-r--. 1 dotnet dotnet 3041 May 15 16:50 broker-a-s-deployment.yaml
    -rw-rw-r--. 1 dotnet dotnet 2908 May 15 16:50 broker-b-deployment.yaml
    -rw-rw-r--. 1 dotnet dotnet 3041 May 15 16:50 broker-b-s-deployment.yaml
    -rw-rw-r--. 1 dotnet dotnet 1811 May 15 15:50 namesrv-deployment.yaml
    -rw-rw-r--. 1 dotnet dotnet 1735 May 15 17:27 rocketmq-externals-deployment.yaml
    
    [root rocketmqDeploy]# cat broker-a-deployment.yaml 
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: broker-a
      name: broker-a
    spec:
      type: NodePort
      ports:
        - port: 30811
          targetPort: 30811
          name: broker-port
          nodePort: 30811
      selector:
        app: broker-a
    ---
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: broker-a
    spec:
      serviceName: broker-a
      replicas: 1
      selector:
        matchLabels:
          app: broker-a
      template:
        metadata:
          labels:
            app: broker-a
        spec:
          affinity:
            podAntiAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
                - labelSelector:
                    matchExpressions:
                      - key: "app"
                        operator: In
                        values:
                          - broker-a
                  topologyKey: "kubernetes.io/hostname"
          containers:
            - name: broker-a
              image: 127.0.0.1/rocketmq/rocketmq-4.9.3:1.0
              imagePullPolicy: Always
              command: ["sh","-c","/usr/local/rocketmq-all-4.9.4-bin-release/bin/mqbroker  -c /usr/local/rocketmq-all-4.9.4-bin-release/conf/broker-a.properties"]
              volumeMounts:
                - mountPath: /root/logs
                  name: rocketmq-data-cluster
                  subPath: mq-brokeroptlogs
                - mountPath: /data/rocketmq
                  name: rocketmq-data-cluster
                  subPath: mq-brokeroptstore
                - name: broker-config
                  mountPath: /usr/local/rocketmq-all-4.9.4-bin-release/conf/broker-a.properties
                  subPath: broker-a.properties
                - name: time
                  mountPath: /etc/localtime
              env:
                - name: JAVA_OPT_EXT
                  value: '-Xmx4096m -Xms4096m -Xmn1048m'
              resources:
                requests:
                  memory: 2024Mi
                  cpu: 1024m
                limits:
                  memory: 6024Mi
                  cpu: 6000m
              lifecycle:
                postStart:
                  exec:
                    command: ["/bin/sh","-c","touch /tmp/health"]
              livenessProbe:
                exec:
                  command: ["test","-e","/tmp/health"]
                initialDelaySeconds: 5
                timeoutSeconds: 5
                periodSeconds: 10
              readinessProbe:
                tcpSocket:
                  port: 30811
                initialDelaySeconds: 15
                timeoutSeconds: 5
                periodSeconds: 20
          volumes:
            - name: broker-config
              configMap:
                name: rocketmq-config
            - name: time
              hostPath:
                path: /usr/share/zoneinfo/Asia/Shanghai
      volumeClaimTemplates:
        - metadata:
            name: rocketmq-data-cluster
          spec:
            storageClassName: rook-ceph-block
            accessModes:
              - ReadWriteOnce
            resources:
              requests:
                storage: 20Gi
    
    [root rocketmqDeploy]# cat broker-a-s-deployment.yaml 
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: broker-a-s
      name: broker-a-s
    spec:
      type: NodePort
      ports:
        - port: 30812
          targetPort: 30812
          name: broker-port
          nodePort: 30812
      selector:
        app: broker-a-s
    ---
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: broker-a-s
    spec:
      serviceName: broker-a-s
      replicas: 1
      selector:
        matchLabels:
          app: broker-a-s
      template:
        metadata:
          labels:
            app: broker-a-s
        spec:
          affinity:
            podAntiAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
                - labelSelector:
                    matchExpressions:
                      - key: "app"
                        operator: In
                        values:
                          - broker-a-s
                  topologyKey: "kubernetes.io/hostname"
          containers:
            - name: broker-a-s
              image: 127.0.0.1/rocketmq/rocketmq-4.9.3:1.0
              imagePullPolicy: Always
              command: ["sh","-c","/usr/local/rocketmq-all-4.9.4-bin-release/bin/mqbroker  -c /usr/local/rocketmq-all-4.9.4-bin-release/conf/broker-a-s.properties"]
              volumeMounts:
                - mountPath: /root/logs
                  name: rocketmq-data-cluster
                  subPath: mq-brokeroptlogs
                - mountPath: /data/rocketmq
                  name: rocketmq-data-cluster
                  subPath: mq-brokeroptstore
                - name: broker-config
                  mountPath: /usr/local/rocketmq-all-4.9.4-bin-release/conf/broker-a-s.properties
                  subPath: broker-a-s.properties
                - name: time
                  mountPath: /etc/localtime
              env:
                - name: JAVA_OPT_EXT
                  value: '-Xmx4096m -Xms4096m -Xmn1048m'
              resources:
                requests:
                  memory: 2024Mi
                  cpu: 1024m
                limits:
                  memory: 6024Mi
                  cpu: 6000m
              lifecycle:
                postStart:
                  exec:
                    command: ["/bin/sh","-c","touch /tmp/health"]
              livenessProbe:
                exec:
                  command: ["test","-e","/tmp/health"]
                initialDelaySeconds: 5
                timeoutSeconds: 5
                periodSeconds: 10
              readinessProbe:
                tcpSocket:
                  port: 30812
                initialDelaySeconds: 15
                timeoutSeconds: 5
                periodSeconds: 20
          volumes:
            - name: broker-config
              configMap:
                name: rocketmq-config
                items:
                  - key: broker-a-s.properties
                    path: broker-a-s.properties
            - name: time
              hostPath:
                path: /usr/share/zoneinfo/Asia/Shanghai
      volumeClaimTemplates:
        - metadata:
            name: rocketmq-data-cluster
          spec:
            storageClassName: rook-ceph-block
            accessModes:
              - ReadWriteOnce
            resources:
              requests:
                storage: 20Gi
    
    [root rocketmqDeploy]# cat broker-b-deployment.yaml 
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: broker-b
      name: broker-b
    spec:
      type: NodePort
      ports:
        - port: 30813
          targetPort: 30813
          name: broker-port
          nodePort: 30813
      selector:
        app: broker-b
    ---
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: broker-b
    spec:
      serviceName: broker-b
      replicas: 1
      selector:
        matchLabels:
          app: broker-b
      template:
        metadata:
          labels:
            app: broker-b
        spec:
          affinity:
            podAntiAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
                - labelSelector:
                    matchExpressions:
                      - key: "app"
                        operator: In
                        values:
                          - broker-b
                  topologyKey: "kubernetes.io/hostname"
          containers:
            - name: broker-b
              image: 127.0.0.1/rocketmq/rocketmq-4.9.3:1.0
              imagePullPolicy: Always
              command: ["sh","-c","/usr/local/rocketmq-all-4.9.4-bin-release/bin/mqbroker  -c /usr/local/rocketmq-all-4.9.4-bin-release/conf/broker-b.properties"]
              volumeMounts:
                - mountPath: /root/logs
                  name: rocketmq-data-cluster
                  subPath: mq-brokeroptlogs
                - mountPath: /data/rocketmq
                  name: rocketmq-data-cluster
                  subPath: mq-brokeroptstore
                - name: broker-config
                  mountPath: /usr/local/rocketmq-all-4.9.4-bin-release/conf/broker-b.properties
                  subPath: broker-b.properties
                - name: time
                  mountPath: /etc/localtime
              lifecycle:
                postStart:
                  exec:
                    command: ["/bin/sh","-c","touch /tmp/health"]
              livenessProbe:
                exec:
                  command: ["test","-e","/tmp/health"]
                initialDelaySeconds: 5
                timeoutSeconds: 5
                periodSeconds: 10
              readinessProbe:
                tcpSocket:
                  port: 30813
                initialDelaySeconds: 15
                timeoutSeconds: 5
                periodSeconds: 20
              env:
                - name: JAVA_OPT_EXT
                  value: '-Xmx4096m -Xms4096m -Xmn1048m'
              resources:
                requests:
                  memory: 2024Mi
                  cpu: 1024m
                limits:
                  memory: 6024Mi
                  cpu: 6000m
          volumes:
            - name: broker-config
              configMap:
                name: rocketmq-config
            - name: time
              hostPath:
                path: /usr/share/zoneinfo/Asia/Shanghai
      volumeClaimTemplates:
        - metadata:
            name: rocketmq-data-cluster
          spec:
            storageClassName: rook-ceph-block
            accessModes:
              - ReadWriteOnce
            resources:
              requests:
                storage: 20Gi
    
    [root rocketmqDeploy]# cat broker-b-s-deployment.yaml 
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: broker-b-s
      name: broker-b-s
    spec:
      type: NodePort
      ports:
        - port: 30814
          targetPort: 30814
          name: broker-port
          nodePort: 30814
      selector:
        app: broker-b-s
    ---
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: broker-b-s
    spec:
      serviceName: broker-b-s
      replicas: 1
      selector:
        matchLabels:
          app: broker-b-s
      template:
        metadata:
          labels:
            app: broker-b-s
        spec:
          affinity:
            podAntiAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
                - labelSelector:
                    matchExpressions:
                      - key: "app"
                        operator: In
                        values:
                          - broker-b-s
                  topologyKey: "kubernetes.io/hostname"
          containers:
            - name: broker-b-s
              image: 127.0.0.1/rocketmq/rocketmq-4.9.3:1.0
              imagePullPolicy: Always
              command: ["sh","-c","/usr/local/rocketmq-all-4.9.4-bin-release/bin/mqbroker  -c /usr/local/rocketmq-all-4.9.4-bin-release/conf/broker-b-s.properties"]
              volumeMounts:
                - mountPath: /root/logs
                  name: rocketmq-data-cluster
                  subPath: mq-brokeroptlogs
                - mountPath: /data/rocketmq
                  name: rocketmq-data-cluster
                  subPath: mq-brokeroptstore
                - name: broker-config
                  mountPath: /usr/local/rocketmq-all-4.9.4-bin-release/conf/broker-b-s.properties
                  subPath: broker-b-s.properties
                - name: time
                  mountPath: /etc/localtime
              lifecycle:
                postStart:
                  exec:
                    command: ["/bin/sh","-c","touch /tmp/health"]
              livenessProbe:
                exec:
                  command: ["test","-e","/tmp/health"]
                initialDelaySeconds: 5
                timeoutSeconds: 5
                periodSeconds: 10
              readinessProbe:
                tcpSocket:
                  port: 30814
                initialDelaySeconds: 15
                timeoutSeconds: 5
                periodSeconds: 20
              env:
                - name: JAVA_OPT_EXT
                  value: '-Xmx4096m -Xms4096m -Xmn1048m'
              resources:
                requests:
                  memory: 2024Mi
                  cpu: 1024m
                limits:
                  memory: 6024Mi
                  cpu: 6000m
          volumes:
            - name: broker-config
              configMap:
                name: rocketmq-config
                items:
                  - key: broker-b-s.properties
                    path: broker-b-s.properties
            - name: time
              hostPath:
                path: /usr/share/zoneinfo/Asia/Shanghai
      volumeClaimTemplates:
        - metadata:
            name: rocketmq-data-cluster
          spec:
            storageClassName: rook-ceph-block
            accessModes:
              - ReadWriteOnce
            resources:
              requests:
                storage: 20Gi
    
    [root rocketmqDeploy]# cat namesrv-deployment.yaml 
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: mq-namesrv
      name: mq-namesrv
    spec:
      type: NodePort
      ports:
        - port: 20801
          targetPort: 20801
          name: namesrv-port
          nodePort: 30815
      selector:
        app: mq-namesrv
    ---
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: mq-namesrv
    spec:
      serviceName: mq-namesrv
      replicas: 1
      selector:
        matchLabels:
          app: mq-namesrv
      template:
        metadata:
          labels:
            app: mq-namesrv
        spec:
          affinity:
            podAntiAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
                - labelSelector:
                    matchExpressions:
                      - key: "app"
                        operator: In
                        values:
                          - mq-namesrv
                  topologyKey: "kubernetes.io/hostname"
          containers:
            - name: mq-namesrv
              image: 127.0.0.1/rocketmq/rocketmq_namesrv:4.9.3.1
              imagePullPolicy: Always
              env:
                - name: JAVA_OPT_EXT
                  value: '-Xmx2048m -Xms2048m -Xmn512m'
              resources:
                requests:
                  memory: 2024Mi
                  cpu: 1024m
                limits:
                  memory: 4096Mi
                  cpu: 3000m
              lifecycle:
                postStart:
                  exec:
                    command: ["/bin/sh","-c","touch /tmp/health"]
              livenessProbe:
                exec:
                  command: ["test","-e","/tmp/health"]
                initialDelaySeconds: 5
                timeoutSeconds: 5
                periodSeconds: 10
              readinessProbe:
                tcpSocket:
                  port: 20801
                initialDelaySeconds: 15
                timeoutSeconds: 5
                periodSeconds: 20
    
    [root rocketmqDeploy]# cat rocketmq-externals-deployment.yaml 
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: mq-externals
      name: mq-externals
    spec:
      type: NodePort
      ports:
        - port: 8080
          targetPort: 8080
          name: console-port
          nodePort: 30816
      selector:
        app: mq-externals
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: mq-externals
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: mq-externals
      template:
        metadata:
          labels:
            app: mq-externals
        spec:
          affinity:
            podAntiAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
                - labelSelector:
                    matchExpressions:
                      - key: "app"
                        operator: In
                        values:
                          - mq-externals
                  topologyKey: "kubernetes.io/hostname"
          containers:
            - name: mq-externals
              image: 127.0.0.1/rocketmq/rocketmq-dashboard:v4.9.3.1
              imagePullPolicy: Always
              lifecycle:
                postStart:
                  exec:
                    command: ["/bin/sh","-c","touch /tmp/health"]
              livenessProbe:
                exec:
                  command: ["test","-e","/tmp/health"]
                initialDelaySeconds: 5
                timeoutSeconds: 5
                periodSeconds: 10
              readinessProbe:
                tcpSocket:
                  port: 8080
                initialDelaySeconds: 15
              env:
                - name: JAVA_OPT_EXT
                  value: '-Xmx1024m -Xms1024m -Xmn512m'
              resources:
                requests:
                  memory: 1024Mi
                  cpu: 1024m
                limits:
                  memory: 4096Mi
                  cpu: 3000m
    

    2: 部署deploy

    kubectl apply  -f ./  -n  romq
    
    [root rocketmqDeploy]# kubectl  get po  -n  romq
    NAME                           READY   STATUS    RESTARTS   AGE
    broker-a-0                     1/1     Running   0          65m
    broker-a-s-0                   1/1     Running   0          65m
    broker-b-0                     1/1     Running   0          65m
    broker-b-s-0                   1/1     Running   0          65m
    mq-externals-6cfc5d9bc-w4cmp   1/1     Running   0          45s
    mq-namesrv-0                   1/1     Running   0          65m
    
    [root rocketmqDeploy]# kubectl  get svc  -n  romq
    NAME           TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)           AGE
    broker-a       NodePort   10.99.180.11             30811:30811/TCP   67m
    broker-a-s     NodePort   10.105.248.30            30812:30812/TCP   66m
    broker-b       NodePort   10.102.87.207            30813:30813/TCP   66m
    broker-b-s     NodePort   10.103.106.247           30814:30814/TCP   66m
    mq-externals   NodePort   10.96.128.101            8080:30816/TCP    66m
    mq-namesrv     NodePort   10.105.103.115           20801:30815/TCP   66m
    

    3:访问dashboard: http://$NODE_IP:30816/

    ro1.png ro2.png

    版权 本文为云录原创文章,转载无需和我联系,但请注明来自云录 https://www.yunzhuan.site
    
  • 相关阅读:
    CPU上下文切换、进程上下文、中断上下文
    点击化学修饰多肽:DBCO-PEG-YIGSR/RVG29/R8/CCK8肽
    windows10上使用Visual Studio对树莓派进行交叉编译示例
    Switch Port Hybrid Mode
    什么是泛型
    Ansible非标记语言YAML与任务剧本Playbook
    【广州华锐互动VRAR】VR元宇宙技术在气象卫星知识科普中的应用
    基于.Net5+Vue+iView前后端分离通用权限开源系统
    【EC200U】 SIM卡使用
    多个rabbitmq配置
  • 原文地址:https://www.cnblogs.com/superbc/p/17937412