Контейнеризация – один и удачных способов доставки приложений клиентам. Поэтому для тех, у кого облачная IT-инфраструктура развернута на VMware, разработали продукт, позволяющий работать с Kubernetes (k8s). Называется он CSE, или Container Service Extension. Решение заметно ускоряет время выпуска приложения от получения кода до переноса в рабочую облачную систему за счет автоматизации управления контейнерами (оркестрации), в которых собрано ПО.
Продукт CSE – дополнение платформы VMware vCloud Director (VCD), расширяющее систему функционалом для взаимодействия с кластерами k8s (Kubernetes) – от создания до регулирования жизненного цикла ПО. Его инсталляция позволяет применять комплексный подход, объединить в одной инфраструктуре VMware работу с Legacy и контейнизированными приложениями с сохранением однородности, системного подхода к управлению.
Особенности применения:
Создание контейнеров k8s в VMware и управлением ими относительно сложно, например, если их сравнивать с тем же Docker Swarm, еще одним инструментом кластеризации удаленных хостов. Еще Kubernetes (k8s) часто сравнивают с vSphere. Но и в сравнении с ней рассматриваемая платформа обладает более широким функционалом в управлении контейнеризированной IT-инфраструктурой. Это компенсирует недостатки сложной архитектуры и высокой стоимости продукта.
Первое, на чем акцентирует внимание разработчик, это возможность сэкономить на использовании уже внедренной платформы VMware vCloud Director. Все ранее установленные приложения будут продолжать функционировать в прежнем режиме (фактически незаметно для конечного клиента), заодно появится возможность работать с Container VMware. Отказоустойчивость системы остается высокой независимо от однородности трафика, динамики нагрузки на платформу.
Преимущества внедрения программного дополнения:
Количество контейнеров неограниченно, лишь бы хватило мощности физического сервера (памяти, процессора и иных ресурсов). Благодаря такому свойству появляется возможность параллельной разработки разных проектов, которые изначально изолированы друг от друга. Также отсутствуют ограничения и по устанавливаемым операционным системам, применяемым языкам. При работе на международном рынке это удобно даже при наличии всего одного физического сервера.
Решение 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
Теперь рассмотрим активацию кластера 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 в сочетании с 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. Выполняется это командой:
kubectl apply -f https://projectcontour.io/quickstart/contour.yaml
В результате ее выполнения будет автоматически развернут прокси-сервер Envoy, задачей которого станет прослушивание стандартных портов 80 и 443.
Гибридный подход к реализации различных задач в облачных технологиях объясним, ведь одним физическим сервером часто пользуется большое количество клиентов. И каждый из них видит свою, замкнутую относительно других, среду. Применение CSE расширяет эти возможности за счет внедрения контейнеризации системы.