Kubernetes. Deploy RabbitMQ cluster with Gitlab CI

Thank you for reading this post, don't forget to subscribe!

RabbitMQ — бро­кер сооб­ще­ний, рабо­та­ю­щий по про­то­ко­лу AMQP, поз­во­ля­ет созда­вать оче­ре­ди из посту­па­ю­щих данных.

Основ­ные пере­мен­ные: назва­ние сер­ви­са $YOUR_APP и $ KUBE_NAMESPASE – имя про­стран­ства в кла­сте­ре kubernetes. 192.168.0.63 – это nexus докер репо­зи­то­рий, для вхо­да в него исполь­зу­ют­ся пере­мен­ные, $NEXUS_USER и $NEXUS_PASS кото­рые добав­ле­ны в variables в настрой­ках про­ек­та gitlab. Коли­че­ство реплик – 3, мини­маль­но реко­мен­ду­е­мое для рабо­ты кла­сте­ра. Rabbitmq явля­ет­ся stateful при­ло­же­ни­ем, в каче­стве хра­ни­ли­ща мон­ти­ру­ет­ся файл с хосто­вой систе­мы (hostPath), в усло­ви­ях раз­вер­ты­ва­ния опре­де­лен­но огра­ни­че­ние, не боль­ше одной репли­ки на один хост. Дан­ная настрой­ка может быть изме­не­на. В скрип­те так­же кон­крет­но ука­зан кла­стер k8s, если у вас k8s инте­гри­ро­ван в gitlab, то заком­мен­ти­руй­те эти строки.

Созда­ем новый про­ект, и в нем созда­ем сле­ду­ю­щую структуру:

Содер­жи­мое файлов:

Скрипт раз­вер­ты­ва­ния в kubernetes
.gitlab-ci.yml

[codesyntax lang="php"]

[/codesyntax]

Созда­ём ServiceAccount для наше­го кла­сте­ра и выда­ём ему пра­ва на чте­ние Endpoints K8s.
mq-serviceaccount.yaml

[codesyntax lang="php"]

[/codesyntax]

Созда­ем пер­си­стент­ное хра­ни­ли­ще - hostPath
mq-pv.yaml

[codesyntax lang="php"]

[/codesyntax]

При­вя­зы­ва­ем volume claim к хранилищу
mq-pvc.yaml

[codesyntax lang="php"]

[/codesyntax]

Созда­ем кон­фи­гу­ра­ци­он­ный файл rabbitmq. Ука­жи­те порт для kubernetes (443 или 6443) и заме­ни­те "your_namespace"
mq-configmap.yaml

[codesyntax lang="php"]

[/codesyntax]

Созда­ем вход­ную сете­вую точку
mq-service-internal.yaml

[codesyntax lang="php"]

[/codesyntax]

Раз­вер­ты­ва­ем stateful приложение
RABBITMQ_ERLANG_COOKIE – это «пароль» для свя­зи меж­ду нода­ми кла­сте­ра (уста­но­ви­те свой)
mq-statefulset.yaml

[codesyntax lang="php"]

[/codesyntax]