0

据我了解,Windows 虚拟桌面的主机池可以配置为(将用户分配给具有免费资源的 VM)或个人(每个用户专用 VM)模式。

我有一些用户有特殊需求(可用的应用程序、配置和 VM 资源)和不可预测的使用时间。是否可以为它们分配特定的机器并将它们的生命周期与用户登录联系起来?我想要实现的是在用户注销或关闭 VM 时关闭并取消分配 VM,并在登录时自动启动它(接受一些初始延迟),仅在实际需要时为 VM 付费。

4

2 回答 2

1

在非工作时间启动/停止 VM

它按用户定义的计划启动或停止计算机,通过 Azure Monitor 日志提供见解,并使用操作组发送可选电子邮件。在大多数情况下,可以在 Azure 资源管理器和经典 VM 上启用该功能。

此功能使用Start-AzVm cmdlet 来启动 VM。它使用Stop-AzVM来停止 VM。

先决条件

  1. 在非工作时间启动/停止 VM 的运行手册功能使用Azure 运行方式帐户。运行方式帐户是首选的身份验证方法,因为它使用证书身份验证而不是可能会过期或经常更改的密码。

  2. 存储 Runbook 作业日志和作业流结果的Azure Monitor Log Analytics 工作区在工作区中进行查询和分析。自动化帐户和 Log Analytics 工作区需要位于同一订阅和受支持的区域中。工作区需要已经存在,您不能在部署此功能期间创建新工作区。

推荐:使用单独的自动化帐户来处理为在非工作时间启动/停止 VM 功能启用的 VM。Azure 模块版本经常升级,它们的参数可能会发生变化。该功能不会以相同的节奏升级,并且可能无法与它使用的较新版本的 cmdlet 一起使用。在将更新的模块导入您的生产自动化帐户之前,我们建议您将它们导入测试自动化帐户以验证没有任何兼容性问题。

权限

您必须具有特定权限才能启用在非工作时间启动/停止 VM 功能的 VM。根据功能是使用预先创建的自动化帐户和 Log Analytics 工作区还是创建新帐户和工作区,权限会有所不同。

如果您是订阅的参与者和 Azure Active Directory (AD) 租户中的全局管理员,则无需配置权限。如果您没有这些权限或需要配置自定义角色,请确保您具有下述权限。

操作手册

以下链接列出了该功能部署到您的自动化帐户的运行手册。不要更改 Runbook 代码。相反,为新功能编写自己的运行手册。

不要直接运行任何名称附加了 child 的 Runbook。

所有父 Runbook 都包含 WhatIf 参数。当设置为 True 时,该参数支持详细说明在没有该参数的情况下运行 Runbook 时所采取的确切行为,并验证目标 VM 是否正确。仅当 WhatIf 参数设置为 False 时,Runbook 才会执行其定义的操作。

主要的默认运行手册:

  1. ScheduledStartStop_Parent
  2. SequencedStartStop_Parent

变量(由 Runbook 使用)

列出了在您的自动化帐户中创建的变量。只修改前缀为 External 的变量。修改前缀为 Internal 的变量会导致不良影响。

与 Runbook 一起使用的主要变量:

  1. External_Start_ResourceGroupNames:用于启动操作的一个或多个资源组的逗号分隔列表。
  2. External_Stop_ResourceGroupNames:一个或多个以停止操作为目标的资源组的逗号分隔列表。
  3. External_ExcludeVMNames:以逗号分隔的要排除的 VM 名称列表,限制为 140 个 VM。如果将超过 140 个 VM 添加到列表中,指定要排除的 VM 可能会意外启动或停止。

时间表

不要启用所有计划,因为这样做可能会创建重叠的计划操作。最好确定您想要进行哪些优化并相应地修改它们。

  1. Scheduled_StopVM:每天在指定时间运行带有 Stop 参数的 ScheduledStopStart_Parent runbook。自动停止所有符合可变资产定义的规则的虚拟机。启用相关调度 Scheduled-StartVM。
  2. Scheduled_StartVM:每天在指定时间运行参数值为 Start 的 ScheduledStopStart_Parent runbook。自动启动所有符合可变资产定义的规则的虚拟机。启用相关调度 Scheduled-StopVM。
  3. Sequenced-StopVM:每周五在指定时间运行参数值为 Stop 的 Sequenced_StopStop_Parent runbook。按顺序(升序)停止所有带有由适当变量定义的 SequenceStop 标记的 VM。有关标记值和资产变量的更多信息,请参阅 Runbook。启用相关计划,Sequenced-StartVM。
  4. Sequenced-StartVM:每周一在指定时间运行参数值为 Start 的 SequencedStopStart_Parent runbook。按顺序(降序)启动所有带有由相应变量定义的 SequenceStart 标记的 VM。有关标签值和变量资产的更多信息,请参阅 Runbook。启用相关计划,Sequenced-StopVM。

如何在非工作时间启用配置启动/停止 VM。

  1. 搜索并选择自动化帐户
  2. 在自动化帐户页面上,从列表中选择您的自动化帐户。
  3. 在自动化帐户中,选择相关资源下的启动/停止 VM。在此处,您可以单击了解更多信息并启用该解决方案。如果您已经部署了该功能,您可以单击管理解决方案并在列表中找到它。

在此处输入图像描述

  1. 在所选部署的非工作时间启动/停止 VM 页面上,查看摘要信息,然后单击创建。

在此处输入图像描述

创建资源后,将显示“添加解决方案”页面。系统会提示您配置该功能,然后才能将其导入您的自动化帐户。

在此处输入图像描述

  1. 在添加解决方案页面上,选择工作区。从列表中选择现有的 Log Analytics 工作区。如果在与工作区相同的受支持区域中没有自动化帐户,您可以在下一步中创建一个新的自动化帐户。

  2. 如果在受支持的区域中没有可用的自动化帐户作为工作区,则在添加解决方案页面上,选择自动化帐户。您可以通过选择创建自动化帐户来创建新的自动化帐户以与之关联,然后在添加自动化帐户页面上的名称字段中提供自动化帐户的名称。

所有其他选项都会根据所选的 Log Analytics 工作区自动填充。您无法修改这些选项。Azure 运行方式帐户是该功能随附的 Runbook 的默认身份验证方法。

单击确定后,将验证配置选项并创建自动化帐户。您可以在菜单的通知下跟踪其进度。

  1. 在添加解决方案页面上,选择配置参数。出现参数页面。

在此处输入图像描述

  1. 为目标资源组名称字段指定一个值。该字段定义包含要管理的功能的 VM 的组名称。您可以输入多个名称并使用逗号分隔名称(值不区分大小写)。如果要针对订阅中所有资源组中的 VM,则支持使用通配符。这些值存储在 External_Start_ResourceGroupNames 和 External_Stop_ResourceGroupNames 变量中。

目标资源组名称的默认值为 *。此设置针对订阅中的所有 VM。如果您不希望该功能以订阅中的所有 VM 为目标,则必须在选择计划之前提供资源组名称列表。

  • 为 VM 排除列表(字符串)字段指定一个值。此值是目标资源组中一个或多个虚拟机的名称。您可以输入多个名称并使用逗号分隔名称(值不区分大小写)。支持使用通配符。此值存储在 External_ExcludeVMNames 变量中。

  • 使用计划字段来选择按功能管理 VM 的计划。为您的日程选择开始日期和时间,以创建从所选时间开始的重复每日日程。无法选择其他地区。要在配置功能后将计划配置到您的特定时区,请参阅修改启动和关闭计划。

  1. 要从操作组接收电子邮件通知,请在电子邮件通知字段中接受默认值是,并提供有效的电子邮件地址。如果您选择否但稍后决定要接收电子邮件通知,您可以更新使用逗号分隔的有效电子邮件地址创建的操作组。在订阅中创建了以下警报规则:
  • AutoStop_VM_Child
  • Scheduled_StartStop_Parent
  • Sequenced_StartStop_Parent
  1. 配置该功能所需的初始设置后,单击“确定”关闭“参数”页面。

  2. 单击创建。验证所有设置后,该功能将部署到您的订阅。此过程可能需要几秒钟才能完成,您可以在菜单的通知下跟踪其进度。

场景 1:按计划启动/停止 VM

此方案是您在非工作时间首次部署启动/停止 VM 时的默认配置。例如,您可以将该功能配置为在晚上下班时停止订阅中的所有 VM,并在早上回到办公室时启动它们。在部署期间配置 Scheduled-StartVM 和 Scheduled-StopVM 计划时,它们会启动和停止目标 VM。

支持将该功能配置为仅停止 VM。请参阅修改启动和关闭计划以了解如何配置自定义计划。

当您配置计划时间参数时,该功能使用的时区是您当前的时区。但是,Azure 自动化将其以 UTC 格式存储在 Azure 自动化中。您不必进行任何时区转换,因为这是在机器部署期间处理的。

要控制范围内的 VM,请配置以下变量:External_Start_ResourceGroupNames、External_Stop_ResourceGroupNames 和 External_ExcludeVMNames。

您可以启用针对订阅和资源组的操作,或针对特定的 VM 列表,但不能同时启用。

按 VM 列表定位启动和停止操作

  1. 运行 ScheduledStartStop_Parent runbook,并将 ACTION 设置为启动。

  2. 在 VMList 参数字段中添加以逗号分隔的 VM 列表(不带空格)。一个示例列表是 vm1、vm2、vm3。

  3. 将 WHATIF 参数字段设置为 True 以预览您的更改。

  4. 使用逗号分隔的 VM(VM1、VM2、VM3)列表配置 External_ExcludeVMNames 变量,逗号分隔值之间没有空格。

此方案不支持 External_Start_ResourceGroupNames 和 External_Stop_ResourceGroupnames 变量。对于这种情况,您需要创建自己的自动化计划。有关详细信息,请参阅在 Azure 自动化中计划 Runbook。

场景二:使用标签依次启动/停止虚拟机

针对订阅和资源组的启动和停止操作

  1. 将具有正整数值的 sequencestart 和 sequencestop 标记添加到 External_Start_ResourceGroupNames 和 External_Stop_ResourceGroupNames 变量中的目标 VM。启动和停止操作按升序执行。若要了解如何标记 VM,请参阅在 Azure 中标记 Windows 虚拟机和在 Azure 中标记 Linux 虚拟机。

  2. 将调度 Sequenced-StartVM 和 Sequenced-StopVM 修改为满足您要求的日期和时间并启用调度。

  3. 运行 SequencedStartStop_Parent runbook,将 ACTION 设置为 start,将 WHATIF 设置为 True 以预览您的更改。

  4. 在针对生产 VM 实施之前,预览操作并进行任何必要的更改。准备就绪后,手动执行将参数设置为 False 的运行手册,或者让自动化计划 Sequenced-StartVM 和 Sequenced-StopVM 按照您指定的计划自动运行。

场景 3:根据 CPU 利用率自动启动或停止

在非工作时间启动/停止 VM 可以帮助管理订阅中运行 Azure 资源管理器和经典 VM 的成本,方法是评估在非高峰期(例如下班后)未使用的计算机,并在处理器出现时自动关闭它们利用率低于指定百分比。

默认情况下,该功能已预先配置为评估 CPU 百分比指标,以查看平均利用率是否为 5% 或更低。此场景由以下变量控制,如果默认值不符合您的要求,可以修改:

  • External_AutoStop_MetricName
  • External_AutoStop_Threshold
  • External_AutoStop_TimeAggregationOperator
  • External_AutoStop_TimeWindow
  • External_AutoStop_Frequency
  • External_AutoStop_Severity

您可以针对订阅和资源组启用和定位操作,或针对特定的 VM 列表。

运行 AutoStop_CreateAlert_Parent Runbook 时,它会验证目标订阅、资源组和 VM 是否存在。如果 VM 存在,则 Runbook 为父 Runbook 验证的每个 VM 调用 AutoStop_CreateAlert_Child Runbook。这本儿童手册:

  • 为每个经过验证的 VM 创建指标警报规则。
  • 如果 CPU 在指定的时间间隔内降至配置的阈值以下,则触发特定 VM 的 AutoStop_VM_Child Runbook。
  • 尝试停止 VM。

针对订阅中的所有 VM 执行自动停止操作

  1. 确保 External_Stop_ResourceGroupNames 变量为空或设置为 *(通配符)。

  2. [可选] 如果要从自动停止操作中排除某些 VM,可以将 VM 名称的逗号分隔列表添加到 External_ExcludeVMNames 变量。

  3. 启用 Schedule_AutoStop_CreateAlert_Parent 计划以运行,以便为订阅中的所有 VM 创建所需的停止 VM 指标警报规则。运行此类计划可让您在将新 VM 添加到订阅时创建新的指标警报规则。

针对资源组或多个资源组中的所有 VM 执行自动停止操作

  1. 将资源组名称的逗号分隔列表添加到 External_Stop_ResourceGroupNames 变量。

  2. 如果要从自动停止中排除某些 VM,可以将 VM 名称的逗号分隔列表添加到 External_ExcludeVMNames 变量。

  3. 启用 Schedule_AutoStop_CreateAlert_Parent 计划以运行以为资源组中的所有 VM 创建所需的停止 VM 指标警报规则。按计划运行此操作允许您在将新 VM 添加到资源组时创建新的指标警报规则。

将自动停止操作定位到 VM 列表

  1. 创建一个新计划并将其链接到 AutoStop_CreateAlert_Parent Runbook,将一个逗号分隔的 VM 名称列表添加到 VMList 参数。

  2. 或者,如果要从自动停止操作中排除某些 VM,可以将 VM 名称(不带空格)的逗号分隔列表添加到 External_ExcludeVMNames 变量。

配置电子邮件通知

  1. 在 Azure 门户中,单击“监视”下的“警报”,然后单击“管理操作”。在“管理操作”页面上,确保您位于“操作组”选项卡上。选择名为 StartStop_VM_Notification 的操作组。

在此处输入图像描述

  1. 在 StartStop_VM_Notification 页面上,Basics 部分将为您填写并且无法编辑,但 Display name 字段除外。编辑名称,或接受建议的名称。在通知部分,单击铅笔图标以编辑操作详细信息。这将打开电子邮件/SMS 消息/推送/语音窗格。更新电子邮件地址并单击确定以保存更改。

在此处输入图像描述

添加虚拟机

有两种方法可以确保在功能运行时包含 VM:

  1. 该功能的每个父 Runbook 都有一个 VMList 参数。在为您的情况安排适当的父 Runbook 时,您可以将虚拟机名称的逗号分隔列表(不带空格)传递给此参数,并且这些虚拟机将在功能运行时包含在内。

  2. 要选择多个 VM,请使用包含要启动或停止的 VM 的资源组名称设置 External_Start_ResourceGroupNames 和 External_Stop_ResourceGroupNames。您还可以将变量设置为 * 值,以使该功能针对订阅中的所有资源组运行。

排除虚拟机

要在非工作时间从停止/启动 VM 中排除 VM,可以将其名称添加到 External_ExcludeVMNames 变量。此变量是要从功能中排除的特定 VM(不带空格)的逗号分隔列表。此列表限制为 140 个 VM。如果向此列表中添加超过 140 个 VM,则设置为排除的 VM 可能会意外启动或停止。

修改启动和关闭计划

在此功能中管理启动和关闭计划的步骤与在 Azure 自动化中计划运行手册中概述的步骤相同。启动和停止 VM 需要单独的计划。

支持将该功能配置为仅在特定时间停止 VM。在这种情况下,您只需创建一个停止计划,而没有相应的开始计划。

  1. 确保已在 External_Stop_ResourceGroupNames 变量中添加了要关闭的 VM 的资源组。

  2. 为要关闭 VM 的时间创建自己的计划。

  3. 导航到 ScheduledStartStop_Parent runbook,然后单击计划。这允许您选择在上一步中创建的计划。

  4. 选择参数和运行设置并将操作字段设置为停止。

  5. 选择确定以保存您的更改。

于 2021-05-25T07:03:54.980 回答
1

我相信按照特定时间表启动/停止的自动化运行手册不符合“不可预测的使用时间”的要求。注销时使用 CPU 使用率会起作用(尽管即使实施得当,也可能会有一些可接受的延迟)。对于登录,我认为您有 Catch-22。据我了解,用户通常与 WVD 池绑定,如果该池不可用,则用户无法登录。因此,在登录时打开机器是行不通的,因为该用户甚至能够登录都需要事先打开机器。

假设您的用户不精通技术并且让他们访问 Start/Stop Runbook 可能不切实际,我能想到的唯一其他选择是使用 webhook 由自定义回调触发自动化 Runbook。请参阅Azure 自动化 Webhook。通过一个非常简单的 Web 界面和仅提供两个选项,(开始 WVD,停止 WVD)用户可以自己触发操作。

如果您想探索 Azure 逻辑应用等其他选项,您将获得更多事件侦听器。一些示例:用户可以将包含特定关键字的电子邮件发送到 Logic App 正在主动检查的收件箱,这将触发所需的操作。

我不知道您是否使用 Log Analytics 来收集 Azure 活动日志,但如果是,则与上述选项混合使用可以解决问题。

  1. 使用 Logic App 侦听事件或带有 webhook 的 Runbook,让用户可以在需要时灵活地打开机器。

  2. 使用 Logic App 和 Log Analytics 侦听计算机的注销事件或监视一段时间内的 CPU 利用率并根据结果采取行动。请参阅用于 VM 管理的 Azure 自动化解决方案

我必须自己实现类似的东西,这些是我想到的选项。我希望我能提供更具体的例子和实际用例。将来我到达那里时会更新这个。

编辑:与看似非常模糊的官方 Azure 文档相比,是否进行了一些挖掘并偶然发现了这个提供更多信息的 repo,带有屏幕截图和脚本

此外,由于我之前提到过 Log Analytics,这里有一个 Log Analytics 查询,您可以使用它来查找过去 24 小时内的开始/结束连接。

WVDConnections 
| where TimeGenerated > ago(24h) 
| where State == "Connected"  
| project CorrelationId , UserName , StartTime=TimeGenerated, SessionHostName
| join (WVDConnections  
    | where State == "Completed"  
    | project EndTime=TimeGenerated, CorrelationId)  
    on CorrelationId  
| parse SessionHostName with Host "domain" //If applicable use parser to remove part of a value to clean it up.
| project StartTime, EndTime, UserName, Host
| sort by StartTime desc
于 2021-05-27T14:04:52.427 回答