Использование контейнеров с SQL Server на Linux

Завершено

С помощью контейнеров организации могут создавать гибкие и масштабируемые установки SQL Server.

Компания Wide World Importers поддерживает некоторые масштабные рабочие нагрузки баз данных, для которых требуется гибкая и масштабируемая архитектура размещения. Вы хотите оценить возможность размещения SQL Server в виртуальных средах, таких как виртуальные машины (VM) и контейнеры.

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

Сравнение виртуальных машин и контейнеров

Виртуализация — это метод, используемый администраторами для размещения нескольких виртуальных серверов на одном физическом сервере. Благодаря виртуализации можно легко развертывать дополнительные экземпляры SQL Server без приобретения и установки дополнительного оборудования. Существует два распространенных подхода к виртуализации.

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

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

Виртуальные машины отличаются большим размером, и их создание занимает больше времени, но, поскольку у них есть собственная операционная система, они используют разные конфигурации и оборудование на главном компьютере. Кроме того, на одном узле можно запускать виртуальные машины с разными операционными системами. Например, на узел Linux можно установить виртуальную машину под управлением Linux и Apache для размещения веб-сайта. Также может иметься другая виртуальная машина под управлением ОС Windows и с сервером SQL Server для размещения базы данных.

Контейнеры меньше, поэтому они загружаются гораздо быстрее, чем виртуальные машины. Однако если узел работает под управлением, к примеру, Linux Ubuntu, все контейнеры на нем должны поддерживать одну ту же версию Ubuntu. На узле Linux можно установить контейнер под управлением Linux и Apache, но контейнер базы данных также должен работать под управлением Linux. Это возможно только в случае использования SQL Server 2017 или более поздней версии.

Diagram comparing the layers of software required to run VMs versus Containers.

На главном компьютере необходимо установить программное обеспечение, например Hyper-V или Virtual Box, для размещения виртуальных машин. Для контейнеров можно использовать систему Docker, CRI-O, rkt и другие узлы контейнеров.

Причины использования виртуальных машин

Все еще встречаются ситуации, когда установка контейнеров не является оптимальным решением. Так как контейнеры выполняются в одной операционной системе и совместно используют системные ресурсы, безопасность является проблемой. Если злоумышленник получает права суперпользователя, некоторые виды его деятельности могут быть направлены на получение доступа к приложениям. Приложения в контейнерах должны выполняться в той же ОС, которая установлена на узле. Приложения на основе Linux невозможно запускать в контейнерах Windows. Виртуальные машины позволяют размещать компьютер Linux в Windows или компьютер Windows в macOS, предоставляя высокий уровень гибкости. Виртуальные машины позволяют размещать несколько приложений с жесткой интеграцией на одной виртуальной машине. Как правило, в контейнерах размещаются только отдельные приложения.

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

Причины использования контейнеров

Контейнеры являются более простыми и позволяют компактно упаковывать приложения. При размещении контейнеров в одной операционной системе администрирование заметно проще. Необходимо только исправить и обновить одну ОС, а не каждую гостевую ОС на каждой виртуальной машине. Контейнеры меньше и проще, их запуск занимает несколько секунд. Для запуска же виртуальных машин необходимо несколько минут.

Оркестрация

Для оркестрации контейнеров можно использовать Docker Swarm, Kubernetes и другие решения. Оркестраторы отслеживают приложения и позволяют их масштабировать с помощью контейнеров, а также обеспечивают определенный уровень аварийного восстановления. В корпорации Майкрософт доступны средства и примеры использования Kubernetes, поэтому эта технология отлично подходит для контейнеризации SQL Server на Linux. Доступен образ SQL Server в контейнере Linux, который можно использовать с Kubernetes.

Контейнерный SQL Server на Linux

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

Diagram of the a Kubernetes cluster running SQL Server and the relationship between nodes, pods, storage, replica sets, and the service.

Сначала создайте постоянный том, а затем добавьте утверждение постоянного тома (ПВХ). Создайте манифест развертывания для SQL Server на Linux, который использует созданный корпорацией Майкрософт контейнер mssql-server-linux. Манифест также содержит определения для ПВХ и подсистемы балансировки нагрузки для службы, чтобы гарантировать согласованный IP-адрес. Создайте развертывание и убедитесь, что SQL Server запущен в модуле Pod. После этого Kubernetes будет выполнять начальную загрузку нового экземпляра в случае сбоя узла. Можно провести простой тест: удалите этот модуль Pod и проверьте, что новый модуль запускается автоматически.

Проверьте свои знания

1.

В каких случаях виртуальная машина будет оптимальным вариантом для размещения приложения?