创建阿里云NAS存储卷 (PV、PVC)
public-service-pv.yaml
apiVersion: v1 kind: PersistentVolume metadata: annotations: pv.kubernetes.io/bound-by-controller: 'yes' finalizers: - kubernetes.io/pv-protection labels: alicloud-pvname: public-service-pvc-rabbitmq-cluster-storage name: public-service-pvc-rabbitmq-cluster-storage selfLink: /api/v1/persistentvolumes/public-service-pvc-rabbitmq-cluster-storage spec: accessModes: - ReadWriteMany capacity: storage: 20Gi claimRef: apiVersion: v1 kind: PersistentVolumeClaim name: rabbitmq-cluster-storage namespace: public-service flexVolume: driver: alicloud/nas options: mode: '755' modeType: recursive path: /rabbitmq-cluster-storage server: xxxx.cn-hangzhou.nas.aliyuncs.com vers: '4.0' persistentVolumeReclaimPolicy: Retain storageClassName: nas volumeMode: Filesystem
创建kubernets空间
vi -b public-service-ns.yaml
apiVersion: v1
kind: Namespace
metadata:
name: public-service
vi -b rabbitmq-configmap.yaml
apiVersion: v1 kind: ConfigMap metadata: name: rmq-cluster-config namespace: public-service labels: addonmanager.kubernetes.io/mode: Reconcile data: enabled_plugins: | [rabbitmq_management,rabbitmq_peer_discovery_k8s]. rabbitmq.conf: | loopback_users.guest = false ## Clustering cluster_formation.peer_discovery_backend = rabbit_peer_discovery_k8s cluster_formation.k8s.host = kubernetes.default.svc.cluster.local cluster_formation.k8s.address_type = hostname ################################################# # public-service is rabbitmq-cluster's namespace# ################################################# cluster_formation.k8s.hostname_suffix = .rmq-cluster.public-service.svc.cluster.local cluster_formation.node_cleanup.interval = 10 cluster_formation.node_cleanup.only_log_warning = true cluster_partition_handling = autoheal ## queue master locator queue_master_locator=min-masters
vi -b rabbitmq-rbac.yaml
apiVersion: v1 kind: ServiceAccount metadata: name: rmq-cluster namespace: public-service --- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: Role metadata: name: rmq-cluster namespace: public-service rules: - apiGroups: - "" resources: - endpoints verbs: - get --- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: RoleBinding metadata: name: rmq-cluster namespace: public-service roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: rmq-cluster subjects: - kind: ServiceAccount name: rmq-cluster namespace: public-service
vi -b rabbitmq-secret.yaml
apiVersion: v1 kind: Secret metadata: name: rmq-cluster-secret namespace: public-service stringData: cookie: ERLANG_COOKIE username: admin password: admin type: Opaque
vi -b rabbitmq-svc.yaml
apiVersion: v1 kind: Service metadata: name: rmq-cluster namespace: public-service labels: app: rmq-cluster spec: selector: app: rmq-cluster clusterIP: 172.21.11.245 ports: - name: http port: 15672 protocol: TCP targetPort: 15672 - name: amqp port: 5672 protocol: TCP targetPort: 5672 type: ClusterIP
vi -b rabbitmq-StatefulSet.yaml
apiVersion: apps/v1 kind: StatefulSet metadata: name: rmq-cluster namespace: public-service labels: app: rmq-cluster spec: replicas: 3 selector: matchLabels: app: rmq-cluster serviceName: rmq-cluster template: metadata: labels: app: rmq-cluster spec: serviceAccountName: rmq-cluster terminationGracePeriodSeconds: 30 containers: - name: rabbitmq image: rabbitmq:3.8-management imagePullPolicy: IfNotPresent resources: limits: memory: "3072Mi" ports: - containerPort: 15672 name: http protocol: TCP - containerPort: 5672 name: amqp protocol: TCP command: - sh args: - -c - cp -v /etc/rabbitmq/rabbitmq.conf ${RABBITMQ_CONFIG_FILE}; exec docker-entrypoint.sh rabbitmq-server env: - name: RABBITMQ_DEFAULT_USER valueFrom: secretKeyRef: key: username name: rmq-cluster-secret - name: RABBITMQ_DEFAULT_PASS valueFrom: secretKeyRef: key: password name: rmq-cluster-secret - name: RABBITMQ_ERLANG_COOKIE valueFrom: secretKeyRef: key: cookie name: rmq-cluster-secret - name: K8S_SERVICE_NAME value: rmq-cluster - name: POD_IP valueFrom: fieldRef: fieldPath: status.podIP - name: POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: POD_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace - name: RABBITMQ_USE_LONGNAME value: "true" - name: RABBITMQ_NODENAME value: rabbit@$(POD_NAME).rmq-cluster.$(POD_NAMESPACE).svc.cluster.local - name: RABBITMQ_CONFIG_FILE value: /var/lib/rabbitmq/rabbitmq.conf livenessProbe: exec: command: - rabbitmqctl - status initialDelaySeconds: 30 timeoutSeconds: 10 readinessProbe: exec: command: - rabbitmqctl - status initialDelaySeconds: 10 timeoutSeconds: 10 volumeMounts: - name: config-volume mountPath: /etc/rabbitmq readOnly: false - name: rabbitmq-storage mountPath: /var/lib/rabbitmq readOnly: false volumes: - name: config-volume configMap: items: - key: rabbitmq.conf path: rabbitmq.conf - key: enabled_plugins path: enabled_plugins name: rmq-cluster-config - name: rabbitmq-storage persistentVolumeClaim: claimName: rabbitmq-cluster-storage # nodeSelector: # rabbit: rabbit # tolerations: # - effect: NoSchedule # key: jason # operator: Equal # value: jason
vi -b rabbitmq-ingress.yaml
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: rabbitmq namespace: public-service spec: rules: - host: rabbitmq.xxx.com http: paths: - path: / backend: serviceName: rmq-cluster servicePort: 15672
kubectl apply -f .
kubectl get all -n public-service
默认账户、密码 guest
参考:
https://blog.csdn.net/miss1181248983/article/details/106440068?utm_medium=distribute.pc_relevant_download.none-task-blog-2~default~BlogCommendFromBaidu~default-1.nonecase&depth_1-utm_source=distribute.pc_relevant_download.none-task-blog-2~default~BlogCommendFromBaidu~default-1.nonecas
https://blog.csdn.net/coco3848/article/details/107708713