如何在Ubuntu上安装Chef服务器,工作站和客户端

介绍

随着组织结构的增长以及管理环境所需组件的扩展,各个服务器和服务可能变得难以管理。配置管理解决方案旨在简化系统和基础架构的管理。配置管理工具的目标是允许您将基础架构作为代码库进行管理。 Chef是一种配置管理解决方案,可让您轻松管理大量服务器。

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

我们还将安装一个工作站,允许我们与服务器交互并构建配置策略,这是我们将负责管理基础架构环境的工作。

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

为简单起见,所有这三台机器都将使用Ubuntu 服务器。我们将重点放在Chef 11,因为它稳定且经过测试。

服务器安装

我们需要联机的第一个组件是Chef服务器。因为这是我们其他组件通信的核心,所以我们的其他机器需要它才能完成设置。

在执行此操作之前,为Chef服务器设置域名以正确解析请求非常重要。您可以在此处查看有关设置域名的指南。

如果您没有域名,则需要在将要使用的每个服务器实例上编辑/etc/hosts文件,以便它们都可以按名称解析Chef服务器。如果你有一个域名,在您将使用作为chef服务器必要的。您可以在将用作Chef服务器的服务器上输入以下内容:

sudo nano / etc / hosts

在里面,添加此计算机的IP地址,然后添加要用于连接服务器的名称。然后,您可以在此之后添加短名称。例如:

111.222.333.444 chef.domain.com chef

111.222.333.444更改为Chef服务器的IP地址,并将其他两个值更改为您要用作引用服务器的任何值。如果您不使用域名,请在您计划使用的每台计算机上添加此行以指向您的Chef服务器到此文件。

您可以通过键入以下内容来检查是否已正确设置:

hostname -f

这应该为您提供用于访问此服务器的名称。您可以通过Web浏览器访问此页面来获取Chef服务器包。单击“Chef Server”选项卡,然后选择与您的操作系统匹配的菜单:

选择操作系统

在右侧选择最新版本的Chef 11服务器:

选择Chef版本

您将看到一个deb文件的链接。右键单击此选项,然后选择与“复制链接位置”类似的选项。

在将用作服务器中,切换到用户的主目录并使用该wget实用程序下载deb。在撰写本文时,最新的链接是这样的:

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

这将下载您可以安装的安装包,如下所示:

sudo dpkg -i chef-server*

这将在此计算机上安装服务器组件。

输入以下命令将自动配置所有内容:

sudo chef-server-ctl reconfigure

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

https:// server_domain_or_IP

由于SSL证书是由您的浏览器默认无法识别的权限签署的,因此您将看到一条警告消息:

Chef SSL warning

单击“仍然继续”按钮以绕过此界面并访问登录界面。如下图:

登陆界面

默认登录凭据如下:

Default Username: admin
Default Password: p@ssw0rd1

当您第一次登录时,系统会立即提示您更改密码。选择一个新密码,然后单击底部的“保存用户”按钮:

更改密码

您现在已将服务器配置为我们可以离开和开始我们的工作站配置的点。

工作站安装

我们将使用工作站来创建和编辑指示我们的基础架构环境的实际策略。该机器有一份Chef repo副本,用于描述我们的机器和服务,并将它们上传到Chef服务器以供实施。

我们将从简单安装git版本控制开始:

sudo apt-get update
sudo apt-get install git

这实际上有两个目的。很明显,我们将在版本控制下保持配置以跟踪更改。第二个目的是使用sudo命令临时缓存我们的密码,以便以下命令有效。

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

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

我们的Chef工作站组件现已安装。然而,它距离配置还很远。

下一步是从GitHub获取格式正确的Chef存储库的“chef-repo”目录结构。我们可以通过键入以下内容将结构克隆到主目录中:

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

这将在主目录创建一个chef-repo的目录,这将包含安装所需的整个配置。

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

mkdir -p ~/chef-repo/.chef

在此目录中,我们需要从Chef服务器中放入一些身份验证文件。也就是说,我们需要两个私钥。

从服务器生成和复制密钥

在Web浏览器中返回Chef服务器:

https:// server_domain_or_IP

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

单击顶部导航栏中的“客户端”选项卡。您将看到两个名为chef-validatorchef-webui的客户:

Chef 客户端

单击与chef-validator客户端关联的“编辑”按钮。通过选择该框并单击“保存客户端”重新生成私钥:

Chef regenerate key

您将进入一个界面,其中包含新生成的密钥文件值。

新生成的密钥

注意:此密钥仅可用一次,因此请勿单击此页面!如果这样做,您将需要再次重新生成密钥。

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

在工作站计算机上,切换到我们在repo中创建的Chef配置目录:

cd ~/chef-repo/.chef

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

nano chef-validator.pem

在此文件中,粘贴从服务器的Web界面复制的密钥的内容(为简洁起见,已删除了一些行):

-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA6Np8f3J3M4NkA4J+r144P4z27B7O0htfXmPOjvQa2avkzWwx
oP28SjUkU/pZD5jTWxsIlRjXgDNdtLwtHYABT+9Q5xiTQ37s+eeJgykQIifED23C
aDi1cFXOp/ysBXaGwjvl5ZBCZkQGRG4NIuL7taPMsVTqM41MRgbAcLCdl5g7Vkri
. . .
. . .
xGjoTVH1vBAJ7BG1RHJZlx+T9QnrK+fQu5R9mikkLHayxi13mD0C
-----END RSA PRIVATE KEY-----

确保按键上方或下方没有多余的空白行。保存并关闭文件。

我们将按照相同的步骤重新生成并保存管理员用户的密钥文件。这一次,关键是针对用户,因此请单击顶部的“用户”选项卡。

再次,单击与admin用户关联的“编辑”按钮,选中“重新生成私钥”框,然后单击“保存用户”按钮:

编辑用户

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

回到工作站计算机上,您需要在同一目录中为admin用户创建另一个文件:

nano admin.pem

粘贴从服务器界面复制的密钥的内容(同样,这会缩短):

-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA/apu0+F5bkVtX6qGYcfoA6sIW/aLFUEc3Bw7ltb50GoZnUPj
0Ms1N1Rv/pdVZXeBa8KsqICAhAzvwSr0H9j+AoURidbkLv4urVC9VS4dZyIRfwvq
PGvAKop9bbY2WJMs23SiEkurEDyfKaqXKW687taJ9AKbH2yVx0ArPI2RwS3Sze3g
. . .
. . .
VTkNpg3lLRSGbQkvRUP6Kt20erS2bfETTtH6ok/zW4db8B/vnBlcZg==
-----END RSA PRIVATE KEY-----

确认粘贴的键行上方或下方没有多余的行。保存并关闭文件。

配置knife命令

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

幸运的是,我们通过获取适当的凭证文件为此步骤奠定了基础。我们可以通过输入以下内容来启动配

knife configure --initial

这会问你一系列问题。我们将逐一介绍它们:

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

如果我们不选择值,则括号([])中的值是knife将使用的默认值。

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

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

在下一个问题中,键入用于访问Chef服务器的域名或IP地址。这应该从https://开头并以:443结束:

https:// server_domain_or_IP:443

系统将要求您输入要创建的新用户的名称。

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

然后它会询问您的管理员名称。您可以按Enter键接受默认值(我们没有更改管理员名称)。

然后它会询问您现有管理员密钥的位置。这应该是:

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

它将询问有关验证器的类似问题。我们也没有更改验证器的名称,因此我们可以将其保留为chef-validator。按Enter键接受此值。

然后它会询问您验证密钥的位置。它应该是这样的:

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

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

/home/your_user/chef-repo

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

这时应该完成了knife配置。如果我们查看chef-repo/.chef目录,我们应该看到一个knife配置文件和新用户的凭据:

ls ~/chef-repo/.chef
admin.pem  chef-validator.pem  knife.rb  station1.pem

清理和测试工作站

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

首先,我们应该在版本控制下获取Chef存储库。因为Chef配置作为源代码运行,所以我们可以像处理任何程序的文件一样处理它。

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

git config --global user.email "your_email@domain.com"
git config --global user.name "Your Name"

由于我们的“chef-repo”目录结构是直接从GitHub中提取的,因此它已经在git版本控制下了。

但是,我们不希望在此版本控件中包含“chef-repo/.chef”目录。这包含我们的私钥和knife配置文件。它们与我们想要设计的基础设施没有任何关系。

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

nano ~/chef-repo/.gitignore

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

.rake_test_cache

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

保存并关闭文件。

现在,我们可以通过键入以下内容来提交当前状态(可能在我们刚刚修改的.gitignore文件旁边没有任何更改):

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

我们还希望确保我们的用户使用随Chef安装打包的Ruby版本。否则,Chef发出的调用可能会被系统的Ruby安装解释,这可能与我们的其他工具不兼容。

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

输入以添加行:

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

现在,我们可以通过键入以下内容将这些更改实现到当前环境:

source ~/.bash_profile

我们可以通过使用knife命令从服务器请求一些信息来测试我们是否可以与Chef服务器成功连接。

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

knife user list
admin
station1

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

引导客户端节点

现在我们已经将Chef服务器和工作站联机,我们可以尝试在示例节点上引导Chef客户端。我们将使用另一个Ubuntu实例。

引导过程涉及在节点上设置Chef客户端。Chef客户端是一个与服务器通信的软件,用于接收自己配置的指示。然后,客户端将其安装的节点与服务器为其提供的策略一致。

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

要完成此过程,我们只需要了解有关我们要在其上安装客户端软件的VPS的三条信息:

  • IP地址或域名
  • 用户名(可通过SSH和sudo权限访问)
  • 密码

有了这些信息,我们就可以在工作站上使用我们的knife安装相应的软件包。

您想要键入一个如下所示的命令:

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

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

如果您使用的用户不是root用户,则必须使用该--sudo选项才能使引导过程在远程计算机上成功安装软件。登录后,它会提示您输入密码以使用sudo命令。

节点的名称是您选择的名称,由Chef在内部使用。这是您在制定政策和使用knife时参考此机器的方法。

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

我们可以通过输入以下内容来查询我们的客户

knife client list
chef-validator
chef-webui
client1

我们可以看到在Chef服务器安装期间默认配置的两个客户端(chef-validator和chef-webui),以及我们刚刚创建的客户端。您可以轻松设置其他节点,使其处于Chef系统的配置控制之下。

结论

您现在应该拥有Chef服务器,用于创建配置的单独工作站以及示例节点。如果您对如何在Chef中使用角色和环境来控制服务器配置感兴趣,欢迎访问腾讯云查看更多相关内容。


参考文献:《How to Install a Chef Server, Workstation, and Client on Ubuntu VPS Instances》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏农夫安全

文件上传漏洞超级大汇总-最终篇

12、Ecshop本地文件包含获取shell 1. 首先注册用户,如下图: ? 1. 找到我的留言,尝试上传test.php,会返回错误信息发现有文件大小限制,...

6658
来自专栏Jerry的SAP技术分享

如何给VirtualBox虚拟机的ubuntu LVM分区扩容

我在VirtualBox安装的ubuntu里安装Cloud Foundry时遇到错误信息,磁盘空间不够了:

3724
来自专栏python学习路

二、urllib进阶

Handler处理器 和 自定义Opener opener是 urllib.request.OpenerDirector 的实例,我们之前一直都在使用的ur...

3065
来自专栏MongoDB中文社区

MongoDB 4.0 系列之\b —— 事务实现解析(\b\b二)

MongoDB 4.0 引入的事务功能,支持多文档ACID特性,例如使用 mongo shell 进行事务操作。

1052
来自专栏JAVA烂猪皮

Zookeeper的简介和应用场景

Zookeeper是一个分布式协调服务;就是为用户的分布式应用程序提供协调服务 A、zookeeper是为别的分布式程序服务的 B、Zookeeper本身就...

1381
来自专栏FreeBuf

保护SSH端口安全性的多种技巧介绍

SSH是一种可以让你在不安全的网络上,安全的运行网络服务的网络协议的.ssh的标准TCP端口为22端口,其最佳应用场景是用户远程登录至计算机系统。因此,SSH端...

1442
来自专栏黑泽君的专栏

linux下如何删除文件夹?

直接rm就可以了,不过要加两个参数-rf 即:rm -rf 目录名字 -r 就是向下递归,不管有多少级目录,一并删除; -f 就是直接强行删除,不作任何提示的意...

2591
来自专栏weixuqin 的专栏

Django 使用第三方服务发送电子邮件

1354
来自专栏北京马哥教育

如何使用logrotate管理Linux的日志文件

日志文件包含系统内部执行情况的有用信息。在排除故障或服务器性能分析时往往需要检查日志。对于繁忙的服务器,日志文件可能会在短时间内变得非常大。这将成为一个问题,...

3384
来自专栏月牙寂

k8s源码分析-----kubectl(1)api.RESTMapper

第一时间获取文章,可以关注本人公众号 月牙寂道长 yueyajidaozhang

4266

扫码关注云+社区

领取腾讯云代金券