如何在 Ubuntu VPS 实例上安装 Chef 服务器、工作站和客户端

<$>[warning] [label Warning] 本指南针对 Chef 11。 Chef 12 平台引入了一些显著的配置差异。您可以找到如何设置 Chef 12 服务器、工作站和节点的指南。

介绍


随着组织结构的增长和管理环境所需的独立组件的扩大,管理每个服务器和服务可能变得无法管理。

配置管理解决方案旨在简化系统和基础设施的管理。配置管理工具的目标是使您能够作为代码库管理基础设施。 Chef是一种配置管理解决方案,允许您轻松管理大量服务器。

在此前的指南中(https://www.digitalocean.com/community/articles/how-to-understand-the-chef-configuration-environment-on-a-vps),我们讨论了厨师组件的总体结构以及系统在概念层面的运作方式,我们讨论了一些关键术语和许多不同组件之间的关系。

在本指南中,我们将努力安装一个小型 Chef 11 设置。这将是一个 Chef 服务器,用于存储配置数据并管理访问权限。

我们还将安装一个工作站,使我们能够与我们的服务器进行交互,并构建我们的配置策略。

最后,我们将启动一个节点,该节点将代表我们组织中的服务器之一,该服务器将通过 Chef 进行管理,我们将使用我们配置的服务器和工作站进行此操作。

所有三台机器都将使用Ubuntu 12.04 x86_64 VPS实例,以便简化。

服务器安装


我们需要在线的第一个组件是厨师服务器. 因为这对我们其他组件的通信至关重要,所以它需要为我们的其他机器完成设置。

在此之前,重要的是为您的 Chef 服务器设置域名,以便正确解决请求。您可以在这里查看我们关于获取 域名与 DigitalOcean 设置的指南。

如果你没有域名,你需要在你将使用的每个VPS实例中编辑/etc/hosts文件,以便它们都能以名义解决 Chef 服务器. 如果你有域名,这只需要在你将作为 Chef 服务器使用的 VPS 上。

sudo nano /etc/hosts

在内部,添加该计算机的IP地址,然后添加您想使用的名称连接到服务器。

111.222.333.444 chef.domain.com chef

111.222.333.444更改为您的 Chef 服务器的 IP 地址,并将其他两个值更改为您想用来指向您的服务器的任何值。

您可以通过键入检查是否正确设置:

hostname -f

这应该给你这个服务器访问的名称。

您可以通过访问您的 Web 浏览器中的 此页面来获取厨师服务器包。

点击主服务器选项卡,然后选择与您的操作系统相匹配的菜单:

Chef server select operating system

选择右侧可供您使用的 Chef 11 服务器的最新版本:

Chef server newest

您将收到一个链接到 deb 文件. 右键单击此,并选择类似于复制链接位置的选项。

在您将作为服务器使用的 VPS 实例中,切换到您的用户主目录,并使用wget实用程序下载 deb. 在此写作时,最新的链接是:

1cd ~
2wget https://opscode-omnibus-packages.s3.amazonaws.com/ubuntu/12.04/x86_64/chef-server_11.0.10-1.ubuntu.12.04_amd64.deb

这将下载安装包,您可以这样安装:

1sudo dpkg -i chef-server*

这将为该机器安装服务器组件。

然后它会打印到屏幕上,表示您应该运行下一个命令,以实际配置您的特定机器周围的服务。

1sudo chef-server-ctl reconfigure

一旦此步骤完成,服务器应该启动并运行. 您可以通过键入 https:// 然后是您的服务器的域名或 IP 地址立即访问 Web 界面。

https://server_domain_or_IP

由于SSL证书是由一个主管机构签署的,您的浏览器默认情况下无法识别,您将看到一个警告消息:

Chef SSL warning

点击无论如何继续按钮来绕过这个屏幕并访问登录屏幕. 它将看起来像这样的东西:

Chef server login screen

默认登录凭证如下:

Default Username: admin
Default Password: p@ssw0rd1

当您首次登录时,您将立即被要求更改密码,选择一个新的密码,然后点击底部的保存用户按钮:

Chef server change pw

您现在已经将服务器配置到我们可以离开它并开始我们的工作站配置的地点。

工作站安装


我们的工作站计算机是VPS,我们将使用它来创建和编辑决定我们的基础设施环境的实际策略,该机器有描述我们的机器和服务的厨师复制品的副本,并将其上传到厨师服务器进行实施。

我们将通过简单的安装git来开始版本控制:

1sudo apt-get update
2sudo apt-get install git

这实际上有两个目的。显而易见的用途是,我们将将我们的配置保持在版本控制下,以追踪更改。

现在我们将从 Chef 网站下载并运行客户端安装脚本. 输入此命令以完成所有这些步骤:

1curl -L https://www.opscode.com/chef/install.sh | sudo bash

我们的 Chef 工作站组件现在已安装,但远未配置。

下一步是从 GitHub 获取一个正确格式化的 Chef 存储库的chef-repo目录结构,我们可以通过键入:

1cd ~
2git clone https://github.com/opscode/chef-repo.git

这将在您的主目录中创建一个名为chef-repo的目录,这里将包含您的整个设置配置。

我们将在本目录中为 Chef 工具自己创建一个配置目录:

1mkdir -p ~/chef-repo/.chef

在此目录中,我们将需要从我们的厨师服务器中放置一些身份验证文件,具体来说,我们需要两个私钥。

从服务器生成和复制密钥


回到您的Web浏览器中的 Chef服务器:

https://server_domain_or_IP

使用您之前更改的admin用户凭证登录。

在上面的导航栏中点击客户选项卡,你会看到两个名为 chef-validator 和 chef-webui 的客户:

Chef server clients

点击与chef-validator客户端相关的编辑按钮. 通过选择该框并点击保存客户端来再生私钥:

Chef regenerate key

您将收到一个屏幕,显示新生成的关键文件的值。

Chef val new key

** 注意: ** 此密钥只可使用一次,所以不要单击此页! 如果您这样做,您将需要再次重建密钥。

复制私钥字段的值(底部的值)。

在您的工作站机器上,更改到我们在 Repo 中创建的 Chef 配置目录:

1cd ~/chef-repo/.chef

打开我们刚刚创建的验证器密钥的新文件:

1nano chef-validator.pem

在此文件中,粘贴您从服务器的 Web 接口复制的密钥的内容(在这里删除了一些行):

1-----BEGIN RSA PRIVATE KEY-----
2MIIEowIBAAKCAQEA6Np8f3J3M4NkA4J+r144P4z27B7O0htfXmPOjvQa2avkzWwx
3oP28SjUkU/pZD5jTWxsIlRjXgDNdtLwtHYABT+9Q5xiTQ37s+eeJgykQIifED23C
4aDi1cFXOp/ysBXaGwjvl5ZBCZkQGRG4NIuL7taPMsVTqM41MRgbAcLCdl5g7Vkri
5. . .
6. . .
7xGjoTVH1vBAJ7BG1RHJZlx+T9QnrK+fQu5R9mikkLHayxi13mD0C
8-----END RSA PRIVATE KEY-----

确保在键上方或下方没有额外的空行. 保存和关闭文件。

我们将遵循相同的程序来再生和保存管理员用户的密钥文件. 这次,密钥是给用户,所以点击顶部的用户选项卡。

再次点击与管理员用户相关的编辑按钮,点击恢复私钥框,然后点击保存用户按钮:

Chef admin user regen

在下一个屏幕上复制私钥值. 再次, 这不会再次显示,所以第一次复制正确。

在工作站计算机上,您需要在相同的目录中为管理员用户创建另一个文件:

1nano admin.pem

粘贴您从服务器界面复制的密钥的内容(再次缩短):

1-----BEGIN RSA PRIVATE KEY-----
2MIIEpAIBAAKCAQEA/apu0+F5bkVtX6qGYcfoA6sIW/aLFUEc3Bw7ltb50GoZnUPj
30Ms1N1Rv/pdVZXeBa8KsqICAhAzvwSr0H9j+AoURidbkLv4urVC9VS4dZyIRfwvq
4PGvAKop9bbY2WJMs23SiEkurEDyfKaqXKW687taJ9AKbH2yVx0ArPI2RwS3Sze3g
5. . .
6. . .
7VTkNpg3lLRSGbQkvRUP6Kt20erS2bfETTtH6ok/zW4db8B/vnBlcZg==
8-----END RSA PRIVATE KEY-----

请确保在粘贴的键线上方或下方没有额外的行,然后保存并关闭文件。

设置刀的命令


现在我们必须配置命令. 这个命令是与我们的服务器和我们将配置的节点进行通信的中心方式. 我们需要告诉它如何身份验证,然后生成用户访问厨师服务器。

幸运的是,我们通过获取相应的凭证文件为此步骤奠定了基础,我们可以通过键入开始配置:

1knife configure --initial

這將會問你一系列的問題,我們將通過他們一個接一個:

WARNING: No knife configuration file found
Where should I put the config file? [/home/your_user/.chef/knife.rb]

插座中的值([])是刀子如果我们不选择一个值,将使用的默认值。

我们希望将我们的刀配置文件放在我们一直在使用的隐藏目录中:

/home/your_user/chef-repo/.chef/knife.rb

在下一个问题中,输入您使用的域名或 IP 地址来访问 Chef 服务器. 这应该从 https:// 开始,并以 443 结束:

https://server_domain_or_IP:443

您将被要求为您要创建的新用户命名。

Please enter a name for the new user: [root] station1

然后,它会要求您提供管理员名称,您可以点击此键来接受默认值(我们没有更改管理员名称)。

然后它会要求您找到现有管理员密钥的位置,这应该是:

/home/your_user/chef-repo/.chef/admin.pem

它会对验证器提出类似的问题,我们也没有更改验证器的名称,所以我们可以将其保留为chef-validator

然后它会询问验证密钥的位置,应该是这样的东西:

/home/your_user/chef-repo/.chef/chef-validator.pem

接下来,它会询问到存储库的路径,这是我们一直在运作的chef-repo文件夹:

/home/your_user/chef-repo

最后,它会要求您为新用户选择密码,选择您想要的任何内容。

如果我们在我们的chef-repo/.chef目录中查看,我们应该看到一个刀配置文件和我们新用户的身份证:

1ls ~/chef-repo/.chef

1admin.pem chef-validator.pem knife.rb station1.pem

清理和测试工作站


我们的工作站配置几乎完成了,我们需要做一些事情来清理并验证我们的连接是否有效。

首先,我们应该把我们的厨师存储库置于版本控制之下,因为厨师配置作为源代码操作,所以我们可以像任何程序的文件一样处理它。

首先,我们需要初始化我们的 git 名称和电子邮件。

git config --global user.email "[email protected]"
git config --global user.name "Your Name"

由于我们的chef-repo目录结构直接从GitHub中提取,它已经在Git版本控制下。

然而,我们不想在这个版本控制中包含chef-repo/.chef目录. 它包含我们的私钥和刀子配置文件. 它们与我们想要设计的基础设施无关。

将此目录添加到忽略列表中,打开.gitignore 文件:

1nano ~/chef-repo/.gitignore

在文件的底部,键入 .chef 以包含整个目录:

.rake_test_cache

###
# Ignore Chef key files and secrets
###
.chef/*.pem
.chef/encrypted_data_bag_secret
.chef

保存并关闭文件。

现在,我们可以通过键入我们的当前状态(除了我们刚刚修改的 .gitignore 文件之外,可能不会有任何更改):

1git add .
2git commit -m 'Finish configuring station1'

我们还希望确保我们的用户使用与我们的 Chef 安装包装的 Ruby 版本。否则,由 Chef 进行的呼叫可能会被系统的 Ruby 安装解读,这可能与我们的其他工具不兼容。

我们可以通过在我们的 .bash_profile 文件的底部添加一行来修改我们的路径。

输入此,以添加行:

1echo 'export PATH="/opt/chef/embedded/bin:$PATH"' >> ~/.bash_profile

现在,我们可以通过键入将这些变化应用到我们的当前环境中:

1source ~/.bash_profile

我们可以通过使用刀指令向服务器请求一些信息来测试我们是否能够成功连接到 Chef 服务器。

这将返回我们所有用户的列表:

1knife user list

1admin
2station1

如果成功,那么我们的工作站可以成功与我们的服务器进行通信。

启动客户端节点


现在我们有 Chef 服务器和一个工作站在线,我们可以尝试在样本节点上启动 Chef 客户端。

启动过程涉及在节点上设置 Chef 客户端。 Chef 客户端是与服务器通信的软件,以获得其配置的指示。

这个过程将简单地将我们的新VPS实例配置为我们的厨师管理系统的傘下,然后我们可以通过在我们的工作站上创建策略并将它们上传到我们的服务器来配置它。

要完成这个过程,我们只需要知道我们要安装客户端软件的VPS的三个信息:

  • IP 地址或域名 *用户名(可通过 SSH 访问并具有 sudo 特权) *密码

有了这些信息,我们可以通过使用我们的刀具工具在我们的工作站上安装适当的包。

你想输入一个看起来像这样的命令:

knife bootstrap node_domain_or_IP -x username -P password -N name_for_node --sudo

域名/IP 地址告诉你要连接哪个服务器. 用户名和密码提供登录凭证。

如果您正在使用的用户不是 root,那么 --sudo 选项是必要的,以便启动过程成功地在远程计算机上安装软件。

节点的名称是您选择的名称,由厨师内部使用,这就是您在制定策略和使用刀片时将参考这个机器的方式。

执行命令后,客户端软件将安装在远程节点上,将配置为与 Chef 服务器进行通信以接收指令。

我们可以通过键入查询我们的客户列表:

1knife client list

1chef-validator
2chef-webui
3client1

我们可以看到 Chef 服务器安装过程中默认配置的两个客户端(chef-validator 和 chef-webui),以及我们刚刚创建的客户端。

您可以轻松设置其他节点,将它们置于厨师系统的配置控制下。

结论


您现在应该有一个 Chef 服务器,一个独立的工作站来创建配置,以及一个示例节点。

我们目前还没有通过厨师实际配置节点,但我们已经设置了这个过程,在未来的教程中,我们将讨论如何实施策略,并创建食谱和烹饪书来管理您的节点。

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