Когда использовать развертывания, модули и сервисы Kubernetes

Когда использовать развертывания, модули и сервисы Kubernetes Изучение

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

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

Быстрая подготовка к Kubernetes

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

Kubernetes разработан для работы вместе с Docker, платформой для контейнеризации, которая объединяет ваше приложение и все зависимости в один контейнер.

Упрощенно: Docker используется для изоляции, упаковки и отправки вашего приложения в виде контейнеров. Kubernetes — это планировщик контейнеров для развертывания и масштабирования вашего приложения.

С Kubernetes мы можем:

  • Развертывайте службы и выпускайте новые выпуски без простоев,
  • Запуск в частном или публичном облаке
  • Размещение и масштабирование реплик службы на наиболее подходящем сервере
  • Подтвердите работоспособность наших услуг
  • Монтировать тома для приложений с отслеживанием состояния

Теперь, когда мы узнали о Kubernetes, давайте перейдем к некоторым его ресурсам и обсудим, когда их использовать. Начнем со стручков.

Что такое Pods?

Pod — это самая низкая или более атомарная единица приложения в Kubernetes. Важно отметить, что модуль не равен контейнеру в мире Docker. Стручок может состоять из нескольких контейнеров. Если вы пришли из чистого фона Docker, это может быть сложно осмыслить.

Думайте об этом как об абстракции Kubernetes, которая представляет группу контейнеров и разделяемые для них ресурсы. Например, Pod может включать контейнер с вашим приложением Node.js и другой контейнер, который передает данные на веб-сервер.

Pod — это способ представить запущенный процесс в кластере.

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

  • Единый IP-адрес
  • Поделиться localhost
  • Общее пространство IPC
  • Общий диапазон сетевых портов
  • Общие тома

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

Контейнеры в модуле взаимодействуют друг с другом через локальный хост

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

Читайте также:  Как использовать WebDAV для подключения Synology к Linux в качестве дискового пространства?

Узлы против модулей

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

Анатомия стручка

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

Все процессы (или контейнеры) внутри модуля используют одни и те же ресурсы (например, хранилище), и они могут обмениваться данными друг с другом через localhost. Объем, как каталог с разделяемыми данными. К ним могут получить доступ все контейнеры и использовать одни и те же данные.

Контроллер репликации

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

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

Основная обязанность контроллера репликации — предотвращение сбоев. Он находится над типом ресурса модуля и управляет им. Давайте посмотрим на пример.

Скажем, я хочу развернуть 4 модуля pod x. Я бы создал набор реплик. В наборе реплик есть определенное количество модулей, которые должны быть запущены (в данном случае 4). Если один из модулей выйдет из строя или выйдет из строя, контроллер репликации запустит для меня новый модуль, и снова у меня все равно будут работать 4 версии модуля x.

Эта функция решает проблему модулей. Однако важно отметить, что контроллер репликации не обрабатывает все, что связано с модулями, а именно жизненный цикл. Допустим, мы хотим обновить модули без простоев. Контроллер репликации не позаботится об этом.

Теперь, когда мы узнали о модулях, перейдем к следующему ресурсу Kubernetes: сервисам.

Что такое Services?

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

Kubernetes предоставляет модулям собственные IP-адреса и одно DNS-имя для набора модулей и может балансировать нагрузку между ними. Они предоставляют функции для стандартизации кластера, такие как:

  • Балансировки нагрузки
  • Развертывания с нулевым временем простоя
  • Обнаружение сервисов между приложениями
Читайте также:  Пример Python CGI

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

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: MyApp

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

В дополнение к этому kube-proxyтакже создает виртуальный IP-адрес

Что такое развертывания?

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

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

Для этого вы описываете желаемое состояние в развертывании

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

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

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

kubectl create \
    -f deploy/go-demo-2-db.yml \
    —record
kubectl get -f deploy/go-demo-2-db.yml

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

NAME           READY   UP-TO-DATE   AVAILABLE   AGE
go-demo-2-db   0/1     1            0           4s

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

Есть одно предостережение: если вы используете ПВХ (постоянный объем заявки) и что-то написали в заявлении. Это не будет отменено. Развертывания управляют наборами реплик, а наборы реплик управляют модулями. Таким образом, при использовании типа ресурса развертывания вам по-прежнему нужна служба для доступа к нему.

Есть одно предостережение если вы используете ПВХ

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

Что изучать дальше

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

Следующим хорошим шагом было бы изучить следующее:

  • Как определить стручки
  • Компоненты планирования пода
  • Создание модулей Split API
  • Откат неудачных развертываний
  • Обновление нескольких объектов
Оцените статью
bestprogrammer.ru
Добавить комментарий