在 Microsoft Azure 上部署 ASAv Auto Scale 解决方案

适用于 Azure 上 ASAv 的 Auto Scale 解决方案

关于 Auto Scale 解决方案

ASAv Auto Scale for Azure 是完整的无服务器实现,它利用 Azure 提供的无服务器基础架构(逻辑应用、Azure 函数、负载均衡器、安全组、虚拟机规模集等)。

ASAv Auto Scale for Azure 实现的一些主要功能包括:

  • 基于 Azure Resource Manager (ARM) 模板的部署。

  • 支持基于 CPU:



    有关详细信息,请参阅Auto Scale 逻辑


  • 支持 ASAv 部署和多可用性区域。

  • 完全自动化配置会自动应用于横向扩展 ASAv 实例。

  • 对负载均衡器和多可用性区域的支持。

  • 对启用和禁用自动扩展功能的支持。

  • Cisco 提供 Auto Scale for Azure 部署包以方便部署。

Auto Scale 使用案例

ASAv Auto Scale for Azure 是一种自动化水平扩展解决方案,它将 ASAv 规模集置于 Azure 内部负载均衡器 (ILB) 与 Azure 外部负载均衡器 (ELB) 之间。

  • ELB 将流量从互联网分发到规模集中的 ASAv 实例;然后,防火墙将流量转发到应用程序。

  • ILB 将出站互联网流量从应用程序分发到规模集中的 ASAv 实例;然后,防火墙将流量转发到互联网。

  • 网络数据包决不会在一个连接中同时穿过(内部和外部)负载均衡器。

  • 规模集中的 ASAv 实例数将根据负载条件自动进行扩展和配置。

图 1. ASAv Auto Scale 使用案例

适用范围

本文档介绍部署 ASAv Auto Scale for Azure 解决方案的无服务器组件的详细步骤。


重要

  • 请先阅读整个文档,然后再开始部署。

  • 在开始部署之前,请确保满足前提条件。

  • 请确保遵守此处所述的步骤和执行顺序。


下载部署软件包

ASAv Auto Scale for Azure 解决方案是一个基于 Azure 资源管理器 (ARM) 模板的部署,它会利用 Azure 提供的无服务器基础设施(逻辑应用、Azure 函数、负载均衡器、虚拟机扩展设置等)。

下载启动 ASAv Auto Scale for Azure 解决方案所需的文件。您的 ASA 版本的部署脚本和模板可从 GitHub 存储库获取,地址是:


注意

请注意,Cisco 提供的自动扩展部署脚本和模板作为开源示例提供,不在常规 Cisco TAC 支持范围内。定期检查 GitHub 以了解更新和自述文件说明。

有关如何构建 ASM_Function.zip 包的说明,请参阅附录 - 通过源代码构建 Azure 函数


Auto Scale 解决方案组件

以下组件构成了 ASAv Auto Scale for Azure 解决方案。

Azure Functions(函数应用)

函数应用是一组 Azure 函数。基本功能包括:

  • 定期交流/探测 Azure 指标。

  • 监控 ASAv 负载和触发内向扩展/外向扩展操作。

这些函数以压缩 Zip 包的形式提供(请参阅构建 Azure 函数应用包)。这些函数尽可能离散以执行特定任务,可以根据需要进行升级,以提供增强功能和新版本支持。

Orchestrator(逻辑应用)

Auto Scale 逻辑应用是一个工作流,即按照一定序列的步骤集合。Azure 函数是独立的实体,无法彼此通信。此编排器按顺序排列这些函数的执行,并在它们之间交换信息。

  • 逻辑应用可用于编排 Auto Scale Azure 函数并在函数之间传递信息。

  • 每个步骤代表一个 Auto Scale Azure 函数或内置标准逻辑。

  • 逻辑应用作为 JSON 文件交付。

  • 可以通过 GUI 或 JSON 文件自定义逻辑应用。

虚拟机规模集 (VMSS)

VMSS 是同构虚拟机(如 ASAv 设备)的集合。

  • VMSS 可以向集合中添加新的相同虚拟机。

  • 添加到 VMSS 的新虚拟机将自动与负载均衡器、安全组和网络接口连接。

  • VMSS 具有内置 Auto Scale 功能,该功能对适用于 Azure 的 ASAv 禁用。

  • 您不应在 VMSS 中手动添加或删除 ASAv 实例。

Azure Resource Manager (ARM) 模板

ARM 模板用于部署 ASAv Auto Scale for Azure 解决方案所需的资源。

ARM 模板为 Auto Scale Manager 组件提供输入,包括以下组件:

  • Azure 函数应用

  • Azure 逻辑应用

  • 虚拟机规模集 (VMSS)

  • 内部/外部负载均衡器。

  • 部署所需的安全组和其他各种组件。


重要

ARM 模板在验证用户输入方面有限制,因此您需要在部署过程中负责验证输入。


Auto Scale 解决方案前提条件

Azure 资源

资源组

部署此解决方案的所有组件需要一个现有的或新创建的资源组。



记录资源组名称、创建它的区域,以及供以后使用的 Azure 订用 ID。


网络

确保虚拟网络可用/已创建。Auto Scale 部署将不会创建、更改或管理任何网络资源。

ASAv 需要 3 个网络接口,因此您的虚拟网络需要 3 个子网以用于:

  1. 管理流量

  2. 内部流量

  3. 外部流量

应在子网所连接的网络安全组中打开以下端口:

  • SSH(TCP/22)

    负载均衡器与 ASAv 之间的运行状况探测所必需。

    无服务器函数与 ASAv 之间的通信所必需。

  • 应用程序特定协议/端口

    任何用户应用程序所必需(例如,TCP/80 等)。



记录虚拟网络名称、虚拟网络 CIDR、所有 3 个子网的名称,以及外部和内部子网的网关 IP 地址。


准备 ASA 配置文件

准备 ASAv 配置文件并存储在 ASAv 实例可访问的 http/https 服务器中。这是标准 ASA 配置文件格式。外向扩展的 ASAv 将下载此文件并更新其配置。

ASA 配置文件应至少包含以下内容:

  • 为所有接口设置 DHCP IP 分配。

  • GigabitEthernet0/1 应为“内部”接口。

  • GigabitEthernet0/0 应为“外部”接口。

  • 将网关设置为内部和外部接口。

  • 在 Azure 实用程序 IP 的内部和外部接口上启用 SSH(用于运行状况探测)。

  • 创建 NAT 配置以便将流量从外部转发到内部接口。

  • 创建访问策略以允许所需流量。

  • 许可配置。不支持 PAYG 计费。



无需专门配置管理接口。


以下是 ASA 配置文件示例,仅供参考


ASA Version 9.13(1)
!
interface GigabitEthernet0/1
nameif inside
security-level 100
ip address dhcp setroute
!
interface GigabitEthernet0/0
nameif outside
security-level 0
ip address dhcp setroute
!
route outside 0.0.0.0 0.0.0.0 10.12.3.1 2
!
route inside 0.0.0.0 0.0.0.0 10.12.2.1 3
!
ssh 168.63.129.0 255.255.255.0 outside
!
ssh 168.63.129.0 255.255.255.0 inside
!
object network webserver
host 10.12.2.5
object service myport
service tcp source range 1 65535 destination range 1 65535
access-list outowebaccess extended permit object myport any any log disable
access-group outowebaccess in interface outside
object service app
service tcp source eq www
nat (inside,outside) source static webserver interface destination static interface any service app app
object network obj-any
subnet 0.0.0.0 0.0.0.0
nat (inside,outside) source dynamic obj-any interface destination static obj-any obj-any
configure terminal
dns domain-lookup management
policy-map global_policy
class inspection_default
inspect icmp
call-home
profile License
destination transport-method http
destination address http https://tools.cisco.com/its/service/oddce/services/DDCEService
license smart
feature tier standard
throughput level 2G
license smart register idtoken <TOKEN>
: end

构建 Azure 函数应用包

ASAv Azure Auto Scale 解决方案要求您构建一个存档文件:ASM_Function.zip,它以压缩 ZIP 包的形式提供一组离散的 Azure 函数。

有关如何构建 ASM_Function.zip 包的说明,请参阅附录 - 通过源代码构建 Azure 函数

这些函数尽可能离散以执行特定任务,可以根据需要进行升级,以提供增强功能和新版本支持。

输入参数

下表定义了模板参数并提供了示例。确定这些值后,您可以在将 ARM 模板部署到 Azure 订用时使用这些参数创建 ASAv 设备。请参阅部署 Auto Scale ARM 模板

表 1. 模板参数

参数名

允许的值/类型

说明

资源创建类型

resourceNamePrefix

字符串*(3 到 10 个字符)

所有资源都使用包含此前缀的名称创建。

注:只能使用小写字母。

示例:asav

New

virtualNetworkRg

字符串

虚拟网络资源组名称。

示例:cisco-virtualnet-rg

现有

virtualNetworkName

字符串

虚拟网络名称(已创建)。

示例:cisco-virtualnet

现有

mgmtSubnet

字符串

管理子网名称(已创建)

示例:cisco-mgmt-subnet

现有

insideSubnet

字符串

内部子网名称(已创建)。

示例:cisco-inside-subnet

现有

internalLbIp

字符串

内部子网的内部负载均衡器 IP 地址(已创建)。

例如:1.2.3.4

现有

outsideSubnet

字符串

外部子网名称(已创建)。

示例:cisco-outside-subnet

现有

softwareVersion

字符串

ASAv 版本(在部署期间从下拉列表中选择)。

默认值:914.1.0允许:914.1.0, 913.1.0

现有

vmSize

字符串

ASAv 实例的大小(在部署过程中从下拉列表中选择)。

不适用

asaAdminUserName

字符串*

ASAv 'admin' 用户的用户名。

密码的长度必须为 12 至 72 个字符,而且必须具有:小写、大写、数字及特殊字符;重复字符不得超过 2 个。

不能是“admin”。请参阅 Azure 以了解 VM 管理员用户名指南。

 

模板中不对此进行合规性检查。

New

asaAdminUserPassword

字符串*

ASAv 管理员用户的密码。

密码的长度必须为 12 至 72 个字符,而且必须具有:小写、大写、数字及特殊字符;重复字符不得超过 2 个。

 

模板中不对此进行合规性检查。

New

scalingPolicy

POLICY-1/POLICY-2

POLICY-1:当任何 ASAv 的平均负载在所配置的持续时间内超过外向扩展阈值时,将触发外向扩展。

POLICY-2:当自动扩展组中所有 ASAv 设备的平均负载在所配置的持续时间内超过外向扩展阈值时,将触发外向扩展。

在两种情况下,内向扩展逻辑都保持不变:当所有 ASAv 设备的平均负载在所配置的持续时间内低于内向扩展阈值时,将触发内向扩展。

不适用

scalingMetricsList

字符串

用于制定扩展决策的指标。

允许:CPU

默认值:CPU

不适用

scaleInThreshold

字符串

CPU 指标的内向扩展阈值。

默认值:10

ASAv 指标低于此值时,将触发内向扩展。

请参阅Auto Scale 逻辑

不适用

scaleOutThreshold

字符串

CPU 指标的横向扩展阈值。

默认值:80

ASAv指标高于此值时,将触发横向扩展。

scaleOutThreshold”应始终大于scaleInThreshold”。

请参阅Auto Scale 逻辑

不适用

minAsaCount

整数

在任何给定时间,规模集中可用的最小 ASAv 实例数。

示例:2

不适用

maxAsaCount

整数

规模集中允许的最大 ASAv 实例数。

示例:10

 

Auto Scale 逻辑不会检查此变量的范围,因此请认真填写。

不适用

metricsAverageDuration

整数

从下拉列表中选择。

此数字表示计算指标平均值的时间(以分钟为单位)。

如果此变量的值为 5(即 5 分钟),则当计划 Auto Scale Manager 时,它将检查过去 5 分钟内的指标平均值,并且基于此平均值做出扩展决定。

 

由于 Azure 限制,仅 1、5、15 和 30 是有效数字。

不适用

initDeploymentMode

BULK/STEP

主要适用于第一次部署,或者规模集不包含任何 ASAv 实例时。

BULK:Auto Scale 管理器将尝试一次并行部署“minAsaCount”数量的 ASAv 实例。

STEP:Auto Scale 管理器将按照计划间隔逐个部署“minAsaCount”数量的 ASAv 设备。

configurationFile

字符串

备份配置文件的完整路径。

示例:https://myserver/asavconfig/asaconfig .txt

不适用

*Azure 对新资源的命名约定有限制。查看限制,或者直接全部使用小写字母。不要使用空格或任何其他特殊字符

Auto Scale 部署

部署 Auto Scale ARM 模板

ARM 模板用于部署 ASAv Auto Scale for Azure 所需的资源。在给定资源组内,ARM 模板部署会创建以下各项:

  • 虚拟机规模集 (VMSS)

  • 外部负载均衡器

  • 内部负载均衡器

  • Azure 函数应用

  • 逻辑应用

  • 安全组(用于数据接口和管理接口)

开始之前

过程


步骤 1

如果您需要在多个 Azure 区域中部署 ASAv 实例,请基于部署区域中可用的区域编辑 ARM 模板。

示例:


        "zones": [
            "1",
            "2",
            "3"
        ],
	

本示例显示了包含 3 个区域的“美国中部”区域。

步骤 2

编辑外部负载均衡器中所需的流量规则。您可以通过扩展此“json”数组来添加任意数量的规则。

示例:


       {
        "type": "Microsoft.Network/loadBalancers",
        "name": "[variables('elbName')]",
        "location": "[resourceGroup().location]",
        "apiVersion": "2018-06-01",
        "sku": {
          "name": "Standard"
        },
        "dependsOn": [
          "[concat('Microsoft.Network/publicIPAddresses/', variables('elbPublicIpName'))]"             
        ],
        "properties": {
          "frontendIPConfigurations": [
            {
              "name": "LoadBalancerFrontEnd",
                "properties": {
                  "publicIPAddress": {
                    "id": "[resourceId('Microsoft.Network/publicIPAddresses/', variables('elbPublicIpName'))]"
                  }
                }
            }
          ],
          "backendAddressPools": [
            {
              "name": "backendPool"
            }
          ],
          "loadBalancingRules": [
            {
              "properties": {
                "frontendIPConfiguration": {
                  "Id": "[concat(resourceId('Microsoft.Network/loadBalancers', variables('elbName')), '/frontendIpConfigurations/LoadBalancerFrontend')]"
                },
                "backendAddressPool": {
                  "Id": "[concat(resourceId('Microsoft.Network/loadBalancers', variables('elbName')), '/backendAddressPools/BackendPool')]"
                },
                "probe": {
                  "Id": "[concat(resourceId('Microsoft.Network/loadBalancers', variables('elbName')), '/probes/lbprobe')]"
                },
                "protocol": "TCP",
                "frontendPort": "80",
                "backendPort": "80",
                "idleTimeoutInMinutes": "[variables('idleTimeoutInMinutes')]"
              },
              "Name": "lbrule"
            }
          ],

 

如果您不想编辑此文件,也可以在部署后从 Azure 门户编辑此项。

步骤 3

使用您的 Microsoft 帐户用户名和密码登录 Microsoft Azure 门户。

步骤 4

单击服务菜单中的资源组 (Resource groups) 以访问资源组边栏选项卡。您将看到该边栏选项卡中列出您的订用中的所有资源组。

创建新资源组或选择现有的空资源组;例如,ASAv_AutoScale

图 2. Azure 门户
步骤 5

单击创建资源 (+) (Create a resource [+]),为模板部署创建新资源。此时将显示“创建资源组”边栏选项卡。

步骤 6

搜索市场 (Search the Marketplace) 中,键入模板部署(使用自定义模板部署),然后按 Enter

图 3. 自定义模板部署
步骤 7

单击创建 (Create)

步骤 8

创建模板时有多个选项。选择在编辑器中选择构建您自己的模板 (Build your own template in editor)

图 4. 构建您自己的模板
步骤 9

编辑模板 (Edit template) 窗口中,删除所有默认内容并从更新的 azure_asav_autoscale.json 复制内容,然后单击保存 (Save)

图 5. 编辑模板
步骤 10

在下一部分,填写所有参数。有关每个参数的详细信息,请参阅输入参数,然后单击购买 (Purchase)

图 6. ARM 模板参数
 

您也可以单击编辑参数 (Edit Parameters),然后编辑 JSON 文件或上传预填的内容。

ARM 模板的输入验证功能有限,因此您需要负责验证输入。

步骤 11

当成功部署模板后,它将为 ASAv Auto Scale for Azure 解决方案创建所有必要的资源。请参阅下图中的资源。“类型”(Type) 列描述了每个资源,包括逻辑应用、VMSS、负载均衡器、公共 IP 地址等。

图 7. ASAv Auto Scale 模板部署

部署 Azure 函数应用

部署 ARM 模板时,Azure 会创建一个主干函数应用,然后您需要为其更新和手动配置 Auto Scale Manager 逻辑所需的函数。

开始之前

过程


步骤 1

转至您在部署 ARM 模板时创建的函数应用,然后确认不存在任何函数。在浏览器中,转至以下 URL:

https://<函数应用名称>.scm.azurewebsites.net/DebugConsole

对于部署 Auto Scale ARM 模板中的示例:

https://asav-function-app.scm.azurewebsites.net/DebugConsole

步骤 2

在文件资源管理器中,导航到 site/wwwroot

步骤 3

ASM_Function.zip 拖放到文件资源管理器的右侧。

图 8. 上传 ASAv Auto Scale 函数
步骤 4

成功上传后,应该会显示所有无服务器函数。

图 9. ASAv 无服务器函数
步骤 5

下载 PuTTY SSH 客户端。

Azure 函数需要通过 SSH 连接访问 ASAv。但是,无服务器代码中使用的开源库不支持 ASAv 所用的 SSH 密钥交换算法。因此,您需要下载预构建 SSH 客户端。

www.putty.org 将 PuTTY 命令行界面下载到 PuTTY 后端 (plink.exe)。

图 10. 下载 PuTTY
步骤 6

将 SSH 客户端可执行文件 plink.exe 重命名为 asassh.exe

步骤 7

asassh.exe 拖放到文件资源管理器的右侧,放到上一步中上传 ASM_Function.zip 的位置。

步骤 8

验证 SSH 客户端与函数应用程序一起存在。必要时刷新页面。


微调配置

有一些配置可用于微调 Auto Scale Manager 或在调试中使用。这些选项不会在 ARM 模板中显示,但可以在函数应用下编辑它们。

开始之前



可以随时编辑此项。按照以下顺序编辑配置。

  • 禁用函数应用。

  • 等待现有的计划任务完成。

  • 编辑并保存配置。

  • 启用函数应用。


过程


步骤 1

在 Azure 门户中,搜索并选择 ASAv 函数应用。

图 11. ASAv 函数应用
步骤 2

也可以在此处编辑通过 ARM 模板传递的配置。变量名称可能与 ARM 模板不同,但您可以轻松地从其名称中确定它们的用途。

大多数选项的名称不言自明。例如:

  • 配置名称:“DELETE_FAULTY_ASA”(默认值:YES)

    在外向扩展期间,将会启动新的 ASAv 实例并通过配置文件对其进行配置。如果配置失败,则 Auto Scale Manager 将根据此选项决定保留该 ASAv 实例或将其删除。(YES:删除错误的 ASAv/NO:保留 ASAv 实例,即使配置失败)。

  • 在函数应用设置中,有权访问 Azure 订用的用户都可以看到明文格式的所有变量(包括含安全字符串的变量,如“密码”)。

    如果用户对此有安全担忧(例如,如果在组织内的低权限用户之间共享 Azure 订用),可以使用 Azure 的 Key Vault 服务来保护密码。配置此项后,用户必须提供由存储密码的密钥保管库生成的安全标识符,而不是函数设置中的明文密码。

     

    搜索 Azure 文档,查找保护应用程序数据的最佳实践。


在虚拟机规模集中配置 IAM 角色

Azure 身份及访问管理 (IAM) 作为 Azure 安全和访问控制的一部分,用于管理和控制用户的身份。Azure 资源的托管身份为 Azure 服务提供 Azure Active Directory 中自动托管的身份。

这将允许函数应用控制虚拟机规模集 (VMSS),无需显式身份验证凭证。

过程


步骤 1

在 Azure 门户中,转至 VMSS。

步骤 2

单击访问控制 (IAM) (Access control [IAM])

步骤 3

单击添加 (Add) 以添加角色分配

步骤 4

添加角色分配 (Add role assignment)下拉列表中选择参与者 (Contributor)

步骤 5

分配访问 (Assign access to) 下拉列表中选择函数应用 (Function App)

步骤 6

选择 ASAv 函数应用。

图 12. AIM 角色分配
步骤 7

单击保存 (Save)

 

此外,还应确认尚未启动任何 ASAv 实例。


更新安全组

ARM 模板创建两个安全组,一个用于管理接口,一个用于数据接口。管理安全组将只允许 ASAv 管理活动所需的流量。不过,数据接口安全组将允许所有流量。

过程


根据您的部署的拓扑和应用程序需求,微调安全组规则。

 

数据接口安全组至少应允许来自负载均衡器的 SSH 流量。


更新 Azure 逻辑应用

逻辑应用充当 Autoscale 功能的编排器。ARM 模板会创建一个主干逻辑应用,然后您需要手动更新,提供使之作为 Auto Scale 编排器发挥作用所需的信息。

过程


步骤 1

从存储库中将文件 LogicApp.txt 恢复到本地系统,然后如下所示进行编辑。

重要 

在继续之前,阅读并理解所有这些步骤。

这些手动步骤不会在 ARM 模板中自动执行,以便稍后只能独立升级逻辑应用。

  1. 查找所有“SUBSCRIPTION_ID”并替换为您的订用 ID 信息。

  2. 查找所有“RG_NAME”并替换为您的资源组名称。

  3. 查找所有“FUNCTIONAPPNAME”并替换为您的函数应用名称。以下示例显示了 LogicApp.txt 文件中的几行:

    
      "AutoScaleManager": {
          "inputs": {
              "function": {
                  "id": "/subscriptions/SUBSCRIPTION_ID/resourceGroups/RG_NAME/providers/Microsoft.Web/sites/FUNCTIONAPPNAME/functions/AutoScaleManager"
              }
    .
    .
                          },
                          "Deploy_Changes_to_ASA": {
                              "inputs": {
                                  "body": "@body('AutoScaleManager')",
                                  "function": {
                                      "id": "/subscriptions/SUBSCRIPTION_ID/resourceGroups/RG_NAME/providers/Microsoft.Web/sites/FUNCTIONAPPNAME/functions/DeployConfiguration"
                                  }
    .
    .
                          "DeviceDeRegister": {
                              "inputs": {
                                  "body": "@body('AutoScaleManager')",
                                  "function": {
                                      "id": "/subscriptions/SUBSCRIPTION_ID/resourceGroups/RG_NAME/providers/Microsoft.Web/sites/FUNCTIONAPPNAME/functions/DeviceDeRegister"
                                  }
                              },
                              "runAfter": {
                                  "Delay_For_connection_Draining": [
    
    
  4. (可选) 编辑触发间隔,或保留默认值 (5)。这是定期触发 Autoscale 的时间间隔。以下示例显示了 LogicApp.txt 文件中的几行:

    
            "triggers": {
                "Recurrence": {
                    "conditions": [],
                    "inputs": {},
                    "recurrence": {
                        "frequency": "Minute",
                        "interval": 5
                    },
    
    
  5. (可选) 编辑要进行排空的时间,或保留默认值 (5)。这是内向扩展操作期间,在删除设备之前从 ASAv 中排空现有连接的时间间隔。以下示例显示了 LogicApp.txt 文件中的几行:

    
             "actions": {
                  "Branch_based_on_Scale-In_or_Scale-Out_condition": {
                      "actions": {
                          "Delay_For_connection_Draining": {
                              "inputs": {
                                  "interval": {
                                      "count": 5,
                                      "unit": "Minute"
                                  }
    
    
  6. (可选) 编辑冷却时间,或保留默认值 (10)。这是在外向扩展完成后不执行任何操作的时间。以下示例显示了 LogicApp.txt 文件中的几行:

    
                     "actions": {
                         "Branch_based_on_Scale-Out_or_Invalid_condition": {
                             "actions": {
                                 "Cooldown_time": {
                                     "inputs": {
                                         "interval": {
                                             "count": 10,
                                             "unit": "Second"
                                      }
    
    
 

这些步骤也可以从 Azure 门户完成。有关详细信息,请参阅 Azure 文档。

步骤 2

转至逻辑应用代码视图 (Logic App code view),删除默认内容并粘贴编辑后的 LogicApp.txt 文件内容,然后单击保存 (Save)

图 13. 逻辑应用代码视图
步骤 3

保存逻辑应用时,它处于“禁用”状态。当要启动 Auto Scale Manager 时,请单击启用 (Enable)

图 14. 启用逻辑应用
步骤 4

启用后,任务就会开始运行。单击“正在运行”(Running) 状态可查看活动。

图 15. 逻辑应用运行状态
步骤 5

逻辑应用启动后,所有与部署相关的步骤都将完成。

步骤 6

在 VMSS 中验证是否正在创建 ASAv 实例。

图 16. 正在运行的 ASAv 实例

在此示例中,由于在 ARM 模板部署中将 'minAsaCount' 设置为“3”并将“initDeploymentMode”设置为“批量”,因此启动了三个 ASAv 实例。


升级 ASAv

ASAv 升级仅支持采用虚拟机规模集 (VMSS) 映像升级的形式。因此,您需要通过 Azure REST API 接口升级 ASAv



您可以使用任何 REST 客户端来升级 ASAv。以下是一个简单的示例。


开始之前

  • 获取市场中提供的新 ASAv 映像版本(例如:914.001)。

  • 获取用于部署原始规模集的 SKU(例如:asav-azure-byol)。

  • 获取资源组和虚拟机规模集名称

过程


步骤 1

在浏览器中,转至以下 URL:

https://docs.microsoft.com/en-us/rest/api/compute/virtualmachinescalesets/update#code-try-0

步骤 2

在参数部分输入详细信息。

图 17. 升级ASAv
步骤 3

主体部分输入包含新 ASAv 映像版本、SKU 和触发器运行的 JSON 输入。


{
 "properties": {
        "virtualMachineProfile": {
              "storageProfile": {
                      "imageReference": {
                           "publisher": "cisco",
                           "offer": "cisco-asav",
                           "sku": "asav-azure-byol",
                            "version": "650.32.0"
                      }
                },
           }
     }
}

步骤 4

Azure 成功响应意味着 VMSS 已接受更改。

新映像将在新的 ASAv 实例中使用,而这些新实例将在外向扩展操作过程中启动。

  • 虽然位于同一规模集中,但现有的 ASAv 实例将继续使用旧软件映像。

  • 您可以覆盖上述行为,手动升级现有的 ASAv 实例。要执行此操作,请单击 VMSS 中的升级 (Upgrade) 按钮。它将重新启动并升级选定的 ASAv 实例。您必须手动重新注册并重新配置这些升级后的 ASAv 实例。请注意,不建议使用此方法。


Auto Scale 逻辑

外向扩展逻辑

  • POLICY-1:当任何 ASAv 的平均负载在所配置的持续时间内超过外向扩展阈值时,将触发外向扩展。

  • POLICY-2:当所有 ASAv 设备的平均负载在所配置的持续时间内超过外向扩展阈值时,将触发外向扩展。

内向扩展逻辑

  • 如果所有 ASAv 设备的 CPU 利用率在所配置的持续时间内低于配置的内向扩展阈值。

说明

  • 内向扩展/外向扩展以 1 为单位发生(即一次仅内向扩展/外向扩展 1 个 ASAv)。

  • 上述逻辑基于以下假设:负载均衡器将尝试在所有 ASAv 设备之间平均分配连接,一般来说,所有 ASAv 设备应平均加载。

Auto Scale 日志记录和调试

无服务器代码的每个组件都有自己的日志记录机制。此外,还会将日志发布到应用程序洞察。

  • 可以查看个别 Azure 函数的日志。

    图 18. Azure 函数日志
  • 可以查看每个逻辑应用及其各个组件每次运行的类似日志。

    图 19. 逻辑应用运行日志
  • 如果需要,可以随时停止/终止逻辑应用中任何正在运行的任务。但是,被启动/终止的当前运行 ASAv 设备将处于不一致状态。

  • 在逻辑应用中可以看到每个运行/个别任务所花费的时间。

  • 通过上传新的 zip,可以随时升级函数应用。在升级函数应用之前,先停止逻辑应用并等待所有任务完成。

Auto Scale 准则和限制

部署 ASAv Auto Scale for Azure 时,请注意以下准则和限制:

  • 扩展决定基于 CPU 使用率。

  • ASAv 管理接口配置为具有公共 IP 地址。

  • 仅支持 IPv4。

  • ARM 模板的输入验证功能有限,因此您需要负责提供正确的输入验证。

  • Azure 管理员可以在函数应用环境中看到明文形式的敏感数据(如管理登录凭证和密码)。您可以使用 Azure Key Vault 服务保护敏感数据。

Auto Scale 故障排除

以下是 ASAv Auto Scale for Azure 的常见错误情况和调试提示:

  • 无法通过 SSH 连接到 ASAv:检查是否通过模板将复杂密码传递到 ASAv;检查安全组是否允许 SSH 连接。

  • 负载均衡器运行状况检查失败:检查 ASAv 是否在数据接口上响应 SSH;检查安全组设置。

  • 流量问题:检查负载均衡器规则、ASAv 中配置的 NAT 规则/静态路由;检查模板和安全组规则中提供的 Azure 虚拟网络/子网/网关详细信息。

  • 逻辑应用无法访问 VMSS:检查 VMSS 中的 IAM 角色配置是否正确。

  • 逻辑应用运行很长时间:在外向扩展 ASAv 设备上检查 SSH 访问;检查 Azure VMSS 中 ASAv 设备的状态。

  • 与订用 ID 相关的 Azure 函数抛出错误:验证您的帐户中是否选择了默认预订。

  • 内向扩展操作失败:有时 Azure 会花费很长时间删除实例,在这种情况下,内向扩展操作可能会超时并报告错误,但最终实例将被删除。

  • 在做出任何配置更改之前,请确保禁用逻辑应用程序,并等待所有正在运行的任务完成。

附录 - 通过源代码构建 Azure 函数

系统要求

  • Microsoft Windows 桌面/笔记本电脑。

  • Visual Studio(使用 Visual Studio 2019 版本 16.1.3 进行测试)



    Azure 函数是使用 C# 编写的。


  • “Azure Development”工作负载需要安装在 Visual Studio 中。

使用 Visual Studio 构建

  1. 将“code”文件夹下载到本地计算机。

  2. 导航到文件夹“ASAAutoScaling”。

  3. 在 Visual Studio 中打开项目文件“ASAAutoScaling.csproj”。

  4. 使用 Visual Studio 标准程序进行清理和构建。

    图 20. Visual Studio 内部版本
  5. 成功编译内部版本后,导航到 \bin\Release\netcoreapp2.1 文件夹。

  6. 选择所有内容,单击 发送到 (Send to) > 压缩 (zipped) 文件夹 (Compressed [zipped] folder),然后将 ZIP 文件保存为 ASM_Function.zip

    图 21. 生成 ASM_Function.zip