Блог CommCloud

Кластеры Kubernetes

Приходится развертывать кластеры Kubernetes вручную? Хотите автоматизировать этот процесс?

Kubernetes (K8s) — одна из ведущих платформ для развертывания
и управления отказоустойчивыми контейнерными приложениями.
Она используется для создания облачных приложений для микросервисов, а также позволяет компаниям переносить существующие проекты в контейнеры, чтобы повысить эффективность и отказоустойчивость. К8s решает сложные задачи, которые возникают при управлении контейнерами:

  • развертывание;
  • обнаружение служб;
  • обновление;
  • самовосстановление;
  • управление безопасностью.

В этой статье мы расскажем вам как самостоятельно развернуть кластер Kubernetes, исходя из нашего опыта.

Управляемые сервисы K8s автоматизируют и облегчают целый ряд операций, но все еще остается проблема "Как вычислить правильный размер облака". Чтобы добиться максимальной эффективности, вы должны предугадать размер рабочего узла и контейнеров, работающих в нем. В противном случае вам придется заплатить больше или использовать небольшие виртуальные машины и играть с автоматическим горизонтальным масштабированием, что принесет дополнительные сложности.

Предлагаем ознакомиться с инструкцией, как автоматизировать настройку кластеров за 20 минут.


В статье мы расскажем:

Развертывание кластера Kubernetes;
Дополнительные модули CommCloud Kubernetes;
Удаленный доступ API к кластерам Kubernetes;
Обновление кластера Kubernetes;
Как платить за облако только по мере использования.


1. Развертывание кластера Kubernetes: пошаговая инструкция

1
Откройте "Магазин приложений" в консоли CommCloud, найдите Kubernetes Cluster и нажмите "Установить".
Обратите внимание, этот сервис доступен только клиентам, у которых приобретен платный доступ к платформе.



2
Выберите тип установки.
Чистый кластер с примером Hello World.


Развертывание helm chart или стека с помощью команд оболочки. Введите список команд для выполнения helm chart или другие команды для развертывания пользовательского приложения.


По умолчанию здесь предлагается установить Open Liberty operator с набором команд:

OPERATOR_NAMESPACE=open-liberty
kubectl создать пространство имен "$OPERATOR_NAMESPACE"

kubectl apply -f
https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/master/deploy/releases/0.7.0/openliberty-app-crd.yaml

curl -L
https://raw.githubusercontent.com/OpenLiberty/open-liberty-operator/master/deploy/releases/0.7.0/openliberty-app-cluster-rbac.yaml | sed -e "s/OPEN_LIBERTY_OPERATOR_NAMESPACE/${OPERATOR_NAMESPACE}/" | kubectl apply -f —

curl -L raw.githubusercontent.com/OpenLiberty/open-liberty-operator/master/deploy/releases/0.7.0/openliberty-app-operator.yaml | sed -e "s/OPEN_LIBERTY_WATCH_NAMESPACE/${OPERATOR_NAMESPACE}/" | kubectl apply -n ${OPERATOR_NAMESPACE} -f —

kubectl apply -f
https://raw.githubusercontent.com/jelastic-jps/kubernetes/v1.18.10/addons/open-liberty.yaml


3
Выберите требуемую топологию кластера. Доступны два варианта:

Девелопмент
один мастер-узел (1) и один масштабируемый рабочий узел (1+) — облегченная версия для тестирования и разработки.

Продакшн
multi master (3) с балансировщиками API (2+) и масштабируемыми рабочими узлами (2+) — кластер с предварительно настроенной высокой доступностью для запуска приложений в производстве.

Где:

Multi master (3)
три главных узла.

Балансировщики API (2+)
два или более балансировщиков нагрузки для распределения входящих запросов API. Чтобы увеличить количество балансировщиков, используйте горизонтальное масштабирование.

Масштабируемые рабочие узлы (2+)
два или более узлов (узлов Kubernetes). Чтобы увеличить количество узлов, используйте горизонтальное масштабирование.



4
Присоедините выделенное хранилище NFS с динамической подготовкой объемов.

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

Вы можете использовать custom dynamic volume provisioner, указав необходимые настройки в файлах развертывания yaml.

Или вы можете сохранить уже предварительно настроенный диспетчер объемов и хранилище NFS, встроенные в кластер CommCloud Kubernetes.
В результате физические объемы будут динамически подготавливаться
по требованию и подключаться к контейнерам. Доступ к узлу хранения и управление им осуществляется с помощью файлового менеджера через панель мониторинга, SFTP или любого клиента NFS.



5
При необходимости вы можете установить вспомогательное программное обеспечение для мониторинга и устранения неполадок кластера K8s, а также включить доступ к API с помощью флажков дополнительных инструментов:

Установите Prometheus & Grafana
для мониторинга состояния кластера и для сбора и визуализации метрик (потребление CPU, RAM) развернутых контейнеров Docker (Pod).
Это программное обеспечение требует дополнительно 5 ГБ дискового пространства для постоянных объемов и потребляет около 500 МБ оперативной памяти.

Установите инструменты трассировки Jaeger,
чтобы обеспечить эффективное устранение неполадок
в распределенных службах.

Включите удаленный доступ к API,
чтобы обеспечить возможность управления K8s через API.


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

6
Чтобы выделить все возможности и особенности package, мы инициируем установку среды выполнения Open Liberty application server в производственную топологию кластера Kubernetes
со встроенным хранилищем NFS.



7
Вы можете получить доступ к панели администрирования Kubernetes вместе с открытой страницей приветствия Liberty application Server из окна успешной установки.



Используйте токен доступа и перейдите по ссылке Kubernetes dashboard для управления кластером Kubernetes.




Откройте страницу приветствия Liberty, нажав кнопку "Открыть в браузере".




2. Дополнительные модули CommCloud Kubernetes

В пакете CommCloud K8s есть специальные дополнения (аддоны), доступные на главном узле.




Они предназначены для:

установки диспетчера SSL-сертификатов
Прежде чем приступить к установке, прикрепите общедоступный IP-адрес к одному из рабочих узлов. Затем создайте запись A для вашего внешнего домена, например, myservice.commcloud.website, используя сгенерированный публичный IP-адрес. После поместите это доменное имя в пользовательский интерфейс Диспетчера сертификатов и нажмите кнопку "Применить".

Наряду с управлением SSL- сертификатами он развертывает отдельный контроллер входа, чтобы сбалансировать рабочую нагрузку между приложениями, которые будут привязаны к общедоступным IP-адресам сотрудников. В этом случае все внутренние ресурсы становятся доступными через имена хостов рабочих узлов, таких как node${NodeID}-${envName}.${platformDomain}, за исключением рабочего узла, публичный IP-адрес которого использовался для привязки внешнего домена (например, myservice.commcloud.website) с помощью диспетчера сертификатов.



Также аддоны используются для:

включения/отключения интеграции сервера GitLab в CommCloud PaaS;
автоматического обновления кластера Kubernetes;
включения удаленного доступ к API (дополнительные сведения см. в разделе ниже), если он не был включен во время установки;

Более подробно об интеграции сервера GitLab в CommCloud PaaS мы рассказывали в нашей электронной библиотеке знаний.

установки и настройки инструментов мониторинга Prometheus и Grafana, если они не были включены во время установки.



Вы получите соответствующее письмо на электронную почту, и появится всплывающее окно с учетными данными доступа.



установки инструмента трассировки Jaeger.



Вы получите соответствующее письмо на электронную почту, и появится всплывающее окно с учетными данными доступа.




3. Удаленный доступ API к кластеру Kubernetes

Чтобы получить доступ к созданному кластеру Kubernetes и управлять им удаленно с помощью API, поставьте галочку в чекбоксе "Remote API Access".



Для доступа к API-серверу Kubernetes (балансировщику или главному узлу) используйте ссылку на удаленную конечную точку API и токен доступа.

Лучший способ взаимодействия с API-сервером — использовать инструмент командной строки Kubernetes kubectl:

Установите утилиту kubectl на локальный компьютер,
следуя официальному руководству. В этом материале мы использовали установку для Ubuntu Linux.

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

$ kubectl config set-cluster mycluster --server={API_URL}
$ kubectl config set-context mycluster --cluster=mycluster
$ kubectl config set-учетные данные пользователя --token={TOKEN}
$ kubectl config set-context mycluster --user=user
$ kubectl config use-context mycluster

Где:
{API_URL} — ссылка на удаленную конечную точку API
{TOKEN} — токен доступа

Теперь вы можете управлять кластером Kubernetes с локального компьютера, следуя официальному руководству.

Рассмотрим список всех доступных узлов в нашем кластере. Откройте локальный терминал и выполните команду с помощью kubectl:
user@commcloud:~$ kubectl get nodes



Чтобы отключить/включить службу API после установки, используйте расширение Master node Configuration.




4. Обновление кластера Kubernetes

Чтобы программное обеспечение кластера Kubernetes всегда было актуальным, используйте расширение Cluster Upgrade. Просто нажмите
на кнопку "Начать обновление кластера". Расширение проверяет, доступна ли новая версия, и если да, то новая версия будет установлена.

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

Обновление доступно только в том случае, если новая версия доступна
и была опубликована командой CommCloud.

Чтобы избежать простоев ваших приложений во время перераспределения, попробуйте использовать несколько реплик для ваших сервисов.


5. Как платить за облако только по мере использования

CommCloud обеспечивает автоматическое вертикальное масштабирование для каждого рабочего и главного узла в кластере Kubernetes, поэтому необходимые ресурсы распределяются по требованию на основе нагрузки
в реальном времени. В результате вам не нужно постоянно отслеживать изменения, система делает это за вас. Кроме того, существует удобный способ проверки текущей нагрузки по группе узлов или каждому узлу в отдельности. Просто нажмите кнопку "Статистика" рядом с требуемым окружением или конкретным узлом.



Такое высокоавтоматизированное масштабирование и полная контейнеризация облака CommCloud позволяет использовать биллинговую модель, которая считается относительно новой для облачных вычислений. Несмотря на новизну, эта модель уже завоевала репутацию наиболее экономичного подхода Pay-per-use или так называемого Pay-as-you-use.
В результате оплата хостинга Kubernetes в рамках платформы происходит только за фактически используемые ресурсы без необходимости перераспределения.

Весь процесс выставления счетов прозрачен и может отслеживаться через панель мониторинга (Баланс >> История выставления счетов). Цена строится на количестве реальных потребляемых ресурсов, клаудлетов (128 Мб + 400 МГц). Такая детализация обеспечивает большую гибкость в формировании счетов, а также прозрачность в облачных расходах.



Мы в CommCloud предоставляем необходимый функционал, чтобы вы могли легко начать работу с хостингом Kubernetes. Одновременно мы добились максимальной эффективности с точки зрения потребления ресурсов:

1
Автоматизировали сложную настройку кластеров и преобразовали ее в один клик внутри интуитивно понятного интерфейса.
2
Автоматизировали мгновенное вертикальное масштабирование
на основе изменения нагрузки.
3
Сделали быстрое автоматическое и ручное горизонтальное масштабирование рабочих узлов K8s со встроенным автообнаружением.
4
Внедрили модель оплаты Pay-per-use для хостинга Kubernetes, поэтому теперь вам не нужно переплачивать за зарезервированные, но неиспользуемые ресурсы.
5
Сделали интеграцию совместного хранилища CommCloud с Dynamic Volume Provisioner, поэтому физические объемы, используемые приложениями, автоматически помещаются на накопитель и могут быть доступны пользователю с помощью SFTP/NFS или через встроенный файловый менеджер.
6
Настроили общий балансировщик нагрузки по умолчанию, чтобы
он обрабатывал все входящие запросы как прокси-сервер
и предоставлялся из "коробки".

CommCloud PaaS поставляет кластеру Kubernetes следующие предустановленные компоненты:

  1. Контейнер контроллера времени выполнения;
  2. Плагин CNI (работает от Weave) для поддержки оверлейной сети;
  3. Контроллер входа Traefik для передачи HTTP/HTTPS-запросов службам;
  4. HELM package Manager для автоматической установки предварительно упакованных решений из репозиториев;
  5. CoreDNS для разрешения внутренних имен;
  6. Динамический поставщик постоянных объемов;
  7. Выделенное хранилище NFS;
  8. Сервер метрик для сбора статистики;
  9. SSL для защиты входной сети;
  10. Панель управления веб-интерфейсом.

Для частной настройки платформа может предоставлять кластеры
в нескольких облаках и локально, без привязки к поставщику и с полной совместимостью между облаками. Это позволяет сосредоточить ценные ресурсы команды на разработке приложений и сервисов вместо того, чтобы тратить время на настройку и поддержку инфраструктуры и различий в API каждой реализации K8s-сервиса.
Kubernetes