Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
VM 应用程序是Azure计算库中的资源类型,可简化虚拟机(VM)和Virtual Machine Scale Sets的应用程序管理。 将应用程序打包一次,将其存储在库中,并将其部署到组织中的任何 VM。
使用 VM 应用程序,可将应用程序部署与基本 VM 映像分离。 这种分离使你无需重新生成映像、减少维护开销、加速部署周期以及有效地处理关键漏洞和灾难恢复,即可独立更新应用程序。
何时使用 VM 应用程序
需要跨 Azure VM 发布、部署和管理软件时,建议使用 VM 应用程序。 在想要以下情况下考虑 VM 应用程序:
- 使用一致的配置跨大型 VM 机群部署应用程序。
- 在不重新生成 VM 映像的情况下频繁更新应用程序。
- 管理应用程序版本,并在出现问题时回滚。
- 通过快速发布新版本,并使用 Azure Policy 对设备组进行集中更新来响应零日漏洞。
- 使用Azure Policy强制实施应用程序存在及其配置。
- 减少大规模和时间敏感型工作负载(如 AI 推理和游戏)的部署延迟。
- 通过部署后清点和监控来深入了解已部署的应用程序。
- 模块化应用程序和脚本,实现可重用性和作效率。
- 将应用程序管理合并到单个Azure托管的解决方案中。
VM 应用程序的工作原理
VM 应用程序与现有开发工作流和Azure基础结构集成,以提供端到端应用程序生命周期管理。
- 开发和发布:不同的团队独立开发应用程序、脚本和配置。 每个团队将其包作为Azure VM 应用程序发布到Azure计算库,该库充当个人应用存储库。
- 部署或更新:使用 Azure 门户、PowerShell、CLI、REST API 或 ARM/Bicep 模板将已发布的应用程序部署到虚拟机(VM)和虚拟机规模集。
- Enforce:使用Azure Policy在车队中自动注入所需的应用程序。
- Automate:使用 CI/CD 管道(如 Azure DevOps、GitHub Actions、GitLab 管道、Jenkins 和脚本)自动发布、部署和更新。
- 监视:查看基础结构中的应用程序清单和状态。 使用Azure Policy和Azure Resource Graph进行车队范围的合规性监视,或在Azure门户、PowerShell、CLI 和活动日志中查看每个资源的详细信息。
关键功能
组织的专用应用商店
- 在Azure计算库中存储和管理所有应用程序包。
- 以任何格式打包应用程序、脚本、配置和文件:
.zip、.msi、.exe、.tar.gz、.deb、.rpm、.sh或其他。 - 维护每个应用程序的多个版本并部署
latest或特定版本。 - 在不被视为
latest的情况下,部署测试版本。
访问控制和共享
- 控制谁可以使用Azure基于角色的访问控制(RBAC)将应用程序发布到库和访问已发布的应用进行部署。
- 跨订阅、Microsoft 租户或公开共享图库。
安全性
- 下载软件包时,请通过Azure管理的基础设施获取,而不是通过外部URL,这样无需让虚拟机直接连接到互联网。
- 使用分配给 Azure 计算图库的 Managed Identity 安全地发布虚拟机应用程序。
- 通过使用Azure Policy或脚本快速发布新版本和更新车队来处理关键安全漏洞。
- 使用Azure Policy在整个基础结构中强制实施特定的应用程序、安全组件或应用程序配置。
灵活的部署选项
- 部署到单个 VM、灵活或统一的虚拟机规模集。
- 独立安装、更新或删除应用程序,而无需重新生成 VM 映像。
- 为每个应用程序定义自定义安装、更新和删除命令。
- 指定安装多个应用程序的部署顺序。
- 使用
scriptBehaviorAfterReboot属性配置重新启动处理。 - 用于
treatFailureAsDeploymentFailure在应用程序安装失败时将 VM 部署标记为失败。
故障复原能力和大规模性能
- 跨Azure区域和可用区自动复制应用程序包,为区域、可用区或内容分发网络(CDN)故障提供弹性。
- 在每个区域创建最多 10 个副本,以在大规模部署期间分发负载。
- 每个 VM 最多部署 25 个包,每个 VM 总共 50 GB。
- 使用块状 Blob 对大型包进行分块上传和后台流式处理。
管理和符合性
- 使用Azure Policy审核并在整个车队中强制实施应用程序状态和配置。
- 使用Azure门户、Azure Policy和Azure Resource Graph监视应用程序清单和状态。
- 在整个基础设施中监视和应用挂起的更新。
成本
使用 VM 应用程序包不会产生额外的费用,但以下资源需要付费:
- 存储每个包和任何副本的存储成本。
- 从源区域复制到复制区域的第一个版本的网络出口费用。 后续副本将在区域内进行处理,因此不会产生额外费用。
有关网络流出量的详细信息,请参阅带宽定价。
将应用程序发布为Azure VM 应用程序
若要部署 VM 应用程序,首先需要将应用程序发布到Azure计算库。 发布Azure VM 应用程序
- 首先,创建 VM 应用程序资源 ,该资源是包含有关应用程序的元数据的逻辑资源。
- 然后在包含应用程序包的 VM 应用程序资源中创建 VM 应用程序版本资源 ,以及如何安装、更新、删除和复制 VM 应用程序的说明。
发布Azure VM 应用程序所需的Azure资源
| 资源 | ARM 资源类型 | 说明 |
|---|---|---|
| Azure 计算画廊 | Microsoft.Compute/galleries | 画廊是用于管理和共享应用程序包的存储库。 用户可以共享库资源,所有子资源将自动共享。 每个订阅中的图库名称必须是唯一的。 例如,你可能有一个库用来存储所有操作系统映像,另一个库用来存储所有 VM 应用程序。 |
| VM 应用程序 | Microsoft.Compute/galleries/applications | VM 应用程序的定义。 此逻辑资源存储其所有版本的通用元数据,包括名称、说明、支持的 OS 类型和生命周期结束信息。 将其视为包含单个应用程序的所有版本的容器。 例如,可能有一个名为 Apache Tomcat 的 VM 应用程序,其中包含版本 9.0.0、9.0.1 和 10.0.0。 |
| VM 应用程序版本 | Microsoft.Compute/galleries/applications/versions | 包含应用程序包和版本特定配置的可部署资源。 每个版本都指向存储帐户中的应用程序二进制文件或脚本,并定义安装、更新和删除命令。 可以将版本复制到多个Azure区域,以提高部署可靠性和降低延迟。 将应用程序部署到 VM 之前,必须将版本复制到 VM 的区域。 |
| 存储帐户 | Microsoft.Storage/storageAccounts | 应用程序包首先上传到存储帐户。 然后,Azure 计算画廊使用 SAS URL 从这个存储帐户下载应用程序包,并将它存储在 VM 应用程序版本中。 Azure 计算库还会根据 VM 应用程序版本定义跨区域和区域副本复制此包。 在 Azure 计算库中创建 VM 应用程序版本后,可以删除存储帐户中的应用程序包。 |
VM 应用程序资源中的属性
VM 应用程序资源定义以下属性:
| 资产 | 说明 | 可更新的 | 局限性 |
|---|---|---|---|
| 姓名 | 应用程序的名称 | 是的 | 最大长度为 117 个字符。 允许的字符为大写或小写字母、数字、连字符 (-)、句点 (.)、下划线 (_)。 名称不能以句点 (.) 结尾。 |
| 位置 | 资源的位置 | 否 | |
| supportedOSType | 定义支持的 OS 类型 | 否 | “Linux”或“Windows” |
| endOfLifeDate | 可选。 应用程序的未来生命周期结束日期。 日期仅供参考,不会强制执行。 | 是的 | |
| 描述 | 可选。 VM 应用程序的说明 | 是的 | |
| eula | 可选。 参考最终用户许可协议 (EULA) | 是的 | |
| privacyStatementUri | 可选。 参考应用程序的隐私声明。 | 是的 | |
| releaseNoteUri | 可选。 参考应用程序的发行说明。 | 是的 |
VM 应用程序版本资源中的属性
VM 应用程序版本 是 VM 应用程序资源中的可部署资源。 版本是用以下属性定义的:
| 资产 | 说明 | 可更新的 | 局限性 |
|---|---|---|---|
| 位置 | VM 应用程序版本的源位置。 | 否 | 有效的 Azure 区域 |
| source/mediaLink | 链接到存储帐户中的应用程序包文件 | 部分。 | 有效且现有的存储 URL。 只能更改 SASURL 中的 SASToken。 |
| source/defaultConfigurationLink | 可选。 指向 VM 应用程序的配置文件的链接。 可以在部署时重写。 | 部分地 | 有效且现有的存储 URL。 只能更改 SASURL 中的 SASToken。 |
| manageActions/install | 以字符串形式安装脚本,以正确安装应用程序 | 否 | 字符串格式的给定操作系统的有效命令。 |
| manageActions/remove | 以字符串形式移除脚本,以正确移除应用程序 | 否 | 字符串格式的给定操作系统的有效命令 |
| manageActions/update | 可选。 以字符串形式更新脚本,以将 VM 应用程序正确更新到较新的版本。 | 否 | 字符串格式的给定操作系统的有效命令 |
| targetRegions/name | 要复制到的目标区域的名称。 提高区域故障的复原能力并产生延迟。 | 是的 | 有效的 Azure 区域 |
| targetRegions/regionalReplicaCount | 可选。 在该区域中创建的副本数量。 改进负载处理并产生延迟。 默认值为 1。 | 是的 | 介于 1 和 3 之间(含限值)的整数 |
| replicaCount | 可选。 定义每个区域的副本数。 如果未定义 regionalReplicaCount,则生效。 在区域或群集发生故障时提升复原能力,同时在大规模场景下会产生延迟。 | 是的 | 介于 1 和 3 之间(含限值)的整数。 |
| endOfLifeDate | 可选。 应用程序版本的未来生命周期结束日期。 此属性仅供客户参考,不会强制实施。 | 是的 | 有效的未来日期 |
| excludeFromLatest | 可选。 当在 applicationProfile 中使用“latest”关键字时,请排除用作应用程序最新版本的版本。 | 是的 | 默认值为 false。 |
| storageAccountType | 可选。 要在每个区域中用于存储应用程序包的存储帐户的类型。 默认为 Standard_LRS。 | 否 | |
| safetyProfile/allowDeletionOfReplicatedLocations | 可选。 指示是否允许从复制区域删除此库映像版本。 | 是的 | |
| settings/packageFileName | 可选。 将包下载到 VM 时要使用的包文件名。 | 否 | 字符限制为 4,096 个字符。 |
| settings/configFileName | 可选。 将配置下载到 VM 时要使用的配置文件名称。 | 否 | 字符限制为 4,096 个字符。 |
| settings/scriptBehaviorAfterReboot | 可选。 重启 VM 后安装、更新或删除库应用程序时要执行的操作。 | 否 |
部署 Azure VM 应用程序
将 VM 应用程序版本发布到 Azure Compute Gallery 后,可以跨 Azure 虚拟机 (VM) 和 Azure 虚拟机规模集部署版本。 通过引用Azure虚拟机和Virtual Machine Scale Sets的 applicationProfile 中的 VM 应用程序的 ARM ID 来完成此部署。
VM 和 Virtual Machine Scale Sets 的 applicationProfile 中的属性
Azure VM 中的 applicationProfile,Virtual Machine Scale Sets定义以下属性:
| 资产 | 说明 | 局限性 |
|---|---|---|
| galleryApplications | 要部署的 Gallery 应用程序 | |
| 包裹参考编号 | 对要部署的应用程序版本的引用 | 有效的应用程序版本引用 |
| configurationReference | 可选。 包含此部署的配置的存储 Blob 的完整 URL。 这会替代之前为 defaultConfiguration 提供的任何值。 | 有效的存储 Blob 引用 |
| 顺序 | 可选。 部署应用程序的顺序。 如果未设置,应用程序将在所有已排序应用程序安装后最后安装。 | 有效的整数 |
| treatFailureAsDeploymentFailure | 可选。 将应用程序失败标记为 VM 部署失败以处理故障 | 真或假 |
Order 字段可用于指定应用程序之间的依赖关系。 排序规则如下:
| 案例 | 安装时的含义 | 失败时的含义 |
|---|---|---|
| 未指定顺序 | 先安装有序应用程序,再安装无序应用程序。 对于无顺序的应用程序,其安装顺序无法保证。 | 其他应用程序(无论是有序还是无序)安装失败不会影响无序应用程序的安装。 |
| 重复顺序值 | 与遵循相同顺序的其他应用程序不同,按任意顺序安装应用程序。 相同顺序的所有应用程序将在低顺序的应用程序之后、高顺序的应用程序之前安装。 | 如果之前顺序更低的应用程序安装失败,则不安装此顺序的任何应用程序。 如果此顺序的任何应用程序安装失败,则不安装顺序更高的应用程序。 |
| 提高顺序 | 应用程序将在低顺序的应用程序之后、高顺序的应用程序之前安装。 | 如果前面的低顺序应用程序安装失败,则不会安装此应用程序。 如果此应用程序安装失败,则不安装顺序更高的应用程序。 |
VM 应用程序的技术详细信息
VM 应用程序的注意事项和当前限制
每个区域最多 10 个副本:创建 VM 应用程序版本时,每个区域的页面 Blob 和块 Blob 副本的最大数量是 10。
每个区域最多 300 个版本:创建 VM 应用程序版本时,每个区域最多可以有 300 个应用程序版本。
失败安装手动重试:目前,重试失败安装的唯一方法是从配置文件中删除应用程序,然后将其添加回。
每个 VM 最多 25 个应用程序:最多可以将 25 个应用程序部署到单个虚拟机。
2 GB 应用程序大小:应用程序版本
mediaLink的最大文件大小为 2 GB。 最大文件大小defaultConfigurationLink为 1 GB。需要 VM 代理:VM 代理必须存在于 VM 中,并且必须能够收到目标状态。
每个 VM 的应用程序单一版本:只能将给定应用程序的一个版本部署到 VM。
当前不支持移动操作:目前不支持将具有关联 VM 应用程序的虚拟机跨资源组进行移动。
注意
对于 Azure Compute Gallery 和 VM 应用程序,可以在复制后删除存储 SAS。 但是,任何后续的更新操作都需要有效的 SAS。
在 VM 中下载目录
应用程序包和配置文件的下载位置如下:
- Linux:
/var/lib/waagent/Microsoft.CPlat.Core.VMApplicationManagerLinux/<application name>/<application version> - Windows:
C:\Packages\Plugins\Microsoft.CPlat.Core.VMApplicationManagerWindows\1.0.9\Downloads\<application name>\<application version>
假设应用程序包和配置文件位于当前目录中,则应写入安装/更新/删除命令。
已部署 VM 应用程序的文件命名
将应用程序文件下载到 VM 时,Azure使用 VM 应用程序名称作为文件名,而无需任何文件扩展名。 例如,如果 VM 应用程序名称为“TestPythonApp”,则 VM 应用程序中上传的 python.exe 文件将下载为 TestPythonApp。 Azure无法保留原始文件名和文件扩展名。
同样,如果配置文件通过 defaultConfigurationLink 中的 publishingProfile 或通过 configurationReference 中的 applicationProfile 传递,Azure 使用 <vm application name>-config 下载该文件。例如,如果配置文件名称为“config.json”,并且 VM 应用程序名称为 "TestPythonApp",那么下载的文件名为 TestPythonApp-config。
VM 应用程序提供packageFileName属性configFileNamepublishingProfile\settings来替代默认文件名,并允许客户设置自定义文件名。 例如,如果 packageFileName="pythonApp.exe" 和 configFileName="pythonConfig.json,则Azure下载具有相应名称的文件。
或者,在执行 installScript前包括用于重命名文件的命令。
VM 应用程序使用的命令解释器
默认的命令解释器是:
- Linux:
/bin/bash - Windows:
cmd.exe
只要它安装在计算机上,通过调用可执行文件并将命令传递给它,就可以使用不同的解释器,如 Chocolatey 或 PowerShell。 例如,若要让命令在 Windows 上的 PowerShell 中运行,而不是在 cmd 中运行,可以传递 powershell.exe -Command '<powershell commmand>'
如何处理 VM 应用程序更新
当更新在 VM 或虚拟机规模集上的应用程序版本时,将使用在部署期间提供的更新命令。 如果更新后的版本没有更新命令,则删除当前版本并安装新版本。
应编写更新命令,并期望它可以从任何较旧版本的 VM 应用程序进行更新。
将 VM 应用程序失败视为部署失败
默认情况下,如果应用程序无法安装、更新或删除,VM 应用程序扩展仍将其状态报告为 成功。 当扩展本身或底层基础结构出现问题,而不是应用程序脚本时,该扩展仅会自行报告故障。
若要更改此行为,请在 VM 的 applicationProfile 中将应用程序的 treatFailureAsDeploymentFailure 属性设置为 true。 启用此设置时,任何应用程序安装、更新或删除失败都会导致 VMAppExtension 预配状态报告失败。 此失败还会导致 VM 预配状态报告为失败。
错误信息
下面是发布和部署 VM 应用程序时可能会遇到的错误消息。
| 消息 | 说明 |
|---|---|
| 当前 VM 应用程序版本 {name} 已于 {date} 弃用。 | 你尝试部署已弃用的 VM 应用程序版本。 尝试使用 latest,而不是指定特定的版本。 |
| 当前 VM 应用程序版本 {name} 支持操作系统 {OS},而当前 OSDisk 的操作系统为 {OS}。 | 你尝试将 Linux 应用程序部署到 Windows 实例,或者反之。 |
| 已超过了 VM 应用程序的最大数量(最大值=5,当前值={count})。 使用较少的应用程序并重试请求。 | 目前,我们仅支持每个 VM 或虚拟机规模集最多五个 VM 应用程序。 |
| 指定了多个具有相同 packageReferenceId 的 VMApplication。 | 多次指定了相同的应用程序。 |
| 订阅无权访问此映像。 | 订阅无权访问此应用程序版本。 |
| 参数中的存储帐户不存在。 | 此订阅没有应用程序。 |
| 平台映像 {image} 不可用。 确认存储配置文件中的所有字段均正确。 有关存储配置文件的详细信息,请参阅 https://aka.ms/storageprofile。 | 应用程序不存在。 |
| 库映像 {image} 在 {region} 区域不可用。 请联系映像所有者以将其复制到此区域,或者更改你请求的区域。 | 图库应用程序版本存在,但未复制到此区域。 |
| SAS 对于源 uri {uri} 无效。 | 尝试从存储中获取有关 url(即 mediaLink 或 defaultConfigurationLink)的信息时收到 Forbidden 错误。 |
| 源 uri {uri} 引用的 Blob 不存在。 | 为 mediaLink 或 defaultConfigurationLink 属性提供的 Blob 不存在。 |
| 由于以下错误,无法访问图库应用版本的 URL {url}:找不到远程名称。 确保 blob 存在,并且它是可公开访问的,或者是具有读取权限的 SAS URL。 | 最可能的情况是未提供具有读取权限的 SAS uri。 |
| 由于以下错误,无法访问图库应用程序版本的 URL {url}:{error description}。 确保 blob 存在,并且它是可公开访问的,或者是具有读取权限的 SAS URL。 | 提供的存储 blob 存在问题。 错误描述提供更多信息。 |
| {Application} 上不允许使用操作 {operationName},因为该操作已被标记为删除。 只能重试删除操作(或等待正在进行的操作完成)。 | 尝试更新当前正在删除的应用程序。 |
| 参数“galleryApplicationVersion.properties.publishingProfile.replicaCount”的值 {value} 超出范围。 此值必须介于 1 到 3 之间(均含)。 | VM Application 版本只允许 1 到 3 个副本。 |
| 不允许更改属性“galleryApplicationVersion.properties.publishingProfile.manageActions.install”。 (或更新、删除) | 无法更改现有 VmApplication 上的任何管理操作。 必须创建新的 VmApplication 版本。 |
| 不允许更改属性“galleryApplicationVersion.properties.publishingProfile.settings.packageFileName”。 (或 configFileName) | 无法更改任何设置,例如包文件名或配置文件名。 必须创建新的 VmApplication 版本。 |
| 源 URI {uri} 引用的 blob 太大:大小 = {size}。 允许的最大 blob 大小为“1 GB”。 | mediaLink 或 defaultConfigurationLink 引用的 blob 的最大大小当前为 1 GB。 |
| 源 uri {uri} 引用的 blob 为空。 | 引用了一个空 blob。 |
| 不支持将 {type} blob 类型用于 {operation} 操作。 仅支持页 blob 和块 blob。 | VmApplications 仅支持页 blob 和块 blob。 |
| SAS 对于源 uri {uri} 无效。 | 为 mediaLink 或 defaultConfigurationLink 提供的 SAS uri 不是有效的 SAS uri。 |
| 无法在目标区域指定 {region},因为订阅缺少必需的功能 {featureName}。 使用所需的功能注册订阅,或者从目标区域列表中删除区域。 | 若要在某些受限区域使用 VmApplication,必须为该订阅注册功能标志。 |
| 库映像版本发布配置文件区域 {regions} 必须包含映像版本的位置 {location}。 | 要复制的区域列表必须包含应用程序版本所在的位置。 |
| 目标发布区域中不允许出现重复区域。 | 发布区域不得有重复项。 |
| 图库应用版本资源目前不支持加密。 | VM 应用程序不支持目标区域的加密属性 |
| 实体名称与请求 URL 中的名称不匹配。 | 请求 URL 中指定的库应用程序版本与请求正文中指定的版本不匹配。 |
库应用程序版本名称无效。 应用程序版本名称应遵循 Major(int32)。 Minor(int32)。 Patch(int32) 格式,其中 int 介于 0 到 2,147,483,647 之间(均含)。 例如,1.0.0、2018.12.1 等。 |
画廊应用程序版本必须遵循指定的格式。 |
后续步骤
了解如何做
查看