Python Azure SDK:在同一个云服务中创建多个VM

时间:2015-07-02 04:50:59

标签: python azure

我正在尝试在同一个云服务中创建多个虚拟机(但在云服务中的独特部署中)。下面只生成一台名为mycluster-master-3的机器(给定self.numMasters == 3)。换句话说,实际上只创建了最后一台机器,并且可以在Azure管理门户中看到。请注意,使用self.numMasters == 3:

执行此代码时没有错误
for node in range(self.numMasters):
            logger.info('Deploying virtual machine "%s"...' % (self.clusterName + '-master-' + str(node + 1)))
            logger.info('Creating linuxConfig...')
            linuxConfig = azure.servicemanagement.LinuxConfigurationSet(
                host_name=self.clusterName + '-master-' + str(node + 1),
                user_name='auser',
                user_password='Auser123!',
                disable_ssh_password_authentication=True
            )
            # Destination storage account container/blob where the VM disk
            # will be created
            media_link = 'https://xxxxxxx.blob.core.windows.net/xxxxxx/%s.vhd' % (self.clusterName + '-master-' + str(node + 1))
            os_hd = azure.servicemanagement.OSVirtualHardDisk(image_name, media_link)
            logger.info('Creating virtual machine deployment...')
            self.sms.create_virtual_machine_deployment(
                service_name=serviceName,
                deployment_name=self.clusterName + '-master-' + str(node + 1),
                label=self.clusterName + '-master-' + str(node + 1),
                role_name=self.clusterName + '-master-' + str(node + 1),
                system_config=linuxConfig,
                os_virtual_hard_disk=os_hd,
                role_size=self.instanceType,
                deployment_slot='production'
            )

我认为在一个云服务中拥有所有虚拟机将允许他们在内部相互通信,而不会暴露给我的其他云服务中的计算机。但显然,云服务为其中的VM提供单个公共IP。也许这就是为什么只创建一个虚拟机的原因,但从概念上讲,我认为单个云服务可以有多个虚拟机实例。这让我感到困惑。 所以现在我想我需要为我的集群中的每个VM实例提供一个云服务。这样,所有机器都将具有公共IP,并且可以通过互联网访问。我还需要将所有云服务放在虚拟网络中。这样,它们之间的流量就不会通过互联网传输。我的假设是否正确?是否有更好的/其他方式来实现我想要的东西(一组机器安全快速地相互通信,但通过互联网可以通过SSH实现。)

1 个答案:

答案 0 :(得分:1)

首先 - 如果您要创建群集,请执行将VM放入单独的云服务中。请仔细阅读这篇文章:Manage the availbility of Virtual Mchines

然后转到主题:多个虚拟机可以在服务于共同目的(构建群集)时部署到同一个Cloud Service中。

同一个云服务中的虚拟机可以相互通信而无需上网,除了在虚拟机上自己打开防火墙外,无需你做一些特别的事情。

有关名称解析在Azure中的工作方式,您可以阅读以下文章:Name resolution for VM and role instances

每个云服务一个VIP - 就是这样。但为什么这应该是一个问题呢?请详细说明您为单个Cloud Service(您的群集)要求多个VIP(公共IP地址)的原因。以下文章将为您提供有关负载均衡群集VM的不同选项的信息:​​Load Balancing for Virtual Machines

关于如何为每个虚拟机访问配置SSH,您可以create Endpoints用于不同公共端口的虚拟机。

最后,但并非最不重要的是,您最终只创建了一个VM的原因。您只能在Cloud Service 中一次创建一个VM 。在第一个VM仍在创建时,您无法在同一个云服务中创建第二个VM。因此,VM1的创建应该100%完成,然后您可以在同一个Cloud Service中创建第二个VM。