Azure Arc machine

Гибридное облако с Digital Ocean, Azure Arc и Terraform

Введение

Мне наконец-то довелось поиграться с гибридными облаками! Нашей команде достался кусок какого-то французского облачного провайдера со стайкой виртуальных машин, и Всевышние, естественно, первым делом попросили нас подключить машины хоть к какому мониторинигу. Ну, чтобы знать, сколько процентов процессора простаивает, сколько памяти осталось, и вообще, не устанавливает ли нам кто втихаря майнинговую ферму. И хотя я раньше упоённо писал и про мониторинг, и про сбор логов, в этой ситуации проще всего показалось не выпентриваться, а подключить этот зоопарк машин напрямую к Azure. Мы всё равно там днями просиживаем. А так, если машины появятся в Azure, то на них можно и нативные мониторинговые средства натравить, и даже с политиками безопасности поиграться.

Сделать это оказалось на удивление просто. Azure Arc — майкрософтскиая платформа для создания гибридных облаков — просто выдаёт bash-скрипт, а тот уже творит магию практически автономно. Единственное, что нужно сделать руками, это создать несколько «принимающих» Azure ресурсов. Но это даже проще, чем bash-скрипт.

В общем, в этом посте я хочу слегка примазаться к апологетам гибридных облаков и показать, как при помощи удобрений и палок Azure Arc, Digital Ocean и Terraform можно создать маленькое гибридное облако. Почему Digital Ocean? Потому что он уже восемь лет хостит мои блоги за 5-6 баксов в месяц, чем я очень доволен. Почему Terraform? Господа, ну мы же не в каменном веке живём! Пора бы уже всё по Infrastructure as a Code делать.

Так что будем начинать.

Шаг uno: Создаём дроплет в Digital Ocean

Digital Ocean (здесь и далее — DO) называет свои виртуальные машины «дроплет», что при желании можно перевести как «помёт». Но, как показал опыт, это никак не влияет на качество машины. Создав всего пару файлов (main.tf and digitalocean.tf), добавив в них Terraform провайдеров (digitalocean для дроплетов, и tls для создания SSH ключей к оном)у, и, наконец, досыпав сверху немного ресурсов, мы можем создать реально работающую виртуальную машину секунд за сорок. Для людей из Microsoft такие цифры кажутся чёрной магией и поводом сменить работу.

main.tf:

digitalocean.tf:

Я добавил пароль для доступа к DO в переменную окружения DIGITALOCEAN_ACCESS_TOKEN, поэтому никаких телодвижений аутентификации в самом Terraform делать не пришлось.

Для тех, кто Terraform видит только по праздникам, я даже могу пояснить, что именно делают те два файла в ответ на команду terraform apply:

  1. Создают случайный SSH ключ (ресурс tls_private_key.this),
  2. регистрируют сей ключ в DO (digitalocean_ssh_key.this),
  3. создают виртуальную машину (digitalocean_droplet.this), добавив ссылку на зарегистрированный SSH ключ в её параметры (digitalocean_ssh_key.this.fingerprint). Наконец,
  4. вызывают whoami команду (terraform_data.arc-connection) на ещё тёплой машине, чтобы подтвердить, что SSH ключ (tls_private_key.this.private_key_openssh) таки действительно работает. А позже мы заменим whoami на что-то более полезное.

В итоге, я действительно запустил terraform apply, и Наука и Партия сделали именно то, что обещали: DO нарисовал новую виртуальную машину, а вывод Terraform показал, что whoami вернул root. Красотень.

Digital Ocean дроплет
Свежевыпеченный Digital Ocean дроплет

Шаг zwei: Подготавливаем скрипт для подключения к Azure Arc

Теперь наступает чуть-чуть мелкой магии. Чтобы подключить машину к Azure Arc, нужно запустить на ней bash скрипт. Azure же настолько любезен, что шаблон этого скрипта выдаст абсолютно бесплатно.

Сгенерировать Azure Arc скрипт
Кнопка для шаблона Azure Arc скрипта

Вот только шаблон этот нужно ещё дополнить и слегка подредактировать. Во-первых, удалить sudo с 24-й строки, так как мы и так запускаем скрипт под root. А во-вторых, шаблон очень любит общаться, что в условиях автономного полёта эквивалентно лёгкой форме шизофрении. К счастью, строка export DEBIAN_FRONTEND=noninteractive в состоянии предотвратить этот душевный недуг.

Наконец, в скрипте-шаблоне есть пару пустых мест, которые надо бы заполнить значениями. А именно:

  1. Service Principal, он же сервисный аккаунт. С паролем и правами на подключение машин к Azure Arc (роль Azure Connected Machine Onboarding, строки 2 и 3)
  2. Айдишки подписки и тенанта (строки 6 и 8)
  3. Ресурсная группа и её регион (строки 7 и 9)
  4. Корреляционная айдишка — случайный GUID (строка 11). Она, может, и в состоянии помочь в дебаггинге, но мне в жизни ни разу не пригодилась.

Есть ещё маленький и скользкий подводный камень: перед любыми танцами с гибридным облаком в нашей Azure подписке (subscription) надо включить соответствующего провайдера — Microsoft.HybridCompute. По умолчанию он выключен, что провоцирует Azure Arc на весьма странные жалобы на права доступа. Не спрашивайте, откуда я знаю, но эти жалобы гуглятся так себе.

И всё. Теперь можно создать третий файл — arc.tf, который будет отвечать за Azure сторону вещей:

Всё, мы почти уже там. Сейчас добавим ещё три новых Terraform провайдера (azuread, azurerm, random) и azure_arc_region переменную в main.tf, и terraform apply снова сотворит чёрную магию. Теперь уже в Azure.

main.tf:

Arc resource group
Ресурсная группа для подключения Arc машин

Реально сильное колдунство.

Кстати, логины-пароли, как и в случае с Digital Ocean, Azure вытянул из переменных окружения. В продакшeн среде, конечно, я бы был более явным с конфигурацией.

Шаг III: Подключаем Digital Ocean дроплет к Azure Arc

Итак, кульминация сегодняшнего концерта. У нас уже есть виртуальная машина в Digital Ocean. Есть и скрипт подключения оной к Azure Arc. Что нам осталось? Да, скрестить ужа с гадюкой. То есть заменить whoami в нашей SSH команде (terraform_data.arc-connection) на ссылку на скрипт. Ну и добавить туда явную зависимость от Microsoft.HybridCompute провайдера и Azure Connected Machine Onboarding роли. Ведь подключать виртуальную машину к Azure без прав доступа и с выключенным гибридным облаком, согласитесь, глупо.

digitalocean.tf:

Всё, момент истины. Я удалил уже созданные ресурсы (через terraform destroy, естественно), чтобы убедиться, что создание всего от начала до конца работает стабильно, и terraform apply -auto-approve сотворил самое настоящее гибридное облако за несчастные 2 минуты и 8 секунд:

Azure Arc machine
Azure Arc machine

Человеки!

Усилия бесчисленных поколений привели нас к этому моменту. Египтяне построили пирамиды. Греки изобрели логику и ещё некоторые популярные ныне формы досуга. Жители славного города Заславль тоже сделали много хорошего. Просто мы не выпендриваемся. И, как вишенка на торте, как высшая форма разумной мысли, как новая звезда в непрерывно тускнеющей вселенной, наш Терраформ проект создал виртуальную машину в одном облаке и подключил его к другому. Будучи погребённым в цепких объятиях Azure Arc, Digital Ocean дроплет теперь может получить автоматическое управление обновлениями, отслеживание изменений конфигурации, мониторинг, сбор логов, и прочие проклятия зрелого облака.

В следующем посте мы посмотрим на некоторые из этих проклятий. В частности, на мониторинг. Да, частота выдачи мною технических постов скатилась к уровню статистической погрешности, но, думаю, новый пост выйдет быстрее, чем как всегда. Может, в течение пары недель. Или трёх. Максимум месяц-два. Ну не через полгода же! В общем, ждите.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *