首页 > 解决方案 > Chef 节点在首次启动期间未始终在服务器上保存运行列表 - Azure 规模集 VM

问题描述

我目前正在托管一个运行 Windows Server 2012 R2 的 Azure 规模集,该集使用 Chef 扩展 (Chef.Bootstrap.WindowsAzure.ChefClient) 进行设置。预配 VM 时,扩展通过 Azure 门户报告它已成功,但是 Chef 服务器上的注册节点未更新以保留提供的运行列表,并且第一次运行未完全完成。这导致后续的 chef-client 运行以空运行列表执行。当我观察厨师服务器上的报告时,我看到运行状态为 aborted 而没有错误。

在查看 WindowsAzure 插件 chef-client.log 文件后,我可以看到它尝试执行运行列表,但似乎被以下 FATAL 中断

FATAL: Errno::EINVAL: Invalid argument @ io_writev - <STDOUT>

也没有创建 chef-stacktrace.out 文件。ARM 扩展定义如下所示:

{
    "type": "extensions",
    "name": "ChefClient",
    "properties": {
        "publisher": "Chef.Bootstrap.WindowsAzure",
        "type": "ChefClient",
        "typeHandlerVersion": "1210.12",
        "autoUpgradeMinorVersion": true,
        "settings": {
            "client_rb": "ssl_verify_mode :verify_none\nnode_name ENV[\"COMPUTERNAME\"]",
            "runlist": "recipe[example]",
            "autoUpdateClient": "false",
            "deleteChefConfig": "false",

            "bootstrap_options": {
                "chef_server_url": "https://mychefserver.com/organizations/myorg",
                "validation_client_name": "myorg-validator",
                "environment": "dev"
            }
        },
        "protectedSettings": {
            "validation_key": "-----BEGIN RSA PRIVATE KEY----- ... -----END RSA PRIVATE KEY----"
        }
    }
}

为了进行故障排除,我尝试将我的example食谱缩减为安装 IIS 的单个 DSC 脚本。即使是这一步,我也以多种方式执行它,例如使用 windows_feature、powershell_script 和 dsc_script。所有结果都以相同的错误结束。这是当前脚本

powershell_script 'Install IIS' do
  code 'Add-WindowsFeature Web-Server'
  guard_interpreter :powershell_script
  not_if "(Get-WindowsFeature -Name Web-Server).Installed"
end

如果我覆盖运行列表并手动调用 chef-client,一切都会成功。我无法确定这是 Azure Chef Extension、Chef 客户端还是说明书。

据我所知,与 Chef 服务器的通信看起来不错,因为交换了必要的 pem 文件,安装了 chef-client,并且从服务器下载并缓存了说明书。缓存在随后的运行中被删除,但是运行列表为空。以下是 first-boot.json 的内容:

{"run_list":["recipe[example]"]}

以下是正在播放的版本:

任何想法可能会发生什么?

标签: azurechef-infrawindows-server-2012-r2azure-resource-managerazure-vm-scale-set

解决方案


事实证明,我对导致问题的资源的分析是不正确的。使用 dsc_script 作为安装 Web 服务器的资源时,似乎第一次引导运行失败。使用以下 powershell_script 资源时,它成功并附加了运行列表以供将来运行。

powershell_script 'Install IIS' do code 'Add-WindowsFeature Web-Server' guard_interpreter :powershell_script not_if "(Get-WindowsFeature -Name Web-Server).Installed" end


推荐阅读