介绍
Chef是一个配置管理系统-它的设计给你一个可重复的一套Recipe建设基础设施,帮助客户自动完成,版本,并在大致相同的方式为您的应用程序代码,测试你的基础设施。
这是第六教程入门管理您的基础架构使用Chef系列。 在本指南中,我们假设您已经完成了其他五个教程,因此您已经启动了Chef服务器,工作站和一个或多个节点。
我们的目标
刀是Chef打包一个命令行工具。 您可能已经使用刀创建和管理Chef烹饪书,数据包或角色。 当你发出带刀的命令时,你通常输入以下命令:
knife cookbook create
上面的例子命令使用cookbook
刀子命令。 本指南将向您介绍一些新的刀子命令,用于发出命令和获取有关Chef集群的信息。
我们将涵盖:
-
knife status
-
knife ssh
-
knife node
先决条件
本教程假设你已经沿着直到第五导向,其次如何使用DigitalOcean插件刀的Chef来管理Droplet ,在入门管理您的基础架构使用Chef系列。
创建示例角色和服务器
如果您没有已经建立的Chef集群,或者您希望仔细阅读本指南并看到相同的输出,我们可以设置一些示例角色和服务器。
首先,你的工作站上,更改为chef-repo
目录:
cd ~/chef-repo
我们将后端角色添加到我们现有的web_server作用。 现在它将是空白,但以后你可以把它变成一个数据库或应用程序服务器。
nano roles/backend.rb
添加这些内容到backend.rb
文件:
name "backend"
description "Backend for application servers"
然后将新角色上传到您的Chef服务器。
knife role from file roles/backend.rb
一旦你这样做,我们可以使用DigitalOcean Knife插件创建一些示例节点。
(注: 此插件变得无人维护作为2014年10这取决于你是否要开始使用它。)
knife digital_ocean droplet create --server-name frontend01 --image 6918990 --location 4 --size 63 --ssh-keys 22222 --bootstrap --run-list "role[web_server]"
knife digital_ocean droplet create --server-name frontend02 --image 6918990 --location 4 --size 63 --ssh-keys 22222 --bootstrap --run-list "role[web_server]"
knife digital_ocean droplet create --server-name backend01 --image 6918990 --location 4 --size 63 --ssh-keys 22222 --bootstrap --run-list "role[backend]"
knife digital_ocean droplet create --server-name backend02 --image 6918990 --location 4 --size 63 --ssh-keys 22222 --bootstrap --run-list "role[backend]"
注意:如果在你的Chef集群中的各个主机的域名不从外部解决,而你让他们编辑的相互连接/etc/hosts
的文件,该设置将无法工作,因为新的服务器实例将给予默认的/etc/hosts
的文件。
您可能仍然有一些节点活动,您在Chef教程系列中创建。 这意味着我们将在本教程中运行的一些命令将有额外的行或信息。 如果您想沿着准确传达跟随,你可以随时通过点击节点中删除这些节点>从Chef服务器的Web界面删除 。
显示刀状态的状态
该status
子命令的目的是显示您的节点的状态信息。 要使用knife status
,只是改变你的chef-repo
目录,然后键入:
knife status
你会看到你的Chef服务器知道的节点,包括他们最后的时间列表chef-client
运行时,节点名称,完全合格的域名,IP地址和平台。
3 minutes ago, frontend01, fe1.yourdomain.com, 111.111.111.111, ubuntu 14.04.
3 minutes ago, frontend02, fe2.yourdomain.com, 222.222.222.222, ubuntu 14.04.
20 hours ago, backend01, be1.yourdomain.com, 333.333.333.333, ubuntu 14.04.
3 minutes ago, backend02, be2.youdomain.com, 333.333.333.333, ubuntu 14.04.
我们可以从这个,我们需要采取在backend01细看立即看到-它没有成功地运行chef-client
(在Chef的说法“签入”),在大约20小时。
如果你有类似的情况的一个节点,请检查您的chef-client
错误日志,或使用报告>运行历史从Chef服务器的Web界面。
用刀ssh发出命令
我们可以用knife ssh
一下子发给我们的节点(或节点的某个子集)的命令。 例如,我们可以用knife ssh
重启Nginx的我们与作用前端的所有节点上。
你需要授权SSH到服务器的用户(例如,您可以运行ssh yourusername@fe1.yourdomain.com
,并得到一个shell)。 如果您还没有SSH密钥设置,则可以使用-P
选项来提示输入密码。
knife ssh "role:web_server" "service nginx restart" -x yourusername -a ipaddress
你应该得到看起来像这样的输出:
111.111.111.111 * Restarting nginx nginx [ OK ]
222.222.222.222 * Restarting nginx nginx [ OK ]
我们只是通过发出一个命令,刀跑了我们所有的前端服务器上的命令。 让我们拉开的参数和学习一些有关如何knife ssh
工作。
knife ssh "web_server" "service nginx restart" -x yourusername -a ipaddress
第一个参数knife ssh
是一个Chef的搜索查询-通常你会想是这样role:YOUR_ROLE_NAME
,但你也可以通过很多其他属性进行搜索(与布尔运算符将它们结合起来)。 例如,运行在自己的平台属性的Ubuntu只是节点上的一个命令,你可以运行:
knife ssh "platform:ubuntu*" "service nginx restart" -x yourusername -a ipaddress
在上面的*是通配符。 它将匹配属性值中的零个或多个字符。 在这种情况下,它将使我们作为显示在匹配值的Ubuntu 14.04 knife status
我们前面输出。
knife ssh "role:web_server" "service nginx restart" -x yourusername -a ipaddress
的第二个参数knife ssh
是要在服务器(匹配搜索查询)上运行命令。 它几乎可以是任何你可以键入到shell。 你甚至可以加入用分号命令(;)。
knife ssh "role:web_server" "uptime;date" -x yourusername -a ipaddress
这将输出像:
111.111.111.111 12:53:36 up 2 days, 15:25, 1 user, load average: 0.08, 0.03, 0.05
111.111.111.111 Wed Oct 22 12:53:36 UTC 2014
222.222.222.222 12:53:30 up 2 days, 15:21, 1 user, load average: 0.00, 0.01, 0.05
222.222.222.222 Wed Oct 22 12:53:30 UTC 2014
该-x
我们已经覆盖的说法-这是SSH用户名用于登录。
该-a
参数指定哪个节点属性用来作为地址SSH。 默认情况下,这是你的节点(请记住,你可以用这个找到的FQDN knife status
前面显示的命令),因此,如果您可以通过访问解决您的服务器http://fe1.yourdomain.com ,那么你可以省略-a
选项。
互动刀ssh
knife ssh
也有把你带入一个交互式shell,在那里你可以发出一系列命令和看到的结果非常快的能力。 您可以启动一个交互式knife ssh
通过使用shell interactive
的地方你的SSH命令的。
knife ssh "role:web_server" interactive -x yourusername -a ipaddress
这将告诉我们:
Connected to 111.111.111.111 and 222.222.222.222
To run a command on a list of servers, do:
on SERVER1 SERVER2 SERVER3; COMMAND
Example: on latte foamy; echo foobar
To exit interactive mode, use 'quit!'
knife-ssh>
您可以通过简单地输入命令,按回车键发出在搜索结果中的所有服务器的命令。
knife-ssh> uptime
111.111.111.111 18:43:55 up 2 days, 21:16, 1 user, load average: 0.01, 0.03, 0.05
222.222.222.222 18:43:49 up 2 days, 21:11, 1 user, load average: 0.00, 0.01, 0.05
如果您想进一步细化您的服务器列表,只需要使用on
,作为帮助信息提示。 需要注意的是,你应该在你作为属性的例子命令替换SERVER1 -a
; 对我们来说,这是节点的IP地址。
knife-ssh> on 111.111.111.111; echo hello digitalocean
111.111.111.111 hello digitalocean
一个非常酷的应用互动的knife ssh
是用它来尾部服务器日志。 举例来说,如果你的Nginx的访问日志是在默认位置( /var/log/nginx/access.log
),您可以尾部的日志-f
(后续)选项,然后将结果打印持续到控制台。
knife-ssh> tail -f /var/log/nginx/access.log
(根据Nginx的设置方式,您可能需要使用sudo
这个命令的前面。)
如果您在Web浏览器中访问其中一个节点的IP地址,您将看到一个条目出现在Nginx访问日志中,而无需执行任何操作!
管理刀节点节点
如果您遵循了如何创建简单的RecipeChef来管理在Ubuntu基础设施指南,那么您已经使用了knife node
列出您的Chef服务器上的所有节点,以及编辑节点属性。
knife node list
knife node edit frontend01
您还可以使用knife node
来删除节点。
knife node delete frontend01
或者,显示更详细的节点属性:
knife node show frontend01
*******
Node Name: frontend01
Environment: _default
FQDN: fe01.yourdomain.com
IP: 111.111.111.111
Run List: role[frontend]
Roles: web_server
Recipes: apt, nginx, apt::default, nginx::default
Platform: ubuntu 14.04
Tags:
你可以使用你的节点的属性的完整列表-l
选项:
knife node show -l frontend01
这将返回一个很长的属性列表,其中大部分由Ohai,这是一个Chef工具,它会自动将属性自动填充chef-client
每次运行的时间。
长打印的属性列表对我们来说不是非常有用。 然而,刀也有我们覆盖那里。 我们可以指定--format
为了得到一个节点的属性的JSON或YAML表示选项。
knife node show frontend01 --format json
*******
{
"name": "frontend01",
"chef_environment": "_default",
"run_list": [
"role[web_server]"
]
,
"normal": {
"tags": [
]
}
}
您还可以检索与单个节点属性-a
。
knife node show frontend01 --format json -a ipaddress
*******
{
"frontend01": {
"ipaddress": "111.111.111.111"
}
}
如果我们想要构建涉及Knife的更复杂的脚本,或者甚至用于显示仪表板和指标,JSON或YAML输出可能非常有用。
结论
刀是一个强大的工具,不仅用于创建和更新Chef集群中的各种对象,还用于查看和管理集群的状态。
随着knife ssh
,你可以写一个命令,并让它在多个节点上同时运行-任何DEVOPS工程师一个非常强大的工具。