Kubernetes

Развертывание приложений в кластерах Kubernetes

Развертывание приложений в кластерах Kubernetes

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

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


Традиционное развертывание приложений

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

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


Стручки

В качестве первого шага давайте развернем стручок. Для этого нам понадобится файл YAML, определяющий различные атрибуты модуля.

apiVersion: v1
вид: Стручок
метаданные:
имя: nginx
спецификация:
контейнеры:
- имя: nginx
изображение: nginx: 1.7.9
порты:
- containerPort: 80

Добавьте содержимое выше в стручок.ямл файл и сохраните его. Глядя на текст выше, вы можете увидеть, что своего рода ресурсов, которые мы создаем, - это стручок. Мы назвали это nginx, и изображение nginx: 1.7.9 что по умолчанию означает, что Kubernetes будет извлекать соответствующий образ nginx из общедоступных образов Docker-хаба.

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

Теперь, чтобы запустить запуск модуля:

$ kubectl create -f pod.ямл

Вы не можете получить доступ к модулю из-за пределов кластера. Он еще не обнаружен и существует только в виде одиночной стручки. Чтобы убедиться, что он действительно развернут, запустите:

$ kubectl получить поды

Чтобы избавиться от капсулы с именем nginx, запустите команду:

$ kubectl удалить pod nginx

Развертывания

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

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

Ниже приводится очень распространенный способ определения развертывания:

apiVersion: apps / v1beta1
вид: Развертывание
метаданные:
имя: nginx-развертывание
спецификация:
реплик: 2
шаблон:
метаданные:
ярлыки:
приложение: nginx
спецификация:
контейнеры:
- имя: nginx
изображение: nginx: 1.7.9
порты:
- containerPort: 80

Вы заметите, среди прочего, пару "ключ-значение":

ярлыки:
приложение:
nginx

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


Услуги

Каждый модуль имеет свой собственный внутренний IP-адрес, а уровень связи, такой как Flannel, помогает модулям взаимодействовать друг с другом. Этот IP-адрес, однако, довольно сильно меняется, и, в конце концов, весь смысл наличия многих модулей состоит в том, чтобы они были одноразовыми. Стручки часто убивают и воскрешают.

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

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

Например, если у нас есть служба базы данных с 10 модулями базы данных, некоторые из модулей базы данных могут появиться или быть убиты, но служба будет гарантировать, что остальная часть кластера получит «службу», которая является базой данных. Службы также могут использоваться для предоставления внешнего интерфейса остальной части Интернета.

Вот типичное определение услуги.

apiVersion: v1
вид: Сервис
метаданные:
имя: wordpress-mysql
ярлыки:
приложение: wordpress
спецификация:
порты:
- порт: 3306
селектор:
приложение: wordpress
уровень: mysql
clusterIP: Нет

Модули, помеченные WordPress с указанным уровнем mysql, - это те модули, которые будут выбраны этой службой и представлены модулям веб-сервера для типичной настройки WordPress, выполненной на Kubernetes.


Слово предостережения

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

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

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

WinMouse позволяет настраивать и улучшать движение указателя мыши на ПК с Windows
Если вы хотите улучшить функции указателя мыши по умолчанию, используйте бесплатное ПО WinMouse. Он добавляет дополнительные функции, которые помогут ...
Левая кнопка мыши не работает в Windows 10
Если вы используете выделенную мышь со своим ноутбуком или настольным компьютером, но левая кнопка мыши не работает в Windows 10/8/7 по какой-то причи...
Курсор прыгает или перемещается случайным образом при наборе текста в Windows 10
Если вы обнаружите, что ваш курсор мыши прыгает или перемещается сам по себе, автоматически, случайным образом при вводе текста на ноутбуке или компью...