Поиск по сайту:

Как масштабировать контейнеры Docker между серверами с помощью Kubernetes


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

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

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

Основы Кубернета

Знание некоторых ключевых терминов Kubernetes поможет вам понять отличия от Docker. Словарь Kubernetes описывает десятки ресурсов, которые вы можете добавить в свой кластер. К этой статье относятся только компоненты, управляющие планированием контейнеров.

На высоком уровне установка Kubernetes представляет собой кластер «узлов». Узлы — это независимые физические машины, на которых размещаются ваши рабочие нагрузки. Один «главный» узел отвечает за координацию («организацию») операций кластера путем «планирования» новых контейнеров для наиболее подходящего рабочего узла.

Вот некоторые критические термины:

  • Главный — главный узел управляет кластером. Это машина, на которую вы устанавливаете Kubernetes. Он запускает плоскость управления и делегирует размещение контейнерных приложений рабочим узлам.
  • Плоскость управления. Плоскость управления — это программный компонент главного узла. Он включает в себя несколько служб, в том числе сервер API, хранилище конфигураций и планировщик контейнеров.
  • Узел. Узел — это компьютер, на котором размещены ваши контейнеры. Каждый воркер запускает компонент Kubernetes под названием Kubelet. Он остается на связи с плоскостью управления, получая инструкции по планированию, по которым он действует для предоставления новых контейнеров.
  • Pod. Pod — это наименьшая вычислительная единица в кластере Kubernetes, представляющая группу экземпляров контейнера. Абстракция Pod позволяет взаимодействовать с несколькими работающими контейнерами в совокупности.
  • Набор реплик. Наборы реплик отвечают за масштабирование модулей, чтобы обеспечить доступность определенного количества реплик. Если вы запрашиваете три реплики пода, набор реплик гарантирует соблюдение ограничения доступности. Поды автоматически заменяются в случае сбоя, что позволяет автоматизировать репликацию контейнеров между серверами.

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

Создание вашего кластера

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

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

Установите MicroK8s на обе машины. Назначьте один узел ведущим и используйте команду add-node, чтобы начать процесс регистрации узла:

microk8s add-node

Это вызовет команду microk8s join. Переключитесь на дополнительный узел и выполните команду. Он присоединится к первому кластеру в качестве нового рабочего. Теперь обе машины готовы к размещению ваших контейнерных рабочих нагрузок.

Определение горизонтально масштабируемого развертывания

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

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

Вот простой манифест развертывания:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

Примените манифест к своему кластеру с помощью Kubectl:

microk8s kubectl apply -f ./manifest.yaml

Kubernetes создаст три модуля, в каждом из которых будет размещен веб-сервер NGINX, созданный из образа nginx:latest. Порт 80 предоставляется как порт контейнера для включения входящего трафика.

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

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

Динамическое добавление узлов

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

Настройка автоматического масштабирования относительно сложна. Точный процесс зависит от среды размещения вашего кластера. Для этого требуется интеграция с Cluster Autoscaler, способным подключаться к вашему хосту для обнаружения изменений спроса. Официальная документация доступна для Google Cloud; решения также доступны в Amazon EKS и Microsoft AKS.

Автомасштабирование работает за счет постоянной проверки модулей, которые невозможно запланировать из-за недостаточной емкости кластера. Он также оценивает, действительно ли успешно запланированные модули Pod могут быть размещены вместе с уменьшенным количеством узлов. Затем средство автоматического масштабирования использует API вашего облачного провайдера для добавления и удаления вычислительных экземпляров, динамически настраивая ресурсы вашего кластера. Это может повлиять на ваш счет, поскольку создание нового экземпляра обычно является платной операцией.

Краткое содержание

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

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

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




Все права защищены. © Linux-Console.net • 2019-2024