Давайте дружить в Телеграме: рассказываем про новые фичи, общаемся в комментах, прислушиваемся к вашим идеям Подписаться

Кластеры K8s в облаке на базе VMware

Команда Timeweb Cloud
Команда Timeweb Cloud
Наши инженеры, технические писатели, редакторы и маркетологи
16 февраля 2022 г.
271
8 минут чтения
Средний рейтинг статьи: 5

Контейнеризация – один и удачных способов доставки приложений клиентам. Поэтому для тех, у кого облачная IT-инфраструктура развернута на VMware, разработали продукт, позволяющий работать с Kubernetes (k8s). Называется он CSE, или Container Service Extension. Решение заметно ускоряет время выпуска приложения от получения кода до переноса в рабочую облачную систему за счет автоматизации управления контейнерами (оркестрации), в которых собрано ПО.

Кластеры K8s В Облаке На Базе V Mware

Что такое CSE

Продукт CSE – дополнение платформы VMware vCloud Director (VCD), расширяющее систему функционалом для взаимодействия с кластерами k8s (Kubernetes) – от создания до регулирования жизненного цикла ПО. Его инсталляция позволяет применять комплексный подход, объединить в одной инфраструктуре VMware работу с Legacy и контейнизированными приложениями с сохранением однородности, системного подхода к управлению.

Особенности применения:

  1. Клиент CSE обеспечивает развертывание кластеров, добавляет рабочие узлы, настраивает хранилища NFS.
  2. Облако на базе vCloud Director предоставляет вычислительные ресурсы с высоким уровнем безопасности и мультитенантности (изолированности пользователей).
  3. CSE-сервер представляет собой инструмент для настройки файла конфигурации комплекса, шаблонов виртуальных машин.

Создание контейнеров k8s в VMware и управлением ими относительно сложно, например, если их сравнивать с тем же Docker Swarm, еще одним инструментом кластеризации удаленных хостов. Еще Kubernetes (k8s) часто сравнивают с vSphere. Но и в сравнении с ней рассматриваемая платформа обладает более широким функционалом в управлении контейнеризированной IT-инфраструктурой. Это компенсирует недостатки сложной архитектуры и высокой стоимости продукта.

Функции CSE

Первое, на чем акцентирует внимание разработчик, это возможность сэкономить на использовании уже внедренной платформы VMware vCloud Director. Все ранее установленные приложения будут продолжать функционировать в прежнем режиме (фактически незаметно для конечного клиента), заодно появится возможность работать с Container VMware. Отказоустойчивость системы остается высокой независимо от однородности трафика, динамики нагрузки на платформу.

Преимущества внедрения программного дополнения:

  1. Появляется инструмент управления кластерами, пулами узлов, другими ресурсами.
  2. Заметно сокращается общее время выхода на рынок любых новых разработок.
  3. Повышается доступность веб-ресурсов, включая облачные программы.
  4. Нагрузка на сервер распределяется автоматически.
  5. Растет надежность, производительность процессов CI/CD.

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

Инсталляция расширения CSE в vcd-cli

Решение vcd-cli (CLI-интерфейс) представляет собой инструмент управления инфраструктурой из командной строки. По умолчанию в нем отсутствует поддержка работы с CSE. Чтобы включить ее, понадобится инсталлировать дополнение container-service-extension. Выполняется это командой:

python3 -m pip install container-service-extension

По завершении процедуры расширение вносят в файл конфигурации vcd-cli, расположенный по пути ~/.vcd-cli/profiles.yam. Его нужно открыть обычным текстовым редактором и найти строчку active с нижеуказанным значением:

extensions:
- container_service_extension.client.cse

После сохранения изменений в конфигурационном файле выполняется вход:

vcd login <хост> <название организации> <логин>

Теперь нужно убедиться, что дополнение действительно установлено и активно взаимодействует с хостом:

vcd cse version
CSE, Container Service Extension for VMware vCloud Director, version 3.0.1
vcd cse system info
property     value
-----------  ------------------------------------------------------
description  Container Service Extension for VMware vCloud Director
product      CSE
version      2.6.1

Создание кластера k8s

Теперь рассмотрим активацию кластера Kubernetes внутри VMware. Интеграция с платформой vCloud Director позволяет управлять процессом из одной точки в уже привычном интерфейсе. Ресурсы дата-центра обычно объединены в общий пул, и развертывание осуществляется через шаблоны VM с предустановленным и преднастроенным k8s. Подробности рекомендуется уточнять у службы технической поддержки timeweb.cloud

Ручное создание кластера возможно при помощи команды:

vcd cse cluster create название-кластера \
         --network название-сети \
         --ssh-key ~/.ssh/id_rsa.pub \
         --nodes количество-узлов \
         --template имя-шаблона

Наименование кластера, сетевого узла являются обязательными. Остальные допускается упустить, тогда будут применены значения по умолчанию. Например, в шаблоне под названием Ubuntu-16.04_k8-1.18_weave-2.6.5 заложено создание 3 узлов. Весь перечень активных шаблонов можно просмотреть по команде:

vcd cse template list

Важно учитывать, что выбранная сеть должна иметь тип Routed и быть подключенной к интернету. Если хотя бы одно из этих условий не соблюдено, процесс инициализации кластера подзависнет уже при генерации мастер-узла. Допускается использовать «серую» сеть с применением технологии NAT или Direct Connect. Результат создания кластера будет виден в веб-интерфейсе платформы vCloud Director, в разделе vApps.

После мониторинга статуса остается последний шаг. Нужно создать конфигурационный файл для Kubernetes. Его генерируют командой:

vcd cse cluster config название-кластера > config

После создания файл следует перенести в подходящее место командой:

mkdir ~/.kube/config
cp config ./.kube/config

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

Особенности реализации

Так, расширение CSE не поддерживает тип сервиса LoadBalancer. Поэтому манифесты k8s, которые используют его (плюс Ingress), будут работать некорректно. Решения этого недостатка существуют, рассмотрим два наиболее популярных – MetalLB и Project Contour.

MetalLB

Вариант с применением MetalLB в сочетании с k8s представляет собой балансировщик, который подменяет облачные протоколы маршрутизации LB стандартными. Пример использования ниже.

1. Создадим пространство имен и добавим MetalLB через манифесты:

kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.5/manifests/namespace.yaml
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.5/manifests/metallb.yaml

2. Следующим этапом настроим безопасность соединения узлов. Без этого передаваемые поды уйдут в статус CreateContainerConfigError. И в логи будут попадать сообщения об ошибках – secret memberlist not found:

kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)"

3. Рекомендуется проверить текущий статус утилиты. Если настройка прошла корректно, то контроллер и спикер будут отображаться как running:

kubectl get pod --namespace=metallb-system 
NAME                          READY   STATUS    RESTARTS   AGE
controller-57f648cb96-2lzm4   1/1     Running   0          5h52m
speaker-ccstt                 1/1     Running   0          5h52m
speaker-kbkps                 1/1     Running   0          5h52m
speaker-sqfqz                 1/1     Running   0          5h52m

4. Остается вручную создать конфигурационный файл:

apiVersion: v1 
kind: ConfigMap 
metadata: 
  namespace: metallb-system 
  name: config 
data: 
  config: | 
    address-pools: 
    - name: default 
      protocol: layer2 
      addresses: 
      - X.X.X.101-X.X.X.102

Значение параметра addresses необходимо заполнять теми адресами, которые остаются свободными и на которые возлагается нагрузка по балансировке. Для этого применяем файл конфигурации:

kubectl apply -f metallb-config.yaml

Процедура настройки LoadBalancer для Kubernetes при помощи MetalLB завершена, теперь же очередь за Ingress. Ее поддержку проще реализовать другим инструментом.

Project Contour

Создадим манифест через Project Contour. Выполняется это командой:

kubectl apply -f https://projectcontour.io/quickstart/contour.yaml

В результате ее выполнения будет автоматически развернут прокси-сервер Envoy, задачей которого станет прослушивание стандартных портов 80 и 443.

Заключение

Гибридный подход к реализации различных задач в облачных технологиях объясним, ведь одним физическим сервером часто пользуется большое количество клиентов. И каждый из них видит свою, замкнутую относительно других, среду. Применение CSE расширяет эти возможности за счет внедрения контейнеризации системы.

Зарегистрируйтесь и начните пользоваться
сервисами Timeweb Cloud прямо сейчас

15 лет опыта
Сосредоточьтесь на своей работе: об остальном позаботимся мы
165 000 клиентов
Нам доверяют частные лица и компании, от небольших фирм до корпораций
Поддержка 24/7
100+ специалистов поддержки, готовых помочь в чате, тикете и по телефону