Ubuntu上安装Chef Server和Client
Chef是一个配置管理工具,可以帮助您在物理服务器、虚拟机或云服务器中配置机器。Chef是用Ruby和Erlang编写,它使用一种特定于领域的语言来编写系统配置文件。有了这些方法,您就可以将基础设施当作代码来处理,同时配置大量的机器。
我将指导您完成在Ubuntu 20.04上安装Chef Server和Client的过程。在Chef Client上创建cookbook,然后通过Chef Server分发。我将演示在Ubuntu Server 20.04上的安装。
如果愿意,您可以始终将客户端安装在台式计算机上-特别是在您的Chef管理员需要使用GUI的情况下。对于大型部署,您可能需要大量的管理员和开发人员使用Chef,您将安装一台服务器和多个客户端。
准备工作
两个正在运行的Ubuntu 20.04系统的服务器实例
具有sudo特权的用户
如何安装Chef Server
我们要做的第一件事是安装Chef Server。为此,登录到您的Ubuntu Server 20.04实例,并使用以下命令下载服务器核心:
wget https://packages.chef.io/files/stable/chef-server/13.1.13/ubuntu/18.04/chef-server-core_13.1.13-1_amd64.deb
下载该文件后,请使用以下命令安装软件包:
sudo dpkg -i chef-server-core_*.deb
安装完成后,使用以下命令启动Chef Server服务:
sudo chef-server-ctl reconfigure
现在,我们需要创建一个包含安全密钥的新目录。使用以下命令执行此操作:
mkdir ~/.chef
接下来,我们创建一个新用户以及该用户的密钥文件。发出命令:
sudo chef-server-ctl user-create USERNAME FNAME LNAME EMAIL 'PASSWORD' --filename ~/.chef/USERNAME.pem
其中:
USERNAME是新用户的用户名
FNAME / LNAME是用户的姓名
EMAIL是新用户的电子邮件地址
PASSWORD是一个强大的、唯一的新用户的密码。
新用户创建好了,就该创建一个组了。同时,我们要把新用户添加到管理员和计费管理员安全组中。具体操作是通过命令来完成的:
sudo chef-server-ctl org-create ORGNAME "ORGFULLNAME" --association_user USERNAME --filename ~/.chef/ORGNAME.pem
其中ORGNAME(必须全小写)是组名称,ORGFULLNAME是组的全名,而USERNAME是刚创建的新用户的名称。
服务器安装就是这样。
如何安装Chef Client
登录到客户端计算机并使用以下命令下载必要的文件:
wget https://packages.chef.io/files/stable/chef-workstation/20.6.62/debian/10/chef-workstation_20.6.62-1_amd64.deb
文件下载完成后,请使用以下命令安装软件:
sudo dpkg -i chef-workstation*.deb
接下来,使用以下命令在客户端上创建存储库:
chef generate repo chef-repo
使用以下命令在存储库中创建一个子目录,该子目录将存储刀具配置:
mkdir ~/chef-repo/.chef
使用以下命令进入新创建的存储库:
cd ~/chef-repo
如何生成RSA密钥并将其复制到服务器
如果客户端计算机上还没有RSA密钥,请使用以下命令生成它们:
ssh-keygen -b 4096
使用以下命令将新密钥上载到服务器:
ssh-copy-id USER@SERVER
其中USER是生成密钥对的用户名,而SERVER是服务器的IP地址。
如何将PEM文件从服务器复制到客户端
接下来,我们必须将PEM文件从服务器复制到客户端。这是使用以下命令从服务器完成的:
scp USER@CLIENTIP:~/.chef/*.pem ~/chef-repo/.chef/
其中USER是生成PEM文件的用户名,而CLIENTIP是客户端计算机的IP地址。
如何添加版本控制
现在我们将混合使用版本控制,这样您就可以轻松的跟踪cookbook的更改。如果您的客户端还没有安装Git,请使用命令:
sudo apt-get install git -y
安装完成后,使用以下两个命令配置Git:
git config --global user.name NAME
git config --global user.email EMAIL
其中NAME是您的姓名,EMAIL是您的电子邮件地址。
使用以下命令将.chef目录添加到gitignore:
echo ".chef" > ~/chef-repo/.gitignore
使用以下命令进入存储库:
cd ~/chef-repo
使用以下命令添加并提交文件:
git add .
git commit -m "Initial Commit"
如何生成您的第一个cookbook并配置knife
下一步是使用以下命令生成您的第一本cookbook:
chef generate cookbook my_cookbook
完成后,您将需要使用以下命令创建刀具配置文件:
nano ~/chef-repo/.chef/config.rb
在该文件中,粘贴以下内容:
current_dir = File.dirname(__FILE__)
log_level :info
log_location STDOUT
node_name 'USER'
client_key "USER.pem"
validation_client_name 'ORGNAME-validator'
validation_key "ORGNAME-validator.pem"
chef_server_url 'https://SERVER/organizations/ORGNAME'
cache_type 'BasicFile'
cache_options( :path => "#{ENV['HOME']}/.chef/checksums" )
cookbook_path ["#{current_dir}/../cookbooks"]
其中:
USER是生成客户端密钥的用户名
ORGNAME是您创建的组名称
SERVER是Chef服务器的主机名或IP地址
保存并关闭文件。
使用以下命令进入chef-repo目录:
cd ~/chef-repo
使用以下命令从服务器获取SSL文件:
knife ssl fetch
如何引导节点
最后一步是在服务器上安装并验证客户端。在执行此操作之前,需要使用以下命令在客户端计算机上编辑主机文件:
sudo nano /etc/hosts
在该文件中,以以下形式添加Chef服务器的IP地址/主机名:
192.168.1.17 eaonvm
确保使用服务器的IP地址和主机名。保存并关闭文件。
使用以下命令进入.chef目录:
cd ~/chef-repo/.chef
要引导节点,请发出命令:
knife bootstrap SERVER -x USER -P PASSWORD --node-name NODE
其中:
SERVER是Chef服务器的主机名或IP地址
USER是您一直在使用的用户
PASSWORD是USER的密码
NODE是节点的名称
在这里可能会有些棘手。如果引导失败,则可能是由于您如何生成PEM文件。如果使用PEM文件的主机名(而不是IP地址),则需要使用该主机名进行引导。
自举成功后,您可以使用以下命令进行验证(在客户端上运行):
knife client list
您应该看到返回的ORG-validator(其中ORG是您创建的组的名称)。
就这样,就这样了。你现在准备好了,可以开始创建cookbook并使用它们来配置网络上的机器了。