如何在 CentOS 7 上安装和配置 Ansible

介绍

配置管理系统旨在让管理员和操作团队轻松控制大量服务器,它们允许您从一个中心位置自动控制许多不同的系统,尽管Linux系统中有许多受欢迎的配置管理系统,如 Chef 和 Puppet,但这些系统往往比许多人想要或需要的更为复杂。

Ansible 通过从安装和配置 Ansible 组件的计算机配置客户端机器工作,它通过正常的 SSH 渠道进行通信,以便从远程计算机中获取信息,发出命令和复制文件. 因此, Ansible 系统不需要在客户端计算机上安装任何额外的软件。

Ansible采用模块化方法,使其易于扩展,以便使用主系统的功能来处理特定场景。模块可以用任何语言编写,并以标准的JSON进行通信。配置文件主要以YAML数据序列化格式编写,因为其表达性质和与流行的标记语言相似。

在本指南中,您将在 CentOS 7 服务器上安装 Ansible,并了解如何使用该软件的一些基本知识。

前提条件

要遵循本教程,您将需要:

步骤 1 – 安装 Ansible

要开始探索Ansible作为管理我们的各种服务器的手段,我们需要在至少一台机器上安装Ansible软件。

要获取 CentOS 7 的 Ansible,请先确保 CentOS 7 EPEL 存储库已安装:

1sudo yum install epel-release

一旦存储库已安装,请使用yum安装Ansible:

1sudo yum install ansible

我们现在拥有通过Ansible管理我们的服务器所需的所有软件。

步骤 2 – 配置 Ansible 主机

Ansible通过一个主机文件来跟踪它所知道的所有服务器,我们需要先设置此文件,才能开始与我们的其他计算机进行通信。

打开 root 特权的文件,如下:

1sudo vi /etc/ansible/hosts

请将这些示例保存在文件中,以帮助您了解Ansible的配置,如果您想在未来实施更复杂的场景。

主机文件相当灵活,可以以几种不同的方式配置,但我们将使用的语法看起来像这样:

1[label Example hosts file]
2[group_name]
3alias ansible_ssh_host=your_server_ip

group_name是一个组织标签,允许您用一个单词参考其下列的任何服务器。

假設您有三個伺服器,您想要用 Ansible 控制。 Ansible 透過 SSH 與客戶端電腦進行溝通,因此您想要管理的每個伺服器都應該通過打字從 Ansible 伺服器可用:

1ssh root@your_server_ip

您不应该被要求使用密码. 虽然 Ansible 肯定有能力处理基于密码的 SSH 身份验证,但 SSH 密钥有助于使事情变得简单。 您可以遵循教程 如何使用 SSH 密钥与 DigitalOcean 滴片 以在每个主机上设置 SSH 密钥,如果您还没有。

我们将假设我们的服务器的IP地址是192.0.2.1,192.0.2.2192.0.2.3。让我们将此设置设置为单独称为host1,host2host3,或者作为一个组称为服务器

1[label /etc/ansible/hosts]
2[servers]
3host1 ansible_ssh_host=192.0.2.1
4host2 ansible_ssh_host=192.0.2.2
5host3 ansible_ssh_host=192.0.2.3

主机可以分为多个组,组可以为所有成员配置参数。

Ansible 默认情况下会尝试使用当前用户名连接到远程主机. 如果该用户不在远程系统中,连接尝试会导致此错误:

1[secondary_label Ansible connection error]
2host1 | UNREACHABLE! => {
3    "changed": false,
4    "msg": "Failed to connect to the host via ssh.",
5    "unreachable": true
6}

让我们具体告诉 Ansible,它应该与 sammy 用户连接到服务器组中的服务器,在 Ansible 配置结构中创建名为group_vars的目录。

1sudo mkdir /etc/ansible/group_vars

在此文件夹中,我们可以为我们想要配置的每个组创建YAML格式文件:

1sudo nano /etc/ansible/group_vars/servers

将此代码添加到文件中:

1[label /etc/ansible/group_vars/servers]
2---
3ansible_ssh_user: sammy

YAML 文件以---开始,所以请确保您不忘记该部分。

您完成后保存并关闭此文件. 现在 Ansible 将始终使用服务器组的 sammy 用户,无论当前的用户是什么。

如果您想指定每个服务器的配置细节,无论群组关联,您可以将这些细节放到一个文件中,在 /etc/ansible/group_vars/all. 单个主机可以通过在 /etc/ansible/host_vars 的目录下创建文件来配置。

步骤 3 – 使用简单的语音命令

现在我们有我们的主机设置和足够的配置细节,使我们能够成功连接到我们的主机,我们可以尝试我们的第一个命令。

Ping您通过键入配置的所有服务器:

1ansible -m ping all

Ansible 会像这样返回输出:

 1[secondary_label Output]
 2host1 | SUCCESS => {
 3    "changed": false,
 4    "ping": "pong"
 5}
 6
 7host3 | SUCCESS => {
 8    "changed": false,
 9    "ping": "pong"
10}
11
12host2 | SUCCESS => {
13    "changed": false,
14    "ping": "pong"
15}

这是一个基本的测试,以确保Ansible与所有主机有连接。

命令的-m ping部分是向 Ansible 指示使用ping模块. 这些基本上是您可以在远程主机上运行的命令。

所有部分意味着所有主机。你可以很容易地指定一个组:

1ansible -m ping servers

您还可以指定个别主机:

1ansible -m ping host1

您可以通过将它们分离为殖民地来指定多个主机:

1ansible -m ping host1:host2

模块允许我们将终端命令发送到远程主机并获取结果,例如,要找出我们主机1上的内存使用量,我们可以使用:

1ansible -m shell -a 'free -m' host1

正如您所看到的,您可以通过使用-a交换机将参数传输到脚本中。

1[secondary_label Output]
2host1 | SUCCESS | rc=0 >>
3             total used free shared buffers cached
4Mem:          3954 227 3726 0 14 93
5-/+ buffers/cache:        119 3834
6Swap:            0 0 0

结论

到目前为止,您应该将 Ansible 服务器配置为与您想要控制的服务器进行通信,您可以验证 Ansible 可以与您知道如何使用ansible命令远程执行简单任务的每个主机进行通信。

虽然这是有用的,但我们没有在本文中涵盖Ansible的最强大的功能:Playbooks. 你已经配置了一个很好的基础来与你的服务器通过Ansible工作,所以你的下一步是学习如何使用Playbooks来为你做重型提升。你可以了解更多在 配置管理101:写Ansible Playbooks如何在Ubuntu上创建Ansible Playbooks来自动化系统配置

Published At
Categories with 技术
comments powered by Disqus