计划从 Linux Desired State Configuration 扩展更改到来宾配置
来宾配置是 Azure 中 Linux 虚拟机的 PowerShell Desired State Configuration (DSC) 扩展提供的最新功能实现。 如果可能,应计划将内容和计算机移动到新服务。 本文提供有关制定迁移策略的指导。
来宾配置中的新功能:
- 通过 Azure Resource Graph 进行高级报告(包括资源 ID 和状态)
- 管理相同计算机的多个配置
- 当计算机偏离所需状态时,可控制进行修正的时间
- Linux 计算机使用基于 PowerShell 的 DSC 资源
开始之前,最好参阅 Azure Policy 来宾配置页中的概念性概述信息。
主要差异
Linux DSC 扩展采用“推送”模式部署配置,其操作是异步完成的。 配置在虚拟机内完成运行之后,部署才会返回。 部署后,不会向 ARM 返回更多信息。 在计算机中管理监视和偏移。
来宾配置采用“拉取”模式处理配置。 将扩展部署到虚拟机,然后根据来宾分配详细信息执行作业。 在计算机内部应用配置时,无法实时查看状态。 应用配置后,可以从 Azure 资源管理器 (ARM) 监视和更正偏移。
DSC 扩展包含“privateSettings”,可以将密码或共享密钥等机密传递给配置。 来宾配置尚未实现机密管理。
有关是迁移现有计算机还是仅迁移新计算机的注意事项
来宾配置将 DSC 版本 3 与 PowerShell 版本 7 结合使用。 DSC 版本 3 可以在 Linux 中与较旧 DSC 版本共存。 实现是独立的。 但是没有冲突检测。
对于仅将使用数天或数周的计算机,请更新部署模板,并从 DSC 扩展切换到来宾配置。 测试后,使用更新的模板构建未来的计算机。
如果计算机计划使用数月或数年,可以选择更改 Azure 管理计算机的配置功能,以利用新的功能。
建议不要通过两个平台同时管理相同的配置。
了解迁移
迁移的最佳方法是首先重新创建、测试和重新部署内容,然后将新解决方案用于新计算机。
以下是迁移的预期步骤:
- 下载并展开用于 DSC 扩展的 .zip 包
- 查看托管对象格式 (MOF) 文件和资源以了解方案
- 在 PowerShell 类中创建自定义 DSC 资源
- 更新 MOF 文件以使用新资源
- 使用来宾配置创作模块创建、测试和发布新包
- 使用来宾配置进行未来的部署,而不是 DSC 扩展
考虑分解复杂的配置文件
来宾配置可以为每台计算机管理多个配置。 许多为 Linux DSC 扩展编写的配置都假定在每台计算机上只能管理一个配置。 若要利用来宾配置提供的扩展功能,可以将大型配置文件划分为许多较小的配置,其中每个配置处理特定方案。
来宾配置中没有任何业务流程来控制配置的排序方式。 如果需要按顺序执行配置中的步骤,请将它们保留在一个包中。
在 Azure 来宾配置中测试内容
阅读如何创建自定义来宾配置包项目页, 评估 DSC 扩展中的内容是否可以与来宾配置一起使用。
执行到创作配置步骤时,请使用 DSC 扩展包中的 MOF 文件作为创建新 MOF 文件和自定义 DSC 资源的基础。 PSModulePath
中必须提供可用的自定义 PowerShell 模块,然后才能创建来宾配置包。
更新部署模板
如果部署模板包含 DSC 扩展(请参阅示例),则需要更改两项内容。
首先,将 DSC 扩展替换为来宾配置功能的扩展。
然后,添加来宾配置分配,将新的配置包(和哈希值)与计算机关联。
Linux DSC 的旧版“nx”模块与 DSCv3 不兼容
随 GitHub 上的 Linux DSC 附带的模块采用 C 编程语言创建。 在来宾配置功能所使用的最新版本的 DSC 中,适用于 Linux 的模块采用 PowerShell 类编写。 这意味着,所有原始资源都不与新平台兼容。
因此,新的 Linux 包需要自定义模块开发。
是否必须将“Reasons”属性添加到自定义资源?
从 Azure 门户查看配置分配的结果时,实现“Reasons”属性可提供更好的体验。 如果模块中的 Get
方法不包含“Reasons”,则返回通用输出,其中包含 Get
方法返回的属性的详细信息。 因此,这是迁移时的可选操作。
删除 DSC 扩展在 Linux 中分配的配置
在早期的 DSC 版本中,DSC 扩展通过本地配置管理器分配了一个配置。 建议删除 DSC 扩展并重置 LCM。
重要
删除本地配置管理器中的配置不会“回滚”Linux 中由该配置设置的内容。 删除配置只会导致 LCM 停止管理已分配的配置。 设置内容仍将保持不变。
如通过 Linux 计算机执行 DSC 操作中所述使用 Remove.py
脚本。
后续步骤
- 为来宾配置创建包项目。
- 从开发环境测试包项目。
- 发布包项目,以便计算机可以访问它。
- 使用
GuestConfiguration
模块创建 Azure Policy 定义,用于大规模管理环境。 - 使用 Azure 门户分配自定义策略定义。
- 了解如何查看来宾配置分配的合规性详细信息。