В этой статье я не буду объяснять, зачем вот это всё нужно, или обсуждать достоинства и недостатки этого решения. Воспринимайте эту статью как инструкцию (заметку) для быстрого развёртывания базы и брокера сообщений в dev-кластере Kubernetes.  Введение Установка PostgreSQL Установка Redis Установка RabbitMQ Установки PostgresSQL, Redis и RabbitMQ очень похожи друг на друга. Можно выделить три основных этапа: Создание Persistent Volume (PV) и Persistent Volume Claim (PVC). Установка Helm-чарта целевого приложения. Проверка работы. Я не буду объяснять, что такое PV и PVC. Есть отличная лекция на эту тему, после которой можете смело возвращаться к моей инструкции. Перед началом работ нужно минимально настроить кластер Kubernetes. Вот небольшие требования: Версия Kubernetes 1.20+. Одна master-нода и одна worker-нода. Настроенный Ingress-controller. Если кластер развернут на bare-metal, то необходимо заменить внешний балансировщик. Например, поставить MetalLB или PorterLB. На виртуальной машине установлен Helm. Как создать свой ламповый dev-кластер на голом железе подробно рассказано в предыдущей статье. Создадим ресурс StorageClass, для этого в файл storage.yaml вставьте следующую конфигурацию: Применим манифест: Создадим ресурс Persistent Volume. Для этого в файл pv.yaml вставьте следующий манифест: В matchExpressions указываем название ноды, на которой будет монтироваться диск. Посмотреть имя доступных узлов можно с помощью команды: Для удобства будем монтировать диск сразу на мастер-ноде, хотя это можно сделать на любой из доступных в списке. Монтировать будем директорию /devkube/postgresql. Заходим на удалённую машину и создаём директорию такой командой: Создадим ресурс Persistent Volume: Проверим состояние: Применим манифест с Persistent Volume Claim: Посмотрим состояние ресурса: Ресурс PVC в ожидании привязки. Настало время развернуть Postgres в кластере. Подтягиваем к себе репозиторий Bitnami: Устанавливаем чарт Helm с Postgres: Посмотрим на состояние PVC: Ресурс в статусе bound, теперь pod с Postgres будет писать данные в директорию /devkube/postgresql. Посмотрим на состояние pod, statefulset: База успешно развёрнута, теперь попробуем подключиться к ней: создать пользователя, таблицу и настроить доступы. После установки чарта в консоли будут показаны некоторые способы подключения к БД. Есть два способа: Для этого требуется установить на машину утилиту psql. Проверим, что она установлена: Экспортируем пароль от админ-пользователя в переменную окружения: Выполним проброс порта: Консоль после выполнения команды будет заблокирована. В другом окне подключитесь к этой же машине и выполните подключение к БД: Или так, но тогда придётся ввести пароль вручную:  Экспортируем пароль от админ-пользователя в переменную окружения: Создадим под с утилитой psql и выполним в ней команду подключения к БД:  Создадим роль (пользователя) и пароль для неё: Посмотреть список ролей: Создадим базу, владельцем которой будет пользователь qa_user: Теперь отключимся: И подключимся к базе с данными нового пользователя (вторым способом): Создадим небольшую табличку: Добавим запись: Теперь сделаем select, чтобы убедиться в работоспособности: Посмотреть список таблиц в базе: Готово, база успешно развёрнута! В приложении нужно указывать такой адрес БД: Redis можно установить в нескольких конфигурациях. Мы развернём вариант с двумя репликами на чтение и одной репликой на запись в базу. Прежде всего применим манифест со StorageClass: У меня уже был установлен этот ресурс, поэтому манифест не применился. Дальше настроим Persistent Volumes. Зарезервируем 2 Гб для каждой slave-реплики и 4 Гб для мастер-реплики. Создадим файлы pv-slave1.yaml, pv-slave2.yaml и pv-master.yaml и вставим в них эти конфигурации: Все реплики будут складывать свои данные на ноде 457344.cloud4box.ru, хотя, конечно, можно монтировать диски на разных виртуальных машинах. Создадим три директории: Применим конфигурации: Проверим созданные ресурсы: Созданные PV ещё свободны и ждут заявки на использование пространства. А Persistent Volumes Postgres уже связан со своим Persistent Volumes Сlaim (так осталось после поднятия Postgres-базы в Kubernetes). Создадим PVC для мастер-реплики. Их нужно обязательно создавать в том namespace, в котором вы развернёте базу. Redis будет развёрнут в пространстве dev-redis. Создадим пространство: Для slave-реплик создавать PVC не будем, они будут автоматически созданы при установке чарта Helm. Пришло время установить Redis. Подтягиваем к себе репозиторий Bitnami, если ещё этого не сделали (у меня уже добавлен): Устанавливаем чарт Helm с Redis: В этой команде указываю: password=redispass — пароль для авторизации; existingClaim=pvc-for-master-redis — название созданного выше PVC для мастер-реплики; replicaCount, storageClass, size — количество slave-реплик, название ресурса StorageClass и размер PV. Это всё нужно для автоматического создания PVC. После выполнения команды в консоль будет выведено несколько способов подключения к Redis. Но сначала проверим состояние Persistent Volumes: Все ресурсы стали связаны с конкретным PVC. И посмотрим на созданные ресурсы: Всё успешно развернуто, пора подключиться и попинговать базу. Экспортируем пароль авторизации в переменную окружения: Создадим под с redis-cli на борту: Проходим внутрь созданного пода: И теперь можно подключиться к master- или slave-реплике на выбор:  Подключимся к master-реплике: Пинганём базу: Записать данные можно в любую из 15 автоматически созданных баз (по умолчанию база под номером ноль). Выберем, например, вторую: Запишем некоторые данные: И запросим их же: Готово! Redis успешно развёрнут и готов к использованию. В приложении нужно указывать такой адрес: Запишем манифест с ресурсом StorageClass в файл storage.yaml: И применим его: У меня уже был установлен этот ресурс, поэтому манифест не применился. Создадим Persistent Volume: В matchExpressions указываем название ноды, на которой будем монтировать диск. Посмотреть имя доступных узлов можно с помощью команды: Для удобства будем монтировать диск сразу на master-ноде, хотя это можно сделать на любой из доступных в списке. Создадим директорию, в которую RabbitMQ будет складывать свои данные: Создадим ресурс Persistent Volume: И проверим состояние: Осталось только создать Persistent Volume Claim. Его нужно обязательно создавать в том namespace, в котором будете разворачивать будущую очередь. RabbitMQ развернётся в пространстве dev-rmq. Создадим его: Запишем манифест в файл pvc.yaml: Применим: И, наконец, развернём RabbitMQ. Добавляем к себе репозиторий Bitnami, если ещё этого не сделали (у меня уже добавлен): Установим чарт Helm RabbitMQ: В этой команде я указываю следующие настройки:  existingClaim=rmq-pvc — имя существующего ресурса PVC, который мы выше создали; ingress.enabled=true — активируем Ingress, это нужно для разворачивания удобной борды; ingress.hostname=dashboard.dev.rmq.somedomain.com — адрес борды; auth.username=rmq_admin и auth.password=devrmquser — тут всё и так понятно; ingress.ingressClassName=nginx — обязательная настройка для Ingress-ресурса. Чарт Helm установлен. Проверим, что ресурсы успешно развёрнуты: Теперь перейдите в браузере по доменному имени, которое указали в ingress.hostname: Заходим с учётными данными login=rmq_admin и password=devrmquser, и переходим во вкладку Admin: Создадим нового пользователя qa_user с паролем qa_pass: Создадим virtual host: И привяжем пользователя к virtual host: Готово! RabbitMQ развёрнут и готов к использованию: В приложении укажите такой адрес: На этом у меня всё, мы успешно развернули PostgreSQL, Redis и RabbitMQ в небольшом dev-кластере.  Python/GO Developer