You are viewing documentation for Cozystack v1.2. For the latest version, see the v1.4 documentation.
5. Развёртывание управляемых приложений, ВМ и Kubernetes-кластера tenant'а
Цели
Это руководство поможет вам подготовить окружение для запуска типичного веб-приложения с распространёнными сервисными зависимостями — PostgreSQL и Redis — в Cozystack, PaaS-платформе на базе Kubernetes.
Вы научитесь:
- Развёртывать управляемые приложения в своём tenant’е: базу данных PostgreSQL и кэш Redis.
- Создавать управляемый Kubernetes-кластер, настраивать DNS и получать доступ к кластеру.
- Развёртывать контейнеризованное приложение в новом кластере.
Для прохождения этого руководства вам не нужны глубокие знания Kubernetes — большая часть шагов выполняется через веб-интерфейс Cozystack.
Это быстрый способ выполнить первое успешное развёртывание в Cozystack. После завершения у вас будет рабочее окружение для собственных приложений и надёжная база, на которую можно опираться и показывать команде.
Предварительные требования
Перед началом:
- Кластер Cozystack уже должен быть установлен и работать. На уровне инфраструктуры ничего устанавливать или настраивать не потребуется — это руководство предполагает, что эта часть уже сделана вами или кем-то из вашей команды.
- Tenant и учётные данные: у вас должен быть доступ к своему tenant’у в Cozystack.
Это может быть либо
kubeconfig, либо вход в дашборд через OIDC. Если доступа нет, обратитесь к своей Ops-команде или воспользуйтесь руководством по созданию tenant’а. - DNS для dev/test: чтобы открыть развернутое приложение по HTTPS, нужно заранее настроить DNS-запись. Предпочтительнее использовать wildcard-запись, так как это удобнее.
🛠️ CLI необязателен. Использовать
kubectlилиhelmнеобязательно. Все основные шаги, включая создание Kubernetes-кластера и управляемых сервисов, можно полностью выполнить через дашборд Cozystack. CLI понадобится только на этапе развёртывания приложения в Kubernetes-кластере.
1. Вход в дашборд Cozystack
Откройте дашборд Cozystack в браузере.
Обычно ссылка выглядит так: https://dashboard.<cozystack_domain>.
В зависимости от того, как в вашем кластере Cozystack настроена аутентификация, вы увидите один из следующих вариантов:
- Экран входа через OIDC с кнопкой, которая перенаправляет в Keycloak.
- Экран входа по токену, где нужно вручную вставить токен из файла kubeconfig.
Выберите подходящий способ входа:
Нажмите кнопку OIDC Login.
Вы будете перенаправлены на страницу входа Keycloak.
Введите свои учётные данные и нажмите Login.
Если всё настроено корректно, вы войдёте в систему и вернётесь обратно в дашборд.
В этой форме нет поля username — только поле token.
Нужный токен можно взять из kubeconfig.
- Откройте kubeconfig и скопируйте значение токена (это длинная строка). Убедитесь, что копируете его без лишних пробелов и переносов строки.
- Вставьте его в форму и нажмите
Submit.
После входа дашборд автоматически откроется в контексте вашего tenant’а.
Вы можете увидеть уже работающие системные приложения, например ingress или monitoring — ими управляет администратор кластера.
Как пользователь tenant’а вы не можете устанавливать или изменять их, но ваши собственные приложения будут работать рядом с ними в изолированном tenant-окружении.
2. Создание управляемого PostgreSQL
Cozystack позволяет разворачивать управляемые базы данных прямо на уровне оборудования для максимальной производительности. Каждая база создаётся внутри namespace tenant’а и автоматически доступна из вашего вложенного Kubernetes-кластера.
Если вы знакомы с сервисами вроде AWS RDS или GCP Cloud SQL, опыт будет похожим — с той разницей, что здесь всё полностью интегрировано в Cozystack и изолировано внутри вашего tenant’а.
По ходу этого руководства вы сможете выбирать между дашбордом Cozystack (UI) и
kubectl:
- Дашборд Cozystack — самый быстрый и простой вариант, особенно если вы впервые работаете с Cozystack.
kubectlдаёт более глубокое понимание того, как управляемые сервисы разворачиваются под капотом.Хотя ни один из этих подходов не отражает типичный production-процесс развёртывания сервисов, оба хорошо подходят для обучения и экспериментов, поэтому отлично подходят для этого руководства.
2.1 Развёртывание PostgreSQL
- Откройте дашборд Cozystack и перейдите на вкладку Catalog.
- Найдите карточку приложения Postgres и нажмите на неё, чтобы открыть встроенную документацию.
- Нажмите кнопку Deploy, чтобы открыть страницу конфигурации развёртывания.
- Укажите
instaphoto-postgresв полеname. Имя приложения должно быть уникальным внутри tenant’а и не может быть изменено после развёртывания. - Просмотрите остальные параметры. Они уже заполнены разумными значениями по умолчанию, поэтому их можно оставить без изменений.
- Попробуйте и Visual editor, и YAML editor. Между ними можно переключаться в любой момент.
- В YAML editor есть встроенные комментарии-подсказки.
- Не переживайте, если не уверены в части настроек. Большинство из них можно изменить позже.
- Снова нажмите Deploy. База данных будет установлена в namespace вашего tenant’а.
Создайте манифест postgres.yaml со следующим содержимым:
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: postgres-instaphoto-dev
namespace: tenant-team1
spec:
chart:
spec:
chart: postgres
reconcileStrategy: Revision
sourceRef:
kind: HelmRepository
name: cozystack-apps
namespace: cozy-public
version: 0.10.0
interval: 0s
values:
databases:
myapp:
roles:
admin:
- user1
external: true
replicas: 2
resourcesPreset: nano
size: 5Gi
users:
user1:
password: strongpassword
Примените манифест командой:
kubectl apply -f postgres.yaml
💡 Совет: похожий манифест можно сначала сгенерировать через дашборд, развернув приложение Postgres. Затем экспортируйте конфигурацию и отредактируйте её по необходимости. Это удобно, если вы хотите воспроизвести или автоматизировать установку.
2.2 Получение параметров подключения
Перейдите на вкладку Applications, затем найдите и откройте приложение instaphoto-postgres.
После установки и готовности приложения параметры подключения появятся в разделе Application Resources в дашборде.
- На вкладке Secrets находятся пароли базы данных для каждого созданного вами пользователя.
- На вкладке Services перечислены внутренние сервисные endpoints:
- Используйте
postgres-<name>-roдля подключения к read-only replica. - Используйте
postgres-<name>-rwдля подключения к primary (read-write) инстансу.
- Используйте
Эти имена сервисов резолвятся изнутри вложенного Kubernetes-кластера и могут использоваться в конфигурации вашего приложения.
Если нужно подключаться к базе данных извне кластера, можно включить внешнюю публикацию, установив параметр external в true.
Это создаст сервис postgres-<name>-external-write с публичным IP-адресом.
⚠️ Включайте внешний доступ только при реальной необходимости. Публикация баз данных в интернет повышает риски безопасности и в большинстве случаев её следует избегать.
3. Создание сервиса кэширования
Начиная с этого момента, для доступа к платформе используйте учётные данные tenant’а.
Для kubectl используйте kubeconfig tenant’а, а для входа в дашборд — токен из него.
- Откройте дашборд.
- Повторите те же шаги, что и для PostgreSQL, но для приложения Redis.
- В приложении Redis есть параметр
authEnabled, который создаёт пользователя по умолчанию. Для нашего приложения этого достаточно. - После настройки параметров нажмите кнопку Deploy. Приложение будет установлено в ваш tenant.
Создайте файл манифеста redis.yaml со следующим содержимым:
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: redis-instaphoto
namespace: tenant-team1
spec:
chart:
spec:
chart: redis
reconcileStrategy: Revision
sourceRef:
kind: HelmRepository
name: cozystack-apps
namespace: cozy-public
version: 0.6.0
interval: 0s
values:
authEnabled: true
external: false
replicas: 2
resources: {}
resourcesPreset: nano
size: 1Gi
Затем примените его:
kubectl apply -f redis.yaml
Через некоторое время приложение Redis будет установлено в tenant team1.
Сгенерированный пароль можно посмотреть в дашборде.
- Откройте дашборд от имени пользователя
tenant-team1. - В левом меню нажмите вкладку Applications.
- Найдите приложение
redis-instaphotoи откройте его. - Пароль отображается в разделе Secrets, где есть кнопки для копирования и показа значения.
# Используйте kubeconfig tenant'а
export KUBECONFIG=./kubeconfig-tenant-team1
# Получите пароль
kubectl -n tenant-team1 get secret redis-instaphoto-auth
4. Развёртывание вложенного Kubernetes-кластера
Вложенный Kubernetes-кластер создаётся так же, как база данных и кэш. Однако здесь есть несколько важных дополнительных моментов:
- В tenant’е должен быть включён
etcd
Сервисetcdобязателен для запуска вложенного Kubernetes-кластера и может быть включён только администратором Cozystack. - Проверьте свою квоту.
Убедитесь, что в tenant’е достаточно CPU, RAM и дисковых ресурсов для создания и работы кластера. - Выберите подходящий пресет инстанса.
Избегайте слишком маленьких пресетов. Один узел Kubernetes потребляет примерно 2.5 ГБ RAM только на системные компоненты. Например, если выбрать пресет с 4 ГБ RAM, под реальные рабочие нагрузки останется около 1.5 ГБ. Для тестов 4 ГБ достаточно, но в целом лучше выделить меньше узлов с большим объёмом памяти, чем много узлов с минимальной RAM. - При необходимости включите
ingressиcert-manager.
Если вы планируете развёртывать веб-приложения, почти наверняка понадобятся ingress и управление сертификатами. Оба параметра можно включить флажками при настройке приложения вложенного Kubernetes в Cozystack.
Когда вложенный Kubernetes-кластер будет готов, его kubeconfig-файлы появятся на вкладке Secrets на странице приложения в дашборде. Будут доступны несколько вариантов:
admin.conf— стандартный kubeconfig для доступа к новому кластеру. С его помощью можно создавать дополнительных пользователей Kubernetes.admin.svc— тот же токен, что и вadmin.conf, но адрес API server указывает на внутреннее имя сервиса. Используйте его для приложений, которым нужен доступ к API изнутри кластера.super-admin.conf— аналогadmin.conf, но с расширенными административными правами. Предназначен для диагностики и задач обслуживания кластера.super-admin.svc— то же, что иsuper-admin.conf, но с внутренним адресом API server.
5. Обновление DNS и доступ к кластеру
После развёртывания вложенный Kubernetes-кластер автоматически получит один из floating IP-адресов основного кластера.
Узнать назначенное DNS-имя и IP-адрес можно двумя способами:
- Откройте страницу приложения кластера в дашборде.
- Проверьте статус ingress через
kubectl.
После того как вы узнаете правильные DNS-имя и IP-адрес, обновите DNS-настройки так, чтобы ваш домен или поддомен указывал на этот IP.
После обновления и распространения DNS-записей вы сможете подключиться к вложенному Kubernetes-кластеру с помощью скачанного kubeconfig.
Пример настройки и использования:
Сохраните содержимое
admin.confв файл, например~/.kube/kubeconfig-team1.example.org:$ cat ~/.kube/kubeconfig-team1.example.org apiVersion: v1 clusters: - cluster: certificate-authority-data: LS0tL ...Укажите этот файл в переменной окружения
KUBECONFIGи убедитесь, что узлы готовы:$ export KUBECONFIG=~/.kube/kubeconfig-team1.example.org $ kubectl get nodes NAME STATUS ROLES AGE VERSION kubernetes-dev-md0-vn8dh-jjbm9 Ready ingress-nginx 29m v1.30.11 kubernetes-dev-md0-vn8dh-xhsvl Ready ingress-nginx 25m v1.30.11
6. Развёртывание приложения с помощью Helm
Начиная с этого момента, работа с вашим кластером ничем не отличается от работы с обычным Kubernetes-окружением.
Для развёртывания Kubernetes-native приложений можно использовать kubectl, helm или ваш CI/CD pipeline.
Чтобы развернуть приложение:
Обновите значения Helm chart, указав корректные учётные данные для базы данных и кэша.
Выполните обычную команду Helm для развёртывания, например:
helm upgrade --install <release-name> <chart-path> -f values.yaml
Имена сервисов, например базы данных и кэша, не требуют DNS-суффиксов. В пределах одного namespace к ним можно обращаться напрямую по имени сервиса.