Заводим кворум без фундаментальщины и теории ?♂️ (думаю, что по этому поводу статей хватает). Разбираем helm bitnami/rabbitmq-cluster-operator (чуть-чуть).
Поскольку Classic Queue Mirroring приказывает долго не жить, до версии 4.0 и Depricated со своим «Error while waiting for Mnesia tables», при этом нам настоятельно сватают Quorum Queues, значит, пора женить ????!
При создании не напоритесь на «безобидное» ограничение символов в названии со странным сообщением: «INSTALLATION FAILED: «rabbitmq-cluster-operator-rabbitmq-messaging-topology-operator» already exists
Но простого:
helm upgrade --install rmqco bitnami/rabbitmq-cluster-operator
нам будет мало. Развернётся только:
-
Cluster Operator — автоматизирует подготовку, управление и эксплуатацию кластеров RabbitMQ
-
Messaging Topology Operator — управляет топологиями обмена сообщениями RabbitMQ в кластере RabbitMQ
Необходимо добавить сам сервер RabbitMQ (с логами в json формате конечно же) через helm values из файла rabbitmqCluster.yaml:
extraDeploy: - apiVersion: rabbitmq.com/v1beta1 kind: RabbitmqCluster metadata: name: rabbitmq spec: replicas: 1 persistence: storage: 8Gi rabbitmq: additionalConfig: | log.console.formatter = json
helm upgrade --install rmqco bitnami/rabbitmq-cluster-operator -f rabbitmqCluster.yaml
Если необходимо задать пользователя по умолчанию самим, несмотря на то, что при создании автоматически генерируется пользователь с административными правами, то требуется создать секрет с нашим именем <RabbitmqCluster>-default-user, но обязательно перед созданием RabbitMQ кластера:
apiVersion: v1 kind: Secret metadata: name: rabbitmq-default-user stringData: default_user.conf: | default_user = <USERNAME-HERE> default_pass = <PASSWORD-HERE> password: <PASSWORD-HERE> username: <USERNAME-HERE>
Можно создать дополнительных пользователей с назначением прав и с использованием секрета:
--- apiVersion: v1 kind: Secret metadata: name: rabbitmquser-cred type: Opaque stringData: username: rabbitmquser password: verysecurepw --- apiVersion: rabbitmq.com/v1beta1 kind: User metadata: name: rabbitmquser spec: rabbitmqClusterReference: name: rabbitmq importCredentialsSecret: name: rabbitmquser-cred --- apiVersion: rabbitmq.com/v1beta1 kind: Permission metadata: name: rabbitmquser spec: vhost: "/" user: "rabbitmquser" permissions: write: ".*" configure: ".*" read: ".*" rabbitmqClusterReference: name: rabbitmq
Остался мониторинг самого RabbitMQ и оператора. Пример для ServiceMonitor:
apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: rabbitmq spec: endpoints: - port: prometheus scheme: http interval: 15s scrapeTimeout: 14s - port: prometheus scheme: http path: /metrics/detailed params: family: - queue_coarse_metrics - queue_metrics interval: 15s scrapeTimeout: 14s selector: matchLabels: app.kubernetes.io/component: rabbitmq
Ну и конечно же это всё можно использовать в extraDeploy:
rabbitmqCluster.yaml
extraDeploy: - apiVersion: rabbitmq.com/v1beta1 kind: RabbitmqCluster metadata: name: rabbitmq spec: replicas: 1 persistence: storage: 8Gi rabbitmq: additionalConfig: | prometheus.return_per_object_metrics = true log.console.formatter = json - apiVersion: rabbitmq.com/v1beta1 kind: User metadata: name: rabbitmquser spec: rabbitmqClusterReference: name: rabbitmq importCredentialsSecret: name: rabbitmquser-cred - apiVersion: rabbitmq.com/v1beta1 kind: Permission metadata: name: rabbitmquser spec: vhost: "/" user: "rabbitmquser" permissions: write: ".*" configure: ".*" read: ".*" rabbitmqClusterReference: name: rabbitmq - apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: rabbitmq spec: endpoints: - port: prometheus scheme: http interval: 15s scrapeTimeout: 14s - port: prometheus scheme: http path: /metrics/detailed params: family: - queue_coarse_metrics - queue_metrics interval: 15s scrapeTimeout: 14s selector: matchLabels: app.kubernetes.io/component: rabbitmq
также добавим запуск оператора с отслеживанием одного namespace nsqrmq с мониторингом и шлюпками и тремя репликами (не забудьте создать секреты):
helm -n nsrmq upgrade --install rmqco bitnami/rabbitmq-cluster-operator -f rabbitmqCluster.yaml \ --set clusterOperator.watchAllNamespaces=false \ --set clusterOperator.watchNamespaces={nsrmq} \ --set msgTopologyOperator.watchAllNamespaces=false \ --set msgTopologyOperator.watchNamespaces={nsrmq} \ --set extraDeploy[0].spec.replicas=3 \ --set clusterOperator.metrics.service.enabled=true \ --set clusterOperator.metrics.serviceMonitor.enabled=true \ --timeout 2m0s
З.ы. Уже запущенные реплики просто так не уменьшить.
Ещё немного примеров для cluster operator и messaging topology operator.
ссылка на оригинал статьи https://habr.com/ru/articles/830442/
Добавить комментарий