Мы, команда ИТ архитекторов из IBM, которая занимается созданием и продвижением на рынок индустриальных решений для разных отраслей. В свободное от основной работы время исследуем новые технологии, экспериментируем и пробуем на деле лучшие практики.
Последние годы большой популярностью пользуется тематика Интернета Вещей. Наши клиенты спрашивают об универсальных коробочных решениях и платформах, которые могут располагаться локально в их Центрах Обработки Данных. Самое главное, ожидается, что на базе таких «коробочек», все новые сервисы и приложения должны разрабатываться и запускаться очень быстро, а точнее моментально или «еще вчера».
Мы задались вопросом: «А что если собрать нечто подобное на открытых и общедоступных технологиях?»
Про использование контейнеров Docker и средства управления ими на базе Kubernetes было уже немало рассказано и показано. Однако пока не удалось увидеть каким образом все эти передовые технологии могут быть использованы в промышленных масштабах для бизнес-задач, конкретно под Интернет Вещей. Так давайте же восполним этот пробел. Концепцию микросервисов, а также модные подходы разработки (DevOps), интеграции и развертывания приложений (CI/CD) будем считать немного другой задачей и отложим на потом.
В этой статье мы хотим рассказать про подготовку и установку одного из ключевых компонентов — IBM Cloud Private (по сути, промышленную сборку Docker/Kubernetes и еще чуть-чуть), который может выступить в качестве условного инфраструктурного ядра при создании локальной платформы Интернета Вещей. Спросите, почему именно он?
Потому что мы обещали открытые и общедоступные технологии (бесплатная версия для сообщества и поддержка от сообщества): hub.docker.com/r/ibmcom/icp-inception
Обзор IBM Cloud Private
IBM Cloud Private (ICP) – это приватная облачная платформа для локального развертывания и эксплуатации. ICP представляет собой интегрированную среду, которая позволяет проектировать, разрабатывать, развертывать и управлять локальными приложениями, созданными с учетом контейнерной архитектуры. Поставка ICP включает в себя оркестратор на базе Kubernetes (K8s), локальное хранилище образов, а также консоль управления и вспомогательный инструментарий для мониторинга.
Что такое приватное или частное облако?
Приватное облако — это модель облачных вычислений, запускаемая исключительно для одной организации, как правило на ее территории и ресурсах. Такое облако может управляться и обслуживаться как собственными специалистами, так и сотрудниками третьих сторон. Размещаться подобная платформа может как за брандмауэром компании, так и вне его. Частное облако предоставляет преимущества общедоступного облака, в том числе быстрое развертывание и масштабируемость, а также простоту использования, управления и гибкости. При этом локальная версия обеспечивает больший контроль над системой, повышение производительности, точно предсказуемые затраты, повышенные требования к безопасности и гибкие возможности управления в зависимости от нужд организации. Частное облако позволяет настраивать его непосредственно под конкретные бизнес-задачи и требования безопасности клиента.
Прежде чем приступать к установке ICP, определимся с терминологией:
Главный узел (master node)
Контролирует и управляет кластером K8s.
kubectl: инструментарий командной строки для управления кластером.
REST API: интерфейс взаимодействия с рабочими узлами.
etcd: является постоянным и доступным хранилищем ключей, используется в качестве хранилища резервных копий K8s для всех данных кластера.
kube-scheduler: этот компонент наблюдает за недавно созданными контейнерами (pods), которые не имеют назначенного узла, и выбирает узел для их запуска.
Обычно для стабильной работы и обеспечения отказоустойчивости требуется 3 и более главных узлов. В нашем случае, для экономии ресурсов мы установим все необходимые компоненты ICP на один выделенный сервер (Single Node).
Рабочий узел (worker node)
Рабочая машина в K8s ранее известная как Миньон (Minion). Этот узел может быть любым из хостов, который получает задания от главного узла, а также контролирует процесс запуска контейнеров на нем. В зависимости от настроек кластера, рабочий узел может быть как виртуальной машиной, так и физическим сервером.
На каждом узле могут быть запущены следующие компоненты:
kubelet: является основным сервисом рабочего узла. Он следит за контейнерами, которые были назначены его узлу (либо apirusver для безопасного соединения, либо через локальный файл конфигурации).
kube-proxy: отображает сервисы, определенные в API K8s на каждом узле, поддерживая сетевые правила на хосте и выполняя переадресацию соединений.
docker: среда запуска и управления контейнерами.
supervisord: Это легковесный процесс мониторинга и система управления, которые можно использовать для поддержания работы kubelet и docker.
fluentd: Это сервис, который помогает обеспечить протоколирование на уровне кластера.
Контейнеры (containers)
Приложение запущенное в изолированной среде.
Совокупность исполняемых процессов и запускаемый образ программы.
Коконы (pods)
Pod представляет собой группу из одного или нескольких контейнеров Docker, с общим хранилищем / сетью и спецификацией того, как запускать контейнеры на рабочем узле.
Каждый Pod имеет свой собственный IP.
Pod разделяет пространство имен PID, сеть и имя хоста.
Контроллер репликации (replication controller)
Обеспечивает доступность и масштабируемость.
Отвечает за контроль количества развернутых Pod-ов.
Использует шаблон, описывающий что должен содержать каждый Pod.
Пары «ключ-значение», прикрепленные к объектам для идентификации.
Эти параметры критичны, так как основываются на запросе кластера к ресурсам с определенными метками.
Сервисы (services)
Коллекция контейнеров, выставленных в качестве конечной точки (endpoint).
Информация о состоянии кластера K8s и настроек сети, которая распространяется на все рабочие узлы.
При правильной конфигурации Pod-ы созданные контроллером репликации будут автоматически зарегистрированы как соответствующий сервис.
Секретная информация (secrets)
Конфиденциальные сведения, которые должны быть прочитаны или использоваться контейнерами.
Специальные разделы (volumes) дискового накопителя монтируются автоматически чтобы контейнеры могли прочитать содержимое.
Каждая запись имеет свой собственный путь.
Архитектура
Ниже представлена высокоуровневая архитектура ICP на которой перечислены основные компоненты с разбивкой на главный, рабочие и прокси узлы. Стоит отметить, что в этой статье основной упор сделан на связке контейнеров Docker и среды управления Kubernetes. Эти компоненты с открытым исходным кодом являются ключевыми и фундаментальными для платформы ICP. Тем не менее для полноценной работы с ICP также потребуется знание Helm — менеджера управления программными пакетами. K8s используется для развертывания и размещения экземпляров приложений, которые встроены в схемы Helm, они в свою очередь ссылаются на Docker-образы. В схемах Helm содержится информация о деталях вашего приложения, а Docker-образы содержат все программные пакеты, которые необходимы для запуска вашего приложения.
Для детального ознакомления с архитектурой и компонентами платформы ICP можно воспользоваться ссылкой на документацию в IBM Knowledge Center.
Подготовка
Для того, чтобы комфортно выполнить установку ICP за 20-30 минут, необходимы следующие минимальные аппаратные ресурсы и доступ в Интернет:
• Один хост (физический или виртуальный)
• CPU = 8 ядер (или виртуальных ядер)
• ОЗУ = 10 Гб (фактически может потребоваться до 14Гб)
• Диск = 40 Гб (на SSD как всегда быстрее)
Примечание: если у вас есть чуть больше свободного времени и чуть меньше аппаратных ресурсов, то где-то за 40-60 минут можно установить ICP на 1 виртуальном ядре core i5 и 10 Гб ОЗУ.
Установка
Загрузка Ubuntu
Скачайте дистрибутив Ubuntu Server версии 16.04.05. Выполните стандартную установку ОС на виртуальную или физическую машину с указанными выше характеристиками.
Получение IP адреса
После завершения процесса установки ОС в командной строке узнайте IP адрес своей виртуальной машины с помощью такой команды:
ifconfig
Вам необходимо записать/запомнить Ethernet IP адрес (inet addr), а также Bcast и Mask. Эти параметры отобразятся после выполнения соответствующей команды: Рисунок 1. Пример выполнения команды «ifconfig»
Подключение по SSH
В случае, если при настройке виртуальной машины вы использовали функцию «Easy Install», то после полной установки Ubuntu Server вам необходимо доустановить OpenSSH server. Сделать это можно следующими командами:
После выполнения соответствующих команд у вас появится возможность подключиться к виртуальной машине с помощью SSH. В зависимости от ОС вы можете использовать разные способы подключения. Для Windows можно воспользоваться популярным инструментом PuTTY, для MacOS можно использовать команду ssh в терминале.
Рисунок 2. Пример подключения через PuTTY для Windows
На следующем этапе необходимо установить пароль для супер-пользователя (root):
sudo -i
passwd
Рисунок 3. Установка нового пароля для пользователя root
Обновление сетевого интерфейса
После того как мы настроили возможность подключения через SSH и обновили пароль супер-пользователя, для определения статичных сетевых параметров нам необходимо настроить сетевой интерфейс. Выполняется это следующей командой:
nano /etc/network/interfaces
Обновляем настройки сетевого интерфейса (primary network interface) на базе информации полученной при выполнении команды ifconfig, наш пример выглядит так:
Примечание: важно правильно указать DNS-сервер, так как доступ в Интернет необходим для последующей установки компонентов ICP.
Рисунок 4. Настройка сетевого интерфейса
Сохраните обновленный файл при помощи следующих действий: Ctrl + X, Yes, Enter.
Для упрощения входа на виртуальную машину с правами супер-пользователя (root), необходимо внести изменения в конфигурацию SSH сервиса. Для этого необходимо выполнить такую команду:
nano /etc/ssh/sshd_config
Далее найти строку разрешения доступа и отредактировать ее соответствующим образом:
PermitRootLogin yes
Рисунок 5. Обновление конфигурации SSH
Сохраните файл как в предыдущем шаге: Ctrl + X, Yes, Enter.
После внесения всех изменений, для применения новых параметров имеет смысл полностью перезапустить виртуальную машину или перезапустить соответствующие сервисы (networking и ssh), например такими командами:
shutdown -r 0
или
service <service_name> restart
После перезапуска машины необходимо снова выполнить вход в систему через SSH.
Обновление компонентов
Обновите Ubuntu Server с помощью следующей команды (команда должна выполняться под root правами):
apt update
Примечание: если в ходе обновления возникает ошибка: «The repository 'cdrom://Ubuntu-Server 16.04.5 LTS _Xenial Xerus_ — Release amd64 (20180731) xenial Release' does not have a Release file.». Необходимо выполнить следующую команду:
sudo nano /etc/apt/sources.list
И закомментировать строку:
deb cdrom:[Ubuntu-Server 16.04.5 LTS …
Рисунок 6. Исправление возможной ошибки
Далее сохраняем файл, как это делали ранее: Ctrl + X, Yes, Enter
После исправления возможной ошибки, выполните повторно команду обновления и в результате вы должны будете увидеть что-то вроде такого:
Рисунок 7. Обновление Ubuntu
Установка IBM Cloud Private
Прежде чем выполнить установку ICP, вам необходимо отредактировать hosts файл:
nano /etc/hosts
Замените строку 127.0.1.1 ubuntu на ваш IP адрес и любое подходящее название хоста.
Убедитесь, что название хоста и псевдонима в строке отделены табуляцией или пробелом: Рисунок 8. Изменение hosts файла
Сохраните файл: Ctrl + X, Yes, Enter
Следующие 2 команды позволят вам обновить систему и установить дополнительные модули.
Воспользуйтесь следующей командой для установки Docker (версия Docker 17.12.1 максимальная поддерживаемая версия для IBM Cloud Private 2.1.0.3):
apt-get install docker-ce=17.12.1~ce-0~ubuntu
Рисунок 10. Процесс установки Docker
Проверить работоспособность Docker можно следующей командой:
docker version
Рисунок 11. Проверка Docker
Загрузка IBM Cloud Private
Для загрузки образа ICP-ce (Сommunity Edition) с ресурса dockerHub необходимо использовать инструментарий Docker. Выполнить это можно следующей командой:
docker pull ibmcom/icp-inception:2.1.0.3
Рисунок 12. Загрузка ICP
IBM упаковала все основные компоненты, необходимые для установки, в один пакет (обратите внимание, что при необходимости можно изменить версию на более новую). Команда pull загрузит образ в локальную файловую систему (образ будет запущен для установки ICP).
Примечание: эта команда инструментария Docker выполняет Linux команду copy (cp) из заданного каталога (параметр -v). Создастся каталог кластера в /opt/icp со всеми необходимыми файлами.
Настройка SSH ключей
Создаем новые ssh ключи в каталоге /opt/icp/cluster:
ssh-keygen -b 4096 -f ~/.ssh/id_rsa -N ""
cat ~/.ssh/id_rsa.pub | sudo tee -a ~/.ssh/authorized_keys
systemctl restart sshd
cp ~/.ssh/id_rsa ./cluster/ssh_key
Проверяем, что ключ создан и находится в папке /opt/icp/cluster:
ls /opt/icp/cluster
Рисунок 13. Содержимое папки cluster
Настройка ICP
Добавляем IP-адрес каждого узла в кластере в файл /opt/icp/cluster/hosts (в нашем случае мы используем один и тот же IP-адрес для каждого компонента, который мы указывали в /etc/hosts). Делаем это следующей командой:
nano /opt/icp/cluster/hosts
Рисунок 14. Содержимое файла hosts
Сохраните файл: Ctrl + X, Yes, Enter
Подробные сведения о параметрах установки можно посмотреть в файле конфигурации:
more /opt/icp/cluster/config.yaml
Не рекомендуем менять параметры установки по умолчанию.
Примечание: 2 самых важных файла для установки — это hosts и config.yaml, они описывают параметры установки ICP. В конфигурации с несколькими рабочими узлами необходимо указать список IP-адресов в разделе worker. При установке текущей версии ICP в режиме Single Node меняются IP-адреса только в файле hosts.
Установка ICP
Перейдите в каталог cluster и запустите установку:
cd /opt/icp/cluster
docker run -e LICENSE=accept --net=host -t -v "$(pwd)":/installer/cluster ibmcom/icp-inception:2.1.0.3 install
В зависимости от доступных ресурсов установка может длиться от 20 до 60 минут. При появлении ошибок (красные сообщения) внесите соответствующие изменения в конфигурационные файлы. Иногда установка может немного замедлиться из-за попыток повторного подключения к компонентам, которые еще не успели стартовать (например, во время запуска Cloudant или IAM).
Окончание установки должно выглядеть так: Рисунок 15. Результат установки ICP
В случае ошибок возможно потребуется деинсталляция ICP:
docker run -e LICENSE=accept --net=host -t -v "$(pwd)":/installer/cluster ibmcom/icp-inception:2.1.0.3 uninstall
Перед тем, как перейти к следующему шагу, подождите около 5 минут, чтобы все компоненты ICP могли успешно запуститься.
По ссылке указанной после завершения установки войдите в консоль ICP (admin/admin):
https://<ip_address>:8443
Рисунок 16. Страница входа в панель управления
Страница приветствия ICP: Рисунок 17. Веб интерфейс панели управления
Вверху справа выберите меню «Catalog», отобразится список доступных приложений: Рисунок 18. Каталог компонентов
В этом каталоге представлен список приложений и ПО, описание которых вы можете изучить на досуге, но пока не стоит торопиться разворачивать их.
Нам еще предстоит научиться правильно обращаться с только что установленным ICP (не только через Веб-интерфейс, но и консоль в виде CLI — Command Line Interface), подключать постоянное хранилище (persistent storage) и производить небольшие настройки.
В качестве заключения
Подведем итоги.
Мы успешно развернули IBM Cloud Private community edition (версии 2.1.0.3) на одном хосте в виртуальной машине под ОС Ubuntu Server 16.04.5. На текущий момент нами собственноручно проверена установка на гипервизорах VMware и Hyper-V, точно работает на XenServer и никаких сложностей для VirtualBox и KVM быть не должно.
Кому очень не терпится окунуться дальше в изучение ICP, то есть отличная подборка лабораторных работ нашего коллеги тут: github.com/phthom/IBMCloudPrivate
Из предстоящих шагов — после свежей установки нам остается немного настроить ICP и начать наполнять его чем-то полезным и приближенным к практическим задачам.
Если Хабр-сообщество поддержит позитивом это начинание, то по мере продвижения наших исследований и экспериментов мы будем наполнять ядро платформы необходимыми компонентами для сбора телеметрии, хранения данных, их обработки, анализа, построения прогнозов, формирования внешних программных интерфейсов и создания пользовательских приложений. Соответственно развивая серию таких статей.
Ждем ваших отзывов и предложений!
Также, наши единомышленники из AIXportal.ru подготовили замечательный видео-ролик по установке IBM Cloud Private на своем Youtube канале, кому-то будет удобнее так: youtu.be/eQwOOTzjM24