什么是 Azure Automation State Configuration?
可以使用 Azure 自动化 State Configuration 来确保群集区域中的虚拟机 (VM) 处于一致状态,安装了相同的软件,进行了相同的配置。
在本单元中,你将了解 Azure 自动化的特性和功能,评估 PowerShell Desired State Configuration (DSC) 的声明性模型,并了解其优点。
Azure 自动化状态配置是在 PowerShell 基础上构建的 Azure 服务。 它让你可以持续部署、可靠地监视、自动更新所有资源的所需状态。 Azure 自动化提供的工具可用于定义配置并将其应用于实体计算机和虚拟机。
为何使用 Azure Automation State Configuration?
对于运行服务的服务器,手动维护正确且一致的配置可能很困难,而且容易出错。 Azure 自动化状态配置使用 PowerShell DSC 来帮助解决这些难题。 它集中管理 DSC 项目和 DSC 进程。
Azure Automation State Configuration 具有内置拉取服务器。 你可将节点目标设置为此拉取服务器,使其从此拉取服务器自动接收配置,符合所需状态,并报告回其符合性。 目标可以是云中或本地的虚拟机,或物理 Windows 或 Linux 计算机。
可以将 Azure 自动化 State Configuration 配置为发送此数据,从而使用 Azure Monitor 日志来查看节点的符合性。
什么是 PowerShell DSC?
PowerShell DSC 是由 Azure Automation State Configuration 用于配置、部署和控制系统的声明性管理平台。 声明性编程语言将意向(要执行的操作)与执行方式(希望的实现方式)分离开。 指定所需状态,让 DSC 来执行实现工作。 当 DSC 资源可用时,你无需操心如何实现或部署功能。 你可以转而专注于部署结构。
如果已在使用 PowerShell,可能会想知道为什么需要 DSC。 请考虑以下示例。
如果要在 Windows 服务器上创建共享,可以使用此 PowerShell 命令:
# Create a file share
New-SmbShare -Name MyFileShare -Path C:\Shared -FullAccess User1 -ReadAccess User2
此脚本简单明了,易于理解。 但是,如果在生产环境中使用此脚本,你会遇到多个问题。 请考虑:如果脚本运行了多次,或 User2
已具有完全访问权限而不是只读访问权限,可能会发生什么。
此方法不是幂等的。 幂等性描述的是这样的操作,即无论是运行一次还是 10,001 次,效果都是相同的。 若要在 PowerShell 中实现幂等性,需要添加逻辑和错误处理。 如果文件共享不存在,则进行创建。 如果共享已存在,则无需创建它。 如果 User2
存在但不具有读取访问权限,则添加读取访问权限。
PowerShell 脚本类似于以下内容:
$shareExists = $false
$smbShare = Get-SmbShare -Name $Name -ErrorAction SilentlyContinue
if($smbShare -ne $null)
{
Write-Verbose -Message "Share with name $Name exists"
$shareExists = $true
}
if ($shareExists -eq $false)
{
Write-Verbose "Creating share $Name to ensure it is Present"
New-SmbShare @psboundparameters
}
else
{
# Need to call either Set-SmbShare or *ShareAccess cmdlets
if ($psboundparameters.ContainsKey("ChangeAccess"))
{
#...etc., etc., etc
}
}
如果出现问题,则可能出现了尚未考虑到的其他特殊情况。 DSC 会自动处理意外情况。 使用 DSC,可以描述最终结果,而不是为了实现此结果而执行的过程。
以下 DSC 代码片段显示了一个示例:
Configuration Create_Share
{
Import-DscResource -Module xSmbShare
# A node describes the VM to be configured
Node $NodeName
{
# A node definition contains one or more resource blocks
# A resource block describes the resource to be configured on the node
xSmbShare MySMBShare
{
Ensure = "Present"
Name = "MyFileShare"
Path = "C:\Shared"
ReadAccess = "User1"
FullAccess = "User2"
Description = "This is an updated description for this share"
}
}
}
前面的示例使用了 xSmbShare
模块,它告诉 DSC 如何检查文件共享的状态。 DSC 资源工具包具有 100 多个资源模块,其中包括用于安装 IIS 站点的模块。 可以在本模块末尾的“摘要”单元中找到 DSC 资源工具包的链接。
下一单元将详细介绍 PowerShell DSC 代码结构。
什么是 LCM?
本地配置管理器 (LCM) 是 Windows 操作系统上的 Windows Management Framework (WMF) 的一个组件。 LCM 负责更新节点的状态(如 VM),使其与所需状态匹配。 每次 LCM 运行时,它都会完成以下步骤:
- 获取:获取节点的当前状态。
- 测试:使用已编译的 DSC 脚本(.mof 文件)将节点的当前状态与所需状态进行比较。
- 设置:更新节点,以匹配 .mof 文件中所述的所需状态。
你将在使用 Azure 自动化注册 VM 时配置 LCM。
DSC 中的推送和拉取体系结构
每个节点上的 LCM 都可在两种模式下运行。
推送模式:管理员会将配置手动发送或推送到一个或多个节点。 LCM 确保每个节点上的状态与配置指定的状态相匹配。
拉取模式:拉取服务器包含配置信息。 每个节点上的 LCM 都会定期轮询拉取服务器(默认间隔为 15 分钟)以便获取最新的配置详细信息。 这些请求如下图中的步骤 1 所示。 在步骤 2 中,拉取服务器会将对配置所做的任何更改的详细信息发送回每个节点。
在拉取模式中,必须使用拉取服务注册每个节点。
两种模式都具有优势:
- 可以轻松设置推送模式。 它不需要具有自己的专用基础结构,它可在便携式计算机上运行。 推送模式对于测试 DSC 的功能很有用。 还可以使用推送模式将新映像的计算机恢复到基线所需状态。
- 如果企业部署涉及大量计算机,则拉取模式非常有用。 LCM 会定期轮询拉取服务器,并确保节点处于所需状态。 如果外部工具或团队应用的修补程序导致各个计算机上的配置产生偏差,这些计算机都将快速恢复到已设置的配置中。 此过程有助于在安全性和监管义务方面实现持续合规状态。
支持的平台和操作系统
Azure 云服务、其他云提供商、本地基础结构或跨所有这些环境的混合组合都支持 Azure Automation DSC。
Azure Automation DSC 支持以下操作系统:
- Windows
- Server 2022
- Server 2019
- Server 2016
- Server 2012 R2
- Server 2012
- Server 2008 R2 SP1
- 11
- 10
- 8.1
- 7
- Linux
- DSC Linux 扩展支持 PowerShell DSC 文档中列出的所有 Linux 发行版。
PowerShell DSC 安装在 Azure 自动化 DSC 支持的所有 Linux 计算机上。
Windows 的 DSC 要求
对于 Windows 计算机,Azure Desired State Configuration (DSC) VM 扩展使用 WMF 来管理各 Windows 功能版本,如 Windows PowerShell DSC 和 Windows 远程管理 (WinRM)。 Azure DSC 支持 WMF 4.0 及更高版本,因此 Windows 计算机必须运行 Windows Server 2008 R2 SP1、Windows 7 或更高版本。
首次调用 Azure DSC 扩展时,它会在除 Windows Server 2016 及更高版本以外的所有 Windows 版本上安装 OS 兼容版本的 WMF。 Windows Server 2016 及更高版本已安装最新版本的 WMF。 安装 WMF 后,需重启计算机。
运行 Windows Server 2012 或更高版本以及 Windows 7 或更高版本的计算机节点上已启用 WinRM。
Windows 版本 1809 及更高版本中提供了对 DSC 代理的代理支持。 对于旧版 Windows,DSC 中不提供代理支持。
其他 DSC 要求
如果节点位于专用网络中,则 DSC 与 Azure 自动化进行通信时需要使用以下端口和 URL:
- 端口:出站 Internet 访问只需 TCP 443
- 全局 URL:*.azure-automation.net
- US Gov 弗吉尼亚州的全局 URL*.azure-automation.us
- 代理服务https://
<workspaceId>
.agentsvc.azure-automation.net