Инфраструктура для бизнеса: начальная настройка среды

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

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

Читайте также:

Инструментарий

Для дальнейшей работы вам понадобятся TerraformAnsibleterraform-inventory и Git.

Terraform

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

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

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

Читайте также: Terraform Book

Ansible

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

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

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

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

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

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

Читайте также:

terraform-inventory

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

Git

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

Читайте также:

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

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

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

Примечание: Если вам больше нравится другая операционная система (например, macOS на локальной машине), вы можете использовать ее, если она отвечает требованиям Ansible.

Для начала вам нужно:

  • Создать аккаунт вашего хостинг-провайдера.
  • Добавить ключ SSH в свою учетную запись.
  • Получить токен API с правом на чтение и запись.

Итак, теперь нужно создать сервер со  следующими характеристиками:

  • Образ: Ubuntu 18.04 x64.
  • Размер: 1 Гб (стандартный).
  • Регион: на ваше усмотрение.
  • Дополнительные параметры: частная сеть, резервное копирование, пользовательские данные и мониторинг.
  • SSH-ключи: укажите свои ключи.

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

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

Примечание: При желании вы также можете установить это программное обеспечение вручную. 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. Сам сервер запустится быстро, но команды в пользовательских данных займут некоторое время. Вы можете войти на сервер и посмотреть /var/log/cloud-init-output.log, чтобы проверить статус.

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

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

Вы увидите открытый и закрытый ключ в /home/your_username/.ssh/.

Заключение

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

Читайте такжеИнфраструктура для бизнеса: высокая доступность

Tags: , , ,