RabbitMQ cluster on Kubernetes
bu yazımda kubernetes üzerinde rabbitMQ kurulmasını anlattım.

kubernetes üzerinde bulunan applicationlarınızın kullanması için bir rabbitmq ihtiyacınız oldu ve bir sunucunu yok o zaman 5dk da kubernetes üzerine kuralım :)
RabbitMQ nedir?
rabbitMQ, uygulamalar arasında mesaj alışverişini güvenli ve asenkron bir şekilde gerçekleştiren opensource bir tool. bir uygulamadan gelen mesajları alıp sıraya koyar, sonra da doğru alıcıya ulaştırır.
RabbitMQ Operator
kubernetes’te uygulamaları kurarken genellikle birkaç farklı yöntem kullanıyoruz. bazen doğrudan manifest dosyaları (yaml dosyaları) ile kuruyoruz, bazen de helm chart’ları tercih ediyoruz. Bu yöntemlerle ya bir Deployment
ya da StatefulSet
gibi Kubernetes objeleri oluşturuyoruz. Ama şimdi yapacağım şey, bir operator yardımıyla uygulama kurmak. operator’ler, bizim verdiğimiz yapılandırmaya göre Kubernetes üzerinde otomatik olarak kurulumlar yapıyor.
ilk olarak, kendi CRD (Custom Resource Definition) dediğimiz özel kaynak tanımını oluşturuyorlar. yani Kubernetes’in tanımadığı, kendimize özgü bir obje üretiyoruz. Örneğin, siz de böyle bir şey yapabilirsiniz — Kind
yerine expelliarmus yazıp tamamen kendinize ait bir obje tanımlayabilirsiniz.
aşağıdaki gibi tek bir manifest dosyasıyla kurulum yapabiliyorsunuz.
kubectl apply -f "https://github.com/rabbitmq/cluster-operator/releases/latest/download/cluster-operator.yml"
ama ben krew plugin olarak kullanacağım. krew pluginleri kubectl ile entegre çalışan uygulamalar diyebiliriz. öncelikle krew kurmanız gerekiyor.
işletim sizteminize uygun olanı sitesinden bulabilirsiniz. daha sonra yapmanız gerek kubectl krew install <plugin ismi> bu kadar.

ardından krew plugin yardımıyla CRD kuruyoruz. krew kullanmak da kubectl <plugin ismi> bu şekilde kullanılıyoru.

yüklenen CRD nin durumuna grepleyerek bakabiliriz.

RabbitMQ Cluster
şimdi geldi son adıma rabbitmq cluster kurmak. bunun için kind i rabbitmqcluster olan basit bir yaml dosyası yazıp normal bir deployment manifest apply eder gibi ediyoruz.
apiVersion: rabbitmq.com/v1beta1
kind: RabbitmqCluster
metadata:
labels:
app: rabbitmq
name: rabbitmqcluster
spec:
replicas: 1
service:
type: NodePort
persistence:
storageClassName: standard
storage: 10Gi
burda önemli olan kısımlar servicetype, storageclass ve replicas sayısı. diğer işinize yarayacak customize edilcek kısımları sitesinden bulabilirsiniz.

ve yaklaşık 2 dk olmadan rabbitmq clusterımız ayağa kalkıyor.

user ve pass i secret olarak ekliyor. aşağıdaki komutla alabilirsiniz.
kubectl get secret rabbitmq-default-user -ojson | jq .data.username | xargs | base64 -d
kubectl get secret rabbitmq-default-user -ojson | jq .data.password | xargs | base64 -d
5672 rabbitmq portu, 15672 portu da rabbitmq UI portu olarak çalışmakta. nodeport olarak verdiğimden ben kubernetes node ip sinden 32514 den erişeceğim.

ve tadaaa work like a charm, rabbitmq kullanıma hazır artık applicationlarınızda sorunsuz bir şekilde kullanabilirsiniz.
bir sonraki yazımda görüşmek üzere iyi çalışmalar
h.a.s.