Руководство по навигатору: начальная настройка среды

[.Примечание]##

Note: это ранняя версия содержания книги Navigator’s Guide, предложения инженеров DigitalOcean Solutions. Цель книги - помочь бизнес-клиентам спланировать свои потребности в инфраструктуре, привести рабочие примеры и включить технический нюанс и «почему», который делает некоторые решения лучше других.

Книга и сопровождающий ее код будут общедоступны в репозитории GitHub. Поскольку это ранний выпуск, книга еще не завершена и репозиторий еще не открыт, но следите за обновлениями!

Это первая практическая часть книги.

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

Наш пояс для инструментов

В основном мы будем использоватьTerraform,Ansible,terraform-inventory иGit.

Terraform

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

Terraform использует декларативный синтаксис (HCL), который разработан таким образом, чтобы его было легко понять как людям, так и компьютерам. HCL позволяет планировать изменения для проверки и автоматически обрабатывает зависимости инфраструктуры для вас.

Мы будем использовать Terraform дляcreate нашей инфраструктуры, то есть для создания дроплетов, плавающих IP-адресов, межсетевых экранов, блочных хранилищ и балансировщиков нагрузки DigitalOcean, но мы не будем использовать его дляconfigure тех Ресурсы. Вот где приходит Ansible.

Есть несколько ресурсов, которые мы рекомендуем, если вы хотите узнать больше о Terraform:

анзибль

Ansible - это инструментconfiguration management, который позволяет систематически обрабатывать изменения в системе, сохраняя ее целостность с течением времени. Стандартная библиотека модулей Ansible обширна, а ее архитектура позволяет создавать собственные плагины.

Ansible playbooks - это файлы YAML, которые определяют автоматизацию, которой вы хотите управлять. Как и Terraform, вы можете контролировать версию своих книг. В отличие от Terraform, изменение конфигурации ресурса не требует уничтожения и восстановления этого ресурса; Ansible выдвигает конфигурации в вашу инфраструктуру.

Ansible использует соединения SSH, поэтому вам не нужно устанавливать агент на целевых узлах, чтобы использовать его. Однако это означает, что Ansible должен знать, к каким конечным точкам подключаться, что обычно определяется файлом инвентаризации. Поскольку мы используем Terraform для развертывания и поддерживает состояние вашей инфраструктуры в файле, мы будем использовать terraform-инвентарь для динамической подачи Ansible списка целевых машин.

Ansible playbooks вызывают модули для внесения изменений в конфигурацию или выполнения команд. В Ansible имеется множество встроенных модулей для управления популярными поставщиками программного обеспечения или облачных решений, включая DigitalOcean. При работе в командной строке командаansible-doc - это простой способ просмотреть параметры и подробную информацию о модулях. Примером может бытьansible-doc -l для вывода списка модулей или вызов определенного модуля для просмотра документации,ansible-doc digital_ocean. Playbooks могут быть пакетами как роли для легкого обмена Главный публичный репозиторий для ролей -Ansible Galaxy. Примеры кода в этой книге используют несколько ролей для применения конфигураций.

Стоит отметить, что Ansible не обеспечивает соблюдение состояния. Выполнение playbook будет запускать только команды в playbook. Внесение изменений непосредственно в серверы, управляемые Ansible, может привести к непредвиденным последствиям.

Мы рекомендуем несколько ресурсов, если вы хотите узнать больше об Ansible. Red Hat владеет проектом Ansible и предлагает варианты обучения. Это включает в себя отличный вводный видео класс бесплатно, а также более продвинутые классы:

Terraform-инвентарь

terraform-inventory - это сценарий динамической инвентаризации, который извлекает информацию о ресурсах из файла состояния Terraform и выводит ее таким образом, чтобы Ansible мог использовать для нацеливания на определенные хосты при выполнении playbook. Это становится немного сложнее, но ключевым моментом является то, чтоterraform-inventory упрощает совместное использование Terraform и Ansible.

Git

Мы будем использовать Git в качестве нашей системы контроля версий. В частности, вам не нужны глубокие знания Git, но нужно пониматьcommitting changes, tracking, and cloning. Поскольку мы можем управлять версиями наших файлов Terraform и Ansible, мы можем запускать тесты для различных версий нашей инфраструктуры, указав версию модуля Terraform или роль Ansible.

Репозиторий этой книги размещен наGitHub, но вы можете использовать любую службу хостинга Git для своих собственных развертываний, например GitHub,GitLab илиBitbucket.

Дополнительные инструменты

Утилита DigitalOcean CLI,doctl, часто помогает быстро получить доступ к вашей учетной записи через API для создания или получения информации о ресурсах. Вы можете найти инструкции по настройкеdoctl вthe project README и полную информацию об использовании вofficial documentation.

Настройка капли контроллера

Наш контроллер - это сервер, который мы будем использовать для запуска наших инструментов. Мы будем использовать дроплет Ubuntu 18.04 x64 (Bionic Beaver), который мы настроим для установки всех инструментов, которые нам нужны при создании дроплета.

Note: если вам удобнее использовать другую операционную систему (например, macOS на локальном компьютере), вы можете сделать это вместо этого, если она соответствуетAnsible’s system requirements.

Для начала вам понадобится:

  • Учетная запись DigitalOcean. Вы можете создать его наhttps://www.digitalocean.com/.

  • SSH key added to your DigitalOcean account.

  • ADigitalOcean API token с разрешениями на чтение / запись.

    Пришло времяcreate the Droplet. Мы будем использовать следующие варианты
  • Image: Ubuntu 18.04 x64.

  • Size: Стандартная капля объемом 1 ГБ.

  • Datacenter region: Ваш выбор.

  • Additional options: частная сеть, резервное копирование, пользовательские данные и мониторинг.

  • SSH keys: выберите свой.

Когда вы выбираете опцию пользовательских данных, откроется текстовое поле. User data - это произвольные данные, которые пользователь может предоставить дроплету во время создания. Пользовательские данные потребляются CloudInit, как правило, во время первой загрузки облачного сервера, для выполнения задач или запуска сценариев от имени пользователя root.

Мы будем использовать сценарий облачной конфигурации для установки Python 2.7,pip (менеджер пакетов Python), Git,zip, Terraform,terraform-inventory и Ansible.

Note: Вы также можете установить это программное обеспечение вручную, если хотите. Terraform иterraform-inventory - это двоичные файлы Go, которые необходимо поместить в ваш$PATH. Мы рекомендуем установить Ansible с Pip вместо системного менеджера пакетов, такого как APT, потому что он всегда актуален и позволяет вам установить его в течениеvirtualenv.

#cloud-config
# Source:  https://git.io/nav-guide-cloud-config

package_upgrade: true

packages:
  - python
  - python-pip
  - git
  - zip
  - jq

runcmd:
  - [curl, -o, /tmp/terraform.zip, "https://releases.hashicorp.com/terraform/0.11.7/terraform_0.11.7_linux_amd64.zip"]
  - [unzip, -d, /usr/local/bin/, /tmp/terraform.zip]
  - [curl, -L, -o, /tmp/terraform-inventory.zip, "https://github.com/adammck/terraform-inventory/releases/download/v0.7-pre/terraform-inventory_v0.7-pre_linux_amd64.zip"]
  - [unzip, -d, /usr/local/bin/, /tmp/terraform-inventory.zip]
  - [pip, install, -U, pip, ansible]
  - [git, clone, "https://github.com/digtialocean/navigators-guide.git"]

Отсюда щелкнитеCreate. Сама капля будет быстро запущена, но команды в ее пользовательских данных займут немного времени, чтобы закончить работу. Вы можетеlog into the Droplet и посмотреть на/var/log/cloud-init-output.log, чтобы проверить его статус.

Последний шаг - создание ключа SSH для контроллера Droplet. Позже мы разместим это на каждом из узлов нашей инфраструктуры. Вы можете запустить эту однострочную версию при входе на свой сервер, чтобы создать ключ и прокомментировать его с именем хоста вашей Droplet:

ssh-keygen -t rsa -C $(hostname -f)

Вы сможете увидеть пару открытого и закрытого ключей в/home/your_username/.ssh/.

Что дальше?

Ваш контроллер Droplet настроен, что означает, что вы можете начать использовать инструменты. В следующей главе мы покажем вам, как использовать эти инструменты для создания высокодоступной инфраструктуры. При этом вы увидите разницу между Ansible и Terraform.

Related