Microsoft Azure云中漂亮的组件结构

Microsoft Azure是世界上最大的云平台之一。 尽管我对创建它的公司缺乏同情,但我必须承认,与竞争对手相比,该平台具有许多便利设施。 但美中不足的是没有一桶蜂蜜,而Microsoft Azure中的这把汤匙就是系统组件的名称。 如果只需两次单击即可在AWS中重命名组件,则在Azure中将名称紧密绑定到组件,并且有时不需手鼓跳舞就可以更改它们。 因此,与Azure一起初始创建正确的结构非常重要。

图片

因此,让我们尝试在Microsoft Azure中创建一个名称为server-01和默认设置的虚拟机。 下图清楚地显示了最终的混乱情况。

图片

如果一切都适合您,那么您将无法继续阅读。 好吧,如果您像我一样喜欢管理中的总订单,那么我冒着为过去几年一直在使用的Microsoft Azure组件提出漂亮的命名方案的风险。

此方案使您可以将整个系统带入以下统一形式:
{组件组} __ {元素}
{Component}-{Number} __ {Element}-{Number}

所以,让我们开始吧...

添加资源组

Resource groups >> +Add Resource group name: servers 

创建虚拟网络和子网

默认情况下,Microsoft Azure将子网扩展到整个虚拟网络。 这不是很方便,因为如果有必要,添加新的子网(例如,VPN子网)将非常困难。 因此,我通常为虚拟网络和子网提供最后两个八位位组(掩码16),最后一个八位位组(掩码24)。

 Virtual networks >> +Add Name: servers__network Address space: 10.0.0.0/16 Subnet: Name: default Address range: 10.0.0.0/24 Network interfaces: +Add Name: server-01__ip-private-01 Virtual network: servers__network Subnet: default Private IP address: Static/10.0.0.101 

Azure使用子网的前几个地址(10.0.0.01 ... 03)来满足其需要,因此我将工作地址移到了100以上的范围。因此,服务器号将对应IP地址的最后一位:server-01 = 10.0.0.101, server-02 = 10.0.0.102,server-43 = 10.0.0.143,依此类推。

外部地址和安全组

如果计划将虚拟机向外部看,则创建一个公共地址和一个安全组。

 Public IP addresses: +Add Name: server-01__ip-public-01 IP address assignment: Static Public IP addresses >>  server-01__ip-public-01 >> Associate: Resource type >> Network interface: server-01__ip-private-01 

在Azure中,可以为一台计算机和整个子网创建一个安全组。 根据变量,名称会有所不同。

 Network security groups >> +Add 

单个主机的安全组选项:

  Name: server-01__security-group Network interfaces >> +Associate: server-01__ip-private-01 

子网的安全组:

  Name: servers__network-security-group Subnets >> +Associate: Virtual network: servers__network Subnet: default 

驱动器

不幸的是,Azure不允许您使用任意名称创建磁盘,因此在这里您将需要通过创建虚拟虚拟机来解决该问题,然后将其磁盘用作空白来创建工作机。

创建一个虚拟虚拟机

 Virtual machines >> +Add Basics: Name: server-01-raw VM disk type: Premium SSD Username: your-name SSH public key: your-public-key Settings: Availability set: None Network: servers__network Subnet: default Public IP address: None Select public inbound ports: No public inbound ports Monitoring: Disabled 

创建虚拟计算机后,可以删除所有标有原始后缀的组件(包括计算机本身),但磁盘除外。

我们删除磁盘快照

 Disks >>  disk server-01-raw_OsDisk_... >> +Create snapshot Name: server-01-raw-snapshot 

根据快照,创建一个新的工作磁盘:

 Disks >> +Add Name: server-01__disk-01 Source type: Snapshot Source snapshot: server-01-raw-snapshot 

我们在新磁盘的基础上部署工作机

 Disks >>  server-01__disk-01 >> + Create VM Basics: Name: server-01 Settings: Availability set: None Network: servers__network Subnet: default Public IP address: None Select public inbound ports: No public inbound ports Monitoring: Disabled 

网络接口

Microsoft的另一个遗漏-从GUI中的磁盘创建虚拟机时,无法将先前创建的网络接口附加到该虚拟机。 因此,我们停止机器,删除网络接口,并将上面创建的接口连接到它。

 Virtual machines >>  VM server-01 >> Stop Virtual machines >>  VM server-01 >> Networking: Attach network interface >> server-01__ip-private-01 Detach network interface >> server-01982 

垃圾处理

最后的操作是清除操作过程中遗留的碎屑。

删除:

server-01982网络接口,
安全组server-01-nsg,
从虚拟机驱动器:server-01-raw_OsDisk ...
快照服务器01原始快照

结果如下:

图片

命令行界面


您可能已经注意到,将美丽带到Azure是一项相当麻烦的任务。 但是,如果使用命令行(CLI),一切都会大大简化。 Microsoft Azure为其本机PowerShell和Linux控制台提供了CLI。 后面的选项将在下面描述。

登录名:

 az login -u AzureUserName 

获取可用位置列表

 az account list-locations 

获取虚拟机大小列表:

 az vm list-sizes --location locationName 

我们设置网络和虚拟机参数的列表(在所有后续命令中,此数据将通过变量传输):

 location="westindia" resource_group="servers" virt_network="servers__network" virt_network_range="10.0.0.0/16" subnet="default" subnet_range="10.0.0.0/24" user="username" ssh_key="ssh-public-key" name="server-01" image="UbuntuLTS" ip="10.0.0.101" interface_suffix="__ip-private-01" disk_suffix="__disk-01" size="Standard_B1s" ### SSD = "Premium_LRS"; HDD = "Standard_LRS" storage_type="Premium_LRS" 

创建一个资源组:

 az group create --location ${location} --name ${resource_group} 

创建一个虚拟网络和子网:

 az network vnet create --location ${location} --resource-group ${resource_group} --name ${virt_network} --address-prefixes ${virt_network_range} 

 az network vnet subnet create --resource-group ${resource_group} --vnet-name ${virt_network} --name ${subnet} --address-prefix ${subnet_range} 

创建一个网络接口:

 az network nic create --resource-group ${resource_group} --location ${location} --name ${name}${interface_suffix} --subnet ${subnet} --vnet-name ${virt_network} --private-ip-address ${ip} 

创建一个虚拟虚拟机:

 az vm create --name ${name} --admin-username ${user} --ssh-key-value "${ssh_key}" --resource-group ${resource_group} --location ${location} --image ${image} --size ${size} --nics ${name}${interface_suffix} --storage-sku ${storage_type} 

标准化磁盘:

 az vm stop --name ${name} --resource-group ${resource_group} disk_old=$(az vm get-instance-view --name ${name} --resource-group ${resource_group} | grep -o "${name}_OsDisk[0-9a-z\_]\{1,\}" | head -1) az disk create --location ${location} --resource-group ${resource_group} --name ${name}${disk_suffix} --source ${disk_old} --sku ${storage_type} 

我们删除虚拟机并部署工作机:

 az vm delete --name ${name} --resource-group ${resource_group} --yes az vm create --name ${name} --resource-group ${resource_group} --location ${location} --size ${size} --nics ${name}${interface_suffix} --attach-os-disk ${name}${disk_suffix} --os-type Linux ${availability_set_as_option} 

删除虚拟磁盘:

 az disk delete --resource-group ${resource_group} --name ${disk_old} --yes 

自动化技术


为了自动化在Microsoft Azure云中部署虚拟机的过程,我将上述所有命令组合到一个bash脚本azure-create-vm.sh中,该脚本可从Github中获取 。 在任何文本编辑器中打开脚本,输入数据,然后通过按几个键即可使用漂亮的名称部署虚拟机。

Source: https://habr.com/ru/post/zh-CN422211/


All Articles