Helm部署高可用rabbitmq k8s 镜像集群

news2024/12/23 18:00:36

前提条件:k8s集群、harbor私服、helm、storage Class

安装部署

添加bitnami仓库并查找redis

helm repo add bitnami https://charts.bitnami.com/bitnami
​
helm repo update
[kmning@k8s-register-node ~]$ helm search repo rabbitmq
NAME                                    CHART VERSION   APP VERSION     DESCRIPTION
bitnami/rabbitmq                        11.13.0         3.11.13         RabbitMQ is an open source general-purpose mess...
bitnami/rabbitmq-cluster-operator       3.2.10          2.2.0           The RabbitMQ Cluster Kubernetes Operator automa...
拉取chat到本地
helm pull bitnami/rabbitmq --version 11.13.0
​
tar -zxvf rabbitmq-11.13.0.tgz
​
cp rabbitmq/values.yaml ./values-rabbitmq.yaml

对本地values-rabbitmq.yaml进行修改,配置非常多,根据实际情况进行修改,比如我主要修改了如下内容

通用配置修改

global:
  imageRegistry: "k8s-register-node.com:443"
  imagePullSecrets: []
  storageClass: "managed-nfs-storage"

查找所有用到镜像的配置,修改成私服,storageClass修改成我们定义的storageClass即可。
image:
  registry: k8s-register-node.com:443
  repository: lib-proxy/bitnami/rabbitmq
  tag: 3.11.13-debian-11-r0


persistence:
  enabled: true
  storageClass: "managed-nfs-storage"

rabbitmq配置修改

auth:
  username: kmning
  password: "yourpwd"
  existingPasswordSecret: ""
  erlangCookie: "secretcookie"
  existingErlangSecret: ""

如果不希望把密码配置到配置文件中,可以在安装时通过提供参数的方式设置

--set auth.username=euht,auth.password=yourpwd,auth.erlangCookie=secretcookie

开启clustering.forceBoot

clustering:
  enabled: true
  addressType: hostname
  rebalance: false
  forceBoot: true

指定时区

extraEnvVars: 
  - name: TZ
    value: "Asia/Shanghai"

指定副本数

replicaCount: 3

持久化配置

persistence:
  enabled: true
  storageClass: "managed-nfs-storage"
  selector: {}
  accessMode: ReadWriteOnce
  existingClaim: ""
  size: 8Gi

helm安装redis集群

kubectl create ns rabbitmq-cluster
helm -n rabbitmq-cluster install rabbitmq-cluster  rabbitmq-11.13.0.tgz  -f values-rabbitmq.yaml \
--set useBundledSystemChart=true

安装后打印

kmning@k8s-master-1:~/rabbitmq-k8s-cluster$ helm -n rabbitmq-cluster install rabbitmq-cluster  rabbitmq-11.13.0.tgz  -f values-rabbitmq.yaml \
> --set useBundledSystemChart=true
NAME: rabbitmq-cluster
LAST DEPLOYED: Fri Apr 28 06:38:58 2023
NAMESPACE: rabbitmq-cluster
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: rabbitmq
CHART VERSION: 11.13.0
APP VERSION: 3.11.13** Please be patient while the chart is being deployed **

Credentials:
    echo "Username      : euht"
    echo "Password      : $(kubectl get secret --namespace rabbitmq-cluster rabbitmq-cluster -o jsonpath="{.data.rabbitmq-password}" | base64 -d)"
    echo "ErLang Cookie : $(kubectl get secret --namespace rabbitmq-cluster rabbitmq-cluster -o jsonpath="{.data.rabbitmq-erlang-cookie}" | base64 -d)"

Note that the credentials are saved in persistent volume claims and will not be changed upon upgrade or reinstallation unless the persistent volume claim has been deleted. If this is not the first installation of this chart, the credentials may not be valid.
This is applicable when no passwords are set and therefore the random password is autogenerated. In case of using a fixed password, you should specify it when upgrading.
More information about the credentials may be found at https://docs.bitnami.com/general/how-to/troubleshoot-helm-chart-issues/#credential-errors-while-upgrading-chart-releases.

RabbitMQ can be accessed within the cluster on port 5672 at rabbitmq-cluster.rabbitmq-cluster.svc.cluster.local

To access for outside the cluster, perform the following steps:

To Access the RabbitMQ AMQP port:

    echo "URL : amqp://127.0.0.1:5672/"
    kubectl port-forward --namespace rabbitmq-cluster svc/rabbitmq-cluster 5672:5672

To Access the RabbitMQ Management interface:

    echo "URL : http://127.0.0.1:15672/"
    kubectl port-forward --namespace rabbitmq-cluster svc/rabbitmq-cluster 15672:15672

查看已安装chat

kmning@k8s-master-1:~/rabbitmq-k8s-cluster$ helm -n rabbitmq-cluster list
NAME                    NAMESPACE               REVISION        UPDATED                                 STATUS          CHART                   APP VERSION
rabbitmq-cluster        rabbitmq-cluster        1               2023-04-28 06:38:58.749511901 +0000 UTC deployed        rabbitmq-11.13.0        3.11.13

如果需要卸载

helm -n rabbitmq-cluster uninstall rabbitmq-cluster

查看服务部署情况

kmning@k8s-master-1:~/rabbitmq-k8s-cluster$ kubectl get pods -n rabbitmq-cluster
NAME                 READY   STATUS              RESTARTS   AGE
rabbitmq-cluster-0   1/1     Running             0          3m53s
rabbitmq-cluster-1   1/1     Running             0          2m18s
rabbitmq-cluster-2   0/1     ContainerCreating   0          73s
kmning@k8s-master-1:~/rabbitmq-k8s-cluster$ kubectl get svc -n rabbitmq-cluster
NAME                        TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                                 AGE
rabbitmq-cluster            ClusterIP   10.43.65.148   <none>        5672/TCP,4369/TCP,25672/TCP,15672/TCP   4m14s
rabbitmq-cluster-headless   ClusterIP   None           <none>        4369/TCP,5672/TCP,25672/TCP,15672/TCP   4m14s
kmning@k8s-master-1:~/rabbitmq-k8s-cluster$ kubectl get pv -n rabbitmq-cluster
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                                      STORAGECLASS          REASON   AGE

pvc-7f4b0a27-c370-45d5-8af3-633954ae39ef   8Gi        RWO            Delete           Bound    rabbitmq-cluster/data-rabbitmq-cluster-2   managed-nfs-storage            114s
pvc-83f15f1e-9f16-4eeb-acaa-28c627ad90f3   8Gi        RWO            Delete           Bound    rabbitmq-cluster/data-rabbitmq-cluster-0   managed-nfs-storage            4m33s
pvc-b7245f5d-72d4-45a1-8328-83928bfdd347   8Gi        RWO            Delete           Bound    rabbitmq-cluster/data-rabbitmq-cluster-1   managed-nfs-storage            2m59s

kmning@k8s-master-1:~/rabbitmq-k8s-cluster$ kubectl get pvc -n rabbitmq-cluster
NAME                      STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS          AGE
data-rabbitmq-cluster-0   Bound    pvc-83f15f1e-9f16-4eeb-acaa-28c627ad90f3   8Gi        RWO            managed-nfs-storage   5m1s
data-rabbitmq-cluster-1   Bound    pvc-b7245f5d-72d4-45a1-8328-83928bfdd347   8Gi        RWO            managed-nfs-storage   3m26s
data-rabbitmq-cluster-2   Bound    pvc-7f4b0a27-c370-45d5-8af3-633954ae39ef   8Gi        RWO            managed-nfs-storage   2m21s

服务正常,此时,我们已经可以使用服务域名rabbitmq-cluster.rabbitmq-cluster.svc.cluster.local去访问这个集群了。

查看集群状态,随便进入一个pod

kubectl exec -it -n rabbitmq-cluster rabbitmq-cluster-0 -- bash

# 查看集群状态
rabbitmqctl cluster_status

# 列出策略(尚未设置镜像模式)
rabbitmqctl list_policies

#设置集群名称
rabbitmqctl set_cluster_name [cluster_name]

服务暴露

5672的服务端口,k8s集群内的应用只需要通过rabbitmq-cluster.rabbitmq-cluster.svc.cluster.local:5672即可连接到集群,而15672端口我们手动创建一个NodePort,让外网可以访问,方便管理。

先获取sts的selector

kmning@k8s-master-1:~/rabbitmq-k8s-cluster$ kubectl get svc -n rabbitmq-cluster -o wide
NAME                        TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                                 AGE   SELECTOR
rabbitmq-cluster            ClusterIP   10.43.65.148   <none>        5672/TCP,4369/TCP,25672/TCP,15672/TCP   17m   app.kubernetes.io/instance=rabbitmq-cluster,app.kubernetes.io/name=rabbitmq
rabbitmq-cluster-headless   ClusterIP   None           <none>        4369/TCP,5672/TCP,25672/TCP,15672/TCP   17m   app.kubernetes.io/instance=rabbitmq-cluster,app.kubernetes.io/name=rabbitmq

创建nodePort服务

rabbitmq-cluster-svc-nodeport.yaml

apiVersion: v1
kind: Service
metadata:
  name: rabbitmq-cluster-nodeport
  namespace: rabbitmq-cluster
spec:
  ports:
  - nodePort: 30072
    port: 5672
    name: rab-sv-port
    protocol: TCP
    targetPort: 5672
  - nodePort: 30073
    port: 15672
    name: rab-ad-port
    protocol: TCP
    targetPort: 15672  
  selector:
    app.kubernetes.io/instance: rabbitmq-cluster
    app.kubernetes.io/name: rabbitmq
  type: NodePort

创建后随便使用一个工作节点IP进行访问:http://yourWorker:30072

可见,集群已经正常运行。

镜像模式配置

进入任意一个pod

kubectl exec -it -n rabbitmq-cluster rabbitmq-cluster-0 -- bash
​
# 设置镜像模式
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all" , "ha-sync-mode":"automatic"}'
​
# 列出策略
rabbitmqctl list_policies

打印如下

kmning@k8s-master-1:~/rabbitmq-k8s-cluster$ kubectl exec -it -n rabbitmq-cluster rabbitmq-cluster-0 -- bash
I have no name!@rabbitmq-cluster-0:/$ rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all" , "ha-sync-mode":"automatic"}'
Setting policy "ha-all" for pattern "^" to "{"ha-mode":"all" , "ha-sync-mode":"automatic"}" with priority "0" for vhost "/" ...
I have no name!@rabbitmq-cluster-0:/$ rabbitmqctl list_policies
Listing policies for vhost "/" ...
vhost   name    pattern apply-to        definition      priority
/       ha-all  ^       all     {"ha-mode":"all","ha-sync-mode":"automatic"}    0

镜像队列模式设置成功。此时,随意连接一个节点,创建队列和交互机,把数据发送到队列,所有节点将同步队列的数据,避免在消费数据前数据丢失的风险。然后,如果有消费者对数据进行消费,所有节点对应的数据也将被清理。

最后,在k8s集群内部访问这个rabbitmq集群只需要使用Service的域名即可,如下

redis-cluster.redis.svc.cluster.local:6379

这样一来,访问这个节点,k8s自动为我们做了负载均衡(kube-proxy组件),我们不需要再配置nginx负载均衡。

spring-boot配置示例:

spring:
  rabbitmq:
    host: rabbitmq-cluster.rabbitmq-cluster.svc.cluster.local
    port: 5672
    virtual-host: /
    username: kmning
    password: yourpwd

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/568461.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux第一节

linux用的分区格式是 XFS EXT4 nmtui //网络使用文字显示的命令 //进去后修改IP信息 常用SSH管理工具 PC端: Mobaxterm、PuttyWinSCP、XshellXftp、SecureCRT等手机端:iTerminal、华为云APP、阿里云APP等 LINUX中补全命令&#xff0c;按两次tab键 在登录界面&#xff0c;al…

40G QSFP+ LR4光模块两种类型的概述:CWDM4 vs PSM4

40G QSFP LR4光模块被广泛用于40G网络中&#xff0c;它包含40G QSFP LR4 CWDM4光模块和40G QSFP LR4 PSM4光模块两种类型。前者用来连接波分复用链路&#xff0c;后者用来连接并行单模光纤链路&#xff0c;但是这两种模块之间有什么区别呢&#xff1f;下文易天光通信&#xff0…

线程的状态,多线程带来的风险,synchronized关键字及死锁问题

目录 状态 线程的意义 多线程带来的风险——线程安全✅ 线程安全的概念 线程不安全的原因 抢占式执行&#xff0c;随机性调度 修改共享数据 原子性->加&#x1f512; 可见性 指令重排序 解决线程不安全问题&#xff08;学完线程再总结&#xff09; synchronized关键字——监…

使用electron套壳vue实现跨平台桌面应用

electron和vue是什么就不用多说了&#xff0c;前端都知道 先展示一波demo 传送门 前提条件 要有一个vue项目&#xff0c;老项目跳过 vue create hello-world改造vue项目 在根目录新建一个background.js文件&#xff0c;也可以叫其他名字&#xff0c;作为package.json的main…

C Primer Plus第五章编程练习答案

学完C语言之后&#xff0c;我就去阅读《C Primer Plus》这本经典的C语言书籍&#xff0c;对每一章的编程练习题都做了相关的解答&#xff0c;仅仅代表着我个人的解答思路&#xff0c;如有错误&#xff0c;请各位大佬帮忙点出&#xff01; 1.编写一个程序&#xff0c;把用分钟表…

微信小程序---表格的制作并展示云数据库中的数据

微信小程序并没有表格组件&#xff0c;可能是官方考虑到&#xff0c;在前端开发中&#xff0c;表格的嵌套性太多&#xff0c;用DIV代码会比较简洁就没有实现吧。没有现成的组件可以使用&#xff0c;针对这个问题&#xff0c;目前有两种解决方案&#xff1a; 1&#xff09;内嵌…

怎么发表CCF期刊?CCF期刊有什么不同之处? - 易智编译EaseEditing

发表CCF期刊&#xff0c;可以参考一下步骤&#xff1a; 选择目标期刊&#xff1a; 首先选择一个适合自己的目标期刊&#xff0c;可以是CCF推荐的高水平期刊&#xff0c;也可以是其他被广泛认可的期刊。 撰写论文&#xff1a; 根据目标期刊的要求&#xff0c;撰写论文。确保论…

「恋爱事务」NFT 作品集

「恋爱事务 (Love Affairs)」服装 NFT系列允许玩家在体验中使用 Opera Garnier 歌剧院的 T台大厅&#xff0c;并参与互动竞赛。参与 The Sandbox 元宇宙首个以爱情为主题的概念时装秀&#xff01; 该系列已于 5 月 22 日晚上 11 点在 The Sandbox 市场平台上线。 NFT 系列介绍 …

go-zero的服务发现源码阅读

服务发现原理与grpc源码解析_wangxiaoangg的博客-CSDN博客 go-zero rpc demo官方文档&#xff1a;rpc编写与调用 | go-zero 目录 一 服务注册 1. 创建rpc服务 2. 启动rpc服务 3. registerEtcd做了什么 4. discov.NewPublisher 服务发布者 二 服务发现 1.定义&注册re…

如何在华为OD机试中获得满分?Java实现【差值数组不同的字符串】一文详解!

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 &#x1f31f;专栏地址: Java华为OD机试真题&#xff08;2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述…

本地vue搭建的web网站项目app如何发布到互联网?

对于非专业人来说&#xff0c;提到 Vue并不熟悉。Vue 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建。 简单来说&#xff0c;Vue是干什么用的呢&#xff1f;Vue通过提供了一套声明式的、组件化的编程模型&#xff0c;帮助你高效地开发用…

七、SpringBoot从入门到精通

一、SpringBoot概述 Spring Boot是一个基于Spring框架的开发框架&#xff0c;用于快速构建能够立即运行的生产级Spring应用程序。它是Spring的一个子项目&#xff0c;致力于使Spring开发更加简单、快速和便捷。 二、SpringBoot基础程序 1、点击Spring Initializer&#xff0…

苹果MR头显背后的秘密武器,ARKit演进历程一览

苹果MR头显可以说是板上钉钉了&#xff0c;看了这么多的预测&#xff0c;几乎没有从ARKit的角度来看苹果头显的&#xff0c;因此本文我们将回顾ARKit近7年来的发展历程。 实际上&#xff0c;ARKit 3.5开始支持LiDAR&#xff08;首个搭载的设备是iPad Pro 2020&#xff09;就是…

信号隔离器在水处理控制系统的应用

摘要&#xff1a;水处理控制系统中&#xff0c;其控制、监测模块的非电量模拟量传感器采用信号隔离器的接线方式合理地解决了相关模拟量传感器供电电源安全和相对独立的问题&#xff0c;保证了监测模块的电源、模拟量采集模块和输出模块的相对隔离&#xff0c;降低了可能会造成…

我想成为一名黑客

什么是黑客&#xff1f; 首先我们需要知道什么是黑客呢&#xff1f;黑客最初是指水平高超的电脑专家&#xff0c;而骇客就是我们常见的爱搞破坏的家伙。 黑客和骇客有什么区别呢&#xff1f; 如果黑客是制造炸弹的专家&#xff0c;那骇客就是拿着炸弹到处乱炸的坏蛋。 怎么…

如何在华为OD机试中获得满分?Java实现【合并 K 个升序链表】一文详解!

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 &#x1f31f;专栏地址: Java华为OD机试真题&#xff08;2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述…

【JAVA进阶】异常处理

&#x1f4c3;个人主页&#xff1a;个人主页 &#x1f525;系列专栏&#xff1a;JAVASE基础 目录 1.异常概述、体系 2.常见运行时异常 3.常见编译时异常 4.异常的默认处理流程 5.编译时异常的处理机制 6.运行时异常的处理机制 7.finally 8.自定义异常 1.异常概述、体系…

VUE A页面跳转到B页面带参数,且每次点击跳转,数据刷新

这里写目录标题 一、描述二、VUE带参数页面跳转跳转方式&#xff1a;1&#xff09;标签<router-link>2&#xff09;js操作跳转 三、B页面实现每次点击参数变化&#xff0c;数据刷新解决方案&#xff1a;1&#xff09;去除缓存。2&#xff09;watch监听router 背景&#x…

香港:禁止中国内地参与虚拟资产交易!散户不可交易稳定币,放开不意味着放松!

前天&#xff0c;香港证监会&#xff08;SFC&#xff09;公布了对虚拟资产交易的开放态度和监管思路&#xff0c;宣布《适用于虚拟资产交易平台营运者的指引》&#xff08;下简称《指引》&#xff09;将于2023年6月1日生效。 虽然SFC对于公众提出的建议给予了很完整的回应&…

领导下发紧急且风险大的任务,如何处理?

在遇到这种无法拒绝&#xff0c;明显很难按时交付的紧急任务时&#xff0c;项目经理处理的关键&#xff1a; 1、降低关键干系人期望值 降低关键干系人的期望值&#xff0c;是项目管理非常重要的一门艺术&#xff0c;也是让干系人满意&#xff0c;便于与关系人沟通的关键。 在项…