Модули, службы, развертывания … что мне когда использовать?

Автор: Скотт Коултон, адвокат разработчиков Microsoft, представитель CNCF и капитан Docker


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

Модуль — это самый нижний блок приложения в Kubernetes. Теперь, прежде чем мы продолжим, нам нужно уточнить одну вещь — и это то, что pod не равен контейнеру в мире Docker. Стручок может состоять из нескольких контейнеров. Если вы пришли из чистого фона Docker, это может быть сложно осмыслить. Если в пакете может быть более одного контейнера, как он работает? Нам нужно знать о некоторых ограничениях. Модуль имеет следующее:

  • Один IP-адрес
  • Общий доступ к локальному хосту
  • Общее пространство IPC
  • Диапазон общих сетевых портов
  • Общие тома

Контейнеры в модуле общаются друг с другом через локальный хост, тогда как связь между капсулами осуществляется через службы. Модули — отличный способ развернуть приложение, но есть некоторые ограничения на тип ресурса модуля. Pod — это единый объект, и в случае сбоя он не может перезапустить себя; это не подходит для большинства случаев использования, поскольку мы хотим, чтобы наши приложения были высокодоступными. Не волнуйтесь, в Kubernetes эта проблема решена, и мы рассмотрим, как решить проблему высокой доступности далее в этой публикации.

Если мы хотим иметь возможность подключения к нашим модулям , нам нужно будет создать сервис. В Kubernetes сервис — это сетевая абстракция над набором модулей. Это позволяет сбалансировать нагрузку трафика на случай сбоев. Сервис позволяет Kubernetes устанавливать единую запись DNS для модулей. Как мы упоминали ранее, каждый модуль имеет отдельный IP-адрес. Для типа ресурса службы вы обычно определяете селектор, как в примере ниже:

 apiVersion: v1kind: Servicemetadata: name: my-servicespec: selector: app: MyApp 

В дополнение к этому, kube-proxy также создает виртуальный IP-адрес в кластере для доступа к сервису. Затем этот виртуальный IP-адрес маршрутизируется на IP-адреса модуля.. Если IP-адреса модуля меняются или развертываются новые модули, тип ресурса службы будет отслеживать изменение и обновлять внутреннюю маршрутизацию от вашего имени.

Теперь в разделе модуля модуля post, мы обнаружили, что стручки смертны, и если они умрут, то им конец. Что, если вы хотите, чтобы три версии одного модуля работали для обеспечения доступности?

Введите контроллер репликации.

Основная ответственность за контроллер репликации — предотвратить сбой, и он находится над типом ресурса модуля и управляет им. Давайте посмотрим на пример. Я хочу развернуть 4 своих модуля x, на этот раз я бы создал набор реплик. В наборе реплик есть определенное количество модулей, которые должны быть запущены, в данном случае 4. Если один из модулей выходит из строя или умирает, контроллер репликации запускает для меня новый модуль, и снова у меня будут работать 4 модуля x. . Таким образом, эта функция решает проблему, о которой мы упоминали ранее, о том, что поды смертны. Теперь набор реплик звучит так, будто у нас есть все, что нам нужно, верно? А как насчет жизненного цикла подов? Допустим, нам нужна новая версия, как обновить модули без простоев? Контроллер репликации не следит за этим.

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

Тип ресурса развертывания находится над набором реплик и может управлять им. Зачем нам манипулировать набором реплик? Наборы реплик — это все или ничего. Если вам нужно выполнить обновление, вам необходимо заменить набор реплик. Это действие приведет к простою вашего приложения.

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

Итак, похоже, у нас есть все, что нужно для развертывания и обновления нашего приложения в Kubernetes. Но что произойдет, если мы развернем новую версию нашего приложения и что-то пойдет не так? Развертывания также охватывают нас, так как мы можем так же легко откатить развертывание. Есть одно предостережение: если вы используете ПВХ (постоянный объем заявки) и что-то написали в заявлении. Это не будет отменено. Еще нужно помнить, что развертывания управляют наборами реплик и модулями управления наборами реплик; это означает, что когда вы используете тип ресурса развертывания, вы не можете забыть, что вам все еще нужна служба для доступа к нему..

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

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

О себе: Скотт Коултон

Скотт Коултон — адвокат разработчиков, представитель CNCF и капитан Docker с 10-летним опытом работы инженером-программистом в сфере управляемых сервисов и хостинга. Он имеет обширный опыт в архитектуре и развертывании распределенных вычислительных систем и сетевых решений для национальных и транснациональных компаний с широким спектром технологий, включая Azure, Kubernetes, Puppet, Docker, Cisco, VMware, Microsoft и Linux. Его сильные стороны в дизайне заключаются в облачных вычислениях, автоматизации и безопасности.

Twitter | LinkedIn | Github

Оцените статью
nanomode.ru
Добавить комментарий