fbpx
RabbitMQ Operators | RabbitMQ Cluster Operator for Kubernetes – Tutorial PT-BR
Publicado em: terça-feira, 14 de jun de 2022

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:

http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

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

Enviar um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

[docker de a a z]

Lives

Fique de olho nas lives

Fique de olho nas lives no meu canal do Youtube, no Canal .NET e nos Grupos do Facebook e Instagram.

Aceleradores

Existem diversas formas de viabilizar o suporte ao teu projeto. Seja com os treinamentos, consultoria, mentorias em grupo.