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

标签 azure cloud infrastructure packer terraform

我正在使用 packer.io 将单个 VM 部署到 Azure。我的项目的下一步是将 VM 集群部署到 Azure。在我看来(如果我错了,请纠正我)仅靠 Packer 不足以编排集群的部署。因此,我需要其他东西来协调部署。由于它是一个集群,其中的每台机器都需要知道其他机器的 IP 地址(我的应用程序是分布式数据库)。我正在查看 terraform.io,但其文档没有任何涉及 Azure 的示例。有任何资源可以开始吗? terraform 是我需要的吗?您还有其他推荐的工具吗? 另一个复杂之处是我正在尝试为我的客户自动部署演示虚拟机。我当前的工作流程是,使用打包器创建虚拟机,安装数据库,创建必要的用户帐户,将某些暂存目录上传到虚拟机。然后我拍一张快照来获取我的图像。后来,我的客户从 VMDepot 将该镜像部署到他们的 Azure 帐户。同样,目前这只是一个单机集群。稍后,这将需要是一组至少四台机器。是否有更好的工作流程来完成此任务?

感谢您的宝贵时间。

最佳答案

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 在下一次应用时重新创建它:

terraform taint null_resource.provision

关于azure - 用于在 Azure 上部署集群的工具集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30115810/

相关文章:

mysql - 将本地数据库转换为云托管的mysql数据库

docker - 如何使用 Kubernetes 访问带有自签名证书的私有(private) Docker 注册表?

javascript - 覆盖元素中的 JavaScript/HTML/CSS/etc... 文件

azure - 我应该在 Azure 文件存储中存储哪些文件?

Azure 云服务 CDN 字体 CORS 错误

ASP.NET Core 2 + Angular -> 如何设置 VSTS?

python - websocket数据采集设计

azure - 我应该在 test_configurations.json 中填充哪些字段?

azure - 我可以在 azure 中缓存我的表存储调用吗?

asp.net - 部署时如何显示维护页面?