5-Kubernetes-rabbitmq-nfs单机版部署

462 阅读5分钟

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动态存储部署)

集群名称集群域名说明
basebase.xincan.cn部署harbor、nfs等服务
mastermaster.xincan.cnkubernetes主节点,做污点容忍,排除业务资源,nfs客户端等
slave1slave1.xincan.cnkubernetes从节点,nfs客户端等
slave2slave2.xincan.cnkubernetes从节点,nfs客户端等

二、总体流程:

  1. 找一台虚拟机部署harbor、nfs服务,我这里不在赘述,请参照前面的文档;
  2. 在nfs服务端创建RabbitMQ数据存储挂载本地位置(rabbitmq-single);
  3. 在kubernetes主节点上某个目录下创建rabbitmq-single文件夹,也可以自定义,主要保证内部kubernetes资源定义文件一样即可;
  4. 进入此文件夹之后,复制一下文档中列出的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

  1. 资源创建;
  2. 效果展示;
  3. 连接测试;

三、资源创建

  1. 创建RabbitMQ的命名空间Namespace,名称为:redis
    • 将所有的资源挂载到此命名空间下;
[root@master rabbitmq-single]# vim 1-rabbitmq-namespace.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: rabbitmq
  labels:
    app: rabbitmq
  1. 创建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
  1. 创建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
  1. 创建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用户限制
  1. 创建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
  1. 创建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
  1. 创建资源
  • 进入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]#

四、效果展示

  1. 通过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]#

五、测试连接、外部地址访问

  1. 命令方式测试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]#
  1. 通过地址端口号访问
    • 获取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]#

image-20210518165827568

六:结束语

至此单机版Kubernetes部署rabbitmq单机版完成