如何在 Ubuntu 16.04 上安装和配置 Ansible

介绍

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

虽然 Linux 系统中有很多流行的配置管理系统,如 Chef 和 Puppet,但这些系统往往比许多人想要或需要的更为复杂。

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

Ansible是如何工作的?

Ansible 通过从安装和配置了 Ansible 组件的计算机配置客户端机器。

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

任何具有 SSH 端口曝光的服务器都可以被带入 Ansible 的配置伞中,无论其生命周期的哪个阶段。

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

Ansible采用模块化方法,使其易于扩展,以使用主系统的功能来处理特定的场景。

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

前提条件

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

步骤 1 – 安装 Ansible

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

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

1sudo apt-add-repository ppa:ansible/ansible

ENTER来接受PPA添加。

接下来,我们需要更新我们的系统的包索引,以便它知道PPA中可用的包。

1sudo apt-get update
2sudo apt-get install ansible

正如我们上面提到的,Ansible主要通过SSH与客户端计算机进行通信.虽然它确实有能力处理基于密码的SSH身份验证,但SSH密钥有助于使事情变得简单。

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

步骤 2 – 配置 Ansible 主机

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

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

1sudo nano /etc/ansible/hosts

您将看到一个具有许多示例配置的文件,其中没有一个实际上为我们工作,因为这些主机是组成的。

我们将将这些示例保存在文件中,以帮助我们在未来实现更复杂的场景时进行配置。

一旦所有的行被评论,我们可以开始添加我们的实际主机。

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

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

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

所以在我们的场景中,我们想象我们有三个服务器,我们将使用Ansible来控制这些服务器,这些服务器可以通过键入Ansible服务器访问:

1ssh root@your_server_ip

我们将假设我们的服务器的IP地址是192.0.2.1,192.0.2.2192.0.2.3

这是我们应该添加到我们的主机文件来实现这一点的块:

1[servers]
2host1 ansible_ssh_host=192.0.2.1
3host2 ansible_ssh_host=192.0.2.2
4host3 ansible_ssh_host=192.0.2.3

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

使用当前设置,如果我们尝试使用 Ansible 连接到这些主机中的任何一个,该命令将失败(假设您不是 root 用户)。

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

在 Ansible 服务器上,我们正在使用一个名为 demo的用户。 Ansible 将尝试通过 ssh demo@server 连接到每个主机。

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

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

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

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

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

保存并关闭此文件,当你完成。

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

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

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

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

1ansible -m ping all
 1[label Ping 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与所有主机有连接。

所有是指所有主机,我们可以很容易地指定一个组:

1ansible -m ping servers

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

1ansible -m ping host1

我们可以通过将它们与殖民地分开来指定多个主机:

1ansible -m ping host1:host2

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

ping模块实际上没有任何参数,但我们可以尝试另一个命令,看看它是如何工作的。

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

1ansible -m shell -a 'free -m' host1
1[label Shell 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来自动配置您的远程计算机时。

Published At
Categories with 技术
comments powered by Disqus