RabbitMQ in 5 Minuten bereitstellen
Diese Anleitung begleitet Sie Schritt für Schritt bei der Bereitstellung Ihres ersten RabbitMQ-Clusters auf Hikube, vom YAML-Manifest bis zu den ersten Messaging-Tests.
Ziele
Am Ende dieser Anleitung haben Sie:
- Einen RabbitMQ-Cluster, der auf Hikube bereitgestellt und betriebsbereit ist
- 3 RabbitMQ-Knoten repliziert für Hochverfügbarkeit
- Einen Vhost und einen Admin-Benutzer konfiguriert
- Einen persistenten Speicher für die RabbitMQ-Daten
- Zugang zur Management-Oberfläche (Management UI)
Voraussetzungen
Stellen Sie vor Beginn sicher, dass Sie Folgendes haben:
- kubectl konfiguriert mit Ihrer Hikube-Kubeconfig
- Administratorrechte auf Ihrem Tenant
- Einen Namespace, der Ihren RabbitMQ-Cluster beherbergen soll
- Python mit dem Modul
pikainstalliert (optional, für Tests)
Schritt 1: RabbitMQ-Manifest erstellen
Erstellen Sie eine Datei rabbitmq.yaml mit folgender Konfiguration:
apiVersion: apps.cozystack.io/v1alpha1
kind: RabbitMQ
metadata:
name: example
spec:
replicas: 3
resourcesPreset: small
size: 10Gi
storageClass: replicated
users:
admin:
password: "strongpassword"
vhosts:
default:
roles:
admin: ["admin"]
Mit 3 Replikaten verwendet RabbitMQ die Quorum Queues, um die Nachrichtenhaltbarkeit zu gewährleisten. Weitere Informationen finden Sie in der API-Referenz.
Schritt 2: RabbitMQ-Cluster bereitstellen
Wenden Sie das Manifest an und überprüfen Sie, ob die Bereitstellung startet:
# Manifest anwenden
kubectl apply -f rabbitmq.yaml
Überprüfen Sie den Status des Clusters (kann 2-3 Minuten dauern):
kubectl get rabbitmq
Erwartetes Ergebnis:
NAME READY AGE VERSION
example True 2m 0.10.0
Schritt 3: Überprüfung der Pods
Überprüfen Sie, dass alle Pods im Status Running sind:
kubectl get pods | grep rabbitmq
Erwartetes Ergebnis:
rabbitmq-example-rabbitmq-server-0 1/1 Running 0 2m
rabbitmq-example-rabbitmq-server-1 1/1 Running 0 2m
rabbitmq-example-rabbitmq-server-2 1/1 Running 0 2m
Mit replicas: 3 erhalten Sie 3 RabbitMQ-Knoten, die einen Hochverfügbarkeits-Cluster bilden.
| Präfix | Rolle | Anzahl |
|---|---|---|
rabbitmq-example-rabbitmq-server-* | RabbitMQ Server (Nachrichten-Broker + Management UI) | 3 |
Schritt 4: Zugangsdaten abrufen
Die Passwörter sind in Kubernetes Secrets gespeichert:
# Zugangsdaten des im Manifest definierten Benutzers
kubectl get secret rabbitmq-example-credentials -o json | jq -r '.data | to_entries[] | "\(.key): \(.value|@base64d)"'
Erwartetes Ergebnis:
admin: strongpassword
Ein Standardbenutzer wird auch automatisch vom Operator erstellt:
# Zugangsdaten des Standardbenutzers
kubectl get secret rabbitmq-example-rabbitmq-default-user -o json | jq -r '.data | to_entries[] | "\(.key): \(.value|@base64d)"'
Schritt 5: Verbindung und Tests
Zugang zur Management-Oberfläche (Management UI)
kubectl port-forward svc/rabbitmq-example-rabbitmq 15672:15672 &
Greifen Sie über Ihren Browser auf die Oberfläche zu: http://localhost:15672
Melden Sie sich mit den in Schritt 4 abgerufenen Standardbenutzer-Zugangsdaten an.
Messaging-Test mit Python
kubectl port-forward svc/rabbitmq-example-rabbitmq 5672:5672 &
import pika
credentials = pika.PlainCredentials('admin', 'strongpassword')
parameters = pika.ConnectionParameters(
host='localhost',
port=5672,
virtual_host='default',
credentials=credentials
)
connection = pika.BlockingConnection(parameters)
channel = connection.channel()
# Erstellen einer Queue
channel.queue_declare(queue='test')
# Senden einer Nachricht
channel.basic_publish(exchange='', routing_key='test', body='Hello Hikube!')
print("Nachricht erfolgreich gesendet")
connection.close()
python test_rabbitmq.py
Erwartetes Ergebnis:
Nachricht erfolgreich gesendet
Falls Sie pika nicht installiert haben, installieren Sie es mit pip install pika.
Schritt 6: Schnelle Fehlerbehebung
Pods im CrashLoopBackOff
# Logs des fehlerhaften Pods prüfen
kubectl logs rabbitmq-example-rabbitmq-server-0
# Events des Pods prüfen
kubectl describe pod rabbitmq-example-rabbitmq-server-0
Häufige Ursachen: Unzureichender Arbeitsspeicher (resources.memory zu niedrig), Speichervolume voll, DNS-Auflösungsfehler zwischen den Knoten.
RabbitMQ nicht erreichbar
# Prüfen, ob die Services existieren
kubectl get svc | grep rabbitmq
# RabbitMQ-Service prüfen
kubectl describe svc rabbitmq-example-rabbitmq
Häufige Ursachen: Port-Forward nicht aktiv, falscher Port (5672 für AMQP, 15672 für Management UI), falsche Zugangsdaten.
Cluster nicht gebildet
# Status des RabbitMQ-Clusters prüfen
kubectl exec rabbitmq-example-rabbitmq-server-0 -- rabbitmqctl cluster_status
# Logs der Clusterbildung prüfen
kubectl logs rabbitmq-example-rabbitmq-server-0 | grep -i cluster
Häufige Ursachen: DNS-Auflösungsproblem zwischen den Knoten, nicht synchronisiertes Erlang-Cookie, unzureichende Ressourcen für den Clusterbildungsprozess.
Allgemeine Diagnosebefehle
# Aktuelle Events im Namespace
kubectl get events --sort-by=.metadata.creationTimestamp
# Detaillierter Status des RabbitMQ-Clusters
kubectl describe rabbitmq example
Schritt 7: Bereinigung
Um die Testressourcen zu löschen:
kubectl delete -f rabbitmq.yaml
Diese Aktion löscht den RabbitMQ-Cluster und alle zugehörigen Daten. Dieser Vorgang ist unwiderruflich.
Zusammenfassung
Sie haben bereitgestellt:
- Einen RabbitMQ-Cluster mit 3 Knoten in Hochverfügbarkeit
- Einen Admin-Benutzer und einen Standard-Vhost konfiguriert
- Eine Management-Oberfläche (Management UI) lokal zugänglich
- Persistenten Speicher für die Datenhaltbarkeit
Nächste Schritte
- API-Referenz: Vollständige Konfiguration aller RabbitMQ-Optionen
- Übersicht: Detaillierte Architektur und Anwendungsfälle von RabbitMQ auf Hikube