适用于 Linux 的 DSC 扩展 (Microsoft.OSTCExtensions.DSCForLinux)

Desired State Configuration (DSC) 是一个管理平台,可让你使用“配置即代码”来管理 IT 和开发基础结构。

注意

适用于 Linux 的 DSC 扩展和适用于 Linux 的 Log Analytics 虚拟机扩展当前存在冲突,并在并列配置中不受支持。 不要在同一 VM 上同时使用这两个解决方案。

在启用 DSC 扩展之前,我们希望你知道 DSC 的较新版本目前以预览版提供,由名为来宾配置的 Azure Policy 功能管理。 来宾配置功能结合了 Desired State Configuration (DSC) 扩展处理程序、Azure Automation State Configuration 以及客户反馈中最常请求的功能。

DSCForLinux 扩展由 Azure 发布并提供支持。 该扩展在 Azure 虚拟机上安装 OMI 和 DSC 代理。 DSC 扩展还能执行以下操作:

  • 将 Linux VM 注册到 Azure 自动化帐户,以便从 Azure 自动化服务提取配置 (Register ExtensionAction)
  • 将 MOF 配置推送到 Linux VM (Push ExtensionAction)。
  • 将元 MOF 配置应用到 Linux VM,以配置提取服务器来提取节点配置 (Pull ExtensionAction)。
  • 将自定义的 DSC 模块安装到 Linux VM (Install ExtensionAction)。
  • 从 Linux VM 中删除自定义的 DSC 模块 (Remove ExtensionAction)。

先决条件

操作系统

对于运行 Linux 的节点,DSC Linux 扩展支持 PowerShell DSC 文档中列出的所有 Linux 发行版。

Internet 连接

DSCForLinux 扩展要求目标虚拟机已连接到 Internet。 例如,Register 扩展要求连接到自动化服务。 对于其他操作(例如 Pull),Install 扩展要求连接到 Azure 存储和 GitHub。 它依赖于客户提供的设置。

扩展架构

公共配置

下面是所有支持的公共配置参数:

  • FileUri:(可选,字符串)MOF 文件、元 MOF 文件或自定义资源 zip 文件的 URI。
  • ResourceName:(可选,字符串)自定义资源模块的名称。
  • ExtensionAction:(可选,字符串)指定扩展的功能。 有效值为 Register、Push、Pull、Install 和 Remove。 如果未指定,则默认将值视为推送操作。
  • NodeConfigurationName:(可选,字符串)要应用的节点配置的名称。
  • RefreshFrequencyMins:(可选,整数)指定 DSC 尝试从提取服务器获取配置的频率(以分钟为单位)。 如果提取服务器上的配置不同于目标节点上的当前配置,则会将前者复制到挂起的存储并应用。
  • ConfigurationMode:(可选,字符串)指定 DSC 如何应用配置。 有效值为 ApplyOnly、ApplyAndMonitor 和 ApplyAndAutoCorrect。
  • ConfigurationModeFrequencyMins:(可选,整数)指定 DSC 确保配置处于所需状态的频率(以分钟为单位)。

注意

如果使用的版本低于 2.3,则 mode 参数与 ExtensionAction 相同。 Mode(模式)看上去像是一个重载的术语。 为了避免混淆,从版本 2.3 开始使用了 ExtensionAction。 为了向后兼容,扩展支持 mode 和 ExtensionAction。

受保护的配置

下面是所有支持的受保护配置参数:

  • StorageAccountName:(可选,字符串)包含文件的存储帐户的名称
  • StorageAccountKey:(可选,字符串)包含文件的存储帐户的密钥
  • RegistrationUrl:(可选,字符串)Azure 自动化帐户的 URL
  • RegistrationKey:(可选,字符串)Azure 自动化帐户的访问密钥

方案

注册 Azure 自动化帐户

protected.json

{
  "RegistrationUrl": "<azure-automation-account-url>",
  "RegistrationKey": "<azure-automation-account-key>"
}

public.json

{
  "ExtensionAction" : "Register",
  "NodeConfigurationName" : "<node-configuration-name>",
  "RefreshFrequencyMins" : "<value>",
  "ConfigurationMode" : "<ApplyAndMonitor | ApplyAndAutoCorrect | ApplyOnly>",
  "ConfigurationModeFrequencyMins" : "<value>"
}

PowerShell 格式

$privateConfig = '{
  "RegistrationUrl": "<azure-automation-account-url>",
  "RegistrationKey": "<azure-automation-account-key>"
}'

$publicConfig = '{
  "ExtensionAction" : "Register",
  "NodeConfigurationName": "<node-configuration-name>",
  "RefreshFrequencyMins": "<value>",
  "ConfigurationMode": "<ApplyAndMonitor | ApplyAndAutoCorrect | ApplyOnly>",
  "ConfigurationModeFrequencyMins": "<value>"
}'

将 MOF 配置文件(在 Azure 存储帐户中)应用到 VM

protected.json

{
  "StorageAccountEndPoint": "https://core.chinacloudapi.cn/",
  "StorageAccountName": "<storage-account-name>",
  "StorageAccountKey": "<storage-account-key>"
}

public.json

{
  "FileUri": "<mof-file-uri>",
  "ExtensionAction": "Push"
}

PowerShell 格式

$privateConfig = '{
  "StorageAccountEndPoint": "https://core.chinacloudapi.cn/",
  "StorageAccountName": "<storage-account-name>",
  "StorageAccountKey": "<storage-account-key>"
}'

$publicConfig = '{
  "FileUri": "<mof-file-uri>",
  "ExtensionAction": "Push"
}'

将 MOF 配置文件(在公共存储中)应用到 VM

public.json

{
  "FileUri": "<mof-file-uri>"
}

PowerShell 格式

$publicConfig = '{
  "FileUri": "<mof-file-uri>"
}'

将元 MOF 配置文件(在 Azure 存储帐户中)应用到 VM

protected.json

{
  "StorageAccountEndPoint": "https://core.chinacloudapi.cn/",
  "StorageAccountName": "<storage-account-name>",
  "StorageAccountKey": "<storage-account-key>"
}

public.json

{
  "ExtensionAction": "Pull",
  "FileUri": "<meta-mof-file-uri>"
}

PowerShell 格式

$privateConfig = '{
  "StorageAccountEndPoint": "https://core.chinacloudapi.cn/",
  "StorageAccountName": "<storage-account-name>",
  "StorageAccountKey": "<storage-account-key>"
}'

$publicConfig = '{
  "ExtensionAction": "Pull",
  "FileUri": "<meta-mof-file-uri>"
}'

将元 MOF 配置文件(在公共存储中)应用到 VM

public.json

{
  "FileUri": "<meta-mof-file-uri>",
  "ExtensionAction": "Pull"
}

PowerShell 格式

$publicConfig = '{
  "FileUri": "<meta-mof-file-uri>",
  "ExtensionAction": "Pull"
}'

将自定义资源模块(Azure 存储帐户中的 zip 文件)安装到 VM

protected.json

{
  "StorageAccountEndPoint": "https://core.chinacloudapi.cn/",
  "StorageAccountName": "<storage-account-name>",
  "StorageAccountKey": "<storage-account-key>"
}

public.json

{
  "ExtensionAction": "Install",
  "FileUri": "<resource-zip-file-uri>"
}

PowerShell 格式

$privateConfig = '{
  "StorageAccountEndPoint": "https://core.chinacloudapi.cn/",
  "StorageAccountName": "<storage-account-name>",
  "StorageAccountKey": "<storage-account-key>"
}'

$publicConfig = '{
  "ExtensionAction": "Install",
  "FileUri": "<resource-zip-file-uri>"
}'

将自定义资源模块(公共存储中的 zip 文件)安装到 VM

public.json

{
  "ExtensionAction": "Install",
  "FileUri": "<resource-zip-file-uri>"
}

PowerShell 格式

$publicConfig = '{
  "ExtensionAction": "Install",
  "FileUri": "<resource-zip-file-uri>"
}'

从 VM 中删除自定义资源模块

public.json

{
  "ResourceName": "<resource-name>",
  "ExtensionAction": "Remove"
}

PowerShell 格式

$publicConfig = '{
  "ResourceName": "<resource-name>",
  "ExtensionAction": "Remove"
}'

模板部署

可使用 Azure Resource Manager 模板部署 Azure VM 扩展。 部署需要部署后配置(例如,载入 Azure 自动化)的一个或多个虚拟机时,模板是理想选择。

示例资源管理器模板为 dsc-linux-azure-storage-on-ubuntudsc-linux-public-storage-on-ubuntu

有关 Azure 资源管理器模板的详细信息,请参阅创作 Azure 资源管理器模板

Azure CLI 部署

使用 [Azure CLI][azure-cli]

在部署 DSCForLinux 扩展之前,请根据第 3 部分中所述的不同方案配置 public.jsonprotected.json

经典

重要

通过经典部署模型创建的 VM 将于 2023 年 3 月 1 日停用。

如果从 Azure 服务管理中使用 IaaS 资源,请在 2023 年 3 月 1 日结束前完成迁移。 我们建议你尽快进行切换,以利用 Azure 资源管理器中的许多增强功能。

有关详细信息,请参阅在 2023 年 3 月 1 日之前将 IaaS 资源迁移到 Azure 资源管理器

经典部署模式也称为 Azure 服务管理模式。 可运行以下命令切换到该模式:

$ azure config mode asm

可运行以下命令部署 DSCForLinux 扩展:

$ azure vm extension set <vm-name> DSCForLinux Microsoft.OSTCExtensions <version> \
--private-config-path protected.json --public-config-path public.json

若要了解最新可用的扩展版本,请运行:

$ azure vm extension list

Resource Manager

可运行以下命令切换到 Azure 资源管理器模式:

$ azure config mode arm

可运行以下命令部署 DSCForLinux 扩展:

$ azure vm extension set <resource-group> <vm-name> \
DSCForLinux Microsoft.OSTCExtensions <version> \
--private-config-path protected.json --public-config-path public.json

注意

在 Azure 资源管理器模式下,azure vm extension list 目前不可用。

使用 [Azure PowerShell][azure-powershell]

经典

可运行以下命令在 Azure 服务管理模式下登录到 Azure 帐户:

Add-AzureAccount -Environment AzureChinaCloud

运行以下命令部署 DSCForLinux 扩展:

$vmname = '<vm-name>'
$vm = Get-AzureVM -ServiceName $vmname -Name $vmname
$extensionName = 'DSCForLinux'
$publisher = 'Microsoft.OSTCExtensions'
$version = '< version>'

根据上面部分所述的不同方案更改 $privateConfig 和 $publicConfig 的内容。

$privateConfig = '{
  "StorageAccountEndPoint": "https://core.chinacloudapi.cn/",
  "StorageAccountName": "<storage-account-name>",
  "StorageAccountKey": "<storage-account-key>"
}'
$publicConfig = '{
  "ExtensionAction": "Push",
  "FileUri": "<mof-file-uri>"
}'
Set-AzureVMExtension -ExtensionName $extensionName -VM $vm -Publisher $publisher `
  -Version $version -PrivateConfiguration $privateConfig `
  -PublicConfiguration $publicConfig | Update-AzureVM

Resource Manager

可运行以下命令在 Azure 资源管理器模式下登录到 Azure 帐户:

Connect-AzAccount -Environment AzureChinaCloud

若要详细了解如何将 Azure PowerShell 与 Azure 资源管理器配合使用,请参阅使用 Azure PowerShell 管理 Azure 资源

可运行以下命令部署 DSCForLinux 扩展:

$rgName = '<resource-group-name>'
$vmName = '<vm-name>'
$location = '< location>'
$extensionName = 'DSCForLinux'
$publisher = 'Microsoft.OSTCExtensions'
$version = '< version>'

根据上面部分所述的不同方案更改 $privateConfig 和 $publicConfig 的内容。

$privateConfig = '{
  "StorageAccountEndPoint": "https://core.chinacloudapi.cn/",
  "StorageAccountName": "<storage-account-name>",
  "StorageAccountKey": "<storage-account-key>"
}'
$publicConfig = '{
  "ExtensionAction": "Push",
  "FileUri": "<mof-file-uri>"
}'
Set-AzVMExtension -ResourceGroupName $rgName -VMName $vmName -Location $location `
  -Name $extensionName -Publisher $publisher -ExtensionType $extensionName `
  -TypeHandlerVersion $version -SettingString $publicConfig -ProtectedSettingString $privateConfig

故障排除和支持

疑难解答

有关扩展部署状态的数据可以从 Azure 门户和使用 Azure CLI 进行检索。 若要查看给定 VM 的扩展部署状态,请使用 Azure CLI 运行以下命令。

az vm extension list --resource-group myResourceGroup --vm-name myVM -o table

扩展执行输出将记录到以下文件:

/var/log/azure/<extension-name>/<version>/extension.log file.

错误代码:51 表示分发或扩展操作不受支持。 在某些情况下,如果计算机中存在较高版本的 OMI,则 DSC Linux 扩展无法安装 OMI。 [错误响应: (000003)不允许降级]

支持

如果对本文中的任何观点存在疑问,请通过 Azure 支持联系 Azure 专家。 或者,也可以提出 Azure 支持事件。 请转到 Azure 支持站点提交请求。 有关使用 Azure 支持的信息,请阅读 Azure 支持常见问题

后续步骤

有关扩展的详细信息,请参阅适用于 Linux 的虚拟机扩展和功能