介绍
Ansible 是一种 IT 自动化工具,旨在促进远程服务器的管理。 Ansible 需要 Python(2.7 或 3.5 及更高版本)才能运行。 Ansible 从集中控制节点运行,可以管理通过 SSH 访问的任何服务器。 由 Ansible 管理的远程服务器称为受管节点。
默认情况下,Ansible 使用 OpenSSH 与托管节点通信。 SSH 不是 Ansible 支持的唯一通信机制。 您可以在本地、docker 容器甚至 Windows 服务器中的控制服务器上运行任务。 控制节点将需要 Linux 才能运行。
什么是 IT 自动化?
如今,系统管理员和 DevOps 工程师必须在云中和跨多个站点管理复杂的 IT 基础架构。 现代 Web 应用程序通常由 API 服务、前端服务和数据库服务组成。 手动管理这样复杂的系统需要大量时间并且容易出错。
IT 自动化使用软件来配置 IT 基础设施、部署应用程序以及管理服务配置更改。 您用来担任此角色的软件需要提供一种可靠且可重复的方式来管理您的 IT 任务。 Ansible 的 IT 自动化方法以“剧本”为中心。 您可以将 Ansible 剧本视为描述设置 IT 基础架构、部署应用程序以及配置这些服务所需的步骤的秘诀。
Ansible 的优势
Ansible 非常容易学习,让您比其他工具更快地启动和运行自动化。 Ansible 是无代理的,因此您不必在托管节点上安装和维护 Ansible 客户端。 这极大地简化了 Ansible 更新的管理。
Ansible 的缺点
当然,Ansible 并不是一个完美的工具。 如果 SSH 连接在 playbook 运行的中途中断,则该节点可能最终处于部分配置状态。 Ansible 也以速度慢而著称,可能需要额外的性能调整才能满足您的要求。
飞行前检查
在开始之前,我们需要对运行 CentOS 7 的一对服务器的 root 访问权限。我将使用两个 Liquid WebSelf-ManagedPrivate Cloud 贯穿本文的服务器。 我们的第一台服务器,我命名为 Control,将充当我们的控制服务器。 第二台服务器,指定为节点,将是我们的第一个 Ansible 托管节点。 假设您对两台 CentOS 7 服务器都有 SSH 访问权限,我们就可以开始了。
安装 Ansible
第 1 步:更新您的控制节点
每当您安装新软件时,最好确保您现有的操作系统软件是最新的。 让我们先从那个任务开始。
yum update
第 2 步:安装 EPEL 存储库
安装 Ansible 非常简单。 首先,我们需要安装 CentOS 7 EPEL 存储库。
yum install epel-release
第 3 步:安装 Ansible
接下来,我们从 EPEL 存储库安装 Ansible 包。
yum install ansible
步骤 4a:为 Ansible 创建用户
正如安全最佳实践所表明的那样,最好避免以 root 身份登录 Linux 服务器。 我们将在我们的控制节点和托管节点上创建一个非 root 用户来运行我们的 Ansible playbook。 该用户定义 admin Ansible 将用于登录我们的托管节点。 这里我们使用了“admin” 代表用户,但可以替换任何用户名。 为了跟随我们的示例,您将希望在控制节点和我们的托管节点上使用相同的用户名。 登录控制节点添加用户并设置密码。
useradd admin
passwd admin
登录到被管节点,添加 admin 用户,并设置密码。
useradd admin
passwd admin
步骤 4b:为无密码超级用户访问配置控制节点用户
在托管节点上,我们需要确保我们的 Ansible 用户可以使用 sudo 没有密码的命令。 运行以下命令打开 sudoers 文件进行编辑。
visudo
输入“i”进入输入模式并将以下内容添加到文件末尾。 类型 ‘[ESC]:wq’ 保存您的更改。
admin ALL=(ALL) NOPASSWD: ALL
第 5 步:为 SSH 访问配置我们的管理员用户
我们需要确保我们的 admin 用户无需密码即可通过 SSH 访问受管节点。 我们将设置一个 SSH 密钥对来允许这样做。 登录到控制节点作为 admin 用户并运行以下命令以生成 SSH 密钥对。 注意:只需在提示处按回车键即可接受默认值。
ssh-keygen
现在我们可以使用以下命令将公钥复制到我们的托管节点。
ssh-copy-id node.kb.BYNSS.com
第 6 步:创建 Ansible 清单
Ansible 需要一个清单列表,以便它可以识别您的托管节点。 要将我们的托管节点添加到清单中,我们需要以 admin 用户。 接下来,我们将添加一个新的库存文件。 确保您以 admin 用户。
vim /home/admin/inventory
键入“i”以进入插入模式并将受管节点主机名添加到清单文件中。
node.kb.BYNSS.com
接下来,输入'[ESC]+:wq’ 保存文件。
第 7 步:创建 Ansible 剧本
为了测试我们的配置,我们将创建一个简单的剧本来在我们的托管节点上安装 Nginx。 首先,我们将创建并打开一个新文件。 就 Ansible 而言,文件名并不是特别重要。 当然,您应该使用描述性文件名。 确保您以 admin 用户。
vim /home/admin/install-nginx.yml
Ansible 的剧本是用一种叫做 YAML 的语言编写的。 YAML 旨在供人类阅读。 查看下面的文字,您应该能够说出预期的结果是什么。 我稍后会分解语法,但暂时,输入“i”进入插入模式并将以下文本添加到您的剧本中。 然后输入'[ESC]+:wq’ 保存并退出。

Ansible 的剧本执行“剧本”。 播放是将在节点上执行的任务列表。 在里面 example 上面,我们使用“hosts”关键字来指定一个仅包含单个节点的列表。 但是,您可以使用逗号分隔值指定主机列表。 要使用 Ansible 安装软件,我们需要 root 访问权限才能使用 yum。 我们在剧中使用关键字“成为”来指示 Ansible 需要 root 用户才能执行任务。
‘tasks’ 关键字启动要完成的任务列表。 使用“名称”关键字为每个任务指定一个唯一名称。 然后我们使用 Ansible 提供的 yum 模块安装第一个 epel 仓库,然后我们使用第二个入口安装 nginx。
第 8 步:运行剧本
运行剧本相当容易。 我们使用“ansible-playbook”命令,然后使用“-i”选项指定库存文件,后跟 playbook 的路径。 确保您以 admin 用户。
ansible-playbook -i /home/admin/inventory /home/admin/install-nginx.yml
结论
到目前为止,我们只接触了 Ansible 的皮毛。 您可以使用组名将清单中的服务器分组在一起。 此分组允许您仅在您的网络服务器或仅在您的数据库服务器上执行 playbook。 您还可以运行临时命令。 Ad-hoc 命令是您只需要运行一次的任务。 例如,如果您需要重新启动所有 Web 服务器。 总而言之,Ansible 是一款出色的工具,您可以使用它来节省时间、金钱和精力,以便在单个或多个远程服务器上自动执行任务。
立即订阅我们的知识库,以获取未来讨论这些主题及更多内容的文章和更新! 立即在 Liquid Web 上开始使用 Ansible Cloud 服务器。 给我们打电话 (800.580.4985),在 [email protected] 开票,或者,开始 聊天 和我们一起,也是最乐于助人的托管人之一,我们很乐意帮助您入门。