Microsoft Azure Linux Agent
Downcodes小编 将为您介绍 Microsoft Azure Linux Agent (waagent),它是一种管理 Linux 预配和虚拟机与 Azure Fabric Controller 交互的工具。它为 Linux IaaS 部署提供以下功能:
1. 映像预配:waagent 负责管理 Linux 虚拟机的初始预配过程,包括配置网络、安装驱动程序和设置初始用户帐户。
2. 网络管理:waagent 与 Azure Fabric Controller 协调,以配置虚拟机的网络设置,例如 IP 地址、子网掩码和网关。
3. 内核管理:waagent 可管理虚拟机的内核更新,确保它始终运行最新且安全的内核版本。
4. 诊断:waagent 可收集和报告虚拟机运行状况信息,帮助诊断问题并解决故障。
5. SCVMM 部署:waagent 支持与 System Center Virtual Machine Manager (SCVMM) 集成,以管理和预配虚拟机。
6. 虚拟机扩展:waagent 支持运行虚拟机扩展,这些扩展提供额外的功能和定制,例如安装软件或监控指标。
7. 通信:waagent 通过两种通道与 Azure Fabric Controller 通信:
* 启动时附加的 DVD:对于 IaaS 部署,一个包含 OVF 兼容配置文件的启动时附加 DVD 提供预配信息(除了 SSH 密钥对)。
* REST API:一个公开 REST API 的 TCP 端点用于获取部署和拓扑配置。
waagent 可以通过 httpproxy(用于 HTTP 请求)或 httpsproxy(用于 HTTPS 请求)环境变量使用 HTTP 代理。由于 Python 的限制,waagent 不支持需要身份验证的 HTTP 代理。
类似地,如果设置了 no_proxy 环境变量,waagent 将绕过代理。
请注意,在不同发行版中为 waagent 服务定义这些环境变量的方式会有所不同。对于使用 systemd 的发行版,一种常见的方法是在服务定义的 [Service] 部分使用 Environment 或 EnvironmentFile,例如使用覆盖或插入文件(有关覆盖,请参见 systemctl edit)。
示例
`
cat /etc/systemd/system/walinuxagent.service.d/http-proxy.conf
[Service]
Environment="http_proxy=http://proxy.example.com:80/"
Environment="https_proxy=http://proxy.example.com:80/"
#
`
waagent 将其环境传递给它执行的虚拟机扩展,包括 httpproxy 和 httpsproxy,因此为 waagent 定义代理也将为虚拟机扩展定义代理。
如果使用 HttpProxy.Host 和 HttpProxy.Port 配置变量,它们将覆盖环境设置。请注意,这些配置变量是 waagent 进程的本地变量,不会传递给虚拟机扩展。
waagent 需要一些系统软件包才能正常运行。这些软件包因发行版而异。
通过发行版软件包库进行安装是唯一支持的安装方法。
您可以从源代码安装以获得更多高级选项,例如安装到自定义位置或创建自定义映像。但是,从源代码安装可能会覆盖发行版对 waagent 所做的自定义,并且仅供高级用户使用。我们对此方法的支持非常有限。
要从源代码安装,可以使用 setuptools:
`
sudo python setup.py install --register-service
`
对于 Python 3,请使用:
`
sudo python3 setup.py install --register-service
`
您可以通过运行以下命令查看更多安装选项:
`
sudo python setup.py install --help
`
waagent 的日志文件保存在 /var/log/waagent.log 中。
最后,您还可以使用下方 DEB 和 RPM 部分提供的配置示例来自定义自己的 RPM 或 DEB 软件包。此方法也适用于高级用户,我们对此方法的支持非常有限。
通过发行版软件包库或使用自动更新进行升级是唯一支持的方法。您可以在这里找到更多信息:更新 Linux Agent。
要从源代码升级 waagent,可以使用 setuptools。从源代码升级仅供高级用户使用,我们对此方法的支持非常有限。
`
sudo python setup.py install --force
`
重新启动 waagent 服务:
`
sudo service waagent restart
`
对于 Ubuntu,请使用:
`
sudo service walinuxagent restart
`
对于 CoreOS,请使用:
`
sudo systemctl restart waagent
`
-verbose:增加指定命令的详细程度。
-force:跳过某些命令的交互式确认。
-help:列出支持的命令和标志。
-deprovision:尝试清理系统并使其适合重新预配,方法是删除以下内容:
* 所有 SSH 主机密钥(如果配置文件中的 Provisioning.RegenerateSshHostKeyPair 为 'y')。
* /etc/resolv.conf 中的名称服务器配置。
* /etc/shadow 中的 root 密码(如果配置文件中的 Provisioning.DeleteRootPassword 为 'y')。
* 缓存的 DHCP 客户端租约。
* 将主机名重置为 localhost.localdomain。
警告!deprovision 无法保证映像已清除所有敏感信息,并且适合重新分发。
-deprovision+user:执行 deprovision(如上所述)下的所有操作,以及删除上次预配的用户帐户及其关联数据。
-version:显示 waagent 的版本。
-serialconsole:配置 GRUB 以将 ttyS0(第一个串行端口)标记为引导控制台。这将确保内核启动日志发送到串行端口,并可用于调试。
-daemon:将 waagent 作为守护进程运行,以管理与平台的交互。此参数在 waagent 初始化脚本中指定给 waagent。
-start:将 waagent 作为后台进程运行。
-collect-logs [-full]:运行日志收集实用程序,该实用程序将收集与代理相关的日志以进行调试,并将它们存储在磁盘上的代理文件夹中。运行时将显示确切位置。使用 -full 标志进行更全面的日志收集。
一个配置文件 (/etc/waagent.conf) 控制 waagent 的操作。空行和首字符为 # 的行将被忽略(不支持行尾注释)。
下面显示了一个示例配置文件:
`
Extensions.Enabled=y
Extensions.GoalStatePeriod=6
Provisioning.Agent=auto
Provisioning.DeleteRootPassword=n
Provisioning.RegenerateSshHostKeyPair=y
Provisioning.SshHostKeyPairType=rsa
Provisioning.MonitorHostName=y
Provisioning.DecodeCustomData=n
Provisioning.ExecuteCustomData=n
Provisioning.PasswordCryptId=6
Provisioning.PasswordCryptSaltLength=10
ResourceDisk.Format=y
ResourceDisk.Filesystem=ext4
ResourceDisk.MountPoint=/mnt/resource
ResourceDisk.MountOptions=None
ResourceDisk.EnableSwap=n
ResourceDisk.EnableSwapEncryption=n
ResourceDisk.SwapSizeMB=0
Logs.Verbose=n
Logs.Collect=y
Logs.CollectPeriod=3600
OS.AllowHTTP=n
OS.RootDeviceScsiTimeout=300
OS.EnableFIPS=n
OS.OpensslPath=None
OS.SshClientAliveInterval=180
OS.SshDir=/etc/ssh
HttpProxy.Host=None
HttpProxy.Port=None
`
下面详细描述了各种配置选项。配置选项分为三种类型:布尔型、字符串型和整型。布尔型配置选项可以指定为 "y" 或 "n"。特殊关键字 "None" 可用于某些字符串型配置项,如下所述。
类型:布尔型
默认值:y
此选项允许用户启用或禁用代理中的扩展处理功能。有效值为 "y" 或 "n"。如果禁用扩展处理,则目标状态仍将被处理,并且仍会报告虚拟机状态,但仅每 5 分钟一次。目标状态中的扩展配置将被忽略。请注意,密码重置、SSH 密钥更新和备份等功能依赖于扩展。仅在您完全不需要扩展时禁用此选项。
注意:以这种方式禁用扩展与完全不使用代理不同。要做到这一点,必须在预配时通过所使用的任何 API 设置 provisionVMAgent 标志。我们将在我们的 wiki 上提供有关此方面的更多详细信息,但该 wiki 目前尚不可用。
类型:布尔型
默认值:n
在执行虚拟机扩展之前等待 cloud-init 完成(cloud-init status --wait)。
cloud-init 和虚拟机扩展都是常见的初始部署期间自定义虚拟机的方法。默认情况下,代理将在 cloud-init 可能仍处于 'config' 阶段时开始执行扩展,并且不会等待 'final' 阶段完成。cloud-init 和扩展可能执行彼此冲突的操作(例如,它们都可能尝试安装软件包)。将此选项设置为 'y' 可确保仅在 cloud-init 完成所有阶段后才执行虚拟机扩展。
请注意,使用此选项需要创建自定义映像并将此选项的值设置为 'y',以确保在虚拟机的初始部署期间执行等待操作。
类型:整型
默认值:3600
代理等待 cloud-init 的超时时间(以秒为单位)。如果超时时间到期,代理将继续执行虚拟机扩展。有关更多详细信息,请参见 Extensions.WaitForCloudInit。
类型:整型
默认值:6
轮询新目标状态(以秒为单位)的频率,并报告虚拟机和扩展的状态。目标状态描述了虚拟机上扩展的期望状态。
注意:将此参数设置为超过几分钟的时间可能会导致 Azure 门户上报告虚拟机状态为无响应/不可用。此外,此设置会影响代理开始执行扩展的速度。
类型:布尔型
默认值:y
启用扩展处理程序的自动更新。扩展处理程序负责管理扩展并报告虚拟机状态。代理的核心功能包含在扩展处理程序中,我们鼓励用户启用此选项以维护最新的版本。
启用此选项后,代理将在新版本可用时安装它们。禁用后,代理将不会安装任何新版本,但它将使用已安装在虚拟机上的最新版本。
说明:
有关代理版本的更多信息,请参见我们的常见问题解答。
有关代理更新的更多信息,请参见我们的常见问题解答。
有关 AutoUpdate.UpdateToLatestVersion 与 AutoUpdate.Enabled 的更多信息,请参见我们的常见问题解答。
类型:布尔型
默认值:y
启用扩展处理程序的自动更新。此标志出于遗留原因而受支持,我们强烈建议使用 AutoUpdate.UpdateToLatestVersion 而不是此标志。
这两个标志之间的区别在于,当设置为 'n' 时,AutoUpdate.Enabled 将使用预安装在映像上的扩展处理程序版本,而 AutoUpdate.UpdateToLatestVersion 将使用已安装在虚拟机上的最新版本(通过自动更新)。
在大多数发行版中,默认值为 'y'。
类型:字符串型
默认值:auto
选择要使用的预配代理(或允许 waagent 通过指定 "auto" 来自行确定)。可能的选项包括 "auto"(默认)、"waagent"、"cloud-init" 或 "disabled"。
类型:布尔型
默认值:y
此选项允许用户启用或禁用代理中的预配功能。有效值为 "y" 或 "n"。如果禁用预配,则映像中的 SSH 主机和用户密钥将被保留,并且 Azure 预配 API 中指定的任何配置将被忽略。
注意:此配置选项已移除,不再起作用。waagent 现在自动检测 cloud-init 作为预配代理(可以选择使用 Provisioning.Agent 覆盖)。
类型:布尔型
默认值:n
监控主机名更改,并通过 DHCP 请求发布更改。
类型:整型
默认值:30
监控主机名更改的频率(以秒为单位)。如果未设置 MonitorHostName,则忽略此设置。
类型:布尔型
默认值:n
此选项启用/禁用通过 cloud-init 进行预配的支持。
如果为真 ("y"),代理将在安装扩展和处理最新的目标状态之前等待 cloud-init 完成。Provisioning.Enabled 必须禁用 ("n") 才能使此选项生效。将 Provisioning.Enabled 设置为真 ("y") 将覆盖此选项并运行内置的代理预配代码。
注意:此配置选项已移除,不再起作用。waagent 现在自动检测 cloud-init 作为预配代理(可以选择使用 Provisioning.Agent 覆盖)。
类型:布尔型
默认值:n
如果设置此选项,则预配过程中将删除 /etc/shadow 文件中的 root 密码。
类型:布尔型
默认值:y
如果设置此选项,则预配过程中将删除 /etc/ssh/ 中的所有 SSH 主机密钥对(ecdsa、dsa 和 rsa)。并生成一个新的密钥对。
新密钥对的加密类型可以通过 Provisioning.SshHostKeyPairType 条目配置。请注意,某些发行版将在 SSH 守护进程重新启动时(例如,重新引导后)为任何缺少的加密类型重新创建 SSH 密钥对。
类型:字符串型
默认值:rsa
可以将其设置为虚拟机上的 SSH 守护进程支持的加密算法类型。通常支持的值包括 "rsa"、"dsa" 和 "ecdsa"。
请注意,Windows 上的 "putty.exe" 不支持 "ecdsa"。因此,如果您打算使用 Windows 上的 putty.exe 连接到 Linux 部署,请使用 "rsa" 或 "dsa"。
类型:布尔型
默认值:y
如果设置此选项,waagent 将监控 Linux 虚拟机的主机名更改(如 "hostname" 命令返回),并自动更新映像中的网络配置以反映更改。为了将名称更改推送到 DNS 服务器,将重新启动虚拟机中的网络。这将导致短暂的互联网连接丢失。
类型:布尔型
默认值:n
如果设置此选项,waagent 将从 Base64 解码 CustomData。
类型:布尔型
默认值:n
如果设置此选项,waagent 将在预配后执行 CustomData。
类型:字符串型
默认值:6
生成密码哈希时 crypt 使用的算法。
类型:字符串型
默认值:10
生成密码哈希时使用的随机盐的长度。
类型:布尔型
默认值:y
如果设置此选项,则平台提供的资源磁盘将由 waagent 格式化并挂载,前提是用户在 "ResourceDisk.Filesystem" 中请求的文件系统类型不是 "ntfs"。将在磁盘上提供一个类型为 Linux (83) 的单一分区。请注意,如果可以成功挂载此分区,则不会将其格式化。
类型:字符串型
默认值:ext4
这指定了资源磁盘的文件系统类型。支持的值因 Linux 发行版而异。如果字符串为 X,则 mkfs.X 应该存在于 Linux 映像中。SLES 11 映像通常应该使用 'ext3'。BSD 映像应该在此处使用 'ufs2'。
类型:字符串型
默认值:/mnt/resource
这指定了挂载资源磁盘的路径。
类型:字符串型
默认值:None
指定要传递给 mount -o 命令的磁盘挂载选项。这是一个以逗号分隔的值列表,例如 'nodev,nosuid'。有关详细信息,请参见 mount(8)。
类型:布尔型
默认值:n
如果设置此选项,则将在资源磁盘上创建一个交换文件 (/swapfile) 并将其添加到系统交换空间。
类型:布尔型
默认值:n
如果设置此选项,则交换文件 (/swapfile) 将被挂载为加密的文件系统(仅在 FreeBSD 上支持的标志)。
类型:整型
默认值:0
交换文件的尺寸(以兆字节为单位)。
类型:布尔型
默认值:n
如果设置此选项,则日志详细程度将提高。waagent 将日志记录到 /var/log/waagent.log,并利用系统 logrotate 功能来轮换日志。
类型:布尔型
默认值:y
如果设置此选项,则代理日志将定期收集并上传到安全位置,以提高可支持性。
注意:此功能依赖于代理的资源使用功能(cgroups);此标志在不受支持的任何发行版上不会生效。
类型:整型
默认值:3600
这配置了收集和上传日志的频率。默认值为每小时一次。
注意:这仅在启用 Logs.Collect 选项时才会生效。
类型:布尔型
默认值:n
如果 Python 中未编译 SSL 支持,代理将使所有 HTTPS 请求失败。您可以将此选项设置为 'y',以使代理回退到 HTTP,而不是使请求失败。
注意:允许 HTTP 可能会无意中公开安全数据。
类型:布尔型
默认值:n
如果设置此选项,代理将尝试安装并加载与底层硬件上的固件版本匹配的 RDMA 内核驱动程序。
类型:布尔型
默认值:n
如果设置此选项,代理将在执行 OpenSSL 命令时将 "OPENSSL_FIPS=1" 发射到环境中。这指示 OpenSSL 使用任何已安装的 FIPS 兼容库。
请注意,代理本身没有与 FIPS 相关的代码。如果没有安装 FIPS 兼容证书,则启用此选项会导致所有 OpenSSL 命令失败。
类型:整型
默认值:30
代理监控 DHCP 客户端的重新启动,并在发生重新启动时恢复网络规则。此设置决定了监控重新启动的频率(以秒为单位)。
类型:整型
默认值:300
这配置了根设备上的 SCSI 超时时间(以秒为单位)。如果未设置,则使用系统默认值。
类型:整型
默认值:30
在根设备上设置 SCSI 超时时间的频率(以秒为单位)。如果未设置 RootDeviceScsiTimeout,则忽略此设置。
类型:字符串型
默认值:None
这可以用来指定用于加密操作的 openssl 二进制文件的替代路径。
类型:整型
默认值:30
删除持久网络接口名称的 udev 规则的频率(75-persistent-net-generator.rules 和 /etc/udev/rules.d/70-persistent-net.rules)(以秒为单位)。
类型:整型
默认值:180
此值设置代理用于 SSH ClientAliveInterval 配置选项的秒数。
类型:字符串型
默认值:/etc/ssh
此选项可用于覆盖 SSH 配置目录的默认位置。
类型:字符串型
默认值:None
如果设置此选项,代理将使用此代理服务器进行 HTTP/HTTPS 请求。这些值将覆盖 httpproxy 或 httpsproxy 环境变量。最后,HttpProxy.Host 是必需的(如果要使用),HttpProxy.Port 是可选的。
类型:布尔型
默认值:y
如果设置此选项,代理将尝试为代理进程本身以及扩展进程设置 CPU 和内存的 cgroups 限制。有关此方面的更多详细信息,请参见 wiki。
类型:字符串型
默认值:customscript,runcommand
将从 cgroups 限制中排除的扩展列表。这应该是以逗号分隔的。
WALinuxAgent 收集使用情况数据并将其发送给 Microsoft,以帮助我们改进产品和服务。收集的数据用于跟踪服务运行状况,并协助处理 Azure 支持请求。收集的数据不包含任何个人身份信息。阅读我们的隐私声明以了解更多信息。
WALinuxAgent 目前不支持禁用遥测。要禁用遥测收集,必须删除 WALinuxAgent。如果您需要此功能,请在 GitHub 上打开一个问题并说明您的需求。
我们不会在此仓库中维护打包信息,但下面展示了一些示例作为参考。有关正式维护的打包,请参见下游发行版仓库。
可以在这里找到官方 Ubuntu WALinuxAgent 软件包。
执行一次:
安装所需的软件包
`
sudo apt-get -y install ubuntu-dev-tools pbuilder python-all debhelper
`
创建 pbuilder 环境
`
sudo pbuilder create --debootstrapopts --variant=buildd
`
从下游软件包库获取 waagent.dsc
要编译软件包,请从最顶层目录执行以下操作:
构建源代码包
`
dpkg-buildpackage -S
`
构建软件包
`
sudo pbuilder build waagent.dsc
`
获取构建的软件包,通常位于 /var/cache/pbuilder/result
以下说明描述了如何构建 rpm 软件包。
安装 setuptools
`
curl https://bootstrap.pypa.io/ez_setup.py -o - | python
`
以下命令将构建二进制和源 RPM:
`
python setup.py bdist_rpm
`
此项目已采用 Microsoft 开源代码行为准则。有关更多信息,请参见行为准则常见问题解答,或联系 [email protected] 提出任何其他问题或意见。
示例:
Apache-2.0 许可证