E se eu dissesse para você que você pode, com apenas 1 comando, criar um cluster RabbitMQ dentro do seu Kubernetes, de forma segura e prática?
Hoje é a vez de criarmos o seu cluster RabbitMQ com a ajuda do RabbitMQ Cluster Operator for Kubernetes.
Se você chegou até aqui se perguntando: Afinal, o que é um Operator? leia esse post aqui.
Iniciando os trabalhos
Montar um cluster RabbitMQ não é das tarefas mais simples do mundo, então ter uma mãozinha é sem sombra de dúvidas algo interessante.
No post passado eu detalhei o que são operators e agora vou dar vida a essa ideia, mostrando de forma prática como você pode ter seu cluster RabbitMQ usando o RabbitMQ Cluster Operator for Kubernetes.
RabbitMQ Cluster Operator for Kubernetes
Documentação: https://www.rabbitmq.com/kubernetes/operator/operator-overview.html
Quem mantém? A própria equipe do RabbitMQ.
Com ele usamos configurações simples, enquanto ele cuida do cluster para nós.
Hora de subir nosso cluster
Como o post trata do operator, apresentar qualquer outro método de setup seria contraditório. Portanto vamos criar nosso cluster RabbitMQ no Kubernetes.
Preparando o Kubernetes
Primeiro precisamos de um Kubernetes, vou partir do pressuposto que você tenha ao menos o Docker Desktop e saiba habilitar o kubernetes nele. De qualquer forma deixo aqui está o link para habilitar kubernetes no docker desktop, caso precise.
Nosso primeiro comando define o docker-desktop como contexto do kubectl. Isso fará com que os comandos que executaremos via kubectl tenham como alvo o kubernetes do docker desktop e não qualquer outra instância que você possa ter configurado no teu ambiente.
Execute:
kubectl config use-context docker-desktop
Instalação do operator
Agora é hora de dar nosso primeiro passo: Instalar o operator.
O RabbitMQ Cluster Operator for Kubernetes pode ser instalado de várias formas:
- Via kubectl
- Via kubectl brew
- Via Helm
Minha escolha para hoje é o kubectl.
Então executamos executar a instalação do Operator assim:
kubectl apply -f "https://github.com/rabbitmq/cluster-operator/releases/latest/download/cluster-operator.yml"
Embora no projeto do e-shop eu use o K3D, aqui vou usar o Docker Desktop e o Kubernetes que você pode habilitar nele, isso facilita as coisas.
Embora esse comando seja suficiente para instalar o Operator, agora precisamos avaliar se o setup ocorreu com sucesso, se tudo está rodando. Poderíamos fazer isso via linha de comando, mas acredito que por hora seja mais importante fazer visualmente, já que facilita o aprendizado.
Então para conseguirmos visualizar esse Operator com mais detalhes, vamos instalar um Dashboard para o nosso kubernetes. Eu vou instalar o board default.
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.0/aio/deploy/recommended.yaml
Agora é hora de executar os seguintes comandos:
kubectl apply -f - <<EOF apiVersion: v1 kind: ServiceAccount metadata: name: admin-user namespace: kubernetes-dashboard EOF
kubectl apply -f - <<EOF apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: admin-user roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: admin-user namespace: kubernetes-dashboard EOF
kubectl -n kubernetes-dashboard create token admin-user kubectl proxy
O token será exibido. Esse dado é importante, usaremos para acessar o dashboard.
De posse desse token, acesse o dashboard no endereço da sua máquina:
Já logado, troque o namespace para ‘rabbitmq-system’ e veja o resultado da nossa implantação do operator:
O que esse operator é capaz de fazer?
“automates provisioning, management, and operations of RabbitMQ clusters running on Kubernetes.”
Automatiza o provisionamento, o gerenciamento e as operações de clusters RabbitMQ no Kubernetes.
Cada operator implementa algum recurso. No caso deste, ele é capaz de provisionar um cluster e gerenciá-lo para nós.
Isso permite que as configurações para criação de um novo cluster sejam tão simples como as configurações abaixo.
Primeiro criamos um novo namespace para o nosso cluster, execute:
kubectl create namespace meu-primeiro-cluster-rabbitmq
Agora vamos de fato criar o nosso cluster. Note que o Operator instalou novos objetos no Kubernetes, nos permitindo usar novos formados de comandos.
Sem o operator, executar esse comando produz um erro.
Com o operator, parte do processo é a instalação de uma Custom Resource Definition que na prática é uma definição de schema de comando. Como o abaixo.
Aliás… execute, por favor! Assim teremos nosso tão sonhado cluster RabbitMQ com 3 nós.
kubectl apply -f - <<EOF kind: RabbitmqCluster apiVersion: rabbitmq.com/v1beta1 metadata: name: rabbitmq namespace: meu-primeiro-cluster-rabbitmq spec: replicas: 3 image: rabbitmq:3.9.18-management service: type: ClusterIP resources: requests: cpu: 2 memory: 1Gi limits: cpu: 2 memory: 1Gi EOF
Eu defini limites muito baixos de memória e CPU imaginando que possivelmente seu desktop não tenha tanto recurso. Esses valores tão baixos não são comuns.
Uma vez executado, é hora de visitar nosso dashboard.
No dashboard, você pode selecionar o namespace que nós acabamos de criar.
O “meu-primeiro-cluster-rabbitmq”.
Selecione esse namespace e veja seu cluster nascendo.
Assim que todos os pods estiverem verdes, é hora de acessarmos nosso cluster.
Acessando o cluster
Primeiro nos vamos perguntar ao kubernetes quais são as credenciais para entrar no console do RabbitMQ e vamos fazer um port forward para expor o nó Leader para que possamos acessá-lo.
Obtendo credenciais de acesso ao RabbitMQ, execute:
echo "$(tput setaf 2)Usuario:$(tput sgr0) $(kubectl get -n meu-primeiro-cluster-rabbitmq secret rabbitmq-default-user -o jsonpath="{.data.username}" | base64 -d)" && echo "$(tput setaf 2)Senha:$(tput sgr0) $( kubectl get -n meu-primeiro-cluster-rabbitmq secret rabbitmq-default-user -o jsonpath="{.data.password}" | base64 -d)"
O resultado da execução trará o usuário e senha de acesso ao cluster RabbitMQ.
Agora estamos chegando ao fim, criando nosso proxy para conseguir acessar o console do RabbitMQ a partir do nosso desktop.
kubectl port-forward rabbitmq-server-0 15672:15672 -n meu-primeiro-cluster-rabbitmq
Hora de acessar nosso RabbitMQ em http://localhost:15672 usando as credenciais que obtivemos no penúltimo step.
A configuração que fizemos aponta diretamente para o nó 0, nosso Leader.
Se você quer trabalhar no Windows, com Visual Studio e validar um consumidor com um cluster, vale a pena usar os proxies em portas diferentes. Para que 3 portas diferentes no teu host apontem, cada uma, para a porta 5672 de cada um dos pods do nosso cluster.
Óbvio que estar em cluster, mas na mesma máquina tem alguma, mas não muita, vantagem. Mas o exercício é produzir um cluster funcional para que você possa testar Quorum queues, por exemplo.
Se você é aluno do meu curso Mensageria .NET | RabbitMQ para Aplicações .NET esse material é fundamental para criar seus ambientes da forma mais prática e rápida possível.
RabbitMQ continua sendo o player de mensageria mais presente no mundo. Segundo a datadog, em uma massa de 1.5 bilhão de containers, RabbitMQ continua presente transitando entre 4° e 6° lugar como container mais usado. à frente do Kafka, MySQL, MongoDB, GITLab, Vault, Jenkins, ETCD e HAPROXY.
Saiba mai sem https://go.gago.io/curso-rabbitmq.
Se você curtiu esse post, tem muito mais em gaGO.io/rabbitmq, se você quer aprender a trabalhar profissionalmente considera entrar para nosso curso de Mensageria.
Se você ficou com dúvidas sobre esse Operator, comente aqui ou onde o post foi publicado.
0 comentários