本文介绍如何使用 Azure Ansible 集合 (azure.azcollection) azure_rm_arcmachineextensions 模块部署、更新、验证和删除Azure Arc计算机扩展。
你将学会如何:
- 将扩展部署到已启用 Arc 的服务器
- 更新或删除扩展
- 验证扩展部署和运行状况
- 为大规模自动化选择正确的身份验证方法
- 将扩展部署作为持续合规工作流来进行管理
Overview
Azure Arc启用的服务器支持虚拟机(VM)扩展,这些扩展为混合、多云环境中的Windows和 Linux 计算机提供部署后配置和自动化功能。
常见用例包括:
- 使用Azure Monitor监视和可观测性
- 终端Defender的安全性
- 遵从 Azure Policy 的要求
- 使用机器配置进行配置管理
- 使用自定义脚本进行部署后脚本编写
使用 azure_rm_arcmachineextensions 模块可以管理扩展的生命周期:
- 安装扩展
- 更新配置或版本
- 删除扩展
azure_rm_arcmachineextensions_info模块通过启用验证和故障排除来补充这一点。
在大多数环境中,扩展管理属于后期运营工作流程:
- 配置具有所需扩展的计算机
- 验证其状态
- 修正随时间推移的偏移
先决条件
Azure要求
- 已连接到Azure Arc的计算机
权限
若要部署和管理扩展,您的用户身份必须具有以下权限:
- 读取已启用 Arc 的计算机
- 读取扩展
- 创建/更新/删除扩展
Azure Connected Machine Resource Administrator 角色包括这些权限。
Ansible 要求
- Ansible Core 或 Ansible 自动化平台 (AAP)
- 已安装 Azure 集合
大规模部署的身份验证指南
在跨多个计算机部署扩展时,选择正确的身份验证方法对于安全性和可伸缩性至关重要。
身份验证选项摘要
| 方法 | 最适用于 | 建议 |
|---|---|---|
Azure CLI (auth_source: cli) |
本地开发和测试 | 仅用于开发 |
托管标识 (auth_source: msi) |
来自 Azure 或 Arc 控制节点的生产自动化 | 推荐 |
环境变量 (auth_source: env) |
AAP、CI/CD 或外部自动化 | 当 MSI 不可用时 |
托管标识
当 Ansible 控制节点在Azure VM 或启用了Azure Arc的服务器上运行时,请使用托管标识。 按照以下步骤,将 Ansible 控制节点托管身份分配给 Azure Connected Machine Resource Administrator 角色。
Azure 门户
在 Azure 门户中将所需的角色分配给 Ansible 控制节点的托管标识。 此选项适用于 Azure VM 托管标识或已启用 Arc 的服务器托管标识。
- 转到 Azure 门户。
- 导航到你要将计算机加入到的订阅或资源组。
- 选择访问控制 (IAM)。
- 选择 “添加→添加角色分配。
- 选择角色:Azure Connected Machine Resource Administrator。
- 若要 分配访问权限,请选择 托管标识。
- 选择 Virtual 计算机(如果控制节点是 Azure VM)或已启用 Azure Arc 的服务器。
- 选取控制节点资源。
- 选择“保存”。
一旦 Ansible 控制节点的托管身份具有所需的角色,您可以在 playbook 中将其用作身份验证源,不需要交互式登录、密钥或环境变量。
若要在 playbook 中使用托管标识身份验证,请按如下所示设置身份验证源:
auth_source: msi
Azure CLI 身份验证
对于交互式使用和开发环境,建议使用此选项。 在 Ansible 控制节点上使用当前已登录的 Azure CLI 标识。 在您的操作手册中设置以下内容:
auth_source: cli
运行 playbook 之前,请使用此Azure CLI命令登录到Azure(这将打开用于登录的新浏览器窗口):
az cloud set -n AzureChinaCloud
az login
# az cloud set -n AzureCloud //means return to Azure Public Cloud.
如果没有用于登录的浏览器,请使用此 Azure CLI 命令通过设备登录到 Azure:
az cloud set -n AzureChinaCloud
az login --use-device-code
# az cloud set -n AzureCloud //means return to Azure Public Cloud.
登录后,可以验证和/或设置订阅:
az account show
az account set --subscription "<subscription-id-or-name>"
Arc 扩展
下表重点介绍了已启用 Arc 的服务器常用的扩展。 可以查看 扩展的完整列表。
| 扩展 | 发布者 | 类型 | 用例 |
|---|---|---|---|
| Azure Monitor 代理 | Microsoft.Azure.Monitor | AzureMonitorLinuxAgent / AzureMonitorWindowsAgent | 收集日志和指标 |
| Dependency Agent | Microsoft.Azure.Monitoring.DependencyAgent | DependencyAgentLinux / Windows | 依赖项映射 |
| 自定义脚本 | Microsoft.Compute | CustomScriptExtension | 运行用于配置的脚本 |
| 密钥保管库 | Microsoft。Azure。KeyVault | KeyVaultForLinux / Windows | 检索证书和机密 |
| Defender for Cloud | Microsoft。Azure。安全 | MDE.* | 终结点保护和安全性 |
部署扩展
使用模块 azure_rm_arcmachineextensions 在已启用 Arc 的服务器上安装和配置扩展。 每个扩展定义特定的功能(例如监视、安全性或配置),并使用发布者、类型和设置的组合部署到目标计算机。 该模块是幂等的,这意味着它可以安全地重新运行,以确保将所需状态应用于整个环境中。 对于生产场景,请使用托管标识身份验证来实现安全的非交互式大规模部署。
以下示例 playbook 在已启用 Arc 的 Linux 服务器上安装 Azure Monitor Agent (AMA) 扩展。 该扩展是使用托管标识身份验证部署的,无需存储凭据即可启用安全的非交互式自动化。 playbook 指定扩展的发布者和类型以标识监视功能,并使用state: present确保扩展已安装。 由于模块是幂等的,所以可以安全地重新运行此运行手册,以在整个环境中保持所需的监控基线。
- name: Deploy Azure Monitor Agent extension
hosts: localhost
connection: local
vars:
auth_source: msi
tasks:
- name: Install extension
azure.azcollection.azure_rm_arcmachineextensions:
resource_group: "arc-rg"
machine_name: "my-arc-server"
name: "AzureMonitorLinuxAgent"
publisher: "Microsoft.Azure.Monitor"
type: "AzureMonitorLinuxAgent"
type_handler_version: "1.0"
settings: {}
state: present
更新扩展
可以使用 Azure 门户、Azure CLI 或 PowerShell 启用自动扩展更新。
若要手动管理扩展更新,请使用 azure_rm_arcmachineextensions 模块更新已启用 Arc 的服务器上的现有扩展配置或版本。 通过指定更新的值(例如更新的 type_handler_version 或修改的设置),模块可确保扩展反映出所需的配置。
此示例手册通过指定新版本或配置来更新现有扩展程序。 运行时,该模块会将扩展的当前状态与所需配置进行比较,并且仅在需要时应用更改。 这样,就可以跨多台计算机进行安全、可重复的更新,而不会影响已合规的系统。
- name: Update extension
azure.azcollection.azure_rm_arcmachineextensions:
resource_group: "arc-rg"
machine_name: "my-arc-server"
name: "AzureMonitorLinuxAgent"
publisher: "Microsoft.Azure.Monitor"
type: "AzureMonitorLinuxAgent"
type_handler_version: "1.1"
state: present
删除扩展
使用 azure_rm_arcmachineextensions 模块与 state: absent 一起,从启用了 Arc 的服务器上删除扩展。 这对于解除未使用的扩展、解决失败的部署或强制实施新的基线配置非常有用。
以下示例 playbook 使用state: absent从启用了 Arc 的服务器中删除扩展。 这对于解除未使用的扩展或强制实施修订的配置基线非常有用。 该操作是幂等的,因此即使扩展已被删除,也可以安全地重新运行该操作。
- name: Remove extension
azure.azcollection.azure_rm_arcmachineextensions:
resource_group: "arc-rg"
machine_name: "my-arc-server"
name: "AzureMonitorLinuxAgent"
state: absent
验证扩展部署
使用 azure_rm_arcmachineextensions_info 模块检索有关已启用 Arc 的服务器部署的扩展的信息,并验证其配置和状态。 这允许通过检查名称、版本和预配状态等属性来确认已安装并按预期方式运行所需的扩展。 验证步骤可以集成到自动化工作流中,以检测缺失、失败或配置错误的扩展并触发修正操作。
此示例 playbook 从已启用 Arc 的服务器检索扩展详细信息,并验证是否已安装所需的扩展。 它会检查返回的扩展列表,如果缺少预期的扩展,则 playbook 将失败,使你可以在需要时强制实施合规性并触发修正工作流。
- name: Validate extension deployment
hosts: localhost
connection: local
vars:
auth_source: msi
tasks:
- name: Get extension details
azure.azcollection.azure_rm_arcmachineextensions_info:
resource_group: "arc-rg"
name: "my-arc-server"
register: extension_info
- name: Ensure extension is installed
fail:
msg: "Azure Monitor Agent is not installed"
when: "'AzureMonitorLinuxAgent' not in extension_info.extensions | map(attribute='name') | list"
检测不正常的扩展
此示例任务循环访问目标计算机上的所有扩展,并标识未成功预配状态的任何扩展。 它通常用于在验证或监视工作流中,检测安装失败或配置不当的扩展。
- name: Identify failed extensions
debug:
msg: "{{ item.name }} is not healthy"
loop: "{{ extension_info.extensions }}"
when: item.provisioningState != "Succeeded"
修正偏移
此任务重新应用所需的扩展配置,以确保目标计算机与定义的基线匹配。 由于模块是幂等的,因此仅当扩展缺失或配置错误时,它才会安装或更新该扩展,因此可以安全地重复运行,以便持续实施合规性。
- name: Re-apply extension baseline
azure.azcollection.azure_rm_arcmachineextensions:
resource_group: "arc-rg"
machine_name: "my-arc-server"
name: "AzureMonitorLinuxAgent"
publisher: "Microsoft.Azure.Monitor"
type: "AzureMonitorLinuxAgent"
state: present
使用 Ansible 自动化平台 (AAP) 进行大规模执行
可以使用 Ansible 自动化平台(AAP)执行扩展部署和验证,以实现集中式管理、计划和可重复性。
AAP 允许你定义作业模板,这些模板可以在无需手动执行的情况下运行 Playbook,并提供对自动化运行的集中监控和可见性。
建议的作业模板结构
为工作流的每个阶段创建单独的作业模板:
| 作业模板 | Purpose |
|---|---|
| 部署扩展 | 跨计算机安装所需的扩展 |
| 验证扩展 | 检查扩展程序运行状况和合规性 |
| 修正偏移(可选) | 对不合规的机器重新应用期望状态 |
配置部署作业模板
使用以下值设置作业模板:
| Field | Value |
|---|---|
| 工作类型 | Run |
| 库存 | 目标清单(例如, arc_linux) |
| 项目 | 包含剧本的存储库 |
| 剧本 | 示例: deploy_extensions.yml |
| Credentials | Azure 资源管理器凭据 |
| 限额 | 可选组或主机筛选器 |
在 AAP 中配置身份验证
对于 AAP 中的Azure身份验证:
- 当执行环境在Azure VM 或已启用 Arc 的服务器上运行时,请使用托管标识。
启用持续合规性
若要大规模维护扩展合规性,请执行以下操作:
- 计划验证作业模板定期运行(例如每小时或每天)。
- (可选)在检测到验证失败时触发修正作业模板。
- 使用清单组或动态清单自动包括新计算机。
操作模式
使用 AAP 时,扩展工作流将变为:
- 部署扩展(基线配置)
- 验证扩展状态(定期的符合性检查)
- 纠正漂移(自动修正)
此模型支持跨大型混合环境对扩展进行一致且可重复的管理。
相关内容
- 了解如何使用 Azure CLI、PowerShell 或 Azure 资源管理器 模板部署、管理和删除 VM 扩展。
- 查看 VM 扩展故障排除指南。