- Работа
- Linux
- Kubernetes
- Установка RabbitMQ
Установка RabbitMQ
Базовая установка
Официальная документация тут https://www.rabbitmq.com/kubernetes/operator/operator-overview.html
Кластер развертывается посредством специального оператора. Для его установки применяем команду
kubectl apply -f "https://github.com/rabbitmq/cluster-operator/releases/latest/download/cluster-operator.yml"
Далее проверям все ли запустилось.
kubectl get all -n rabbitmq-system
Результат должен быть примерно таким
NAME READY STATUS RESTARTS AGE
pod/rabbitmq-cluster-operator-56f46f6b76-wh52r 1/1 Running 0 37h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/rabbitmq-cluster-operator 1/1 1 1 37h
NAME DESIRED CURRENT READY AGE
replicaset.apps/rabbitmq-cluster-operator-56f46f6b76 1 1 1 37h
Если еще не установлено нужно установить доступ к локальному диску. Это не обязательно, можно подключить сетевой. Смотрите в примерах. Ссылка будет ниже.
kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/master/deploy/local-path-storage.yaml
И делаем его по умолчанию
kubectl annotate storageclass local-path storageclass.kubernetes.io/is-default-class=true
Если нужен доступ по tls, то добавляем сертификаты, если нет то нужно будет убрать секцию tls
из конфига.
kubectl create secret tls my-sert --key my.key --cert my.pem`
И сам сценарий развертывания кластера
apiVersion: rabbitmq.com/v1beta1
kind: RabbitmqCluster
metadata:
name: rabbitmq-cluster-prod
spec:
replicas: 3
tls:
secretName: my-sert
resources:
requests:
cpu: 1
memory: 1Gi
limits:
cpu: 1
memory: 1Gi
rabbitmq:
additionalPlugins:
- rabbitmq_management
additionalConfig: |
# Разрешаем занимать почти всю память
vm_memory_high_watermark_paging_ratio = 0.99
# Делаем юзера админом
default_user_tags.administrator = true
default_user = username
default_pass = passforuser
И применям. Ждем пока кластер развернется.
kubectl get pods
Статус должен быть Running
.
Проброс портов во вне
Для того, что бы сервис рабита был доступен из интернета нужно пробросить порты. Мы будет использовать ingress-nginx
.
По умолчанию можно пробросить только http
протокол. Но есть выход.
Для начала, лучше всего установить ingress-nginx
из сценария yaml, что бы можно было его слегка подправить.
Документация по установке ingress-nginx
https://kubernetes.github.io/ingress-nginx/deploy/
Качаем yaml.
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.7.0/deploy/static/provider/cloud/deploy.yaml
После первой секции по созданию неймспейса добавляем конфиг
apiVersion: v1
kind: ConfigMap
metadata:
name: tcp-services
namespace: ingress-nginx
data:
55671: "default/rabbitmq-cluster-prod:5671"
55672: "default/rabbitmq-cluster-prod:5672"
Далее в kind: Service
name: ingress-nginx-controller
в секции ports
добавляем порты
- name: rabbit-tls
port: 55671
protocol: TCP
targetPort: 55671
- name: rabbit
port: 55672
protocol: TCP
targetPort: 55672
В kind: Deployment
в секции args
добавляем еще один параметр
- --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
Если нужно расширить nginx на несколько нод, читаем тут https://kiran-snippets.ru/job/linux/kubernetes/100
Официальная документация https://kubernetes.github.io/ingress-nginx/user-guide/exposing-tcp-udp-services/
Применяем изменения. И пробуем подключиться.
Доступ к конфигурации из вне
Есть два способа настроить доступ к веб интерфейсу раббита.
Первый и самый простой вводим команду
kubectl port-forward rabbitmq-cluster-prod-server-0 15672:15672
И подключаемся на локльном компьютере на адрес 127.0.0.1:15672
Второй способ так же пробрасываем порт во вне
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: rabbit-control
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /$1
# Разрешаем доступ только с определнных адресов
nginx.ingress.kubernetes.io/whitelist-source-range: 49.36.0.1/32
spec:
# если не надо, убираем
tls
- hosts:
- my.site.ru
secretName: my-sert
rules:
- host: my.site.ru
http:
paths:
- path: /(.*)
pathType: Prefix
backend:
service:
name: rabbitmq-cluster-prod
port:
number: 15672
Применяем и пробуем.
Дополнительно
Просмотр кластера
kubectl get rabbitmqclusters.rabbitmq.com
Просмотр логов оператора
kubectl -n rabbitmq-system logs -l app.kubernetes.io/name=rabbitmq-cluster-operator
Удаление кластера
kubectl delete rabbitmqclusters.rabbitmq.com
Ссылка на примеры конфигов для раббита https://github.com/rabbitmq/cluster-operator/tree/main/docs/examples/
[ Править ]