Citrix DaaS™

动态预配计算机

Autoscale™ 提供了动态创建和删除计算机的功能。您可以通过使用 PowerShell 脚本来利用此功能。该脚本可帮助您根据当前的负载条件动态纵向扩展或缩减交付组中的计算机数量。

该脚本提供以下优势(以及更多):

  • 降低存储成本。与 Autoscale 帮助您降低计算成本不同,该脚本提供了一种更具成本效益的解决方案来预配计算机。

  • 有效处理负载变化。该脚本可帮助您根据当前交付组负载自动纵向扩展或缩减计算机数量,从而处理负载变化。

下载脚本

PowerShell 脚本可在 https://github.com/citrix/Powershell-Scripts/tree/master/XAXD/AutoscaleMcs 获取。

脚本的工作原理

重要提示:

  • 您不能在多个交付组中指定要由脚本管理的计算机目录。换句话说,如果多个交付组共享同一个计算机目录,则脚本无法与这些交付组中的任何一个配合使用。
  • 您不能从多个位置同时为同一个交付组运行脚本。

该脚本在交付组级别运行。它衡量负载(根据负载指数),然后确定是创建还是删除计算机。

通过此脚本创建的计算机将进行唯一标记(通过 ScriptTag 参数),以便以后可以识别它们。创建或删除计算机基于:

  • 交付组的最大负载百分比。指定创建计算机以供 Autoscale 处理额外负载的最高级别。当此阈值超出时,将分批创建计算机,以确保当前负载降至或低于该阈值。

  • 交付组的最小负载百分比。指定删除通过此脚本创建的且没有活动会话的计算机的最低级别。当此阈值超出时,将删除通过此脚本创建的且没有活动会话的计算机。

此脚本旨在监视交付组并在满足触发条件时创建或删除计算机。它按每次运行执行。这意味着您需要定期运行脚本,以便它能够按预期运行。我们建议您至少每五分钟运行一次脚本。这样做可以提高整体响应能力。

该脚本依赖以下参数才能工作:

Parameter Type Default value Description
DeliveryGroupName String X 要监视以确定当前负载的交付组的名称。您可以提供以分号分隔的名称列表。例如:Invoke-AutoscaleMachineCreation.ps1 -DeliveryGroupName 'dg1;dg2;dg3' -XdProfileName profile
XdProfileName String X 用于对远程服务器进行身份验证的配置文件的名称。有关使用此参数对远程服务器进行身份验证的详细信息,请参阅身份验证 API
HighWatermark Integer 80 创建计算机以供 Autoscale 处理额外负载的最大负载百分比(以负载指数表示)。
LowWatermark Integer 15 删除通过此脚本创建的且没有活动会话的计算机的最小负载百分比。
MachineCatalogName String X 要在其中创建计算机的计算机目录的名称。
MaximumCreatedMachines Integer -1 可以在指定交付组中创建的最大计算机数量。如果该值小于或等于 0,则脚本不会处理此参数。
ScriptTag String AutoscaledScripted 应用于通过脚本创建的计算机的标记。
EventLogSource String X 显示在 Windows 事件查看器中的源名称。

注意:

“X”表示未为此参数指定默认值。

默认情况下,脚本首次运行时需要所有参数(ScriptTag 参数除外)。在后续运行中,只需要 DeliveryGroupNameXdProfileName 参数。您可以选择更新最小和最大负载百分比。

请注意,首次运行脚本时必须指定单个交付组。例如,如果您在首次运行脚本时使用以下 PowerShell 命令指定两个交付组,则脚本将起作用:

  • Invoke-AutoscaleMachineCreations.ps1 -DeliveryGroupName 'dg1;dg2' -XdProfileName profile -LowWatermark 20 -HighWatermark 70 -MachineCatalogName 'cat1'\

相反,首先使用以下命令指定单个交付组(在此示例中为 dg1):

  • Invoke-AutoscaleMachineCreations.ps1 -DeliveryGroupName 'dg1' -XdProfileName profile -LowWatermark 20 -HighWatermark 70 -MachineCatalogName 'cat1'\

然后,使用以下命令运行第二个交付组的脚本(在此示例中为 dg2):

  • Invoke-AutoscaleMachineCreations.ps1 -DeliveryGroupName 'dg1;dg2' -XdProfileName profile

先决条件

要运行脚本,请确保满足以下先决条件:

  • 计算机位于正在创建计算机的同一域中。
  • 该计算机上已安装远程 PowerShell SDK。有关远程 PowerShell SDK 的详细信息,请参阅 SDK 和 API
  • 其他先决条件:
    • 要监视的交付组
    • 通过 Machine Creation Services™ (MCS) 创建的具有关联预配方案(模板)的计算机目录
    • 与预配方案关联的身份池
    • 要创建的事件日志源,以便脚本可以将信息写入 Windows 事件日志
    • 允许您对远程服务器进行身份验证的安全客户端

权限、建议和通知

运行脚本时,请记住以下几点:

  • 要使用 XdProfileName 参数对远程服务器进行身份验证,您需要使用在 Citrix Cloud 控制台中创建的 API 访问安全客户端来定义身份验证配置文件。有关详细信息,请参阅身份验证 API

  • 您必须具有在 Active Directory 中创建和删除计算机帐户的权限。

  • 我们建议您使用 Windows 任务计划程序自动执行 PowerShell 脚本。有关详细信息,请参阅使用 Windows 任务计划程序创建自动化任务

  • 如果您希望脚本将信息(例如,故障和操作)写入 Windows 事件日志,则需要首先使用 New-EventLog cmdlet 指定源名称。例如,New-EventLog -LogName Application –Source <sourceName>。然后,您可以在 Windows 事件查看器的应用程序窗格中查看事件。

  • 如果在脚本执行期间发生错误,请手动执行脚本,然后通过执行脚本检查来排除故障。

身份验证 API

在运行脚本之前,您需要使用 API 访问安全客户端定义身份验证配置文件。您必须使用脚本将运行的同一帐户创建安全客户端。

安全客户端必须具有以下权限:

  • 使用 MCS 创建和删除计算机。
  • 编辑计算机目录(添加和删除计算机)。
  • 编辑交付组(添加和删除计算机)。

创建安全客户端时,请确保您的帐户具有上述权限,因为安全客户端会自动继承您当前帐户的权限。

要创建安全客户端,请完成以下步骤:

  1. 登录 Citrix Cloud™,然后导航到身份和访问管理 > API 访问

  2. 键入安全客户端的名称,然后单击创建客户端

要对远程服务器进行身份验证,请使用 Set-XDCredentials PowerShell 命令。例如:

  • Set-XDCredentials -APIKey <key_id> -CustomerId <customer_id> -SecretKey <secret_key> -StoreAs <name specified by the XdProfileName parameter>

使用 Windows 任务计划程序创建自动化任务

您可以使用 Windows 任务计划程序自动执行 PowerShell 脚本。这样做可以让脚本在特定时间间隔或满足特定条件时自动运行。要使用 Windows 任务计划程序执行此脚本,请务必在创建任务 > 设置选项卡上选择不启动新实例。这样做可以防止 Windows 任务计划程序在脚本已在运行时启动脚本的新实例。

脚本执行示例

请参阅下面的脚本执行示例。请注意,脚本文件被多次调用。在此示例中,为了模拟负载,启动了一个会话,然后将其终止。

脚本执行示例

脚本故障排除清单

脚本将信息(例如,错误和操作)写入 Windows 事件日志。这些信息可帮助您解决执行脚本时遇到的问题。记住以下故障排除清单可能会有所帮助:

  • 无法与远程服务器通信。可能的措施:
    • 验证您与服务器的连接。
    • 验证您使用的 API 密钥是否有效。
  • 无法创建计算机。可能的措施:
    • 验证运行脚本的用户帐户是否具有足够的权限在域中创建用户帐户。
    • 验证创建 API 密钥的用户是否具有足够的权限使用 MCS 预配计算机。
    • 验证计算机目录的有效性(即其映像仍然存在且状态良好)。
  • 无法将计算机添加到计算机目录或交付组。可能的措施:
    • 验证创建 API 密钥的用户是否具有足够的权限将计算机添加到计算机目录和交付组以及从中删除计算机。
动态预配计算机