我正在使用 Chef's Knife 启动新的 ec2 实例。这通常很有效,但每 2-3 次尝试就会失败,并且我得到以下堆栈:
[Sun, 10 Apr 2011 08:11:23 +0000] INFO: Client key /etc/chef/client.pem is not present - registering
[Sun, 10 Apr 2011 08:11:29 +0000] WARN: HTTP Request Returned 401 Unauthorized: Failed to authenticate as i-XXXXXXX. Ensure that your node_name and client key are correct.
/usr/lib/ruby/1.8/net/http.rb:2101:in `error!': 401 "Unauthorized" (Net::HTTPServerException)
from /usr/lib/ruby/gems/1.8/gems/chef-0.9.14/bin/../lib/chef/rest.rb:234:in `api_request'
from /usr/lib/ruby/gems/1.8/gems/chef-0.9.14/bin/../lib/chef/rest.rb:285:in `retriable_rest_request'
from /usr/lib/ruby/gems/1.8/gems/chef-0.9.14/bin/../lib/chef/rest.rb:215:in `api_request'
from /usr/lib/ruby/gems/1.8/gems/chef-0.9.14/bin/../lib/chef/rest.rb:111:in `get_rest'
from /usr/lib/ruby/gems/1.8/gems/chef-0.9.14/bin/../lib/chef/node.rb:525:in `load'
from /usr/lib/ruby/gems/1.8/gems/chef-0.9.14/bin/../lib/chef/node.rb:510:in `find_or_create'
from /usr/lib/ruby/gems/1.8/gems/chef-0.9.14/bin/../lib/chef/client.rb:218:in `build_node'
from /usr/lib/ruby/gems/1.8/gems/chef-0.9.14/bin/../lib/chef/client.rb:145:in `run'
from /usr/lib/ruby/gems/1.8/gems/chef-0.9.14/bin/../lib/chef/application/client.rb:222:in `run_application'
from /usr/lib/ruby/gems/1.8/gems/chef-0.9.14/bin/../lib/chef/application/client.rb:212:in `loop'
from /usr/lib/ruby/gems/1.8/gems/chef-0.9.14/bin/../lib/chef/application/client.rb:212:in `run_application'
from /usr/lib/ruby/gems/1.8/gems/chef-0.9.14/bin/../lib/chef/application.rb:62:in `run'
from /usr/lib/ruby/gems/1.8/gems/chef-0.9.14/bin/chef-client:26
from /usr/bin/chef-client:19:in `load'
from /usr/bin/chef-client:19
这是一个非确定性故障(可能与竞争条件有关?)。
答案1
您还遇到这种情况吗?尝试使用验证客户端自动生成新的 Chef 客户端时出现错误。如果出现这种情况,您可以检查 /etc/chef/client.rb 配置文件中的验证客户端名称,并验证它是否与您的 Chef 服务器配置正确。如果这种情况间歇性发生,您可以尝试在目标节点上使用 -l debug 重新运行 chef-client,以获取有关生成新客户端的 HTTP 请求的更多输出。
答案2
虽然这可能不是您的确切问题,但您需要知道在 EC2 上创建实例并不总是成功。有时,您尝试在其中创建实例的 AZ 中没有足够的容量来容纳该特定类。
Ylastic 的 Twitter 帐户,它显示了有用的 EC2 错误消息,这些消息似乎并不总是出现在亚马逊服务健康仪表板,有时会出现类似这:
#AWS #EC2 (California) : Insufficient Instance Capacity for m1.large
当您看到此问题时,请尝试在另一个区域或可用区中创建(然后销毁,您不想永远为它们付费!)一些实例。