cat <<END>rbac.yaml
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: rabbitmq-peer-discovery-rbac
  namespace: test
rules:
- apiGroups: 
    - ""
  resources: 
    - endpoints
  verbs: 
    - get
    - list
    - watch
- apiGroups:
    - ""
  resources:
    - events
  verbs:
    - create
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: rabbitmq-peer-discovery-rbac
  namespace: test
subjects:
- kind: ServiceAccount
  name: default
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: rabbitmq-peer-discovery-rbac
END
创建唯一erlang.cookie
echo $(openssl rand -base64 32) > erlang.cookie
kubectl create secret generic erlang.cookie --from-file=erlang.cookie -n test
再创建
tee mq-StatefulSet.yaml <<'-EOF'
apiVersion: apps/v1
kind: StatefulSet
metadata:
  namespace: test
  name: rabbitmq
  annotations:
    k8s.kuboard.cn/workload: rabbitmq
    k8s.eip.work/ingress: 'false'
    k8s.eip.work/service: NodePort
    k8s.eip.work/workload: rabbitmq
    k8s.kuboard.cn/service: NodePort
    k8s.kuboard.cn/ingress: 'false'
  labels:
    k8s.eip.work/layer: ''
    k8s.eip.work/name: rabbitmq
spec:
  selector:
    matchLabels:
      k8s.eip.work/layer: ''
      k8s.eip.work/name: rabbitmq
  revisionHistoryLimit: 10
  template:
    metadata:
      labels:
        k8s.eip.work/layer: ''
        k8s.eip.work/name: rabbitmq
    spec:
      securityContext:
        seLinuxOptions: {}
      imagePullSecrets: []
      restartPolicy: Always
      initContainers: []
      containers:
        - image: rabbitmq:3.8.9-management-alpine
          imagePullPolicy: IfNotPresent
          name: rabbitmq
          volumeMounts:
            - name: rabbitmq-data
              mountPath: /var/lib/rabbitmq/mnesia
              subPath: rabbitmq
            - name: data-config
              readOnly: true
              mountPath: /etc/localtime
          env:
            - name: RABBITMQ_DEFAULT_USER
              value: admin
            - name: RABBITMQ_DEFAULT_PASS
              value: jnThdLQ3MQ0D9Vvn
            - 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
          lifecycle: {}
          ports:
            - name: amqp
              containerPort: 5672
              protocol: TCP
            - name: http
              containerPort: 15672
              protocol: TCP
      volumes:
        - name: data-config
          hostPath:
            path: /etc/localtime
            type: ''
      dnsPolicy: ClusterFirst
      dnsConfig: {}
      terminationGracePeriodSeconds: 30
  replicas: 3
  volumeClaimTemplates:
  - metadata:
      name: rabbitmq-data
      annotations:
        volume.beta.kubernetes.io/storage-class: "managed-nfs-storage"
    spec:
      accessModes: ["ReadWriteOnce"]
      resources:
        requests:
          storage: 1Gi
  serviceName: rabbitmq
EOF
cat <<END>svc
apiVersion: v1
kind: Service
metadata:
  namespace: test
  name: rabbitmq
  annotations:
    k8s.kuboard.cn/workload: rabbitmq
    k8s.eip.work/workload: rabbitmq
  labels:
    k8s.eip.work/layer: ''
    k8s.eip.work/name: rabbitmq
spec:
  selector:
    k8s.eip.work/layer: ''
    k8s.eip.work/name: rabbitmq
  type: NodePort
  ports:
    - port: 15672
      targetPort: 15672
      protocol: TCP
      name: ewpqda
      nodePort: 31672
    - port: 5672
      targetPort: 5672
      protocol: TCP
      name: ktfftz
      nodePort: 30672
  sessionAffinity: None
---
apiVersion: v1
kind: Service
metadata:
  name: rabbitmqx
  namespace: test
  annotations:
    k8s.kuboard.cn/workload: rabbitmq
    k8s.eip.work/workload: rabbitmq
  labels:
    k8s.eip.work/layer: ''
    k8s.eip.work/name: rabbitmq   
spec:
  selector:
    k8s.eip.work/layer: ''
    k8s.eip.work/name: rabbitmq
  clusterIP: None
  ports:
    - port: 15672
      name: cli
      targetPort: 15672
    - port: 5672
      targetPort: 5672
      name: serve
  sessionAffinity: None
END
[root@c169 plugins]# kubectl get pods -n test  | grep ra
rabbitmq-0               1/1     Running   0          100m
rabbitmq-1               1/1     Running   0          100m
rabbitmq-2               1/1     Running   0          100m
####
[root@c169 plugins]# kubectl exec -n test busybox -- nslookup rabbitmqx
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name:      rabbitmqx
Address 1: 10.244.2.140 rabbitmq-0.rabbitmq.test.svc.cluster.local
Address 2: 10.244.2.141 rabbitmq-1.rabbitmq.test.svc.cluster.local
Address 3: 10.244.2.142 rabbitmq-2.rabbitmq.test.svc.cluster.local

开始手动加入集群
kubectl exec -it -n test 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 test rabbitmq-0 /bin/bash
#查看集群状态
rabbitmqctl --erlang-cookie $(cat $HOME/.erlang.cookie) cluster_status

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐