程序笔记   发布时间:2022-06-07  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用 powershell 创建虚拟机大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

在进行与 azure 相关的自动化过程中,创建虚拟主机是避不开的操作。由于系统本身的复杂性,很难用一两条简单的命令完成虚拟主机的创建。所以专门写一篇文章来记录使用 PowerSHell 在 azure 上创建虚拟主机(Ubuntu 服务器)。
虚拟主机虚拟主机需要与其他的一些基础性组件关联在一起才能提供可用的服务,这些组件包括:网卡、public IP 地址、虚拟网络、网络安全组、存储等。下图包含了新建一个虚机所需要的其他组件:

使用 powershell 创建虚拟机

也就是说在我们创建虚机的同时也要把这些组件一一的创建出来。

定义变量

我们希望今后可以重用这个脚本,所以把用到的变量全都放在一起便于修改或使用脚本的参数进行初始化:

$rgname = "vmpool"
$rgLOCATIOn = "East Asia"
$subnetConfigname = $rgname + "subnet"
$vnetname = $rgname + "vnet"
$vmname = "vmxman"
$pipname = $vmname + "pip"
$nsgRule22name = "nsgRule22"
$nsgname = $rgname + "nsg"
$interfacename = $vmname + "nic"
$storagename = $rgname + "storage"
$storageType = "Standard_GRS"
$oSdiskname = $vmname + "OSdisk"
$vmSize = "Standard_D1"
$vmVersion = "16.04-LTS"
$username = "nick"
$userpassword = "123456"

希望没有吓到你。没错!就是需要这么多的变量,这里先不解释,在后面用到一个说一个。

创建登录虚机的凭据

通过这个脚本创建的虚机默认会创建一个用户,你需要指定用户的名称和登录密码(我们的创建的用户通过公钥认证登录,这个密码并不真正使用)。通过用户名和密码创建凭据对象:

$securepassword = ConvertTo-secureString $userpassword -AsPlaintext -Force
$userCred = New-Object System.Management.automation.PSCredential ($username,$securepassword)

创建 resource Group

创建一个新的 resource Group,这个虚机及其所有相关的组件都归属于同一个 resource Group:

New-AzureRmresourceGroup -name $rgname -LOCATIOn $rgLOCATIOn
在参数 LOCATIOn 中指定 resource Group 的位置为东亚(访问速度比较快)。

创建虚拟网络

接下来创建与虚拟网络。先创建一个子网的配置:

$subnetConfig = New-AzureRmVirtualNetworksubnetConfig -name $subnetConfigname -Addressprefix 192.168.1.0/24
然后创建具有一个子网的虚拟网络:
$vnet = New-AzureRmVirtualNetwork -resourceGroupname $rgname -LOCATIOn $rgLOCATIOn `
                 -name $vnetname -Addressprefix 192.168.0.0/16 -subnet $subnetConfig
最后为主机创建一个可以外网访问的 public IP:
$pip = New-AzureRmpublicIpaddress -resourceGroupname $rgname -LOCATIOn $rgLOCATIOn `
                 -AlLOCATIOnMethod Static -IDleTimeoutInminutes 4 `
                 -name $pipname
创建网络安全组

需要先配置一个允许访问 22 端口的规则:

$nsgRule22 = New-AzureRmNetworkSecurityRuleConfig -name $nsgRule22name -Protocol Tcp `
  -Direction Inbound -Priority 200 -sourceAddressprefix * -sourcePortRange * -DesTinationAddressprefix * `
  -DesTinationPortRange 22 -Access Allow
然后创建网络安全组:
$nsg = New-AzureRmNetworkSecurityGroup -resourceGroupname $rgname -LOCATIOn $rgLOCATIOn `
  -name $nsgname -SecurityRules $nsgRule22
创建网络接口

主机还缺一张网卡,所以为主机创建一个虚拟网卡:

$nic = New-AzureRmNetworkInterface -name $interfacename -resourceGroupname $rgname -LOCATIOn $rgLOCATIOn `
  -subnetID $vnet.subnets[0].ID -PublicIpaddressID $pip.ID -NetworkSecurityGroupID $nsg.ID
创建 Storage Account

虚机的磁盘文件是以 blob 的形式存放在 azure 的存储中的,所以我们需要创建一个 StorageAccount 来存储磁盘文件:

$storageAccount = New-AzureRmStorageAccount -resourceGroupname $rgname -name $storagename -Type $storageType -LOCATIOn $rgLOCATIOn

下面定义磁盘文件的存放位置和名称:

$oSdiskUri = $storageAccount.PriMaryEndpoints.blob.ToString() + "vhds/" + $oSdiskname + ".vhd"
创建虚机

下面创建虚机相关的配置:

$vmConfig = New-AzureRmVMConfig -Vmname $vmname -VMSize $vmSize | `
      Set-AzureRmVMOperaTingSystem -linux -Computername $vmname -Credential $userCred -disablepasswordAuthentication | `
      Set-AzureRmVMsourceImage -Publishername Canonical -Offer UbuntuServer -Skus $vmVersion -Version latest | `
      Add-AzureRmVMNetworkInterface -ID $nic.ID | `
      Set-AzureRmVMOSdisk -VhdUri $oSdiskUri -CreateOption FromImage
我们创建的虚机操作系统为 Ubuntu Server 16.04-LTS,禁止使用用户名密码的方式登录。要让用户能够通过公钥的方式登录必须提供用户的公钥:
$sshPublicKey = "nick's ssh public key"
下面的命令会把你提供的公钥写入到用户的 authorized_keys 文件中:
Add-AzureRmVMSshPublicKey -VM $vmconfig -KeyData $sshPublicKey -Path "/home/$username/.ssh/authorized_keys"
下面的命令真正的在 azure 上创建虚机:
New-AzureRmVM -resourceGroupname $rgname -LOCATIOn $rgLOCATIOn -VM $vmConfig
访问权限问题

在 azure 上执行操作需要用户先进行登录,那么在 PowerSHell 脚本中该如何做呢?
笔者在《Azure 基础:用 PowerSHell 自动登录》一文中有详细的介绍,有兴趣的朋友可以参

大佬总结

以上是大佬教程为你收集整理的使用 powershell 创建虚拟机全部内容,希望文章能够帮你解决使用 powershell 创建虚拟机所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。