Настройка многоузловых развертываний с Rancher 2.1, Kubernetes и Docker Machine в Ubuntu 18.04

Автор выбрал Code Org для получения пожертвования в рамках программы Write for DOnations.

Введение

Rancher — это популярная платформа управления контейнерами с открытым исходным кодом. Выпущенная в начале 2018 года версия Rancher 2.X работает на Kubernetes и включает новые инструменты, такие как управление несколькими кластерами и встроенные CI конвейеры. Помимо повышенной безопасности, масштабируемости и простых инструментов развертывания, уже имеющихся в Kubernetes, Rancher предлагает графический пользовательский интерфейс, упрощающий управление контейнерами. Благодаря графическому интерфейсу Rancher пользователи смогут управлять секретами, безопасно обрабатывать роли и разрешения, масштабировать узлы и поды, а также выполнять настройку средств распределения нагрузки и томов без необходимости использования инструментов командной строки или сложных файлов YAML.

В этом руководстве мы будем разворачивать многоузловой сервер Rancher 2.1 с помощью Docker Machine в Ubuntu 18.04. По окончании руководства вы сможете предоставить новые дроплеты DigitalOcean и поды контейнеров через пользовательский интерфейс Rancher для быстрого расширения или сокращения вашей среды хостинга.

Предварительные требования

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

  • Маркер персонального доступа DigitalOcean, который вы можете создать в соответствии с указаниями этого руководства. Этот маркер позволит Rancher получить через API доступ к учетной записи DigitalOcean.

  • Полное зарегистрированное доменное имя с записью A, которая указывает на IP-адрес дроплета, создаваемый на шаге 1. Вы можете узнать, как привязывать домены к дроплетам DigitalOcean, ознакомившись с документацией по доменам и DNS DigitalOcean. В данном руководстве замените example.com на ваш домен.

Шаг 1 — Создание дроплета с установленным Docker

Чтобы запустить и настроить Rancher, вам нужно будет создать новый дроплет с установленным Docker. Для этого нужно использовать образ Docker DigitalOcean.

Войдите в учетную запись DigitalOcean и выберите Create Droplet (Создать дроплет). Затем в разделе Choose an Image (Выбрать образ) выберите вкладку Marketplace (Магазин). Выберите Docker 18.06.1~ce~3 on 18.04.

Выберите образ Docker 18.06 в меню доступных одним нажатием приложений

Далее выберите дроплет размером не менее 2 ГБ и укажите регион центра обработки данных для вашего дроплета.

После этого добавьте ключи SSH, укажите имя хоста для дроплета и нажмите Create (Создать).

Может потребоваться несколько минут для организации работы сервера и загрузки Docker. После успешного развертывания дроплета вы можете запустить Rancher в новом контейнере Docker.

Шаг 2 — Запуск и настройка Rancher

Дроплет, созданный на шаге 1, будет запускать Rancher в контейнере Docker. На этом шаге вы запустите контейнер Rancher и убедитесь, что у него есть сертификат SSL от Let’s Encrypt для получения защищенного доступа к панели администратора Rancher. Let’s Encrypt — это автоматизированный издатель сертификатов с открытым исходным кодом, позволяющий разработчикам получать действующие в течение 90 дней сертификаты SSL бесплатно.

Выполните вход в новый дроплет:

Чтобы убедиться, что Docker запущен, введите:

  • docker -v

Проверьте, что указанная версия Docker соответствует вашим ожиданиям. Вы можете запустить Rancher с уже установленным сертификатом Let’s Encrypt с помощью следующей команды:

  • docker run -d --restart=unless-stopped -p 80:80 -p 443:443 -v /host/rancher:/var/lib/rancher rancher/rancher --acme-domain example.com

Параметр --acme-domain устанавливает сертификат SSL от Let’s Encrypt для обеспечения того, что администратор Rancher обслуживается через HTTPS. Этот скрипт также указывает дроплету выполнить выборку образа Docker rancher/rancher и запускать экземпляр Rancher в контейнере, который автоматически перезапускается в случае аварийного завершения работы. Для облегчения восстановления в случае потери данных скрипт монтирует том на компьютер хоста (в /host/rancher), который содержит данные Rancher.

Для просмотра всех запущенных контейнеров введите:

  • docker ps

Вы увидите примерно следующий вывод (с уникальным идентификатором и именем контейнера):

OutputCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                      NAMES 7b2afed0a599        rancher/rancher     "entrypoint.sh"     12 seconds ago      Up 11 seconds       0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   wizardly_fermat 

Если контейнер не запущен, вы можете снова запустить команду docker run.

Прежде чем вы сможете получить доступ к панели администратора Rancher, вам нужно будет задать пароль администратора и URL-адрес сервера Rancher. Интерфейс администратора Rancher позволит вам получить доступ ко всем запущенным узлам, подам и секретам, поэтому важно использовать надежный пароль.

Перейдите к доменному имени, которое указывает на ваш новый дроплет, в браузере. При первом посещении этого адреса Rancher попросит задать пароль:

Установка пароля Rancher с помощью диалогового окна

При запросе URL-адреса сервера Rancher используйте доменное имя, указывающее на ваш дроплет.

Теперь, когда вы выполнили настройку сервера Rancher, вы увидите домашний экран администратора Rancher:

Домашний экран администратора Rancher

Вы можете перейти к настройке кластера Rancher.

Шаг 3 — Настройка кластера с одним узлом

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

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

В Rancher нажмите Add Cluster (Добавить кластер) и выберите DigitalOcean в качестве поставщика инфраструктуры.

Выбор DigitalOcean из включенных в список поставщиков инфраструктуры

Откройте меню Cluster Name (Имя кластера) и прокрутите до раздела Node Pools (Пулы узлов). Введите Name Prefix (Префикс имени), оставьте значение 1 для параметра Count (Счетчик) и проверьте etcd, Control Plane (Уровень управления) и Worker (Рабочее приложение).

  • etcd — это система хранения значения ключа Kubernetes для сохранения состояния вашей среды. Для обеспечения высокой доступности вам нужно запустить три или пять узлов etcd, чтобы, если один из узлов перестанет работать, ваша среда оставалась под контролем.
  • Control Plane (Уровень управления) проверяет все объекты Kubernetes, например поды, в вашей среде и поддерживает их соответствие конфигурации, которую вы задаете в интерфейсе администратора Rancher.
  • Workers (Рабочие приложения) запускают действующие рабочие нагрузки и агенты мониторинга, которые обеспечивают, что ваши контейнеры будут работать и останутся подключены к сети. Рабочие узлы — это место, где ваши поды будут запускать программное обеспечение, которое вы разворачиваете.

Создание пула узлов с одним узлом

Перед созданием кластера нажмите Add Template Node (Добавить шаблон узла) для настройки конкретных параметров вашего нового узла.

Введите персональный маркер доступа DigitalOcean в поле ввода Access Token (Маркер доступа) и нажмите Next: Configure Droplet (Далее: настройка дроплета).

Далее выберите тот же Region (Регион) и Droplet Size (Размер дроплета), что и в шаге 1. Для Image (Образ) выберите Ubuntu 16.04.5 x64, так как в настоящее время существует проблема совместимости Rancher с Ubuntu 18.04. Нажмите Create (Создать) для сохранения шаблона.

После этого нажмите Create (Создать) на странице Add Cluster (Добавить кластера) для завершения процесса предоставления. Rancher потребуется несколько минут на выполнение этого шага, но после завершения работы вы увидите новый дроплет в панели управления дроплетов DigitalOcean.

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

Шаг 4 — Развертывание рабочей нагрузки веб-приложения

Когда новый кластер и узел будут готовы, вы можете развернуть ваш первый под в рабочей нагрузке. Под Kubernetes — это самая маленькая часть работы, доступная в Kubernetes и расширении Rancher. Рабочие нагрузки описывают одну группу подов, которые вы разворачиваете вместе. Например, вы можете запустить несколько подов вашего веб-сервера в одной рабочей нагрузке, чтобы убедиться, что, если один под замедляется при получении конкретного запроса, другие экземпляры могут обрабатывать входящие запросы. В этом разделе вы должны будете развернуть образ Nginx Hello World в одном поде.

Наведите курсор на Global (Глобально) в заголовке и выберите Default (По умолчанию). В результате будет отображена панель проекта по умолчанию. В этом руководстве вы будете работать над развертыванием отдельного проекта, но в этой панели управления вы также можете создать несколько проектов для получения сред для изолированных контейнеров.

Для начала настройки первого пода нажмите Deploy (Развернуть).

Откройте Name (Имя) и введите nginxdemos/hello в поле Docker Image (Образ Docker). Затем разметьте порт 80 в контейнере для порта 30000 на узлах хоста. Это позволит гарантировать, что поды, которые вы разворачивайте, будут доступны на каждом узле порта 30000. Вы можете оставить для параметра Protocol (Протокол) значение TCP, а в следующем выпадающем списке укажите NodePort.

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

Форма ввода для развертывания рабочей нагрузки

Для запуска пода прокрутите до самого низа и нажмите Launch (Запустить).

Rancher вернет вас на домашнюю страницу проекта по умолчанию, а в течение нескольких секунд ваш под будет готов. Нажмите ссылку 30000/tcp под именем рабочей нагрузки, и Rancher откроет новую вкладку с информацией о среде запущенного контейнера.

Адрес сервера, имя сервера и другие результаты работы запущенного контейнера NGINX

Адрес сервера и порт, которые вы видите на этой странице, повторяют данные внутренней сети Docker, а не являются публичным IP-адресом, который вы видите в браузере. Это означает, что Rancher работает и перенаправляет трафик с http://first_node_ip:30000/ на рабочую нагрузку, как и ожидалось.

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

Шаг 5 — Масштабирование узлов и подов

Rancher предоставляет два способа масштабирования ресурсов хостинга: увеличение числа подов в вашей рабочей нагрузке или увеличение числа узлов вашего кластера.

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

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

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

Перейдите на домашнюю страницу кластера установки Rancher, выбрав Cluster: your-cluster-name в верхней панели навигации. Далее нажмите Nodes (Узлы) в верхней панели навигации.

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

Эта страница показывает, что у вас в кластере есть один запущенный узел. Для добавления дополнительных узлов нажмите Edit Cluster (Изменить кластер) и прокрутите до раздела Node Pools (Пулы узлов) внизу страницы. Нажмите Add Node Pool (Добавить пул узлов), введите префикс и проверьте поле Worker (Рабочее приложение). Нажмите Save (Сохранить) для обновления кластера.

Добавление пула узла в качестве единого рабочего приложения

В течение 2–5 минут Rancher предоставит второй дроплет и отметит узел как Active (Активный) в панели управления кластера. Этот второй узел — только рабочее приложение, что означает, что он не будет использовать etcd Rancher или контейнеры панели управления. Это предоставляет рабочему приложению больше возможностей для запуска рабочих нагрузок.

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

Когда второй узел будет готов, вы сможете увидеть рабочую нагрузку, которую вы развернули на предыдущем шаге, на этом узле, если перейдете на http://send_node_ip:30000/ в браузере.

Масштабирование узлов позволяет вам использовать больше дроплетов для распределения ваших рабочих нагрузок, но вы также можете использовать несколько экземпляров каждого пода внутри рабочей нагрузки. Для добавления дополнительных подов вернитесь на страницу проекта по умолчанию, нажмите стрелку слева от рабочей нагрузки hello-world и нажмите + два раза для добавления двух новых подов.

Запуск трех подов Hello World в рабочую нагрузку

Rancher автоматически развернет несколько подов и распределит запущенные контейнеры на каждом узле, в зависимости от доступности.

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

Заключение

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