如何安装和配置Ansible在Ubuntu 16.04

配置管理系统的设计,使控制大量的服务器便于管理员和运营团队。它们允许你在从一个中央位置自动的方式控制多个不同的系统。 Ansible是一个简单的配置管理系统。 在本指南中,我们将讨论如何在Ubuntu 16.04机器上安装Ansible走了怎样使用该软件的一些基础知识。

介绍

配置管理系统旨在使管理员和操作团队能够轻松地控制大量服务器。 它们允许您从一个中心位置以自动方式控制许多不同的系统。

虽然有可用于Linux系统,如Chef和Puppet许多流行的配置管理系统,这些往往是更复杂的比很多人都希望或需要。Ansible是一个伟大的选择这些选项,因为它有一个更小的开销开始。

在本指南中,我们将讨论如何在Ubuntu 16.04服务器上安装Ansible,并讨论如何使用该软件的一些基础知识。

Ansible如何工作?

Ansible通过从安装了Ansible组件的计算机配置客户端计算机来工作。

它通过普通SSH通道进行通信,以便从远程计算机检索信息,发出命令和复制文件。 因此,Ansible系统不需要在客户端计算机上安装任何其他软件。

这是Ansible简化服务器管理的一种方法。 任何暴露了SSH端口的服务器都可以被带到Ansible的配置伞下,无论它的生命周期处于什么阶段。

您可以通过SSH管理的任何计算机,也可以通过Ansible管理。

Ansible采用模块化方法,使其易于扩展以使用主系统的功能来处理特定场景。 模块可以用任何语言编写,并以标准JSON进行通信。

配置文件主要是以YAML数据序列化格式编写的,因为它具有表达性和与流行标记语言的相似性。 Ansible可以通过命令行工具或通过其名为Playbooks的配置脚本与客户端进行交互。

先决条件

要遵循本教程,您需要:

  • 一个Ubuntu的16.04服务器与Sudo非root用户和SSH密钥,您可以通过以下设置初始服务器设置教程 ,包括第4步

第1步 - 安装Ansible

要开始探索Ansible作为管理我们的各种服务器的方法,我们需要在至少一台机器上安装Ansible软件。 我们将使用一个Ubuntu 16.04服务器。

为Ubuntu获取Ansible的最佳方法是将项目的PPA(个人包存档)添加到系统中。 我们可以通过键入以下命令添加Ansible PPA:

sudo apt-add-repository ppa:ansible/ansible

ENTER接受PPA增加。

接下来,我们需要刷新系统的包索引,以便它知道PPA中可用的包。 之后,我们可以安装软件:

sudo apt-get update
sudo apt-get install ansible

如上所述,Ansible主要通过SSH与客户端计算机通信。 虽然它当然有能力处理基于密码的SSH身份验证,SSH密钥帮助保持简单。 您可以按照先决条件中链接的教程来设置SSH密钥(如果您还没有)。

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

第2步 - 配置Ansible主机

Ansible通过“hosts”文件跟踪它所知道的所有服务器。 我们需要先设置此文件,然后才能开始与我们的其他计算机通信。

使用root权限打开文件,如下所示:

sudo nano /etc/ansible/hosts

你会看到一个文件有很多示例配置,没有一个将真正为我们工作,因为这些主机组成。 因此,首先,我们通过在每行之前添加一个“#”来注释掉这个文件中的所有行。

我们将在文件中保留这些示例,以帮助我们进行配置,如果我们希望在将来实现更复杂的场景。

一旦所有的行都注释掉,我们可以开始添加我们的实际主机。

hosts文件相当灵活,可以通过几种不同的方式进行配置。 我们将使用的语法看起来像这样:

主机文件示例
[group_name]
alias ansible_ssh_host=your_server_ip

group_name是一个组织标记,可让您使用一个字来引用下面列出的任何服务器。 别名只是一个引用该服务器的名称。

所以在我们的场景中,我们想象我们有三个服务器,我们将要控制与Ansible。 可以通过键入以下内容从Ansible服务器访问这些服务器:

ssh root@your_server_ip

如果您已正确设置此密码,则不应提示您输入密码。 我们假设我们的服务器的IP地址是192.0.2.1192.0.2.2192.0.2.3 我们将设置这使我们可以把这些单独的host1host2host3 ,或作为一个群体的servers

这是我们应该添加到我们的hosts文件来完成这个块:

[servers]
host1 ansible_ssh_host=192.0.2.1
host2 ansible_ssh_host=192.0.2.2
host3 ansible_ssh_host=192.0.2.3

主机可以在多个组中,组可以为其所有成员配置参数。 让我们现在尝试一下。

使用我们当前的设置,如果我们尝试使用Ansible连接到任何这些主机,命令将失败(假设您不是以root用户身份操作)。 这是因为您的SSH密钥是为远程系统上的root用户嵌入的,并且Ansible将默认尝试作为当前用户连接。 连接尝试将获得此错误:

Ansible连接错误
host1 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh.",
    "unreachable": true
}

在Ansible服务器,我们使用一个名为演示用户。 Ansible会尝试连接到与每个主机ssh demo@server 如果演示用户不在远程系统上,这将不工作。

我们可以创建一个文件,告诉“服务器”组中的所有服务器使用root用户进行连接。

要做到这一点,我们将创建在Ansible配置结构称为目录group_vars 在此文件夹中,我们可以为要配置的每个组创建YAML格式的文件:

sudo mkdir /etc/ansible/group_vars
sudo nano /etc/ansible/group_vars/servers

我们可以把我们的配置在这里。 YAML文件以“---”开头,因此请确保不要忘记该部分。

/ etc / ansible / group_vars / servers
---
ansible_ssh_user: root

保存并在完成后关闭此文件。

如果你想为每个服务器指定配置细节,而不管组关联的,你可以在把这些信息在一个文件中/etc/ansible/group_vars/all 单个主机可以通过在目录下创建文件进行配置/etc/ansible/host_vars

第3步 - 使用简单的Ansible命令

现在我们已经设置了主机和足够的配置详细信息,以允许我们成功连接到我们的主机,我们可以尝试我们的第一个命令。

通过键入以下命令来ping您配置的所有服务器:

ansible -m ping all
平滑输出
host1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

host3 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

host2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

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

“all”表示所有主机。 我们可以很容易地指定一个组:

ansible -m ping servers

我们还可以指定单个主机:

ansible -m ping host1

我们可以通过用冒号分隔它们来指定多个主机:

ansible -m ping host1:host2

-m ping命令的部分是Ansible指令使用“平”模块。 这些基本上是可以在远程主机上运行的命令。 ping模块以很多方式运行,就像Linux中的正常ping实用程序一样,而是检查Ansible连接。

ping模块不会真正采取任何参数,但我们可以尝试另一个命令,看看它是如何工作。 我们通过输入参数传递到脚本-a

“shell”模块允许我们向远程主机发送终端命令并检索结果。 例如,要找出我们的host1机器上的内存使用情况,我们可以使用:

ansible -m shell -a 'free -m' host1
Shell输出
host1 | SUCCESS | rc=0 >>
             total       used       free     shared    buffers     cached
Mem:          3954        227       3726          0         14         93
-/+ buffers/cache:        119       3834
Swap:            0          0          0

结论

现在,您应该将您的Ansible服务器配置为与您要控制的服务器通信。 我们已验证Ansible可以与每个主机沟通,我们已经使用了ansible命令来远程执行简单的任务。

虽然这是有用的,我们没有涵盖Ansible的最强大的功能在这篇文章:Playbooks。 我们已经通过Ansible为我们的服务器建立了一个很好的基础,但是当我们介绍如何使用Playbooks来自动化远程计算机的配置时,我们将在以后的文章中进行大量的工作。