- Работа
- 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/
[ Править ]
