Русский
Русский
English
Статистика
Реклама

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

Публикуем перевод статьи о 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 nodesmaster1 - 159.65.92.123master2 - 178.62.32.212master3 - 178.62.40.225# IP addresses of the worker nodesworker1 - 178.62.41.87worker2 - 178.62.27.97worker3 - 178.62.67.29

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

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


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



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


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





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

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


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

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



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

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


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

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


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




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



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


На шаге 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 может получить сертификат от Lets 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 noNAME      STATUS   ROLES    AGE   VERSIONmaster1   Ready    master   38m   v1.19.6master2   Ready    master   37m   v1.19.6master3   Ready    master   37m   v1.19.6worker1   Ready    worker   37m   v1.19.6worker2   Ready    worker   37m   v1.19.6worker3   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 проектов.
Источник: habr.com
К списку статей
Опубликовано: 29.01.2021 16:08:57
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Блог компании timeweb

Kubernetes

K8s

Vanilla stack

Timeweb

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru