当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 如何使用 PowerShell 快速构建 Azure 规模集

作者:精品下载站 日期:2024-12-14 20:52:47 浏览:11 分类:玩电脑

如何使用 PowerShell 快速构建 Azure 规模集


Azure 虚拟机规模集是 Azure 中 VM 的一项便捷的高可用性功能。使用 Azure PowerShell,您可以使用 PowerShell 构建 Azure 规模集来自动执行任务,这是一个巨大的增值。

执行 Azure VM 规模集部署是开箱即用的自动缩放和高可用性的好方法。 Azure VM 规模集具有许多内置功能,例如自动扩展以满足需求、跨可用区部署等等。

当您需要部署 Azure 虚拟机规模集时,您有几个选项,例如使用 Azure 门户、AZ CLI 或 PowerShell。在本文中,我们将深入了解如何构建一些 Azure PowerShell 代码来创建规模集并配置它们。

本文的大部分代码是由我的朋友 Josh Duffney 在学习 AZ-103 认证时创建的。我选择围绕它编写一个教程,因为我发现该代码非常有用。了解 Josh 在他的博客上所做的事情。

教程概述

在本文/教程中,您将了解如何使用 PowerShell 围绕 Azure VM 规模集执行许多常见操作:

  • 创建 Azure VM 规模集
  • 创建网络安全组 (NSG)
  • 将 NSG 分配给规模集的子网
  • 将 IIS 和示例应用程序部署到规模集
  • 将其他 VM 添加到规模集
  • 允许所有规模集实例的入站 RDP
  • 拆除规模集

通过以这种方式分解操作,您将能够全面了解如何管理 Azure VM 规模集的整个生命周期。

先决条件

要遵循本教程,您应该在开始之前满足一些先决条件。在尝试执行本教程中的步骤之前,请确保满足所有这些要求。

  • Azure 订阅。如果您还没有,可以免费获取 Azure。
  • 已设置 Azure Cloud Shell 并登录。为了避免安装任何依赖项,您将看到的所有示例都将在 Azure Cloud Shell 内运行。
  • 假设 Azure 全局管理员权限。显然,懒惰在这里发挥了很大的作用。您不必成为全局管理员,但您知道我的意思。

如果您没有任何 Azure 积分,按照本教程操作将产生一些费用。然而,它们应该是最小的。完成后别忘了清理!

使用 PowerShell 创建 Azure 规模集的选项

您的第一个任务是使用 New-AzVmss cmdlet 创建 Azure VM 规模集。为了管理高可用性和冗余,规模集由不同类型的资源组成,例如虚拟网络、负载均衡器、公共 IP 地址和 VM 实例本身。 New-AzVMss cmdlet 负责处理所有这些事情。

使用 New-AzVmss cmdlet 创建 VM 规模集时,有两个选项。您可以使用简单的参数集来快速创建预设比例集并为您假设大部分配置,也可以单独提供每个配置选项。

使用 PowerShell 创建 Azure VM 规模集

在本教程中,您将重点关注分别指定每个资源,但如果您想创建一个简单的规模集,则只需使用两个参数即可实现: 凭据VMScaleSetNameCredential 参数是每个虚拟机实例的本地管理员帐户的 PSCredential 对象。

您可以查看下面的示例,了解如何使用 PowerShell 创建规模集所需的一切。

$vmssName = 'vmssScaleSet-simple'
$vmPassword = ConvertTo-SecureString '<somepassword>' -AsPlainText -Force
$vmCred = New-Object System.Management.Automation.PSCredential('<somelocaladminaccountname>', $vmPassword)

## Create a VMSS using the default settings
New-AzVmss -Credential $vmCred -VMScaleSetName $vmssName

开始后,您将看到一个进度指示器,如下所示。

[玩转系统] 如何使用 PowerShell 快速构建 Azure 规模集

完成后,简单的路线将帮助您:

  • 资源组
  • 虚拟网络
  • 负载均衡器
  • 公共IP
  • 具有两个 Windows 实例的 VMSS

您可以通过下面的 Azure 门户查看 vmssScaleSet-simple 资源组的外观。

[玩转系统] 如何使用 PowerShell 快速构建 Azure 规模集

创建 Azure VM 规模集:更好的方法

在本教程中,您不会采取简单的方法。你需要了解这些东西是如何工作的!本文的其余部分将基于规模集构建,您可以自行定义规模集的每个资源,以使用 PowerShell 创建 Azure 规模集。

上面介绍的简单参数集涵盖了创建包括资源组在内的所有内容,但您自己则不然。如果使用 New-AzVmss cmdlet 指定每个资源支持规模集,则必须自行创建资源组。没什么大不了的。

要使用 Azure PowerShell 创建资源组,请使用 New-AzResourceGroup cmdlet 提供资源组的名称和区域/位置。

以下示例在 eastus 区域创建一个名为 vmssPractice 的资源组。

PS Azure:\> New-AzResourceGroup -Name vmssPractice -Location eastus

ResourceGroupName : vmssPractice
Location          : eastus
ProvisioningState : Succeeded
Tags              :
ResourceId        : /subscriptions/1427e7fb-a488-4ec5-be44-30ac10ca2e95/resourceGroups/vmssPractice

创建资源后,您可以再次调用 New-AzVmss cmdlet。但这一次,您自己定义每个资源名称。为此,您会注意到下面有用于命名构建规模集的每个资源(例如子网、负载均衡器等)的选项。

升级政策

请注意,下面您使用的是 UpgradePolicyMode 参数。在本教程的后面部分,您将修改比例集,这很重要。升级策略决定在规模集模型发生更改时如何使虚拟机保持最新状态。

规模集模型是规模集在 Azure 中的表示方式。它是规模集外观的架构。每个规模集中都有一个规模集实例,表示当前运行时状态或规模集现在的样子。

升级策略的三种模式是:

  • 自动 - 虚拟机可能会以随机顺序重新启动,甚至同时暂时关闭所有虚拟机。
  • 滚动 - 规模集将更新分批部署到实例,并在批次之间设置可选的暂停时间。
  • 手动 - 启动更新时现有虚拟机不会发生任何变化。

由于本教程只是一个示例,因此将 UpgradePolicyMode 设置为 Automatic 以确保您稍后执行此操作时虚拟机实例会自动更新。

$vmPassword = ConvertTo-SecureString '<somepassword>' -AsPlainText -Force
$vmCred = New-Object System.Management.Automation.PSCredential('<somelocaladminusername>', $vmPassword)

$params = @{
    ResourceGroupName = 'vmssPractice'
    Location = 'eastus'
    VmScaleSetName = 'vmssScaleSet'
    SubnetName = 'vmssSubnet'
    PublicIpAddressName = 'vmssPublicIpAddress'
    LoadBalancerName = 'vmssLoadBalancer'
    UpgradePolicyMode = 'Automatic'
    Credential = $vmCred
}

New-AzVmss @params

即使升级策略设置为自动,并不意味着规模集会在模型更新时自动更新。这只是定义了更新时虚拟机如何重新启动。请参阅此博文了解更多信息。

创建规模集和相关资源需要几分钟时间。

使用 PowerShell 完成 Azure 规模集的第一步。

设置网络

现在已经创建了规模集和所有相关资源,是时候执行一些常见的维护操作以使用 PowerShell 构建 Azure 规模集了。按原样,该规模集对 Internet 完全开放。你需要将其锁定。为此,您首先需要创建一个网络安全组 (NSG)。

设置网络安全组 (NSG)

要为规模集创建 NSG,您将:

  1. 使用 Get-AzVmss 获取规模集模型。
  2. 创建一个表示您要配置的规则的配置对象。
  3. 使用新创建的规则创建 NSG。

首先,使用 Get-AzVmss cmdlet 查找新创建的规模集模型,如下所示。

$vmss = Get-AzVmss -ResourceGroupName vmssPractice -VMScaleSetName vmssScaleSet

Get-AzVmss cmdlet 实际上并不查询规模集本身。相反,它查询规模集的模型。要查询规模集的实时视图,可以使用InstanceView参数。

创建网络安全规则

接下来,您需要创建网络安全规则,作为使用 PowerShell 创建 Azure 规模集的先决条件。网络安全规则代表最终将应用于 NSG 的所有防火墙规则。将安全规则视为类似于 Windows 防火墙规则的规则。

若要创建网络安全规则,请使用 New-AzNetworkSecurityRuleConfig cmdlet。由于您最终将向此规模集部署 IIS Web 服务,因此需要允许 HTTP 流量到达负载均衡器。您可以查看下面的示例来了解如何执行此操作。

下面的示例创建一个名为 allowHTTP 的规则,允许所有通过端口 80 进入的 TCP 流量访问负载均衡器。输出将保存到 $nsgRule 变量以传递到下一个命令。

$nsgRuleParams = @{
    Name = 'allowHTTP'
    Protocol = 'Tcp'
    Direction = 'Inbound'
    Priority = 200
    SourceAddressPrefix = '*'
    SourcePortRange = '*'
    DestinationAddressPrefix = '*'
    DestinationPortRange = 80
    Access = 'Allow'
}

$nsgRule = New-AzNetworkSecurityRuleConfig @nsgRuleParams

创建网络安全组

创建规则后,您现在可以使用 New-AzNetworkSecurityGroup cmdlet 创建 NSG 并应用规则,如下所示。

$nsgParams = @{
    ResourceGroupName = 'vmssPractice'
    Location = 'eastus'
    Name = 'vmssNSG'
    SecurityRules = $nsgRule
}

$nsg = New-AzNetworkSecurityGroup @nsgParams

将 NSG 分配给子网

创建规模集时,会使用它创建虚拟网络。创建 NSG 后,现在可以将该 NSG 分配到虚拟网络中的子网,以使用 PowerShell 创建 Azure 规模集。为此需要三个步骤:

  1. 获取创建的虚拟网络
  2. 将 NSG 添加到虚拟网络的子网配置
  3. 将更改应用到虚拟网络

首先,使用 Get-AzVirtualNetwork 查找虚拟网络。

$vnet = Get-AzVirtualNetwork -ResourceGroupName vmssPractice -Name vmssScaleSet

接下来,创建一个子网配置对象,使用 Set-AzVirtualNetworkSubnetConfig cmdlet 将 NSG“附加”到子网。由于虚拟网络可以有多个子网,因此下面您将确保仅选择第一个子网。

$subnet = $vnet.Subnets[0]
$subnetConfigParams = @{
    VirtualNetwork = $vnet
    Name = 'vmssSubnet'
    AddressPrefix = $subnet.AddressPrefix
    NetworkSecurityGroup = $nsg
}

$subnetConfig = Set-AzVirtualNetworkSubnetConfig @subnetConfigParams

最后,使用 Set-AzVirtualNetwork cmdlet 将新的子网更改应用到虚拟网络。

Set-AzVirtualNetwork -VirtualNetwork $vnet

您距离使用 PowerShell 创建 Azure 规模集又近了一步!

更新规模集模型

此时,规模集模型尚不知道已添加到 vNet 的 NSG。您现在必须更新它以反映此更改。为此,请使用 Update-AzVmss cmdlet 通过 PowerShell 更新 Azure 规模集。此 cmdlet 有一个名为 VirtualMachineScaleSet 的参数,它表示包含更新信息的规模集模型

通过提供资源组名称、规模集名称和更新的规模集模型,您现在可以使 VM 实例了解新添加的 NSG,如下所示。

$vmss = Get-AzVmss -ResourceGroupName vmssPractice -VMScaleSetName vmssScaleSet
Update-AzVmss -ResourceGroupName vmssPractice -Name vmssScaleSet -VirtualMachineScaleSet $vmss

部署示例应用程序

使用 PowerShell 创建 Azure 规模集只是手段的最终目的。在生产环境中,您将使用规模集来运行 Web 服务等工作负载。现在让我们将 IIS 安装到我们的规模集并创建一个简单的默认网页。

您可以在此处找到存储在 Microsoft GitHub 存储库中的简单示例 PowerShell 脚本。这个名为 automate-iis.ps1 的 PowerShell 脚本仅包含两行来安装 IIS 并创建默认网页,如下所示。

Add-WindowsFeature Web-Server
Set-Content -Path "C:\inetpub\wwwroot\Default.htm" -Value "Hello World from host $($env:computername) !"

要调用此脚本,请为 VM 规模集设置 Azure 自定义脚本扩展。您将使用 Add-AzVmssExtension cmdlet 来执行此操作,该 cmdlet 会从 GitHub 下载 automate-iis.ps1 PowerShell 脚本并运行它。

您可以在下面查看如何执行此操作的示例。

$publicSettings = @{
    "fileUris" = (,"https://raw.githubusercontent.com/Azure-Samples/compute-automation-configurations/master/automate-iis.ps1");
    "commandToExecute" = "powershell -ExecutionPolicy Unrestricted -File automate-iis.ps1"
}

$vmss = Get-AzVmss -ResourceGroupName vmssPractice -VMScaleSetName vmssScaleSet

$extParams = @{
    VirtualMachineScaleSet = $vmss
    Name = 'CustomScript'
    Publisher = 'Microsoft.Compute'
    Type = 'CustomScriptExtension'
    TypeHandlerVersion = 1.8
    Setting = $publicSettings
}

Add-AzVmssExtension @extParams

要使用 PowerShell 更新 Azure 规模集的所有 VM 实例,请再次更新规模集。

Update-AzVmss -ResourceGroupName vmssPractice -Name vmssScaleSet -VirtualMachineScaleSet $vmss

如果您查看 Azure 门户,您现在会看到规模集正在更新,如下面的屏幕截图所示。

[玩转系统] 如何使用 PowerShell 快速构建 Azure 规模集

更新完成后,您现在应该已安装 IIS 并在所有 VM 实例上设置默认网页。

验证应用程序部署

要验证更新是否已发生,请首先找到规模集的公共 DNS 名称,如下所示。

(Get-AzPublicIpAddress -Name vmssPublicIpAddress).DnsSettings.Fqdn

现在在浏览器中导航至http://。如果一切顺利,您应该会看到下面的网页。

[玩转系统] 如何使用 PowerShell 快速构建 Azure 规模集

扩展虚拟机集

假设您出色的 Web 应用程序正在获得大量流量,并且您需要向规模集添加更多实例。这样做只需要更新之前查询的规模集对象的单个属性。

通过将 SKU 容量设置为您需要的实例数量并将更新发送到规模集,规模集的实例数量很快就会增加。

$vmss.sku.capacity = 3

Update-AzVmss -ResourceGroupName vmssPractice -Name vmssScaleSet -VirtualMachineScaleSet $vmss

这会预配一个新的 VM 实例并将其添加到规模集。该过程可能需要几分钟。要有耐心!

把它撕下来

由于这只是一个有关使用 PowerShell 创建 Azure 规模集的教程,现在让我们来分解一下您已完成的工作。由于规模集及其包含的所有内容都位于单个资源组中,因此您现在只需删除该资源组即可。这将清理本文中配置的所有资源。

Remove-AzResourceGroup -ResourceGroupName vmssPractice

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯