k8s 1.28 搭建rabbitmq集群

1.环境

        1.1 k8s 1.28

        1.2 rabbit 3.8

        1.3 工作空间default

        1.4 注意,内存最好充足一点,因为我就两个节点一个master、一个node,起初我的node是8g,还剩3~4G,集群竟然一直起不来,后来将虚拟机内存扩大,并重启,rabbit集群就起来了,当然可能是和重启有关,但是我认为还是因为内存不够了。

        1.5 k8s集成nfs存储,并且sc的名称 managed-nfs-storage。        

        1.6 镜像 docker pull registry.cn-beijing.aliyuncs.com/dotbalo/rabbitmq:3.8


2.准备yaml

        2.1 01-rabbitmq-configmap.yaml

        注:图中这个cluster_formation.k8s.host 我一开始用的是kubernetes.default.svc.cluster.local,然后就是各种连不上,后来换上 kubernetes.default.svc就可以了,不知道是不是k8s新版本的问题。 

        

kind: ConfigMap
apiVersion: v1
metadata:name: rabbitmq-cluster-confignamespace: defaultlabels:addonmanager.kubernetes.io/mode: Reconcile
data:enabled_plugins: |[rabbitmq_management,rabbitmq_peer_discovery_k8s].rabbitmq.conf: |default_user = admindefault_pass = 123!@### Cluster formation. See https://www.rabbitmq.com/cluster-formation.html to learn more.cluster_formation.peer_discovery_backend = rabbit_peer_discovery_k8s#cluster_formation.k8s.host = kubernetes.default.svc.cluster.localcluster_formation.k8s.host = kubernetes.default.svc## Should RabbitMQ node name be computed from the pod's hostname or IP address?## IP addresses are not stable, so using [stable] hostnames is recommended when possible.## Set to "hostname" to use pod hostnames.## When this value is changed, so should the variable used to set the RABBITMQ_NODENAME## environment variable.cluster_formation.k8s.address_type = hostname## How often should node cleanup checks run?cluster_formation.node_cleanup.interval = 30## Set to false if automatic removal of unknown/absent nodes## is desired. This can be dangerous, see##  * https://www.rabbitmq.com/cluster-formation.html#node-health-checks-and-cleanup##  * https://groups.google.com/forum/#!msg/rabbitmq-users/wuOfzEywHXo/k8z_HWIkBgAJcluster_formation.node_cleanup.only_log_warning = truecluster_partition_handling = autoheal## See https://www.rabbitmq.com/ha.html#master-migration-data-localityqueue_master_locator=min-masters## See https://www.rabbitmq.com/access-control.html#loopback-usersloopback_users.guest = falsecluster_formation.randomized_startup_delay_range.min = 0cluster_formation.randomized_startup_delay_range.max = 2# default is rabbitmq-cluster's namespace# hostname_suffixcluster_formation.k8s.hostname_suffix = .rabbitmq-cluster.default.svc.cluster.local# memoryvm_memory_high_watermark.absolute = 100MB# diskdisk_free_limit.absolute = 2GB

        2.2 02-rabbitmq-service.yaml

        

kind: Service
apiVersion: v1
metadata:labels:app: rabbitmq-clustername: rabbitmq-clusternamespace: default
spec:clusterIP: Noneports:- name: rmqportport: 5672targetPort: 5672selector:app: rabbitmq-cluster---
kind: Service
apiVersion: v1
metadata:labels:app: rabbitmq-clustername: rabbitmq-cluster-managenamespace: default
spec:ports:- name: httpport: 15672protocol: TCPtargetPort: 15672selector:app: rabbitmq-clustertype: NodePort

        2.3 03-rabbitmq-rbac.yaml

        

kind: Service
apiVersion: v1
metadata:labels:app: rabbitmq-clustername: rabbitmq-clusternamespace: default
spec:clusterIP: Noneports:- name: rmqportport: 5672targetPort: 5672selector:app: rabbitmq-cluster---
kind: Service
apiVersion: v1
metadata:labels:app: rabbitmq-clustername: rabbitmq-cluster-managenamespace: default
spec:ports:- name: httpport: 15672protocol: TCPtargetPort: 15672selector:app: rabbitmq-clustertype: NodePort
[root@master rabbitmq]# cat 03-rabbitmq-rbac.yaml 
apiVersion: v1
kind: ServiceAccount
metadata:name: rabbitmq-clusternamespace: default
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: rabbitmq-clusternamespace: default
rules:
- apiGroups: [""]resources: ["endpoints"]verbs: ["get"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: rabbitmq-clusternamespace: default
roleRef:apiGroup: rbac.authorization.k8s.iokind: Rolename: rabbitmq-cluster
subjects:
- kind: ServiceAccountname: rabbitmq-clusternamespace: default

        2.4 04-rabbitmq-cluster-sts.yaml

        

apiVersion: v1
kind: ServiceAccount
metadata:name: rabbitmq-clusternamespace: default
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: rabbitmq-clusternamespace: default
rules:
- apiGroups: [""]resources: ["endpoints"]verbs: ["get"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: rabbitmq-clusternamespace: default
roleRef:apiGroup: rbac.authorization.k8s.iokind: Rolename: rabbitmq-cluster
subjects:
- kind: ServiceAccountname: rabbitmq-clusternamespace: default
[root@master rabbitmq]# cat 04-rabbitmq-cluster-sts.yaml
kind: StatefulSet
apiVersion: apps/v1
metadata:labels:app: rabbitmq-clustername: rabbitmq-clusternamespace: default
spec:replicas: 3selector:matchLabels:app: rabbitmq-clusterserviceName: rabbitmq-clustertemplate:metadata:labels:app: rabbitmq-clusterspec:containers:- args:- -c- cp -v /etc/rabbitmq/rabbitmq.conf ${RABBITMQ_CONFIG_FILE}; exec docker-entrypoint.shrabbitmq-servercommand:- shenv:- name: TZvalue: 'Asia/Shanghai'- name: RABBITMQ_ERLANG_COOKIEvalue: 'SWvCP0Hrqv43NG7GybHC95ntCJKoW8UyNFWnBEWG8TY='- name: K8S_SERVICE_NAMEvalue: rabbitmq-cluster- name: POD_IPvalueFrom:fieldRef:fieldPath: status.podIP- name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespace- name: RABBITMQ_USE_LONGNAMEvalue: "true"- name: RABBITMQ_NODENAMEvalue: rabbit@$(POD_NAME).$(K8S_SERVICE_NAME).$(POD_NAMESPACE).svc.cluster.local- name: RABBITMQ_CONFIG_FILEvalue: /var/lib/rabbitmq/rabbitmq.confimage: 192.168.2.73:80/library/rabbitmq:3.8imagePullPolicy: IfNotPresentlivenessProbe:exec:command:- rabbitmq-diagnostics- status# See https://www.rabbitmq.com/monitoring.html for monitoring frequency recommendations.initialDelaySeconds: 60periodSeconds: 60timeoutSeconds: 15name: rabbitmqports:- containerPort: 15672name: httpprotocol: TCP- containerPort: 5672name: amqpprotocol: TCPreadinessProbe:exec:command:- rabbitmq-diagnostics- statusinitialDelaySeconds: 20periodSeconds: 60timeoutSeconds: 10volumeMounts:- mountPath: /etc/rabbitmqname: config-volumereadOnly: false- mountPath: /var/lib/rabbitmqname: rabbitmq-storagereadOnly: false- name: timezonemountPath: /etc/localtimereadOnly: trueserviceAccountName: rabbitmq-clusterterminationGracePeriodSeconds: 30volumes:- name: config-volumeconfigMap:items:- key: rabbitmq.confpath: rabbitmq.conf- key: enabled_pluginspath: enabled_pluginsname: rabbitmq-cluster-config- name: timezonehostPath:path: /usr/share/zoneinfo/Asia/ShanghaivolumeClaimTemplates:- metadata:name: rabbitmq-storagespec:accessModes:- ReadWriteManystorageClassName: "managed-nfs-storage"resources:requests:storage: 2Gi

 

        以上就是搭建rabbitmq集群需要的yaml文件

3 执行yaml

        3.1 执行命令

        kubectl apply -f .

        3.2 查看集群状态

        启动可能有点慢,需要一点时间去等待,大概几分钟吧三个节点就可以启动了

                 3.3 进入集群,查看状态

        执行 kubectl exec -it rabbitmq-cluster-0 -- /bin/bash

        执行 rabbitmqctl cluster_status

        可以看到,几点都已经进来了。

        

4. 浏览器访问rabbitmq客户端

        4.1 查看端口

        执行 kubectl get pvc

                4.2 输入在 01-rabbitmq-configmap.yaml 中配置的用户名和密码,进行登录

        

        注:我遇到了一个问题,就是当我输入我在 01-rabbitmq-configmap.yaml 中配置的用户名和密码时,检验没有通过,并提示这个,初步怀疑用户没起作用。

解决方案:

        1. 执行 kubectl exec -it rabbitmq-cluster-0 -- /bin/bash

        2.新增用户 rabbitmqctl add_user ldy(用户名) 123456(密码)

        3.设置权限 rabbitmqctl set_user_tags ldy administrator

        4.重新在浏览器用新的账户和密码登录就可以了

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

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

相关文章

Word中插入Mathtype右编号,调整公式与编号的位置

当你已经将mathtype内置于word后,可以使用右编号快速插入公式 但是往往会出现公式和编号出现的位置或之间的距离不合适 比如我在双栏下插入公式,会发现插入的公式与编号是适用于单栏的 解决办法: 开始->样式->MTDisplayLquation -&g…

37python数据分析numpy基础之save以二进制保存数组数据到文件

1 python数据分析numpy基础之save以二进制保存数组数据到文件 python的numpy库的save(file,arr)函数,将数组以二进制格式保存到一个npy后缀的文件中。 用法 numpy.save(file, arr, allow_pickleTrue, fix_importsTrue)描述 numpy.save(file,arr),可以…

AWT常用组件

AWT中常用组件 前言一、基本组件组件名标签(Label类)Label类的构造方法注意要点 按钮(Button)Button的构造方法注意要点 文本框(TextField)TextField类的构造方法注意要点 文本域(TextArea)TextArea 的构造方法参数scrollbars的静态常量值 复选框&#x…

【Spring Boot】Spring Boot 的世界之旅1

目录 1 Spring Boot 的诞生背景 2 Spring Boot 的核心价值 3 为什么选择Spring Boot 4 Spring Boot 与传统Spring应用的对比 5 踏上Spring Boot之旅 1 Spring Boot 的诞生背景 在软件开发的历史长河中,随着技术的不断演进,开发者们面临着越来越多的…

Java基础知识:为面试做好准备

基本概念 Java的特性:Java是一门面向对象的编程语言,具有跨平台性、自动内存管理等特点。Java平台的组成:Java平台主要分为Java SE(Standard Edition)、Java EE(Enterprise Edition)和Java ME&…

排序-读取数据流并实时返回中位数

目录 一、问题描述 二、解题思路 1.顺序表排序法 2.使用大根堆、小根堆 三、代码实现 1.顺序表排序法实现 2.大根堆、小根堆法实现 四、刷题链接 一、问题描述 二、解题思路 1.顺序表排序法 (1)每次读取一个数就对列表排一次序,对排…

如何使用Python中的枚举类型(enum)

在Python中,枚举类型可以通过内置的enum模块来实现。枚举类型是一种特殊的类,它用于定义一组命名的常量。这些常量通常用于表示固定的、有限的集合的值,比如一周的几天、颜色的名称等。 下面是如何使用Python中的enum模块来定义和使用枚举类…

AQS实现原理

AQS(AbstractQueuedSynchronizer)是一个用于构建锁和同步器的框架,许多同步器都可以通过AQS很容易并且高效地构造出来。 不仅 ReentrantLock 和 Semaphore 是基于AQS构建的,还包括 CountDownLatch、ReentrantReadWriteLock、Synch…

速盾:图片cdn加速 免费

随着互联网的快速发展,图片在网页设计和内容传播中起着重要的作用。然而,随着网站访问量的增加和图片文件大小的增加,图片加载速度可能会成为一个问题。为了解决这个问题,许多网站使用图片CDN加速服务。 CDN(Content …

Oracle函数有哪些

目录 数值函数 字符串函数 日期函数 转换函数 聚合函数 分析函数 Oracle数据库提供了大量的内置函数,这些函数可以分为多个类别,每个类别都有特定的用途。以下是一些常见的Oracle函数及其简要描述。 数值函数 ABS(n):返回数字的绝对值。 CEIL(n)或CEILING(n):返回大…

Python异步爬虫批量下载图片-协程

import aiofiles import aiohttp import asyncio import requests from lxml import etree from aiohttp import TCPConnectorclass Spider:def __init__(self, value):# 起始urlself.start_url value# 下载单个图片staticmethodasync def download_one(url):name url[0].spl…

Redis 5种常用数据类型

目录 Redis简介 1.字符串 string 2.哈希 hash 3.列表 list 4.集合 set 5.有序集合 sorted set / zset Redis简介 Redis,全称Remote Dictionary Server,是一个开源的、内存中的数据结构存储系统。它可以用作数据库、缓存和消息中间件,支…

Hash String 学习笔记

目录 咕咕咕 Trie 树/字典树 P8306 【模板】字典树 咕咕咕&#xff08;感觉比较简单&#xff08;吗&#xff09;&#xff09;&#xff08;我才不会说是我懒呢&#xff09; KMP 一个求最长公共前后缀的东西 P3375 【模板】KMP 写法一 #include<bits/stdc.h> using name…

【JavaScript脚本宇宙】表格大变身:探秘JavaScript库的数据表格魔法

优化数据展示&#xff1a;精选JavaScript表格增强库对比 前言 在现代Web开发中&#xff0c;利用各种库和框架来增强数据表格的功能已经成为常态。通过使用特定的JavaScript库和插件&#xff0c;开发人员可以轻松地实现交互性强、美观且高性能的数据表格&#xff0c;从而提升用…

JavaScript前端技术入门教程

引言 在前端开发的广阔天地中&#xff0c;JavaScript无疑是最耀眼的一颗明星。它赋予了网页动态交互的能力&#xff0c;让网页从静态的文本和图片展示&#xff0c;进化为可以与用户进行实时交互的丰富应用。本文将带您走进JavaScript的世界&#xff0c;为您提供一个入门级的教…

Nginx访问日志

Nginx日志是Nginx Web服务器产生的记录文件&#xff0c;主要用于跟踪和分析服务器的访问情况以及错误信息。Nginx日志主要分为两大类&#xff1a;访问日志 (access_log): 访问日志记录了每一次客户端对Nginx服务器的HTTP请求的详细信息&#xff0c;这对于统计分析、流量监控、用…

SpringBoot3+Mybatis-Plus+h2数据库,入门Mybatis-Plus

SpringBoot3Mybatis-Plush2数据库&#xff0c;入门Mybatis-Plus mybatis-plus官网地址maven依赖数据库脚本配置文件实体类Mapper入门程序启动程序测试单元测试测试结果 Service层接口service层接口单元测试测试结果 项目结构 mybatis-plus官网地址 https://www.baomidou.com/ …

vue manually select

1 vuex 一个包含多个页面的应用程序&#xff0c;每个页面包含多个组件&#xff0c;这些组件拥有各自的表单&#xff0c;并且希望这些表单展示的数据能够在不同组件之间共享&#xff0c;那么可以使用 Vuex 来管理这些数据。在这种情况下&#xff0c;您可以将这些需要共享的数据存…

2002NOIP普及组真题 2. 选数

线上OJ&#xff1a; 【02NOIP普及组】选数 核心思想&#xff1a; 1、使用 模板函数 isPrime() 来判断一个数是否为素数。 2、定义一个函数 dfs 来进行深度优先搜索。在dfs函数中&#xff0c;通过递归的方式遍历所有可能的组合&#xff0c;并计算每个组合的和。 在 dfs 中&…

服务器升级Nacos2.2.3报错、rocksdb报错问题处理

由于系统之前使用的Nacos2.0.4有反序列化漏洞&#xff0c;故需要将Nacos升级到2.2.3版本。 该Nacos在本地运行没有问题&#xff0c;但是在Windows服务器运行就会报错&#xff1a; rocksdb java.lang.UnsatisfiedLinkError: C:\Users\Administrator\AppData\Local\Temp\2\libro…