k8s部署rabbitMQ集群

一. 使用statefulset部署rabbitmq集群

在部署集群之前需要为集群创建一个Storage Class(存储类)来作为集群数据的持久化后端。本例中使用ceph作为后端存储,在创建存储类之前需要先搭建好,并保证在k8s集群各个节点上均能挂载该ceph存储。

1.创建命名空间rabbit-mq


# cat rabbit-mq.yaml
---
apiVersion: v1
kind: Namespace
metadata:
  name: rabbit-mq


# kubectl apply -f rabbit-mq.yaml

2.  Service Account是Kubernetes Pod中的程序用于访问Kubernetes API的Account(账号),它为Pod中的程序提供访问Kubernetes API的身份标识。下面我们创建rabbitmq Pod的ServiceAccount,并针对Kubernetes的endpoint资源做授权,创建相关的role和rolebinding。

在Kubernetes上创建rabbitmq这个ServiceAccount以及相关的role和rolebinding.创建如下的rabbitmq.rbac.yaml文件

# cat rabbitmq.rbac.yaml
---
apiVersion: v1
kind: ServiceAccount  #集群访问apiserver的凭证
metadata:
  name: rabbitmq
  namespace: rabbit-mq
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: endpoint-reader
  namespace: rabbit-mq
rules:
- apiGroups: [""]
  resources: ["endpoints"]
  verbs: ["get"]
---
kind: RoleBinding  #将角色绑定
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: endpoint-reader
  namespace: rabbit-mq
subjects:
- kind: ServiceAccount
  name: rabbitmq
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: endpoint-reader

# kubectl apply -f rabbitmq.rbac.yaml
[root@master rabbitmq]# kubectl get ServiceAccount -n rabbit-mq
NAME       SECRETS   AGE
default    1         60m
rabbitmq   1         60m

3. 创建访问rabbitmq集群的service,创建rabbitmq.service.yaml

# cat rabbitmq.service.yaml
---
kind: Service
apiVersion: v1
metadata:
  name: rabbitmq-headless
  namespace: rabbit-mq
spec:
  clusterIP: None
  publishNotReadyAddresses: true
  ports:
   - name: amqp
     port: 5672
   - name: http
     port: 15672
  selector:
    app: rabbitmq
    
---
kind: Service
apiVersion: v1
metadata:
  namespace: rabbit-mq
  name: rabbitmq-service
spec:
  ports:
  - name: http
    protocol: TCP
    port: 15672
    nodePort: 35672  #管理web界面
  - name: amqp
    protocol: TCP
    port: 5672
    targetPort: 5672
    nodePort: 35671
  selector:
    app: rabbitmq
  type: NodePort


# kubectl create -f rabbitmq.service.yaml
[root@master rabbitmq]# kubectl get svc -n rabbit-mq
NAME                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                          AGE
rabbitmq-headless   ClusterIP   None             <none>        5672/TCP,15672/TCP               58m
rabbitmq-servi
  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
Kubernetes (k8s) 是一个开源的容器编排系统,常用于自动化部署、扩展和管理容器化的应用程序。部署RabbitMQ(一个开源的消息队列服务)到 Kubernetes 单机上,可以通过使用 Deployments 或者 StatefulSets 进行操作,因为 RabbitMQ 需要保持持久的实例。 下面是部署 RabbitMQ 到单个 Kubernetes 节点的简要步骤: 1. 准备RabbitMQ镜像: 使用Dockerfile构建一个包含RabbitMQ的镜像,或者从Docker Hub下载官方RabbitMQ镜像。 2. 创建YAML配置文件: 编写一个 `deployment.yaml` 或 `statefulset.yaml` 文件,定义RabbitMQ的Pod配置。例如,使用Deployment: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: rabbitmq-deployment spec: replicas: 1 selector: matchLabels: app: rabbitmq template: metadata: labels: app: rabbitmq spec: containers: - name: rabbitmq image: rabbitmq:latest ports: - containerPort: 5672 name: amqp - containerPort: 15672 name: management volumes: - name: rabbitmq-data persistentVolumeClaim: claimName: rabbitmq-pvc ``` 如果使用StatefulSet,还需要添加更细致的标识(如Pod名称和Pod序列号)和数据卷(PVC)。 3. 创建PersistentVolumeClaim (PVC): 为RabbitMQ创建一个 PVC 来存储数据,确保有足够的存储空间。 ```yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: rabbitmq-pvc namespace: default spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: "5Gi" ``` 4. 应用配置: 使用 `kubectl apply -f deployment.yaml` 或 `kubectl apply -f statefulset.yaml` 命令将配置应用到集群中。 5. 验证部署: 查看RabbitMQ服务是否正在运行,以及Pod的状态: ``` kubectl get pods,svc -n default ```
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值