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
。警告
取消预配无法保证清除映像中的所有敏感信息且适用于重新分发。
- 所有 SSH 主机密钥(如果
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
配置选项分为三种类型:Boolean
、String
或 Integer
。 可以将 Boolean
配置选项指定为 y
或 n
。 特殊关键字 None
可用于某些字符串类型配置条目。
Provisioning.Enabled
Type: Boolean
Default: y
此选项允许用户在代理中启用或禁用设置功能。 有效值为 y
和 n
。 如果禁用预配,则会保留映像中的 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 上支持的加密算法类型。 通常支持的值包括 rsa
、dsa
和 ecdsa
。 Windows 上的 putty.exe 文件不支持 ecdsa
。 如果要在 Windows 上使用 putty.exe 连接到 Linux 部署,请使用 rsa
或 dsa
。
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
:MD52a
:Blowfish5
:SHA-2566
: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 云映像上的空间,请参阅以下资源: