Azure Linux VM 代理概述

Microsoft Azure Linux VM 代理 (waagent) 可以管理 Linux 与 FreeBSD 预配,以及虚拟机 (VM) 与 Azure 结构控制器之间的交互。 除了提供预配功能的 Linux 代理外,Azure 还提供对某些 Linux 操作系统使用 cloud-init 的选项。

Linux 代理为 Linux 和 FreeBSD Azure 虚拟机部署提供以下功能。 有关详细信息,请参阅 GitHub 上的 Azure Linux VM 代理自述文件

映像预配

  • 创建用户帐户
  • 配置 SSH 身份验证类型
  • 部署 SSH 公钥和密钥对
  • 设置主机名
  • 将主机名发布到平台 DNS
  • 将 SSH 主机密钥指纹报告给平台
  • 管理资源磁盘
  • 格式化并装入资源磁盘
  • 配置交换空间

网络

  • 管理路由以提高与平台 DHCP 服务器的兼容性
  • 确保网络接口名称的稳定性

内核

  • 配置虚拟 NUMA(对 2.6.37 版本的内核禁用)
  • 将 Hyper-V 熵用于 /dev/random
  • 为根设备配置 SCSI 超时(可通过远程方式)

诊断

  • 向串行端口提供控制台重定向

System Center Virtual Machine Manager 部署

  • 当在 System Center Virtual Machine Manager 2012 R2 环境中运行时,检测并启动适用于 Linux 的 Virtual Machine Manager 代理

VM 扩展

  • 将 Microsoft 和合作伙伴授权的组件注入 Linux VM,以便实现软件和配置的自动化

可以在 GitHub 上找到 VM 扩展参考实现。

通信

从平台到代理的信息流通过两个通道进行:

  • 用于 VM 部署的附加了启动时间的 DVD。 此 DVD 包含一个与开放虚拟化格式 (OVF) 兼容的配置文件,该文件包括除 SSH 密钥对之外的所有预配信息。
  • 公开用于获取部署和拓扑配置的 REST API 的 TCP 终结点。

要求

测试已确认,以下系统适用于 Azure Linux VM 代理。

注意

此列表可能与 Azure 上认可的 Linux 分发版不同。

分发 X64 ARM64
Alma Linux 9.x+ 9.x+
Debian 10+ 11.x+
Azure Linux 2.x 2.x
OpenSUSE 12.3+ 不支持
Rocky Linux 9.x+ 9.x+
SLES 12.x+、15.x+ 15.x SP4+
Ubuntu(LTS 版本) 18.04+、20.04+、22.04+、24.04+ 20.04+、22.04+、24.04+

重要

使用“protectedSettings”扩展的 RHEL/Ubuntu 不支持 FIPS 140-3 强制实施。 支持 ETA 为 2025 年年中。

其他支持的系统:

  • 代理适用的系统比文档中列出的系统要多。 但是,我们不会对不在认可列表中的发行版进行测试或提供支持。 具体而言,FreeBSD 未受认可。 客户可以试用 FreeBSD 8,如果遇到问题,他们可以在我们的 GitHub 存储库中提出问题,我们能够提供帮助。

Linux 代理依赖以下系统包来确保正常运行:

  • Python 2.6+
  • OpenSSL 1.0+
  • OpenSSH 5.3+
  • 文件系统实用程序:sfdisk、fdisk、mkfs、parted
  • 密码工具:chpasswd、sudo
  • 文本处理工具:sed、grep
  • 网络工具:ip-route
  • 装载 UDF 文件系统的内核支持

确保你的 VM 可以访问 IP 地址 168.63.129.16。 有关详细信息,请参阅什么是 IP 地址 168.63.129.16?

安装

安装和升级 Azure Linux VM 代理的受支持方法是使用分发版包存储库中的 RPM 或 DEB 包。 所有认可的分发版提供商会将 Azure Linux VM 代理包集成到其映像和存储库。 一些 Linux 分发版可能会禁用 Azure Linux VM 代理自动更新功能,并且一些存储库还可能包含较旧的版本,这些情况可能会对新式扩展产生影响,因此,我们建议安装最新的稳定版本。 要确保 Azure Linux VM 代理正确更新,我们建议在 /etc/waagent.conf 文件中选择选项 AutoUpdate.Enabled=Y,否则只是注释掉该选项也会生成其默认值。 拥有 AutoUpdate.Enabled=N 将不会支持 Azure Linux VM 代理正确更新。

有关高级安装选项,例如从源安装或安装到自定义位置或前缀,请参阅 Microsoft Azure Linux VM 代理。 除了这些方案之外,我们不支持或建议从源升级或重新安装 Azure Linux VM 代理。

命令行选项

Flags

  • verbose:增加指定命令的详细程度。
  • force:跳过某些命令的交互式确认。

命令

  • help:列出支持的命令和标志。

  • deprovision:尝试清理系统并使其适用于重新预配。 操作将删除:

    • 所有 SSH 主机密钥(如果 Provisioning.RegenerateSshHostKeyPair 是配置文件中的 y)。
    • /etc/resolv.conf 中的 Nameserver 配置。
    • /etc/shadow 中的根密码(如果 Provisioning.DeleteRootPassword 是配置文件中的 y)。
    • 缓存的 DHCP 客户端租赁。

    客户端将主机名重置为 localhost.localdomain

    警告

    取消预配无法保证清除映像中的所有敏感信息且适用于重新分发。

  • deprovision+user:执行 deprovision 中的所有操作,同时删除最后预配的用户帐户(从 /var/lib/waagent 中获得)和关联数据。 取消预配以前在 Azure 上预配的映像时,请使用此参数,以便可以捕获和重复使用该映像。

  • version:显示 waagent 的版本。

  • serialconsole:配置 GRUB 以将 ttyS0(第一个串行端口)标记为启动控制台。 此选项可确保将内核启动日志发送到串行端口并适用于调试。

  • daemon:将 waagent 作为守护程序运行以管理与平台的交互。 在 waagent init 脚本中为 waagent 指定此参数。

  • start:将 waagent 作为后台进程运行。

配置

/etc/waagent.conf 配置文件可控制 waagent 的操作。 下面是一个配置文件示例:

Provisioning.Enabled=y
Provisioning.DeleteRootPassword=n
Provisioning.RegenerateSshHostKeyPair=y
Provisioning.SshHostKeyPairType=rsa
Provisioning.MonitorHostName=y
Provisioning.DecodeCustomData=n
Provisioning.ExecuteCustomData=n
Provisioning.AllowResetSysUser=n
Provisioning.PasswordCryptId=6
Provisioning.PasswordCryptSaltLength=10
ResourceDisk.Format=y
ResourceDisk.Filesystem=ext4
ResourceDisk.MountPoint=/mnt/resource
ResourceDisk.MountOptions=None
ResourceDisk.EnableSwap=n
ResourceDisk.SwapSizeMB=0
LBProbeResponder=y
Logs.Verbose=n
OS.RootDeviceScsiTimeout=300
OS.OpensslPath=None
HttpProxy.Host=None
HttpProxy.Port=None
AutoUpdate.Enabled=y

配置选项分为三种类型:BooleanStringInteger。 可以将 Boolean 配置选项指定为 yn。 特殊关键字 None 可用于某些字符串类型配置条目。

Provisioning.Enabled

Type: Boolean
Default: y

此选项允许用户在代理中启用或禁用设置功能。 有效值为 yn。 如果禁用预配,则会保留映像中的 SSH 主机和用户密钥,并忽略 Azure 预配 API 中的所有配置。

注意

Provisioning.Enabled 参数在使用 cloud-init 进行预配的 Ubuntu 云映像上默认为 n

Provisioning.DeleteRootPassword

Type: Boolean
Default: n

如果值为 y,则代理会在预配过程中清除 /etc/shadow 文件中的根密码。

Provisioning.RegenerateSshHostKeyPair

Type: Boolean
Default: y

如果值为 y,则代理会在预配过程中从 /etc/ssh/ 中删除所有 SSH 主机密钥对,包括 ECDSA、DSA 和 RSA。 代理将生成单个全新密钥对。

使用 Provisioning.SshHostKeyPairType 条目为该全新密钥对配置加密类型。 在重启 SSH 守护程序时(例如,在重新引导后),某些分发版将为任何缺失的加密类型重新创建 SSH 密钥对。

Provisioning.SshHostKeyPairType

Type: String
Default: rsa

可以将此选项设置为 SSH 守护程序在 VM 上支持的加密算法类型。 通常支持的值包括 rsadsaecdsa。 Windows 上的 putty.exe 文件不支持 ecdsa。 如果要在 Windows 上使用 putty.exe 连接到 Linux 部署,请使用 rsadsa

Provisioning.MonitorHostName

Type: Boolean
Default: y

如果值为 y,则 waagent 会根据 hostname 命令返回的内容,监视 Linux VM 的主机名更改。 然后,waagent 自动更新映像中的网络配置以反映更改。 为了将名称更改推送到 DNS 服务器,将在 VM 中重启网络。 此重启会导致 Internet 连接暂时中断。

Provisioning.DecodeCustomData

Type: Boolean
Default: n

如果值为 y,则 waagent 从 Base64 解码 CustomData

Provisioning.ExecuteCustomData

Type: Boolean
Default: n

如果值为 y,则 waagent 在预配后运行 CustomData

Provisioning.AllowResetSysUser

Type: Boolean
Default: n

此选项允许重置系统用户的密码。 此项默认禁用。

Provisioning.PasswordCryptId

Type: String
Default: 6

此选项指定 crypt 生成密码哈希时使用的算法。 有效值是:

  • 1:MD5
  • 2a:Blowfish
  • 5:SHA-256
  • 6:SHA-512

Provisioning.PasswordCryptSaltLength

Type: String
Default: 10

此选项指定生成密码哈希时使用的随机加盐的长度。

ResourceDisk.Format

Type: Boolean
Default: y

如果值为 y,则 waagent 会格式化并装载平台提供的资源磁盘,除非用户在 ResourceDisk.Filesystem 中请求的文件系统类型为 ntfs。 代理会使单个 Linux 分区 (ID 83) 在磁盘上可用。 如果能够成功装载此分区,则不会对其进行格式化。

ResourceDisk.Filesystem

Type: String
Default: ext4

此选项指定资源磁盘的文件系统类型。 支持的值随 Linux 分发的不同而不同。 如果字符串为 X,则 mkfs.X 应呈现在 Linux 映像上。

ResourceDisk.MountPoint

Type: String
Default: /mnt/resource

此选项指定资源磁盘的装载路径。 资源磁盘是临时磁盘,可能在取消预配 VM 时被清空。

ResourceDisk.MountOptions

Type: String
Default: None

此选项指定要传递给 mount -o 命令的磁盘装载选项。 该值是逗号分隔的值列表,例如 nodev,nosuid。 有关详细信息,请参阅 mount(8) 手册页。

ResourceDisk.EnableSwap

Type: Boolean
Default: n

如果设置了此选项,则代理会在资源磁盘上创建交换文件 (/swapfile),并将其添加到系统交换空间。

ResourceDisk.SwapSizeMB

Type: Integer
Default: 0

此选项指定交换文件的大小 (MB)。

Logs.Verbose

Type: Boolean
Default: n

如果设置了此选项,则会提高日志详细程度。 Waagent 将日志记录到 /var/log/waagent.log 并利用系统 logrotate 功能来轮换日志。

OS.EnableRDMA

Type: Boolean
Default: n

如果设置了此选项,代理将尝试安装然后加载与底层硬件上的固件版本匹配的 RDMA 内核驱动程序。

OS.RootDeviceScsiTimeout

Type: Integer
Default: 300

这选项会配置 OS 磁盘和数据驱动器上的 SCSI 超时(秒)。 如果未设置,则使用系统默认值。

OS.OpensslPath

Type: String
Default: None

可以使用此选项指定要用于加密操作的 openssl 二进制文件的替代路径。

HttpProxy.Host、HttpProxy.Port

Type: String
Default: None

如果设置了此选项,代理会使用此代理服务器访问 Internet。

AutoUpdate.Enabled

Type: Boolean
Default: y

启用或禁用目标状态处理的自动更新。 默认值为 y

Azure Linux 来宾代理中的自动日志收集

从版本 2.7+ 开始,Azure Linux 来宾代理提供自动收集某些日志并将其上传的功能。 此功能当前需要 systemd。 它使用名为 azure-walinuxagent-logcollector.slice 的新 systemd 切片来管理资源,同时执行收集。

目的是辅助脱机分析。 在将某些诊断日志上传到 VM 的主机之前,代理会生成一个包含这些日志的 .zip 文件。 工程团队和支持专业人员可以检索该文件,以调查 VM 所有者遇到的问题。 有关来宾代理收集的文件的技术信息,请参阅代理的 GitHub 存储库中的 azurelinuxagent/common/logcollector_manifests.py 文件。

可以通过编辑 /etc/waagent.conf 来禁用此选项。 将 Logs.Collect 更新到 n

Ubuntu 云映像

Ubuntu 云映像使用 cloud-init 来执行许多原本由 Azure Linux VM 代理管理的配置任务。 具有以下差异:

  • Provisioning.Enabled 在使用 cloud-init 执行预配任务的 Ubuntu 云映像上默认为 n

  • 以下配置参数对使用 cloud-init 来管理资源磁盘并交换空间的 Ubuntu 云映像没有影响:

    • ResourceDisk.Format
    • ResourceDisk.Filesystem
    • ResourceDisk.MountPoint
    • ResourceDisk.EnableSwap
    • ResourceDisk.SwapSizeMB

若要配置资源磁盘装入点,并在预配期间交换 Ubuntu 云映像上的空间,请参阅以下资源: