如何使用 Knife 的 DigitalOcean 插件在 Chef 中管理 Droplets

介绍


Chef 是一个配置管理系统,允许您以控制和可重复的方式构建和管理您的基础设施. 借助 Chef,您可以确保您的基础设施决策都集中记录,并且可以随时轻松地重新实施。

在以前的文章中,我们讨论了 基本厨师术语,如何安装软件(使用 Chef 12Chef 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:

DigitalOcean client ID

您将需要此值为您的配置文件在一瞬间。

如果您已经生成了 API 密钥,则需要从使用该密钥连接到您的 DigitalOcean 帐户的其他应用程序中收集该值。

如果您尚未生成 API 密钥,或者您已丢失或不再需要旧密钥,您可以通过键入生成新密钥按钮生成新密钥:

DigitalOcean generate key

一旦生成新密钥,您需要在离开屏幕之前复制生成的值. 如上所述,您将无法在离开此页面后访问此值,因此您必须生成新值或从已经使用该值的应用程序中获取 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 密钥按钮:

DigitalOcean add SSH key

在下一页上,为你的新密钥创建一个名称,然后将文件的内容粘贴到指定区域:

DigitalOcean create key

点击下面的创建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 实例的功能,您可以轻松地使用精心设计的烹饪书籍、角色和属性来扩展基础设施。

By Justin Ellingwood
Published At
Categories with 技术
Tagged with
comments powered by Disqus