你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure Linux VM 代理概述

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

重要说明

有关在虚拟机客户端代理和扩展中对 FIPS 140-3 的最新支持,请访问 aka.ms/linuxagentfipssupport

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

注意

尝试 VM 辅助,以便更快地进行诊断。 建议运行 VM assist for WindowsVM assist for Linux。 这些基于脚本的诊断工具可帮助你识别影响 Azure VM 来宾代理和整体 VM 运行状况的常见问题。

如果在联系支持人员之前遇到虚拟机的性能问题,请运行这些工具。

映像预配

  • 创建用户帐户。
  • 配置 SSH 身份验证类型。
  • 部署 Secure Shell(SSH)公钥和密钥对。
  • 设置主机名。
  • 将主机名发布到平台域名系统(DNS)。
  • 将 SSH 主机密钥指纹报告到平台。
  • 管理资源磁盘。
  • 设置资源磁盘的格式并装载。
  • 配置交换空间。

网络

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

内核

  • 配置虚拟 NUMA(在内核 2.6.37 中不可用)。
  • /dev/random消耗Hyper-V熵。
  • 为根设备(可以是远程设备)配置 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 社区 Alma Linux 8.x、9.x 8.x、9.x
Credativ Debian 10.x 11.x
Kinvolk Flatcar Linux 3374.2.x 3374.2.x
Microsoft Azure Linux 2.x 2.x
openSUSE 项目 OpenSUSE 12.3 不支持
Oracle Oracle Linux 6.4、7.x、8.x 不支持
Red Hat Red Hat Enterprise Linux 6.7、7.x、8.x、9.x、10.x 8.6、9.0、10.x
CIQ Rocky Linux 9.x 9.x
SUSE SLES 12.x、15.x 15.x SP4
Canonical Ubuntu(LTS 版本) 18.04, 20.04, 22.04, 24.04, 26.04 20.04, 22.04, 24.04, 26.04

其他支持的系统:

  • 代理支持的系统比文档中列出的更多。 但是,我们不会测试或提供对不在认可列表中的发行版的支持。 具体而言,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 代理正确更新。 我们建议你在 AutoUpdate.Enabled=Y 文件中设置选项 /etc/waagent.conf,因为注释掉该选项也会导致使用默认值。 拥有 AutoUpdate.Enabled=N 会导致 Azure Linux VM 代理无法正常更新。

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

命令行选项

标志

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

命令

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

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

    • 所有 SSH 主机密钥(如果 Provisioning.RegenerateSshHostKeyPair 是配置文件中的 y)。
    • /etc/resolv.conf 中的 Nameserver 配置
    • /etc/shadow 中的根密码(如果 是配置文件中的 Provisioning.DeleteRootPasswordy
    • 缓存的 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

此选项在操作系统磁盘和数据驱动器上配置 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。 它使用名为 systemd 的新 azure-walinuxagent-logcollector.slice 切片来管理资源,同时执行收集。

目的是辅助脱机分析。 在将某些诊断日志上传到 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 云映像上的空间,请参阅以下资源: