Kubernetes-rabbitmq-nfs单机版部署
背景
简单的在kubernetes上部署单例的RabbitMQ消息队列
一、环境准备,安装kubernetes集群
当前节点base、master、slave1、slave2
kubernetes安装不在此赘述,请参考参考资料进行安装
kubernetes安装nfs不在此赘述,请参考参考资料进行安装
参考资料
1-Kubernetes基于Centos7构建基础环境(一)
2-Kubernetes基于Centos7构建基础环境(二)
3-Kubernetes基于Centos7构建基础环境(三)
4-Kubernetes-基于Centos7安装面板及监控(四)
1-kubernetes-nfs动态存储部署)
| 集群名称 | 集群域名 | 说明 |
|---|---|---|
| base | base.xincan.cn | 部署harbor、nfs等服务 |
| master | master.xincan.cn | kubernetes主节点,做污点容忍,排除业务资源,nfs客户端等 |
| slave1 | slave1.xincan.cn | kubernetes从节点,nfs客户端等 |
| slave2 | slave2.xincan.cn | kubernetes从节点,nfs客户端等 |
二、总体流程:
- 找一台虚拟机部署harbor、nfs服务,我这里不在赘述,请参照前面的文档;
- 在nfs服务端创建RabbitMQ数据存储挂载本地位置(rabbitmq-single);
- 在kubernetes主节点上某个目录下创建rabbitmq-single文件夹,也可以自定义,主要保证内部kubernetes资源定义文件一样即可;
- 进入此文件夹之后,复制一下文档中列出的kubernetes资源并保存到此目录下,所有资源如下列表;
[root@master rabbitmq-single]# ll
mysql-single
├── 1-rabbitmq-namespace.yaml
├── 2-rabbitmq-pv.yaml
├── 3-rabbitmq-pvc.yaml
├── 4-rabbitmq-configmap.yaml
├── 5-rabbitmq-deployment.yaml
└── 6-rabbitmq-service.yaml
- 资源创建;
- 效果展示;
- 连接测试;
三、资源创建
- 创建RabbitMQ的命名空间Namespace,名称为:redis
- 将所有的资源挂载到此命名空间下;
[root@master rabbitmq-single]# vim 1-rabbitmq-namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: rabbitmq
labels:
app: rabbitmq
- 创建RabbitMQ的存储资源PersistentVolume,名称为:rabbitmq-pv
[root@master rabbitmq-single]# vim 2-rabbitmq-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: rabbitmq-pv
namespace: rabbitmq
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 2Gi
claimRef:
apiVersion: v1
kind: PersistentVolumeClaim
name: rabbitmq-pvc
namespace: rabbitmq
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs
nfs:
path: /nfs/data/rabbitmq-single
server: 172.16.124.130
volumeMode: Filesystem
- 创建RabbitMQ的存储匹配资源PersistentVolumeClaim,名称为:rabbitmq-pvc
[root@master rabbitmq-single]# vim 3-rabbitmq-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: rabbitmq-pvc
namespace: rabbitmq
labels:
app: rabbitmq
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi
- 创建RabbitMQ的配置资源ConfigMap,名称为:redis-config
[root@master rabbitmq-single]# vim 4-rabbitmq-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: rabbitmq-config
namespace: rabbitmq
labels:
app: rabbitmq
data:
enabled_plugins: |
[rabbitmq_shovel,rabbitmq_shovel_management].
rabbitmq.conf: |+
loopback_users.guest = false # 解除guest用户限制
- 创建RabbitMQ实例资源Deployment,名称为:rabbitmq
[root@master rabbitmq-single]# vim 5-rabbitmq-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: rabbitmq
namespace: rabbitmq
labels:
app: rabbitmq
spec:
replicas: 1
selector:
matchLabels:
app: rabbitmq
template:
metadata:
labels:
app: rabbitmq
spec:
containers:
- name: rabbitmq
image: base.xincan.cn/library/rabbitmq:v3.8.16-management-alpine
imagePullPolicy: IfNotPresent
env:
- name: RABBITMQ_DEFAULT_USER
value: "guest"
- name: RABBITMQ_DEFAULT_PASS
value: "guest"
- name: TZ
value: Asia/Shanghai
livenessProbe:
exec:
command: ["rabbitmqctl", "status"]
initialDelaySeconds: 10
timeoutSeconds: 5
readinessProbe:
exec:
command: ["rabbitmqctl", "status"]
initialDelaySeconds: 5
timeoutSeconds: 2
ports:
- containerPort: 15672
protocol: TCP
name: http
- containerPort: 5672
protocol: TCP
name: amqp
volumeMounts:
- name: rabbitmq-config
mountPath: /etc/rabbitmq
- name: rabbitmq-nfs-storage
mountPath: /var/lib/rabbitmq
volumes:
- name: rabbitmq-config
configMap:
name: rabbitmq-config
items:
- key: rabbitmq.conf
path: rabbitmq.conf
- key: enabled_plugins
path: enabled_plugins
- name: rabbitmq-nfs-storage
persistentVolumeClaim:
claimName: rabbitmq-pvc
- 创建RabbitMQ对外暴露资源Service,名称为:rabbitmq-service
[root@master rabbitmq-single]# vim 6-rabbitmq-service.yaml
apiVersion: v1
kind: Service
metadata:
name: rabbitmq-service
namespace: rabbitmq
labels:
app: rabbitmq
spec:
ports:
- name: http
protocol: TCP
port: 15672
targetPort: 15672
- name: amqp
protocol: TCP
port: 5672
targetPort: 5672
type: NodePort
selector:
app: rabbitmq
- 创建资源
- 进入mysql-single执行命令:kubectl apply -f ../rabbitmq-single/
- 删除所有资源命令:kubectl delete -f ../rabbitmq-single/
[root@master rabbitmq-single]# kubectl apply -f ../rabbitmq-single/
namespace/rabbitmq created
persistentvolume/rabbitmq-pv created
persistentvolumeclaim/rabbitmq-pvc created
configmap/rabbitmq-config created
deployment.apps/rabbitmq created
service/rabbitmq-service created
[root@master rabbitmq-single]#
[root@master redis-single]# kubectl delete -f ../redis-single/
namespace "redis" deleted
persistentvolume "redis-pv" deleted
persistentvolumeclaim "redis-pvc" deleted
configmap "redis-config" deleted
deployment.apps "redis-server" deleted
service "redis" deleted
[root@master redis-single]#
四、效果展示
- 通过
kubectl -n rabbitmq get pv,pvc,cm,pod,svc,查询rabbitmq命名空间下对应资源,pv(persistentvolume)数据挂载资源,pvc等等资源
[root@master rabbitmq-single]# kubectl -n rabbitmq get pv,pvc,cm,pod,svc
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/rabbitmq-pv 2Gi RWO Retain Bound rabbitmq/rabbitmq-pvc nfs 52s
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/rabbitmq-pvc Bound rabbitmq-pv 2Gi RWO 52s
NAME DATA AGE
configmap/kube-root-ca.crt 1 52s
configmap/rabbitmq-config 2 52s
NAME READY STATUS RESTARTS AGE
pod/rabbitmq-58cc8fdfdb-rh9gs 1/1 Running 0 52s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/rabbitmq-service NodePort 10.1.47.120 <none> 15672:30787/TCP,5672:30638/TCP 52s
[root@master rabbitmq-single]#
五、测试连接、外部地址访问
- 命令方式测试quit; 退出容器,发现安装成功
- 可以看到安装了一系列的rabbitmq的插件,版本信息等等
[root@master rabbitmq-single]# kubectl -n rabbitmq exec -it rabbitmq-58cc8fdfdb-rh9gs -- rabbitmqctl status
Status of node rabbit@rabbitmq-58cc8fdfdb-rh9gs ...
Runtime
OS PID: 300
OS: Linux
Uptime (seconds): 236
Is under maintenance?: false
RabbitMQ version: 3.8.16
Node name: rabbit@rabbitmq-58cc8fdfdb-rh9gs
Erlang configuration: Erlang/OTP 23 [erts-11.2.2] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1]
Erlang processes: 381 used, 1048576 limit
Scheduler run queue: 1
Cluster heartbeat timeout (net_ticktime): 60
Plugins
Enabled plugin file: /etc/rabbitmq/enabled_plugins
Enabled plugins:
* rabbitmq_shovel_management
* rabbitmq_shovel
* amqp10_client
* amqp10_common
* rabbitmq_management
* amqp_client
* rabbitmq_web_dispatch
* cowboy
* cowlib
* rabbitmq_management_agent
Data directory
Node data directory: /var/lib/rabbitmq/mnesia/rabbit@rabbitmq-58cc8fdfdb-rh9gs
Raft data directory: /var/lib/rabbitmq/mnesia/rabbit@rabbitmq-58cc8fdfdb-rh9gs/quorum/rabbit@rabbitmq-58cc8fdfdb-rh9gs
Config files
* /tmp/rabbitmq.conf
Log file(s)
* <stdout>
Alarms
(none)
Memory
Total memory used: 0.1314 gb
Calculation strategy: rss
Memory high watermark setting: 0.4 of available memory, computed to: 3.3291 gb
code: 0.0333 gb (25.31 %)
other_proc: 0.0312 gb (23.75 %)
other_system: 0.0261 gb (19.87 %)
allocated_unused: 0.0157 gb (11.96 %)
reserved_unallocated: 0.011 gb (8.39 %)
plugins: 0.0086 gb (6.57 %)
other_ets: 0.0033 gb (2.5 %)
atom: 0.0015 gb (1.12 %)
metrics: 0.0002 gb (0.18 %)
mgmt_db: 0.0002 gb (0.12 %)
binary: 0.0002 gb (0.11 %)
mnesia: 0.0001 gb (0.07 %)
quorum_ets: 0.0 gb (0.04 %)
msg_index: 0.0 gb (0.02 %)
connection_other: 0.0 gb (0.0 %)
connection_channels: 0.0 gb (0.0 %)
connection_readers: 0.0 gb (0.0 %)
connection_writers: 0.0 gb (0.0 %)
queue_procs: 0.0 gb (0.0 %)
queue_slave_procs: 0.0 gb (0.0 %)
quorum_queue_procs: 0.0 gb (0.0 %)
File Descriptors
Total: 2, limit: 1048479
Sockets: 0, limit: 943629
Free Disk Space
Low free disk space watermark: 0.05 gb
Free disk space: 8.9976 gb
Totals
Connection count: 0
Queue count: 0
Virtual host count: 1
Listeners
Interface: [::], port: 15672, protocol: http, purpose: HTTP API
Interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
[root@master rabbitmq-single]#
- 通过地址端口号访问
- 获取NodePort端口
- 登录名称:guest
- 登录密码:guest
[root@master rabbitmq-single]# kubectl -n rabbitmq get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
rabbitmq-service NodePort 10.1.47.120 <none> 15672:30787/TCP,5672:30638/TCP 5m23s
[root@master rabbitmq-single]#
六:结束语
至此单机版Kubernetes部署rabbitmq单机版完成