使用 Ansible 部署和管理 Arc 扩展

本文介绍如何使用 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 的服务器托管标识。

  1. 转到 Azure 门户
  2. 导航到你要将计算机加入到的订阅资源组
  3. 选择访问控制 (IAM)
  4. 选择 “添加→添加角色分配
  5. 选择角色:Azure Connected Machine Resource Administrator
  6. 若要 分配访问权限,请选择 托管标识
  7. 选择 Virtual 计算机(如果控制节点是 Azure VM)或已启用 Azure Arc 的服务器
  8. 选取控制节点资源。
  9. 选择“保存”。

一旦 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 时,扩展工作流将变为:

  1. 部署扩展(基线配置)
  2. 验证扩展状态(定期的符合性检查)
  3. 纠正漂移(自动修正)

此模型支持跨大型混合环境对扩展进行一致且可重复的管理。