K8S 搭建 rabbitmq 3.7.17 集群

在 nfs 服务器上创建目录

cat /etc/exports
/data/nfs  172.16.16.0/24(rw,sync,no_root_squash)

mkdir /data/nfs/rabbit

在 k8s-master 上操作

mkdir -p /data/yaml/default/rabbitmq-cluster
cd /data/yaml/default/rabbitmq-cluster

# 创建唯一erlang.cookie
echo $(openssl rand -base64 32) > erlang.cookie

# 创建专用的命名空间
kubectl create ns r

kubectl create secret generic erlang.cookie --from-file=erlang.cookie -n r

# 权限控制
vi rabc.yaml 

apiVersion: v1
kind: ServiceAccount
metadata:
  name: rabbitmq
  namespace: r
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: rabbitmq
  namespace: r
rules:
  - apiGroups:
      - ""
    resources:
      - endpoints
    verbs:
      - get
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: rabbitmq
  namespace: r
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: rabbitmq
subjects:
- kind: ServiceAccount
  name: rabbitmq
  namespace: r

kubectl apply -f rabc.yaml 

# svc
vi svc.yaml

kind: Service
apiVersion: v1
metadata:
  name: rabbitmq-service #rabbit以外使用
  namespace: r
spec:
  type: NodePort
  ports:
    - name: mangement
      protocol: TCP
      port: 15672
      nodePort: 31002
    - name: smp 
      protocol: TCP
      port: 5672
      nodePort: 31001
  selector:
    app: rabbitmq
---
apiVersion: v1
kind: Service
metadata:
  name: rabbitmq #rabbitmq内部使用
  namespace: r
  labels:
    app: rabbitmq
spec:
  clusterIP: None
  ports:
  - port: 5672
    name: amqp
  selector:
    app: rabbitmq

kubectl apply -f svc.yaml 

# StatefulSet
vi sts.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: rabbitmq
  namespace: r
spec:
  serviceName: rabbitmq
  updateStrategy:
    type: RollingUpdate
  replicas: 3
  selector:
    matchLabels:
      app: rabbitmq
  template:
    metadata:
      name: rabbitmq
      labels:
        app: rabbitmq
    spec:
      serviceAccountName: rabbitmq
      containers:
      - name: rabbitmq
        image: harbor.junengcloud.com/rabbitmq/rabbitmq:3.7.17-management-alpine
        imagePullPolicy: IfNotPresent
        resources:
          requests:
            memory: "800Mi"
            cpu: "0.4"
          limits:
            memory: "900Mi"
            cpu: "0.6"
        volumeMounts:
          - name: rabbitmq-data
            mountPath: /var/lib/rabbitmq/mnesia
        ports:
        - containerPort: 5672
          name: amqp
        env:
          - name: RABBITMQ_DEFAULT_USER
            value: admin
          - name: RABBITMQ_DEFAULT_PASS
            value: password
          - name: RABBITMQ_ERLANG_COOKIE
            valueFrom:
              secretKeyRef:
                name: erlang.cookie
                key: erlang.cookie
          - name: HOSTNAME
            valueFrom:
              fieldRef:
                fieldPath: metadata.name
          - name: NAMESPACE
            valueFrom:
              fieldRef:
                fieldPath: metadata.namespace
          - name: SERVICE_INTERNAL_NAME
            value: "rabbitmq"
          - name: RABBITMQ_USE_LONGNAME
            value: "true"
          - name: RABBITMQ_NODENAME
            value: "rabbit@$(HOSTNAME).$(SERVICE_INTERNAL_NAME).$(NAMESPACE).svc.cluster.local"
      volumes:
        - name: rabbitmq-data
          nfs:
            path: /data/nfs/rabbit
            server: 172.16.16.140

kubectl apply -f sts.yaml 

创建集群

# rabbitmq-1
kubectl exec -it -n r rabbitmq-1 /bin/bash
rabbitmqctl --erlang-cookie $(cat $HOME/.erlang.cookie) stop_app
rabbitmqctl --erlang-cookie $(cat $HOME/.erlang.cookie) join_cluster rabbit@rabbitmq-0
rabbitmqctl --erlang-cookie $(cat $HOME/.erlang.cookie) start_app

# rabbitmq-2
kubectl exec -it -n r rabbitmq-2 /bin/bash
rabbitmqctl --erlang-cookie $(cat $HOME/.erlang.cookie) stop_app
rabbitmqctl --erlang-cookie $(cat $HOME/.erlang.cookie) join_cluster rabbit@rabbitmq-0
rabbitmqctl --erlang-cookie $(cat $HOME/.erlang.cookie) start_app

# rabbitmq-0 检查
kubectl exec -it -n r rabbitmq-0 /bin/bash
rabbitmqctl --erlang-cookie $(cat $HOME/.erlang.cookie) cluster_status
----Running Nodes
----rabbit@rabbitmq-0.rabbitmq.r.svc.cluster.local
----rabbit@rabbitmq-1.rabbitmq.r.svc.cluster.local
----rabbit@rabbitmq-2.rabbitmq.r.svc.cluster.local

集群需要配置镜像模式,参考 https://www.cnblogs.com/klvchen/p/14029336.html

参考:https://www.cnblogs.com/floud/p/12703509.html

posted @ 2021-10-09 15:18  klvchen  阅读(119)  评论(0)    收藏  举报