2015-05-08 4 views
1

Я использую packer.io для развертывания одной виртуальной машины в Azure. Следующим шагом в моем проекте является развертывание кластера виртуальных машин в Azure. На самом деле, упаковщика недостаточно, по моему мнению (исправьте меня, если я ошибаюсь), чтобы организовать развертывание кластеров. Поэтому мне нужно что-то еще, чтобы организовать развертывание. Поскольку это кластер, каждая машина в нем должна знать IP-адреса каждой другой машины (мое приложение - это распределенная база данных.) Я смотрел на terraform.io, но в его документации нет примеров, когда дело доходит до Azure , Есть ли какие-то ресурсы для начала? Является ли terraform тем, что мне нужно? Любые другие инструменты, которые вы бы рекомендовали? Еще одно осложнение заключается в том, что я пытаюсь автоматизировать развертывание демонстрационных виртуальных машин для моих клиентов. Мой текущий рабочий процесс: использование упаковщика, создание виртуальной машины, установка моей базы данных, создание необходимых учетных записей пользователей, загрузка определенных промежуточных каталогов в виртуальную машину. Затем я делаю снимок, чтобы получить изображение. Позже это изображение развернуто из VMDepot моими клиентами (к их учетным записям Azure). Опять же, пока это всего лишь кластер с одной машиной. Позже это будет набор из не менее четырех машин. Есть ли лучший рабочий процесс для этого?Набор инструментов для развертывания кластеров на Azure

Спасибо за ваше время.

ответ

0

Terraform имеет an Azure provider, хотя я думаю, что он еще не был разработан в то время, когда вы задали свой первоначальный вопрос.

Terraform позволяет создавать несколько «копий» одного и того же ресурса, что полезно для создания кластеров. Однако передача IP-адресов всех хостов вместе в эти экземпляры может быть сложной, так как шаг обеспечения должен ждать завершения всех экземпляров. Общим обходным путем для такого рода секвенирования является использование недокументированного null_resource для выполнения отдельного этапа инициализации хостов. Например:

resource "azure_instance" "web" { 
    name = "terraform-test" 
    hosted_service_name = "${azure_hosted_service.example.name}" 
    image = "Ubuntu Server 14.04 LTS" 
    size = "Basic_A1" 
    storage_service_name = "yourstorage" 
    location = "West US" 
    username = "terraform" 
    password = "Pass!admin123" 

    # Tell Terraform to create 3 identical instances. 
    count = 3 

    endpoint { 
     name = "SSH" 
     protocol = "tcp" 
     public_port = 22 
     private_port = 22 
    } 
} 

resource "null_resource" "provision" { 
    count = 3 

    connection { 
     host = "${lookup(azura_instance.web.*.ip_address, count.index)}" 
     user = "terraform" 
     password = "Pass!admin123" 
    } 

    provisioner "remote-exec" { 
     inline = [ 
      "/usr/local/bin/configure-cluster ${join(" ", azura_instance.web.*.ip_address)}", 
     ] 
    } 
} 

Три копии нулевого ресурса все зависит от всех трех azure_instance ресурсов, поэтому она не будет создана и до устранения всех случаев не будут готовы. Когда все экземпляры готовы, каждый нулевой ресурс настроен на подключение к соответствующему экземпляру (по индексу), а затем запустит воображаемую команду configure-cluster на свой экземпляр, передав полный набор IP-адресов кластера в качестве аргументов.

Обратите внимание, что проводники выполняются только при первоначальном создании ресурса. Обновления ресурса не перезапускают устройства. Поскольку нулевой ресурс фактически не представляет реальной ресурс инфраструктуры, этапы выделения ресурсов могут быть легко повторно запустить с помощью «заражая» это так, что Terraform будет воссоздавать его на следующий apply:

terraform taint null_resource.provision 
Смежные вопросы