介绍
Chef 是一个配置管理系统,允许您以控制和可重复的方式构建和管理您的基础设施. 借助 Chef,您可以确保您的基础设施决策都集中记录,并且可以随时轻松地重新实施。
在以前的文章中,我们讨论了 基本厨师术语,如何安装软件(使用 Chef 12或 Chef 11), 如何使用烹饪书,以及 如何使用角色和环境。
在本文中,我们将讨论如何使用刀具插件,厨师配置工具,以与您的DigitalOcean滴滴工作. 使用此工具,我们可以创建基础设施滴滴,并从我们的厨师系统中轻松配置它们。
我们将假设您已安装和配置您的服务器和工作站,并知道如何创建和启动新节点。
安装刀 DigitalOcean 插件
在我们从我们的厨师系统开始使用DigitalOcean滴滴之前,我们需要为刀具安装DigitalOcean插件。
我们可以通过安装一个宝石来做到这一点。
随着我们的工作站的配置方式,如果我们要输入:
1gem install knife-digital_ocean
我们会犯这样的错误:
1Fetching: knife-digital_ocean-0.4.0.gem (100%)
2ERROR: While executing gem ... (Gem::FilePermissionError)
3 You don't have write permissions into the /opt/chef/embedded/lib/ruby/gems/1.9.1 directory.
同样,如果我们用sudo
运行这个命令,我们会得到一个未找到的命令:
1sudo gem install knife-digital_ocean
1sudo: gem: command not found
问题在于,我们已经在用户环境中指定了到我们的 Chef 可执行的路径,但我们没有正确执行命令所需的权限。
我们可以通过使用完整的路径来绕过这个 Chef gem
可执行:
1sudo /opt/chef/embedded/bin/gem install knife-digital_ocean
这将安装DigitalOcean刀插件,允许您利用包含的功能。
通过您的 DigitalOcean 凭证配置刀片插件
要使用刀具插件,您需要授权刀具使用您的 DigitalOcean 帐户,您可以使用帐户的 API 密钥和客户 ID。
在您的 DigitalOcean 控制面板中,点击左侧导航菜单中的 API 链接,您应该在这里看到您的帐户的客户 ID
:
您将需要此值为您的配置文件在一瞬间。
如果您已经生成了 API 密钥,则需要从使用该密钥连接到您的 DigitalOcean 帐户的其他应用程序中收集该值。
如果您尚未生成 API 密钥,或者您已丢失或不再需要旧密钥,您可以通过键入生成新密钥
按钮生成新密钥:
一旦生成新密钥,您需要在离开屏幕之前复制生成的值. 如上所述,您将无法在离开此页面后访问此值,因此您必须生成新值或从已经使用该值的应用程序中获取 API 密钥。
一旦您有客户端 ID 和 API 密钥,您就可以配置刀子以使用这些值。
在您的工作站上,导航到您的 Chef repo 中的 Chef 配置目录:
1cd ~/chef-repo/.chef
我们将编辑位于下面的 knife.rb
文件:
1nano knife.rb
1log_level :info
2log_location STDOUT
3node_name 'station1'
4client_key '/home/demo/chef-repo/.chef/station1.pem'
5validation_client_name 'chef-validator'
6validation_key '/home/demo/chef-repo/.chef/chef-validator.pem'
7chef_server_url 'https://chef_server.com:443'
8syntax_check_cache_path '/home/demo/chef-repo/.chef/syntax_check_cache'
9cookbook_path [ '/home/demo/chef-repo/cookbooks' ]
在文件的底部,我们需要添加我们的凭证,如下:
log_level :info log_location STDOUT node_name 'station1' client_key '/home/demo/chef-repo/.chef/station1.pem' validation_client_name 'chef-validator' validation_key '/home/demo/chef-repo/.chef/chef-validator.pem' chef_server_url 'https://chef_server.com:443' syntax_check_cache_path '/home/demo/chef-repo/.chef/syntax_check_cache' cookbook_path [ '/home/demo/chef-repo/cookbooks' ] knife[:digital_ocean_client_id] = 'your_client_id' knife[:digital_ocean_api_key] = 'your_api_key'
保存并关闭文件,当你完成。
现在,我们可以测试刀具是否可以连接到DigitalOcean服务器,通过请求我们目前活跃的滴滴列表。
1cd ~/chef-repo
2knife digital_ocean droplet list
1ID Name Size Region IPv4 Image Status
2111111 irssi 512MB New York 1 111.111.111.111 479972 (N/A) active
3222222 try 4GB New York 2 222.222.222.222 1575388 (Ubuntu-Init) active
4333333 nftables 4GB New York 2 333.333.333.333 308287 (Debian 7.0 x64) active
54444444 snmp 4GB New York 2 444.444.444.444 1575388 (Ubuntu-Init) active
65555555 node 4GB New York 2 555.555.555.555 1575388 (Ubuntu-Init) active
如果您收到当前滴滴的列表,您已成功连接,您的身份验证正在工作。
在您的 Chef 工作站设置 SSH 密钥
现在你可以使用刀具工具连接到你的DigitalOcean帐户,我们需要进一步的步骤,以帮助自动化滴滴创建过程. 我们需要为我们的厨师工作站创建一个SSH密钥,以嵌入我们将创建的滴滴。
在我们的工作站计算机上,我们应该通过键入创建一个新的SSH密钥:
1ssh-keygen
通过提示键输入,以接受默认值,这将创建一个隐藏的子目录,在用户的主目录中,名为.ssh
,里面有公共和私钥。
现在通过键入更改这个目录:
1cd ~/.ssh
2ls
1id_rsa id_rsa.pub known_hosts
我们现在需要的文件是 id_rsa.pub
文件. 您可以通过键入来查看此文件的内容:
1cat id_rsa.pub
1sh-rsa AAAAB3NzaC1yc2EAAAAxAQABAAABAQCv60WjxoM39LgPDbiW7ne3gu18q0NIV.....................lANpl5qmhDQ+GS/sO............mHWL2irjuB9xBXr00+44vSd2q/vtXdGXhdSMTf4/XK17fjKSG/9y3yD6nml6q9XgQxx9Vf/IKaKdlK0hbC1ds0+8/83PTb9dF3L7hf3Ch/ghvj5++twJFdFeG+VI7EDuKNA4zL8C5FdY.....................XIIeZvZ/z9Kp.....................nyiIuEAmn8fbnosWcsovw0IS1Hz6HsjYo4bu/gA82LWt3sdRUBZ/7ZsVD3ELip
2[email protected]
回到 DigitalOcean 控制面板,点击左侧菜单中的SSH 密钥
链接,点击右上角的添加 SSH 密钥
按钮:
在下一页上,为你的新密钥创建一个名称,然后将文件的内容粘贴到指定区域:
点击下面的创建SSH密钥
按钮,当你完成。
现在,您应该能够将您的 Chef 服务器的 SSH 密钥嵌入到新的 dropplets. 这应该允许您从接口中创建 dropplets,然后登录以配置您的服务器与您创建的烹饪书和角色,所有这一切在一个步骤。
使用刀具插件
让我们开始使用刀具插件。
我们可以开始再次查询与您的 DigitalOcean帐户相关的滴滴:
1knife digital_ocean droplet list
1ID Name Size Region IPv4 Image Status
2111111 irssi 512MB New York 1 111.111.111.111 479972 (N/A) active
3222222 try 4GB New York 2 222.222.222.222 1575388 (Ubuntu-Init) active
4333333 nftables 4GB New York 2 333.333.333.333 308287 (Debian 7.0 x64) active
54444444 snmp 4GB New York 2 444.444.444.444 1575388 (Ubuntu-Init) active
65555555 node 4GB New York 2 555.555.555.555 1575388 (Ubuntu-Init) active
这给我们提供了我们滴滴的概述。
刀片插件相当简单,但包含你需要控制帐户中的滴滴的所有部分,也许除了DNS功能。
查找信息使用刀子插件
我们可以找到我们可能需要的所有信息来创建和摧毁命令,使用不同的刀查询。
要找出我们可用的标准DigitalOcean图像作为基础图像,我们可以输入这个。
1knife digital_ocean image list -G
1ID Distribution Name Global
2361740 Arch Linux Arch Linux 2013.05 x32 +
3350424 Arch Linux Arch Linux 2013.05 x64 +
41602 CentOS CentOS 5.8 x32 +
51601 CentOS CentOS 5.8 x64 +
6376568 CentOS CentOS 6.4 x32 +
7. . .
这将提供所有标准的DigitalOcean图像,包括所有单击的应用程序,您可以使用来部署一个新的滴滴。
同样,如果您想要列出您的快照、备份等,您可以输入相同的命令,而无需-G
旗帜:
1knife digital_ocean image list
1ID Distribution Name Global
211xxxxx Ubuntu Dokku -
315xxxxx Ubuntu Ubuntu-Init -
415xxxxx Ubuntu Ubuntu-LAMP -
515xxxxx Ubuntu Ubuntu-WP -
您可以使用此列表中的图像ID作为基础图像,以增加灵活性。
要找出哪些区域可部署您的滴滴,键入:
1knife digital_ocean region list
1ID Name
21 New York 1
32 Amsterdam 1
43 San Francisco 1
54 New York 2
65 Amsterdam 2
要列出部署您的滴滴的尺寸列表,您可以键入:
1knife digital_ocean size list
1ID Name
263 1GB
362 2GB
464 4GB
565 8GB
661 16GB
7. . .
要列出我们可以在图像中嵌入的SSH密钥,我们可以发出以下命令:
1knife digital_ocean sshkey list
1ID Name
211111 Home key
322222 Chef key
创建和破坏滴滴
我们现在知道如何获得创建和破坏滴滴所需的所有信息。
我们可以从毁掉一滴水开始,因为毁灭总是需要比创造更少的努力。
我们只需要摧毁一个滴滴的ID,这是在滴滴列表的第一列中可用的:
1knife digital_ocean droplet list
ID Name Size Region IPv4 Image Status 111111 irssi 512MB New York 1 111.111.111.111 479972 (N/A) active 222222 try 4GB New York 2 222.222.222.222 1575388 (Ubuntu-Init) active 333333 nftables 4GB New York 2 333.333.333.333 308287 (Debian 7.0 x64) active 4444444 snmp 4GB New York 2 444.444.444.444 1575388 (Ubuntu-Init) active 5555555 node 4GB New York 2 555.555.555.555 1575388 (Ubuntu-Init) active
一旦你有想要删除的滴的ID,你可以通过键入使用它:
knife digital_ocean droplet destroy 111111
这应该排队滴滴的删除。
要创建一个滴滴,您需要更多的信息. 您通常需要在 DigitalOcean 控制面板中填写的任何字段都需要作为参数输入到此命令中。
命令将看起来像这样:
knife digital_ocean droplet create --server-name name_for_server --image image_id --location region_id --size size_id --ssh-keys ssh_key_ids --bootstrap --run-list "nodes_run_list"
例如,要在 NY2 地区的 1G 滴滴上创建一个 x86_64 Ubuntu 12.04 实例,我们可以输入 1111 的 SSH 密钥:
knife digital_ocean droplet create --server-name hello --image 1505447 --location 4 --size 63 --ssh-keys 22222
确保您正在通过厨师工作站的SSH密钥,以便您能够连接到它在线。
如果我们想要在创建时启动滴滴,并通过运行列表来安装和配置一些软件,我们可以添加额外的参数。
knife digital_ocean droplet create --server-name hello --image 1505447 --location 4 --size 63 --ssh-keys 22222 --bootstrap --run-list "role[web_server]"
这将适用于角色所固有的所有配方和属性,就像我们在创建节点后编辑了节点的 run_list 一样。
结论
使用DigitalOcean刀插件,您可以轻松地根据需要将新的基础设施资源旋转,例如,如果您的数据库获得了比以前更多的流量,则可以轻松地旋转额外的数据库服务器来管理该负载。
通过在您管理基础设施的相同环境中创建新的 VPS 实例的功能,您可以轻松地使用精心设计的烹饪书籍、角色和属性来扩展基础设施。