Как стать автором
Обновить
1956.35

Vanilla All the Way. Ванильное облачное решение на K8s

Время на прочтение7 мин
Количество просмотров3.8K
Автор оригинала: Luc Juggery
Публикуем перевод статьи о Vanilla Stack — новой облачной open-source технологии на основе Kubernetes.

Недавно я наткнулся на стек технологий Vanilla Stack, включающий в себя множество компонентов с открытым кодом. В этой статье мы кратко рассмотрим процесс их установки и расскажем о различных вариантах использования.



Кратко о Vanilla Stack


Vanilla Stack можно определить как кластер Kubernetes с большим количеством open-source компонентов.

Среди них:

  • Rook — управляет распределенным хранилищем (файловая система, блок, объект),
  • OpenStack — предоставляет инфраструктуру как сервис (IaaS),
  • Cloud Foundry — предоставляет платформу как сервис (PaaS).

Следующая схема из официальной документации иллюстрирует глобальную архитектуру стека.

Примечание: Все решения, которые поставляются с Vanilla Stack (Rook, Cloud Foundry, OpenStack и другие инструменты), работают как поды в базовом кластере Kubernetes.

Как мы видим из схемы выше, юзеры могут:

  • запускать приложения в базовом кластере Kubernetes через создание деплойментов, сервисов, Helm чартов и т. д.;
  • использовать Cloud Foundry для запуска приложения из кода (с помощью простого cf push);
  • использовать OpenStack для создания новых инфраструктур (виртуальных машин, программно-определяемых сетей и т. д.).

Примечание: Требования к оборудованию зависят от компонентов, которые будут установлены в стеке.

Следующая схема более детальная, она содержит список всех компонентов, организованных по категориям, которые могут поставляться с Vanilla Stack:



Мне кажется, это довольно занятно! Некоторые компоненты установлены по умолчанию, другие можно выбрать во время установки.

В этой статье мы разберем основные этапы процесса установки. Для упрощения задачи мы установим Vanilla Stack на шести виртуальных машинах, подготовленных у хостера: три будут выступать в качестве главных узлов (master) Kubernetes, а остальные — в качестве рабочих (workers).

Примечание: Облачные провайдеры следует выбирать в зависимости от компонентов, которые мы хотим установить, так как некоторые из них могут не соответствовать требованиям установки. Например, чтобы установить Rook, нам нужен поставщик инфраструктуры, который предоставляет block storage.

Запускаем установку


Есть два способа установить Vanilla Stack, они описаны в разделе загрузки. Мы будем использовать установку Docker, которую можно запустить с помощью следующей команды:

$ docker run \
  --name VanillaStack-installer -d \
  -p 8080:8080 \
  harbor.vanillastack.io/vanillastack/installer:latest

Веб-интерфейс установщика доступен через порт 8080. Установку можно будет выполнить в десять несложных этапов, о которых мы расскажем далее.

Требования





Первый шаг, Start, определяет требования к оборудованию и программному обеспечению для машин, на которых будет установлен стек. В нашем случае мы будем использовать шесть виртуальных машин. Каждая из них работает на Ubuntu 20.04 и имеет 4 ГБ оперативной памяти / 2 процессора.

Как мы писали ранее, три виртуальные машины будут выступать в качестве главных узлов Kubernetes, а остальные будут рабочими.

# IP addresses of the master nodes
master1 - 159.65.92.123
master2 - 178.62.32.212
master3 - 178.62.40.225

# IP addresses of the worker nodes
worker1 - 178.62.41.87
worker2 - 178.62.27.97
worker3 - 178.62.67.29

Кроме того, нам необходимо настроить домен (и пару поддоменов) для доступа к кластеру. Мы вернемся к этому шагу позже при настройке балансировщика нагрузки.

Условия и положения


Принятие условий использования (Terms) — наш второй шаг. Обязательно ознакомьтесь с указанной информацией о лицензии.



Общие настройки


Далее идет шаг General Settings. Необходимо указать тип установки, который нам подходит: количество главных и рабочих узлов и начальную нагрузку.





В нашем случае мы выберем HA installation с тремя главными узлами, три оставшихся узла действуют как рабочие. Rook выбран по умолчанию для установки хранилища. Мы не используем OpenStack или Cloud Foundry здесь. Это может быть темой для другой статьи.

Доступ к виртуальной машине по SSH-ключу


Раздел Public Key предоставляет открытый ключ RSA, его необходимо скопировать на каждой из виртуальных машин. Этот шаг необходим, чтобы разрешить установочной машине (на которой запущен установщик) запускать Ansible playbooks для настройки каждой VM.

Примечание: Ansible — это система управления конфигурациями. Она запускает команды на машинах только через SSH-соединение. Ansible не требует установки агента в отличие от таких аналогов, как Chef и Puppet.



Инструкция по копированию ключа указана в установщике:

  • сохраните ключ в файле с именем key.pub.
  • скопируйте ключ на целевой компьютер, используя ssh-copy-id:

ssh-copy-id -f -i key.pub <username>@<ip-address-of-node>

  • повторите это со всеми узлами.

Для Windows следуйте инструкциям из этой статьи, начиная с «Копировать SSH-ключ на удаленное устройство Linux».

Определите информацию об узлах


На этапе Nodes нам нужно определить IP-адреса и пользователя каждого из узлов.




Также нам нужно определить узлы, которые запустят поды для Rook. Согласно требованиям, мы используем все три рабочих узла.



Проверка конфигурации узла


На шаге Node-Check мы проверяем, все ли узлы соответствуют требованиям.



Перед кликом на кнопку Validates Nodes важно прокрутить страницу до конца и убедиться, что мы выполняем требования Rook: к каждому узлу должно быть подключено блочное устройство (raw block device).



Используя команду lsblk -f, мы можем проверить, всё ли настроено правильно.



Нажав кнопку Validate Nodes в установщике, мы можем убедиться, что все узлы настроены корректно.



Настройки кластера


Первое, что нужно настроить на этапе Cluster-Settings, — это Pod CIDR и Service CIDR (то есть диапазоны IP, которые используются для предоставления IP-адресов подов и виртуальных IP-адресов сервисов). В нашем случае мы используем значения по умолчанию.



Кроме того, нам нужно создать балансировщик нагрузки для перенаправления трафика на главный или рабочий узел.

Из-за особенностей используемого облачного провайдера использовать один и тот же балансировщик нагрузки для перенаправления трафика на другой набор узлов не получится.

Поэтому мы создадим два балансировщика нагрузки: перед главными узлами
и перед рабочими.

Балансировщик нагрузки перед главными узлами


Первый балансировщик нагрузки необходим для доступа к серверу API кластера. Он должен быть настроен следующим образом:

  • перенаправить TCP-трафик с порта 6443 на тот же порт на главных узлах;
  • регулярно проверять работу мастер-узлов, отправляя TCP-запросы на порт 6443.


В данном случае балансировщик нагрузки получает IP-адрес 159.65.211.35.

Балансировщик нагрузки перед рабочими узлами


Второй балансировщик нагрузки необходим для предоставления доступа к ingress-контроллеру кластера (компонент, дающий доступ к приложениям в кластере). Его настройки:

  • перенаправить HTTP-трафик (порт 80) на порт 30080 рабочих узлов;
  • перенаправить HTTPS-трафик (порт 443) на порт 30443 рабочих узлов;
  • регулярно проверять работоспособность рабочих узлов, отправляя TCP-запросы на порт 30080.


В данном случае балансировщик нагрузки получает IP 46.101.64.165.

Настройка DNS entries


IP-адрес балансировщика нагрузки должен быть связан с доменным именем кластера. В нашей статье мы используем vanilla.techwhale.io. Дополнительные поддомены необходимы для доступа к серверу API и приложениям, предоставляемым через ingress-контроллер.



На этом этапе мы можем предоставить IP-адрес только одного балансировщика нагрузки, но в следующих релизах установщика будет уже больше возможностей.



Настройка Let's Encrypt


Let's Encrypt — широко используемый бесплатный центр сертификатов. Он позволяет нам получать и автоматически обновлять сертификаты HTTPS. В Kubernetes Let's Encrypt часто используется через Cert Manager, компонент, установленный по умолчанию в Vanilla Stack. Cert Manager может получить сертификат от Let’s Encrypt (а также из нескольких других источников) и сделать его доступным для приложения через Kubernetes Secret.



Rook Configuration


Следующие шаги позволяют выбрать компоненты Rook, которые будут установлены (в данном случае — панель управления Rook и мониторинг), а также сколько раз будут дублироваться фрагменты данных (replica level).



Установка дополнительных инструментов


В разделе Additional Tools можно указать, какие компоненты будут установлены в кластере.




Перечисленные здесь инструменты довольно распространенные. Они делятся на разные категории:

  • мониторинг (Prometheus, Jeager);
  • логирование (fluentd, Elasticsearch, Grafana);
  • реестр контейнеров и репозиторий Helm чартов (Harbour);
  • ingress контроллер (nginx).


Это удобный способ установить все компоненты из одного места. Также их можно будет установить позже, если на данном этапе они не выбраны.

Подписка


Если мы хотим подписаться на коммерческую поддержку, то на этом шаге можем получить всю необходимую информацию.



Поддержка предоставляется сервисом Cloudical. Он поддерживает Vanilla Stack и предоставляет Vanilla Cloud, новый управляемый вариант стека.

Проверка всех шагов


Здесь мы можем просмотреть и изменить (при необходимости) параметры конфигурации.



Прежде чем перейти к следующему шагу и установить весь стек, нам нужно убедиться, что
/etc/apt/sources.list правильно настроен на каждом узле и содержит официальные репозитории.

Примечание: Этот шаг необходим, например, если Ansible недоступен из репозиториев, предоставленных по умолчанию.

Самый простой способ исправить это — заменить содержимое /etc/apt/sources.list следующими инструкциями:



Установка


Теперь все готово и мы можем запустить установку под чашечку чая.



В журналах установки мы видим, что на каждой виртуальной машине применились Ansible playbooks, которые:

  • установят все необходимые пакеты;
  • настроят кластер Kubernetes (три главных узла / три рабочих);
  • установят Rook и все инструменты, выбранные выше.


Установка всего стека не займет много времени.



Примечание: При установке стека я столкнулся с небольшой проблемой, обусловленной особенностями используемого облачного провайдера: балансировщик нагрузки перенаправляет трафик на внутренний IP-адрес узла вместо общедоступных. Ingress контроллер доступен на внешнем IP-адресе узлов, поэтому рабочие узлы помечаются как неисправные, что неправильно.

Доступ к кластеру


Файл kubeconfig можно извлечь из /etc/kubernetes/admin.conf file.

# Get kubeconfig file
$ ssh root@master1 cat /etc/kubernetes/admin.conf > vanilla.cfg
# Configure local kubectl
$ export KUBECONFIG=$PWD/vanilla.cfg


Как обычно, мы начинаем с перечисления узлов нашего кластера:

$ kubectl get no
NAME      STATUS   ROLES    AGE   VERSION
master1   Ready    master   38m   v1.19.6
master2   Ready    master   37m   v1.19.6
master3   Ready    master   37m   v1.19.6
worker1   Ready    worker   37m   v1.19.6
worker2   Ready    worker   37m   v1.19.6
worker3   Ready    worker   37m   v1.19.6


Кроме того, мы можем проверить все поды, работающие в кластере, а также сервисы, предоставляющие их.




Похоже, всё работает! Следующим шагом может быть тестовый запуск, например, stateful-приложения, которое:

  • использует блочное хранилище, предоставляемое кластером Ceph, созданным через Rook;
  • пробрасывается через ingress-контроллер nginx;
  • использует сертификат TLS от Let's Encrypt CA, автоматически созданный с помощью Cert Manager.


Итоги


Настройка Vanilla Stack прошла быстро, установщик Docker прост и понятен. Вскоре должны быть добавлены дополнительные параметры для большего удобства.

Если вы не хотите устанавливать Vanilla Stack, то можете использовать тот же самый стек прямо из Vanilla Cloud. Это новое облачное предложение запущено в декабре 2020 года, а первая бета-версия уже доступна.

Я рекомендую поближе познакомиться с этим стеком, так как это отличный способ узнать больше популярных open-source проектов.
Теги:
Хабы:
+4
Комментарии2

Публикации

Информация

Сайт
timeweb.cloud
Дата регистрации
Дата основания
Численность
201–500 человек
Местоположение
Россия
Представитель
Timeweb Cloud