前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在Ubuntu 18.04上安装Chef服务器工作站

在Ubuntu 18.04上安装Chef服务器工作站

作者头像
白加黑大人
发布2018-09-07 11:23:55
2.1K0
发布2018-09-07 11:23:55
举报
文章被收录于专栏:我的技术笔记我的技术笔记

Chef是一个“能够实现将基础架构模型转换为代码形式”的自动化平台,它允许用户跨越数个服务器(或者数个节点)来管理和部署资源。Chef自动化平台还允许用户创建及下载“菜谱”(“菜谱”存储在“烹饪手册”cookbook

之中),“菜谱”的作用就是自动化这些节点上的内容和策略。

Chef由一个Chef服务器、一个或者多个待配置的工作站服务器、以及由安装在每个节点上的Chef客户端管理的众多节点所组成。

Chef架构示意图
Chef架构示意图

本指南介绍了如何在各个Linode(VPS服务提供商)主机上创建和配置Chef服务器,虚拟工作站以及如何通过引导节点来运行chef客户端。

注意本指南是为非root用户所编写的。遇到需要提权的命令可以加上前缀sudo。如果您不熟悉sudo命令,可以查看我们的用户和组指南。

先决条件

一台用于托管Chef服务器的主机,要求内存4GB,运行Ubuntu 18.04操作系统

两个内容小任意的Linode主机,每台都运行Ubuntu 18.04操作系统,分别用于托管工作站和节点主机

请根据Linode入门指南如何保护您的服务器这两篇文章的介绍来配置每台Linode主机

每台Linode主机都需要配置有效的FQDN(全限定域名)

请确保所有主机上的软件都是最新的:

代码语言:txt
复制
sudo apt update && sudo apt upgrade

Chef服务器

Chef服务器是所有Chef工作站和chef节点之间交互中心。在工作站所进行的配置变更可以上传到Chef服务器,然后就可以由Chef客户端来访问Chef服务器,并将配置变更同步到每一个节点。

安装Chef Server

下载最新的Chef服务核心安装包

代码语言:txt
复制
wget https://packages.chef.io/files/current/chef-server/12.17.54+20180531095715/ubuntu/18.04/chef-server-core_12.17.54+20180531095715-1_amd64.deb

安装Chef服务:

代码语言:txt
复制
sudo dpkg -i chef-server-core_*.deb

删除下载的文件:

代码语言:txt
复制
rm chef-server-core_*.deb

Chef服务器包含一个名为的命令行实用程序chef-server-ctl。运行chef-server-ctl以启动Chef服务器服务:

代码语言:txt
复制
sudo chef-server-ctl reconfigure

创建Chef用户和用户组

为了将众多的工作站和站点链接到chef服务器上,我们需要创建一个管理员和用户组,并且通过RSA私钥将这两者关联起来。

/home 目录下,创建一个.chef目录,用于存储私钥:

代码语言:txt
复制
mkdir .chef

通过执行chef-server-ctl命令来建用户。在本例中,需要对命令中如下几个关键词进行一些调整:USER_NAMEFIRST_NAMELAST_NAMEEMAIL,和PASSWORD。调整USER_NAME.pem 时只需更改USERNAME,其后缀名.pem需要保留

代码语言:txt
复制
sudo chef-server-ctl user-create USER_NAME FIRST_NAME LAST_NAME EMAIL 'PASSWORD' --filename ~/.chef/USER_NAME.pem

接下来,创建一个用户组,并将上一步创建的管理员用户绑定到该安全用户组。将ORG_NAME改为用户组的短标识符,将ORG_FULL_NAME更改为用户组的全称,将USER_NAME改为上一步骤所创建用户的用户名,最后将ORG_NAME.pem中的ORG_NAMEG改为用户组短标识符,并且保留其后缀名.pem

代码语言:txt
复制
sudo chef-server-ctl org-create ORG_NAME "ORG_FULL_NAME" --association_user USER_NAME --filename ~/.chef/ORG_NAME.pem

当安装完成Chef服务器并生成RSA密钥后之,您就可以开始配置各个工作站了,这些工作站将为Chef节点执行所有的主要工作。

Chef工作站

在Chef工作站中,您可以创建和配置任意的“菜谱”、“烹饪手册”、属性和其他更改,这些对于工作站来说都是有效的。尽管本地的主机可以运行任意的的操作系统,但将远程服务器作为工作站主机的话,有些好处还是显而易见的,因为这样您就可以从任何地方访问它了。

设置工作站

下载最新的Chef Development Kit(Chef开发工具包)

代码语言:txt
复制
wget https://packages.chef.io/files/stable/chefdk/3.1.0/ubuntu/18.04/chefdk_3.1.0-1_amd64.deb

安装ChefDK(Chef开发工具包缩写):

代码语言:txt
复制
sudo dpkg -i chefdk_*.deb

删除已安装文件:

代码语言:txt
复制
rm chefdk_*.deb

生成chef-repo并移动到刚刚创建的目录中:

代码语言:txt
复制
chef generate app chef-repo 
cd chef-repo

创建.chef目录,用来存储knife.rb(“菜谱”配置文件)、ORGANIZATION-validator.pem以及USER.pem文件:

代码语言:txt
复制
mkdir .chef

添加RSA私钥

设置Chef服务器的时候,需要将生成的RSA私有密钥放在工作站上。这背后的具体过程取决于您登录linode主机的时候是否使用了SSH密钥身份验证的登录方式。

如果没有使用密钥身份验证的登录方式,请直接从Chef服务器复制文件。对于下面的命令,我们需要将user改成你的Chef服务器上的用户名,IP改成Chef服务器的IP,或者Chef服务器上的URL地址:

代码语言:txt
复制
scp user@192.0.2.0:~/.chef/*.pem ~/chef-repo/.chef/

如果使用RSA密钥对身份验证的登录方式,则需要从本地终端使用scp命令将以.pem为后缀名的文件从服务器复制到工作站。将user改为对应的用户名,将下面命令中的192.0.2.0203.0.113.0分别改成实际的Chef服务器IP和站点服务器IP:

代码语言:txt
复制
scp -3 user@192.0.2.0:~/.chef/*.pem user@203.0.113.0:~/chef-repo/.chef/

通过ls列出.chef目录下的文件内容,以确保文件已成功复制:

代码语言:txt
复制
ls ~/chef-repo/.chef

这里应该显示该目录下所有以.pem为后缀名文件。

添加版本控制

Chef工作站一般用于创建和编辑“烹饪手册”cookbook以及其他的配置文件,而对工作站进行某种形式的版本控制是很有用处的。ChefDK将会把Git组件安装到您的工作站,并在创建Chef repo仓库目录的时候初始化Git版本库。在此之前,我们需要在GIT中全局配置您的用户名和电子邮箱,并且添加和提交在上述步骤中生成的任何新文件。

全局配置git的用户名和电子邮箱,请您根据实际情况修改下面的值:

代码语言:txt
复制
git config --global user.name yourname 
git config --global user.email user@email.com

.chef目录添加到.gitignore文件中:

代码语言:txt
复制
echo ".chef" > .gitignore

添加并提交所有的现有文件:

代码语言:txt
复制
git add . 
git commit -m "initial commit"

请确保工作目录是干净的:

代码语言:txt
复制
git status

它应该输出:

代码语言:txt
复制
On branch master 
nothing to commit, working directory clean

生成knife.rb(“菜谱”配置文件)

进入~/chef-repo/.chef文件夹,使用你的文本编辑器来创建knife.rb配置文件。

将下面代码复制到knife.rb文件中

代码语言:txt
复制
current_dir = File.dirname(__FILE__)
log_level                :info
log_location             STDOUT
node_name                'node_name'
client_key               "USER.pem"
validation_client_name   'ORG_NAME-validator'
validation_key           "ORGANIZATION-validator.pem"
chef_server_url          'https://example.com/organizations/ORG_NAME'
cache_type               'BasicFile'
cache_options( :path => "#{ENV['HOME']}/.chef/checksums" )
cookbook_path            ["#{current_dir}/../cookbooks"]

更改下面的对应值

node_name改为在您在chef服务器上创建的用户名。

client_key对应的USER.pem改成chef服务器上的用户创建的USER.pem,建立映射关系。

validation_client_name对应的ORG_NAME-validator改为你的ORG_NAME改成拼接上-validator

validation_key对应的ORGANIZATION-validator.pem改成你的ORG_NAME拼接上-validator.pem

最后将chef_server_url改成你自己服务器的全限定域名,并且在最后面加上你的用户组短标识ORG

进入chef-repo目录,从服务器复制必要的SSL证书文件到该目录下

代码语言:txt
复制
cd .. 
knife ssl fetch

注意这些SSL证书是在安装Chef服务器的时候自动生成的。很明显,这类证书是自签名的。这也意味着不需要使用第三方的签名证书颁发机构(CA)的服务。Chef服务器的主机名和FQDN应该相同,以便工作站可以获取并验证SSL证书。您可以分别通过运行hostnamehostname -f验证Chef服务器的主机名和FQDN 。有关重新生成SSL证书的详细信息,请参阅Chef说明文档

请在客户端运行命令knife.rb,验证客户端均已正确配置:

代码语言:txt
复制
knife client list

此命令应输出验证器名称。

配置完成服务器和工作站之后,我们就可以引导到节点了。

引导节点

引导客户机节点的过程中会自动安装Chef客户端并验证节点有效性,引导过程中允许节点从Chef服务器读取相关信息,以后也可以有chef客户端根据需要修改相关配置信息。

从您的工作站导进入到您的~/chef-repo/.chef目录:

代码语言:txt
复制
cd ~/chef-repo/.chef

使用客户机节点的root用户或者可以提升权限的用户来引导客户机节点:

作为拥有节点root权限的用户,请根据需要更改root的密码password以及客户机节点的名称nodename。如果您希望使用客户机节点的默认主机名,则可以将修改客户机节点名称的选项忽略:

代码语言:txt
复制
knife bootstrap 192.0.2.0 -x root -P password --node-name nodename

作为具有sudo权限的用户,请根据需要更改用户名username、用户密码password以及客户机节点的名称nodename。如果您希望使用客户机节点的默认主机名,则可以将修改客户机节点名称的选项忽略:

代码语言:txt
复制
knife bootstrap 192.0.2.0 -x username -P password --sudo --node-name nodename

作为具有密钥对身份验证权限的用户,请根据需要更改主机用户名username和客户机节点名称nodename。如果您希望使用客户机节点的默认主机名,则可以将修改客户机节点名称的选项忽略:

代码语言:txt
复制
knife bootstrap 192.0.2.0 --ssh-user username --sudo --identity-file ~/.ssh/id_rsa.pub --node-name hostname

通过列出客户机节点来确保节点均已被引导:

代码语言:txt
复制
knife client list

该列表应包含所有最新的客户机。

下载Cookbook(‘烹饪手册’)(可选)

使用Chef服务时,您将希望Chef客户端可以定期在您的节点上运行,并将所有配置更改推送到Chef中央服务器。出于安全考虑,您还希望删除节点客户机在引导节点时上传到Chef服务器的验证文件validation.pem。虽然这些步骤都可以手动完成,但将其设置为“菜谱”之后,执行起来更加容易和高效。

这部分内容是可选的,我们仅提供有关将“菜谱”如何下载到工作站,然后如何将其推送到服务器的说明,这部分内容同时包含可扩展和可试验的基本“菜谱”框架。

从您的工作站进入~/chef-repo/.chef目录:

代码语言:txt
复制
cd ~/chef-repo/.chef

下载cookbook及其依赖项:

代码语言:txt
复制
knife cookbook site install cron-delvalidate

打开default.rb文件以检查默认的cookbook"配方":

代码语言:txt
复制
#
# Cookbook Name:: cron-delvalidate
# Recipe:: Chef-Client Cron & Delete Validation.pem
#
#

cron "clientrun" do
  minute '0'
  hour '*/1'
  command "/usr/bin/chef-client"
  action :create
end

file "/etc/chef/validation.pem" do
  action :delete
end

cron "clientrun"do 定义了一个定时操作,它的含义是每隔一小时(*/1含义是每小时而不是每天凌晨1点),执行一次chef-client(/usr/bin/chef-client)命令,action对应的create标识创建一个新的定时作业。

"/etc/chef/validation.pem"文件被validation.pem文件进行调用,当满足条件的时候会执行对应操作“删除命令”来移除该文件。

在Ruby中,这是两个非常基本的操作,在创建Chef的“烹饪手册”cookbook时,会提供最基本的代码结构示例。我们可以根据需要对这些示例代码进行编辑和扩展。

将配方添加到节点的运行列表中,替换nodename为节点的名称:

代码语言:txt
复制
knife node run_list add nodename 'recipecron-delvalidate::default'

将菜谱cookbook推送到Chef服务器:

代码语言:txt
复制
knife cookbook upload cron-delvalidate

更新cookbook时也使用此命令。

切换到您的自检(自动定时拉取服务器的cookbook)客户机节点并运行初始chef-client命令:

代码语言:txt
复制
chef-client

如果以非root用户身份运行此命令,请在命令前面加上sudo

运行列表中的配方cookbook时,节点将会从服务器中拉取对应程序并运行。在这种情况下,这种食谱一般都是含有cron-delvalidate定时作业的。这样从服务器拉取的配方可以保证能够完整制作,然后Chef站点和节点可以将变更的配置推送到Chef服务器,并将这些信息同步到节点列表上,各个节点和工作站每隔一小时会自动拉取cookbook“烹饪手册“到自己的节点上。这种自动化步骤避免了将来连接到节点时手动更改客户机的操作。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 先决条件
  • Chef服务器
    • 安装Chef Server
      • 创建Chef用户和用户组
      • Chef工作站
        • 设置工作站
          • 添加RSA私钥
            • 添加版本控制
              • 生成knife.rb(“菜谱”配置文件)
              • 引导节点
              • 下载Cookbook(‘烹饪手册’)(可选)
              相关产品与服务
              访问管理
              访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档