我在云中运行 Chef 服务器。我无法登录“Chef Manage”网络界面,因为我忘记了密码。
我仍然可以使用 Knife 来(例如)使用服务器从我的工作站更新节点。
我仍然可以使用我的私钥 ssh 到服务器。我尝试运行sudo private-chef-ctl password myusername并“成功”更改了我的密码;然而,当我尝试使用新密码登录,Web界面仍然说“最大登录失败达到,请重置您的密码。 ”
当我在 Web 界面中提交密码重置表单时,它显示“您的密码重置电子邮件已发送”,但我的服务器未配置为发送电子邮件。
如何重置密码以便我可以使用 Web 界面登录 Chef 服务器?
Puppet 或 Chef 是否支持复制的 puppetmasterd/Chef 服务器?这些工具会导致单点故障,这让我感到非常惊讶,但我在他们的文档或谷歌中找不到任何提及。
我知道 Puppet 和 Chef 可以在没有服务器的情况下运行(可能使用例如http://bitfieldconsulting.com/scaling-puppet-with-distributed-version-control 中描述的 git 进行更新),但这似乎是第二个 -阶级公民,大概会失去一些监控能力。
我有一个小型虚拟 linux 服务器(500 兆内存)。我最终可能会再获得一两台服务器,而不是更多。
我是开发人员,而不是系统管理员,所以我不知道涉及 linux 管理的最佳实践。我知道我不想设置机器,发出一堆命令来设置用户,安装包,更改环境变量,如果我的机器崩溃,只会丢失所有这些。
我宁愿将所有这些信息与我的代码一起保存在源存储库中。
明显的解决方案是 puppet 或 Chef,但我没有运行一组机器。我想要一种设置用户、安装软件包等的声明方式,但不想设置 ssl 证书、主服务器等(坦率地说,我不能,我的机器很便宜,内存也很少)。
是否有更好的独立机器解决方案?我希望能够快速使用此解决方案来重新创建我的机器(在 amazon、linode、rackspace 或我的桌面上)。
Knife ssh有这个-a选项。我很幸运地发现Knife SSH 没有找到我的节点来告诉我它不是被称为IP,如knife search输出中那样,而是ipaddress。
我很想知道在哪里可以找到详细说明这一点的文档以及调用它ipaddress而不是IP.
谢谢!
如何获取具有特定角色的节点列表?
它可以通过这样的东西得到:
for node in `knife node list`; do
[[ -n "`knife node show $node | grep $ROLE_NAME`" ]] && echo $node
done
Run Code Online (Sandbox Code Playgroud)
有没有办法通过刀来做到这一点而没有 bash 开销?
我正在尝试使用厨师部署 Rails 应用程序,对于 mysql 食谱来创建数据库,它需要mysqlgem。所述mysql宝石安装系统范围通过使用Ubuntu的软件包,但是这不是通过使用chef-client从运行/opt/chef/embedded。
我试过添加这个:
chef_gem 'mysql' do
action :nothing
end.run_action(:install)
Run Code Online (Sandbox Code Playgroud)
但这需要libmysqlclient-dev安装 Ubuntu 包。因此我也在之前添加了这个:
package 'libmysqlclient-dev' do
action :nothing
end.run_action(:install)
Run Code Online (Sandbox Code Playgroud)
但这是在apt配方更新 apt 存储库之前完成的,因此安装libmysqlclient-dev失败。
这些“黑客”看起来很难看,我无法找到apt-get update在正确的时间运行它们的方法。
有人可以帮我找到正确的(最像厨师的)方法来解决我的问题(实际问题是使用application食谱创建数据库)?
我已经能够解决这个食谱的问题作为一个丑陋的黑客......我仍在寻找更好的解决方案:
execute "apt-get update" do
ignore_failure true
action :nothing
end.run_action(:run)
node.set['build_essential']['compiletime'] = true
include_recipe "build-essential"
%w{build-essential mysql-client libmysqlclient-dev}.each do |p|
package p do
action :nothing
end.run_action(:install)
end
chef_gem 'mysql' do
action :nothing
end.run_action(:install)
Run Code Online (Sandbox Code Playgroud) 在我看来,将客户端添加到厨师服务器的推荐方法 - 或者我对它的理解 - 是有缺陷的。
来自文档:
当厨师客户端运行时,它会检查是否有客户端密钥。如果客户端密钥不存在,则它会尝试“借用”验证客户端的身份以向服务器注册自己。为此,需要将验证客户端的私钥复制到主机并放置在 /etc/chef/validation.pem 中。
那么“验证密钥”基本上就是超级用户凭证,允许拥有它的任何人完全访问厨师服务器?我读得对吗?
当然,正确的模型是客户端生成自己的密钥对,并将公钥提交给厨师服务器。客户端永远不需要访问此超级用户“验证密钥”。
我怎样才能以这种更安全的方式做到这一点?
我很好奇预构建二进制文件(安装包)并仅使用厨师进行配置管理是一个好策略。理论上,当我们需要新机器(流量高峰)时,它应该加快 init 过程,特别是如果我们使用像 AWS 这样的云,我们可以在其中创建我们自己的 AMI(图像),同时它在其他食谱方面可能不灵活工作..
我期待您对这个问题的想法以及最佳实践、经验和想法!
从表面上看,我需要能够在目标节点上安装一些软件守护程序才能使这些东西正常工作。如果我不能这样做(例如 Amazon RDS 实例),我有哪些选择?
同样,Ansible 似乎完全基于 SSH。这可以用来配置RDS吗?
感谢您的反馈——讨论让我在这里提出了一个更有针对性的问题:https : //serverfault.com/questions/588237/whats-a-good-cm-tool-for-managing-a-cloud-cluster-组合-多元化-资源-ac
我想创建一个执行块,该块仅在满足某些特定条件时运行(在这种情况下,如果存在接口wlan0)。或者,我想notifies在相同条件下阻止模板的子句。
我如何在食谱中描述它?我当然可以将整个条件放在execute's 中command,但我希望有更好的方法来实现这一点......