k8s部署rabbitmq集群
1 部署集群
1.1 安装
# 创建一个中间件的命名空间
kubectl create namespace middleware
# 创建ConfigMap,包含RabbitMQ的配置文件内容
kubectl apply -f rabbitmq-configmap.yaml
# 配置用于存储RabbitMQ数据的PersistentVolume(PV)和PersistentVolumeClaim(PVC)。这可以确保RabbitMQ集群的数据在节点故障时不会丢失。
kubectl apply -f rabbitmq-persistentvolume.yaml
kubectl apply -f rabbitmq-persistentvolumeclaim.yaml
# StatefulSet可以确保每个实例都有唯一的标识和稳定的网络标识符
kubectl apply -f rabbitmq-statefulset.yaml
# 创建service
kubectl apply -f rabbitmq-service.yaml
1.2 rabbitmq-configmap
apiVersion: v1
kind: ConfigMap
metadata:name: rabbitmq-confignamespace: middleware
data:enabled_plugins: |[rabbitmq_management,rabbitmq_peer_discovery_k8s,rabbitmq_delayed_message_exchange].rabbitmq.conf: |cluster_formation.peer_discovery_backend = rabbit_peer_discovery_k8scluster_formation.k8s.host = kubernetes.default.svc.cluster.localcluster_formation.k8s.address_type = hostnamecluster_formation.node_cleanup.interval = 10cluster_formation.node_cleanup.only_log_warning = truecluster_partition_handling = autohealqueue_master_locator=min-mastersloopback_users.guest = falsecluster_formation.randomized_startup_delay_range.min = 0cluster_formation.randomized_startup_delay_range.max = 2# 必须设置service_name,否则Pod无法正常启动,这里设置后可以不设置statefulset下env中的K8S_SERVICE_NAME变量cluster_formation.k8s.service_name = rabbitmq-headless# 必须设置hostname_suffix,否则节点不能成为集群cluster_formation.k8s.hostname_suffix = .rabbitmq-headless.middleware.svc.cluster.local# 内存上限vm_memory_high_watermark.absolute = 1.6GB# 硬盘上限disk_free_limit.absolute = 2G
1.3 rabbitmq-headless
apiVersion: v1
kind: Service
metadata:name: rabbitmq-headlessnamespace: middleware
spec:clusterIP: Noneports:- name: amqpport: 5672- name: managementport: 15672- name: clusterport: 25672selector:app: rabbitmq
1.4 rabbitmq-log-pvc
这里的managed-nfs-storage沿用了nacos集群的部署。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: rabbitmq-log-pvcnamespace: middleware
spec:accessModes:- ReadWriteManyresources:requests:storage: 5GistorageClassName: managed-nfs-storage
1.5 rabbitmq-persistentvolume
apiVersion: v1
kind: PersistentVolume
metadata:name: rabbitmq-pvannotations:pv.kubernetes.io/provisioned-by: fuseim.pri/ifs
spec:capacity:storage: 10GiaccessModes:- ReadWriteManynfs:server: 10.101.12.95path: /data/k8s_storage/rabbitmq persistentVolumeReclaimPolicy: RetainstorageClassName: managed-nfs-storage
1.6 rabbitmq-persistentvolumeclaim
# PersistentVolumeClaim示例
apiVersion: v1
kind: PersistentVolumeClaim
metadata: name: rabbitmq-pvc namespace: middleware
spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi storageClassName: managed-nfs-storage
1.7 rabbitmq-service
apiVersion: v1
kind: Service
metadata:name: rabbitmq-web-servicenamespace: middleware
spec:type: NodePortports:- name: httpport: 15672targetPort: 15672nodePort: 31567selector:app: rabbitmq
1.8 rabbitmq-statefulset
apiVersion: apps/v1
kind: StatefulSet
metadata:name: rabbitmqnamespace: middleware
spec:replicas: 3serviceName: rabbitmq-headlessselector:matchLabels:app: rabbitmqtemplate:metadata:labels:app: rabbitmqspec:containers:- name: rabbitmqimage: rabbitmq:3.8.17-managementports:- containerPort: 5672- containerPort: 15672volumeMounts:- name: datamountPath: /var/lib/rabbitmq- name: confmountPath: /etc/rabbitmq- name: logmountPath: /var/log/rabbitmqenv:- name: RABBITMQ_NODENAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: RABBITMQ_ERLANG_COOKIEvalue: "nrB35tmJx5sfE3EaaYTMW7S8DxpajMrP"- name: RABBITMQ_LOG_BASEvalue: "/var/log/rabbitmq"volumes:- name: datapersistentVolumeClaim:claimName: rabbitmq-pvc- name: confconfigMap:name: rabbitmq-config- name: logpersistentVolumeClaim:claimName: rabbitmq-log-pvc
2 问题处理
2.1 pvc创建失败
[root@master1 rabbitmq]# kubectl get pvc -n middleware
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
rabbitmq-data-rabbitmq-0 Pending 15m
rabbitmq-pvc Bound rabbitmq-pv 5Gi RWO standard 15m
查看存储StorageClass的名称,就知道了创建pv和pvc中storageClassName应该为managed-nfs-storage
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
managed-nfs-storage fuseim.pri/ifs Delete Immediate false 3h7m
更改rabbitmq-persistentvolume.yaml和rabbitmq-persistentvolumeclaim.yaml之后
# 查看有没有无效的pvc,与namespace有关
kubectl get pvc -n middleware
# 删除pvc,使得pvc与pv解
kubectl delete pvc rabbitmq-data-rabbitmq-0 -n middleware
kubectl delete pvc rabbitmq-pvc -n middleware
#
kubectl get pv
# 删除无效的pv,pv被绑定,需要先删除pvc,pv与namespace无关
kubectl delete pv rabbitmq-pv
cd /appdata/download/rabbitmq
kubectl apply -f rabbitmq-persistentvolume.yaml
kubectl apply -f rabbitmq-persistentvolumeclaim.yaml
# StatefulSet可以确保每个实例都有唯一的标识和稳定的网络标识符
kubectl apply -f rabbitmq-statefulset.yaml
# 创建service
kubectl apply -f rabbitmq-service.yaml
执行完,需要删除之前的pod,就可以自动创建了。
2024-07-16 06:47:18.299 [info] <0.1754.0> Closing all channels from connection '10.42.7.3:33078 -> 10.42.6.3:5672' because it has been closed
2024-07-16 06:49:17.462 [info] <0.1783.0> accepting AMQP connection <0.1783.0> (10.42.7.3:33480 -> 10.42.6.3:5672)
2024-07-16 06:49:17.462 [error] <0.1783.0> closing AMQP connection <0.1783.0> (10.42.7.3:33480 -> 10.42.6.3:5672):
{bad_header,<<"GET / HT">>}
ss -tuln
或 netstat -tul
无法执行
kubectl run ss-checker --rm -it --image=ubuntu --restart=Never -- sh -c 'apt-get update && apt-get install -y iproute2 && ss -tuln'kubectl run ss-checker --rm=true -it --image=alpine --restart=Never -- /bin/sh -c 'apk add --no-cache iproute2 && ss -tuln'
查看镜像的版本,rabbitmq用的ubuntu,而nacos用的是centos7
[root@master1 rabbitmq]# kubectl exec -it rabbitmq-0 -n middleware -- cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.2 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.2 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
因为rabbitmq本身不能查看端口,于是需要创建临时的容器,来排查问题。
# 创建一个临时的 Ubuntu Pod
kubectl run ss-checker --rm -it --image=ubuntu --restart=Never -- sh -c 'apt-get update && apt-get install -y iproute2'# 等待 Pod 准备好
kubectl wait --for=condition=Ready pod/ss-checker# 进入临时 Pod
kubectl exec -it ss-checker -- /bin/bash# 在临时 Pod 内部安装 ss
apt-get update && apt-get install -y iproute2# 使用 ss 命令检查服务 Pod 的端口状态
ss -tuln | grep <service-pod-name-or-ip>:<port># 或者,如果需要检查服务 Pod 的具体端口是否可连接
nc -zv <service-pod-name-or-ip> <port>
或者进入到容器里面
# ubuntu
apt-get update && apt-get install -y iproute2
# centos
apk add --no-cache iproute2
发现15672这个端口没有起来,25672 端口(集群通信端口)和 5672 端口(AMQP 客户端连接端口)可以正常工作,这通常意味着管理界面的配置或暴露方式存在问题
执行命令ss -tuln
问题出在configmap,之前得到的太简单了,完整的配置如上
2.2 如何使用
rabbitmq-headless.middleware.svc.cluster.local:5672
相关文章:

k8s部署rabbitmq集群
1 部署集群 1.1 安装 # 创建一个中间件的命名空间 kubectl create namespace middleware # 创建ConfigMap,包含RabbitMQ的配置文件内容 kubectl apply -f rabbitmq-configmap.yaml # 配置用于存储RabbitMQ数据的PersistentVolume(PV)和PersistentVolum…...
Python利用包pypinyin汉字转拼音(处理多音字)
一、汉字转拼音 在python中将汉字的拼音输出可以采用pypinyin包,一下是简单的demo示例: 默认调用pinyin方法转换时时默认时带声调的,不带声调需要添加“styleStyle.NORMAL”参数。 from pypinyin import pinyin, Styledef pinyin_transfer…...

推荐系统三十六式学习笔记:工程篇.常见架构24|典型的信息流架构是什么样的
目录 整体框架数据模型1.内容即Activity2.关系即连接 动态发布信息流排序数据管道总结 从今天起,我们不再单独介绍推荐算法的原理,而是开始进入一个新的模块-工程篇。 在工程实践的部分中,我首先介绍的内容是当今最热门的信息流架构。 信息…...
解决QEMU无法从非0x80000000处开始执行
解决QEMU无法从非0x80000000处开始执行 1 背景介绍2 问题描述3 原因分析4 解决办法5 踩坑回忆5.1 坑1 - 怀疑设备树有问题5.2 坑2 - 怀疑QEMU中内存未写入成功5.3 QEMU地址空间分析过程 1 背景介绍 在使用NEMU与QEMU做DiffTest的场景下,运行的固件为《RISC-V体系结…...

AI在候选人评估中的作用:精准筛选与HR决策的助力
一、引言 随着科技的迅猛发展,人工智能(AI)技术已逐渐渗透到各个行业和领域,人力资源管理(HRM)亦不例外。在候选人评估的环节中,AI技术以其高效、精准的特性,正在逐步改变着传统的招…...
自动化测试的艺术:Xcode中GUI测试的全面指南
自动化测试的艺术:Xcode中GUI测试的全面指南 在软件开发过程中,图形用户界面(GUI)测试是确保应用质量和用户体验的关键环节。Xcode,作为苹果的官方集成开发环境(IDE),提供了一套强大…...

uniapp封装请求拦截器,封装请求拦截和响应拦截的方法
首先我们先看一下uni官方给开发者提供的uni.request用来网络请求的api 1 2 3 4 5 6 7 8 9 uni.request({ url: , method: GET, data: {}, header: {}, success: res > {}, fail: () > {}, complete: () > {} }); 可以看到我们每次请求数据的时候都需…...

开局一个启动器:从零开始入坑ComfyUI
前几天刷某乎的时候看到了一位大佬写的好文,可图 IP-Adapter 模型已开源,更多玩法,更强生态! - 知乎 (zhihu.com) 久闻ComfyUI大名,决定试一下。这次打算不走寻常路,不下载现成的一键包了,而是…...

34_YOLOv5网络详解
1.1 简介 YOLOV5是YOLO(You Only Look Once)系列目标检测模型的一个重要版本,由 Ultralytics 公司的Glenn Jocher开发并维护。YOLO系列以其快速、准确的目标检测能力而闻名,尤其适合实时应用。YOLOV5在保持高效的同时,…...
深入解析Perl的正则表达式:功能、应用与技巧
在编程世界中,正则表达式是一种强大的文本处理工具,它能够用于搜索、替换、匹配字符串等操作。Perl语言以其强大的文本处理能力著称,而其正则表达式功能更是其核心特性之一。本文将深入探讨Perl中的正则表达式,包括其基本语法、应…...
【JAVA】Hutool CollUtil.sort 方法:多场景下的排序解决方案
在 Java 开发中,集合的排序是常见需求。Hutool 库的 CollUtil.sort 方法提供了一系列用于排序的实用功能,适用于不同的场景。以下是对几种常见场景及其实现方式的总结: <dependency><groupId>org.dromara.hutool</groupId>…...

Mysql-安装(Linux)
1、下载mysql 切换到/opt/app目录下,执行如下命令,下载mysql 5.7.38版本。 [rootywxtdb app]# wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz 解压安装包 [rootywxtdb app]# tar -zxvf mysql-5.7.38-l…...
如何查看日志
别用 cat cat 把整个日志文件刷屏 慎用 vim 日志不大随便整,因为vim会把整个日志文件读到内存,大日志文件(G级别)会造成内存占用过高,影响其他程序,在业务机器上查看日志这样尤其危险 less is more 还…...

python实现责任链模式
把多个处理方法串成一个list。下一个list的节点是上一个list的属性。 每个节点都有判断是否能处理当前数据的方法。能处理,则直接处理,不能处理则调用下一个节点(也就是当前节点的属性)来进行处理。 Python 实现责任链模式&#…...
Prometheus监控ZooKeeper
1. 简介 ZooKeeper是一个分布式协调服务,在分布式系统中扮演着重要角色。为了确保ZooKeeper集群的健康运行,有效的监控至关重要。本文将详细介绍如何使用Prometheus监控ZooKeeper,包括安装配置、关键指标、告警设置以及最佳实践。 2. 安装和配置 2.1 安装ZooKeeper Exporter…...

vuepress搭建个人文档
vuepress搭建个人文档 文章目录 vuepress搭建个人文档前言一、VuePress了解二、vuepress-reco主题个人博客搭建三、vuepress博客部署四、vuepress后续补充 总结 vuepress搭建个人文档 所属目录:项目研究创建时间:2024/7/23作者:星云<Xing…...

面试题 17.14.最小K个数
题目:如下图 答案:如下图 /*** Note: The returned array must be malloced, assume caller calls free().*/ void AdjustDown(int* a,int n,int root) {int parent root;int child parent * 2 1;//默认左孩子是大的,将其与右孩子比较&am…...

C++实现LRU缓存(新手入门详解)
LRU的概念 LRU(Least Recently Used,最近最少使用)是一种常用的缓存淘汰策略,主要目的是在缓存空间有限的情况下,优先淘汰那些最长时间没有被访问的数据项。LRU 策略的核心思想是: 缓存空间有限࿱…...

汇昌联信数字做拼多多运营实力好吗?
汇昌联信数字在拼多多运营方面的实力如何?汇昌联信数字作为一家专注于电子商务运营服务的公司,其在拼多多平台的运营能力是值得关注的。根据市场反馈和客户评价,汇昌联信数字在拼多多的运营实力表现良好,能够为客户提供专业的店铺管理、产品…...

【云原生】Prometheus 服务自动发现使用详解
目录 一、前言 二、Prometheus常规服务监控使用现状 2.1 Prometheus监控架构图 2.2 Prometheus服务自动发现的解决方案 三、Prometheus服务自动发现介绍 3.1 什么是Prometheus服务自动发现 3.2 Prometheus自动服务发现策略 3.3 Prometheus自动服务发现应用…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...