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

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

简介


随着组织结构的不断增长和管理环境所需的各个独立组件的扩展,管理每个服务器和服务可能变得难以管理。

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

在之前的指南中,我们讨论了Chef组件的一般结构以及系统在概念层面上的运作方式。我们介绍了一些关键术语和许多不同组件之间的关系。

在本指南中,我们将安装一个小型的Chef 11设置。这将是一个Chef服务器,用于存储配置数据和管理访问权限。这将作为我们其他机器的中心。

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

最后,我们将引导一个节点,它将代表我们组织中将通过Chef进行管理的服务器之一。我们将使用我们配置的服务器和工作站来完成这一步骤。

为了简单起见,这三台机器都将使用Ubuntu 12.04 x86_64 VPS实例。我们将针对Chef 11版本进行操作,因为它是稳定且经过充分测试的。

服务器安装


我们需要上线的第一个组件是Chef服务器。由于这对于我们其他组件的通信至关重要,因此需要让其他机器能够完成其设置。

在执行此操作之前,重要的是为Chef服务器设置一个域名以正确解析请求。您可以查看我们的指南,了解如何在DigitalOcean上设置域名。

如果您没有域名,您需要编辑每台VPS实例上的/etc/hosts文件,以便它们都可以通过名称解析Chef服务器。如果您有域名,这只需要在您将用作Chef服务器的VPS上进行。您可以通过在您将用作Chef服务器的VPS上键入以下内容来执行此操作:

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服务器”选项卡,然后选择与您的操作系统匹配的菜单:

!Chef服务器选择操作系统

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

!Chef服务器最新版本

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

在您将用作服务器的VPS实例中,切换到用户的主目录并使用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

完成此步骤后,服务器应该已经运行起来了。您可以立即访问Web界面,方法是键入https://,然后是您的服务器的域名或IP地址。

https://server_domain_or_IP

由于SSL证书是由您的浏览器默认不认可的权威签名的,您将看到一个警告消息:

!Chef SSL警告

单击“仍然前往”按钮以绕过此屏幕并访问登录屏幕。它将类似于这样:

!Chef服务器登录屏幕

默认登录凭据如下:

默认用户名:admin
默认密码:p@ssw0rd1

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

!Chef服务器更改密码

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

工作站安装


我们的工作站计算机是我们将用来创建和编辑实际规定基础设施环境的 VPS。这台机器上有描述我们的机器和服务的 Chef 存储库的副本,并且它会将这些内容上传到 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 服务器的认证文件。具体来说,我们需要两个私钥。

生成并复制来自服务器的密钥


回到您的 Chef 服务器,在您的网络浏览器中:

https://server_domain_or_IP

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

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

!Chef 服务器客户端

点击与 chef-validator 客户端关联的 “Edit” 按钮。通过选中该框并点击 “Save Client” 来重新生成私钥:

!Chef 重新生成密钥

您将看到新生成的密钥文件的屏幕。

!Chef 新密钥

注意: 此密钥仅可使用一次,因此不要离开此页面!如果这样做,您将需要重新生成密钥。

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

在您的工作站机器上,切换到我们在存储库中创建的 Chef 配置目录:

cd ~/chef-repo/.chef

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

nano chef-validator.pem

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

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

确保密钥上方或下方没有额外的空行。保存并关闭文件。

我们将按照相同的步骤重新生成并保存管理员用户的密钥文件。这次,密钥是用于用户的,因此在顶部点击 “Users” 选项卡。

再次点击与 admin 用户关联的 “Edit” 按钮,选中 “Regenerate Private Key” 框,然后点击 “Save User” 按钮:

!Chef 管理员用户重新生成

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

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

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

这将会询问您一系列问题。我们将逐一回答这些问题:

警告: 未找到 knife 配置文件
应该把配置文件放在哪里?[/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

您将被要求为您将要创建的新用户输入一个名称。选择一个描述性的名称:

请输入新用户的名称:[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

最后,它会要求您为新用户选择一个密码。选择任何您喜欢的密码。

这应该完成我们的 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###
# 忽略 Chef 密钥文件和机密信息
###
.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 对节点进行任何实际配置,但我们已经准备好开始这个过程。在未来的教程中,我们将讨论如何实施策略,并创建配方和食谱来管理您的节点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/36132.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux通用系统高危漏洞(CVE-2024-1086)修复案例

一、漏洞描述 2024年3月28日, Linux kernel权限提升漏洞(CVE-2024-1086)的PoC/EXP在互联网上公开,该漏洞的CVSS评分为7.8,目前漏洞细节已经公开披露,美国网络安全与基础设施安全局(CISA&#x…

vue 中html 转word 遇到的坑记录

1.单选框的展示 <span style="font-family: Wingdings;font-size: 12pt;">{{items.cellValue == i ? "" : "¡" }} </span>2.多选框的展示 <span style=" font-family: 宋体">{{items.selRadio.includes(ind…

测试:MyBatisDemo

MyBatis Demo 先创建一个 Maven 项目&#xff0c;名称为 MyBatis01。 之后创建并连接 MySQL 数据库&#xff0c;然后执行 sql 脚本&#xff1a; CREATE DATABASE mybatis;USE mybatis;DROP TABLE IF EXISTS user;CREATE TABLE user ( id int(20) NOT NULL, name varchar(30)…

数据治理新纪元:筛斗数据引领企业信息优化潮流

数据治理新纪元&#xff1a;筛斗数据引领企业信息优化潮流 随着数字化时代的深入发展&#xff0c;数据已成为企业运营和决策的核心驱动力。然而&#xff0c;海量的数据往往伴随着质量参差不齐、格式各异等问题&#xff0c;如何有效地管理和利用这些数据&#xff0c;成为企业面…

等级保护 | 如何完成等保的建设整改

等级保护整改是等保基本建设的一个阶段。为了能成功通过等级测评&#xff0c;企业要根据等级保护建设要求&#xff0c;对信息和信息系统进行网络安全升级&#xff0c;对定级对象当前不满足要求的进行建设整改&#xff0c;包括技术层面的整改&#xff0c;也包括管理方面的整改。…

ABB机器人控制柜各模块指示灯状态说明

ABB机器人控制柜各模块指示灯状态说明 主计算机模块位于控制柜的正前方,负责机器人的各种运算处理,安全模块主要负责安全相关的信号处理,驱动单元模块用于接收上位机指令,驱动机器人运动,轴计算机模块用于接收主计算机的运动指令和串

入门JavaWeb之 Response 验证码和重定向

Response 写验证码&#xff1a; package com.demo.response;import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse…

leetcode167:两数之和|| - 输入有序数组

题目链接&#xff1a;167. 两数之和 II - 输入有序数组 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:vector<int> twoSum(vector<int>& numbers, int target) {int left 0, right numbers.size() - 1;while(left < right){if(numbe…

Qt动态监测USB插拔事件

需要引用头文件 #include <windows.h> #include <dbt.h> Qt4用 bool winEvent(MSG *m, long *result); 或 bool winEventFilter(MSG *m, long *result); 例如&#xff1a; bool USBTest::winEvent(MSG *m, long *result) {int msgType m->message;if (m…

postman接囗测试工具详解

Postman 是一种广泛使用的API开发和测试工具,用于发送HTTP请求、测试API接口、自动化测试、生成API文档等。以下是对Postman的详细介绍及其使用指南: 主要功能 发送请求: 支持GET、POST、PUT、DELETE、PATCH等HTTP方法。允许设置请求头、请求体、查询参数、路径变量等。支持…

Java数据结构算法(最长递增序列动态规划)

前言: 最长递增子序列(Longest Increasing Subsequence, LIS)是指在一个给定的序列中,找到一个最长的子序列,使得这个子序列中的元素是单调递增的。子序列不要求在原序列中连续。 实现原理 一种常见的方法是使用动态规划来解决最长递增子序列问题。以下是具体步骤: 定义…

AT89S52测试脉冲输出

/*AT89S52测试脉冲输出 2012 5 8PCB四入四出板 L270 CODE 771 PAST 测试步进电机伺服电机旋转位置**/ /*****---------------********/ /*****|手动&#xff1a; XXX |******/ /*****| |******/ /***** ---------------*******/ #include &…

浏览器页面打不开(网络连接正常的情况下)

目录 一、代理被打开 二、DNS被篡改 三、网络配置出现问题 四、浏览器配置问题 一、代理被打开 1. 右击Wifi图标 2.点击“打开网络和internet设置” 3. 点击代理&#xff0c;把该窗口所有的东西都关闭&#xff0c;尤其是代理服务器 二、DNS被篡改 如果第一个方法不行&am…

浅谈逻辑控制器之仅一次控制器

浅谈逻辑控制器之仅一次控制器 “仅一次控制器”(Once Only Controller) 是一个非常实用的组件&#xff0c;它允许用户控制测试计划中的某些操作仅执行一次&#xff0c;无论其所在的线程组或父级控制器设置了多少次循环。本指南将详细介绍“仅一次控制器”的功能、使用场景及配…

HarmonyOS ArkUi Tabs+TabContent+List实现tab吸顶功能

Demo效果 Entry Component struct StickyNestedScroll {State message: string Hello WorldState arr: number[] []scroller new Scroller()StyleslistCard() {.backgroundColor(Color.White).height(72).width("100%").borderRadius(12)}build() {Scroll(this.sc…

原生js如何播放m3u8文件的视频,并且实现切换视频源

在网上找了很多方法都不行&#xff0c;最后还得是chatgpt。 首先呢在需要用到的文件中写入一下代码&#xff1a; <script src"https://act.mcake.com/fangli/2018/wap/commonjs/jquery.min.js"></script> <script src"http://res.wx.qq.com/op…

医药研发项目管理系统:适合CRO/CDMO企业使用的项目管理系统有哪些?

近日&#xff0c;北京民康百草医药科技有限公司&#xff08;以下简称“民康百草”&#xff09;与北京瑞杰智能科技有限公司&#xff08;以下简称“瑞杰科技”&#xff09;宣布达成战略合作&#xff0c;双方将共同打造一套符合民康百草企业特色的研发项目管理系统。该系统将基于…

swagger常用注解

最近查看接口文档的时候发现&#xff0c;POST方法中的query没法在swagger中显示&#xff0c;查了才发现这是因为Swagger或OpenAPI规范默认将HTTP POST请求的参数识别为请求体&#xff08;body&#xff09;参数&#xff0c;而不是查询字符串&#xff08;query&#xff09;参数。…

javaScript 计算以过去的时间

1.找到当前的时间的 new Data()//获取现在的时间毫秒数 2.找到过去的一个时间 new Data(time)//获取过去时间点的毫秒数 3.&#xff08;现在的时间(毫秒) - 过去的时间点&#xff08;毫秒&#xff09;&#xff09;/1000 已过去的时间&#xff08;秒&#xff09; var …

postGreSQL关系数据库介绍

什么是postGreSQL关系数据库&#xff1f; PostgreSQL 是一个强大的、开源的对象关系型数据库管理系统&#xff08;ORDBMS&#xff09;。它基于POSTQUEL查询语言的继承&#xff0c;提供了对SQL标准的广泛支持&#xff0c;并扩展了许多高级功能&#xff0c;如事务处理、多版本并…