用于在Azure上部署群集的工具集

时间:2015-05-08 04:33:19

标签: azure cloud infrastructure packer terraform

我正在使用packer.io将单个VM部署到Azure。我的项目的下一步是将一组VM部署到Azure。在我看来,单独打包器是不够的(如果我错了,请纠正我)来协调集群的部署。所以,我需要其他东西来协调部署。由于它是一个集群,其中的每台机器都需要知道每台其他机器的IP地址(我的应用程序是一个分布式数据库。)我在看terraform.io,但是它的文档在Azure方面没有任何示例。有没有资源可以入手?我需要的是Terraform吗?你会推荐其他任何工具吗? 另一个复杂因素是我正在尝试为我的客户自动部署演示VM。我目前的工作流程是,使用打包程序,创建VM,安装我的数据库,创建必要的用户帐户,将某些登台目录上传到VM。然后我拍了一张快照来拍摄我的照片。稍后,我的客户端(到他们的Azure帐户)从VMDepot部署此映像。再次,目前,这只是一个单机群集。稍后,这将需要一组至少四台机器。是否有更好的工作流程来实现这一目标?

感谢您的时间。

1 个答案:

答案 0 :(得分: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地址集作为参数传递。 / p>

请注意,配置程序仅在初始创建资源时运行。对资源的更新不会重新运行配置程序。由于null资源实际上并不代表真正的基础架构资源,因此可以通过“污染”来轻松重新设置配置步骤,以便Terraform将在下一个apply重新创建它:

terraform taint null_resource.provision