介绍
配置管理系统旨在使管理员和操作团队能够轻松控制大量服务器,它们允许您从一个中心位置自动控制多种不同的系统。
虽然 Linux 系统中有很多流行的配置管理系统,如 Chef 和 Puppet,但这些系统往往比许多人想要或需要的更为复杂。
在本指南中,我们将讨论如何在Ubuntu 16.04服务器上安装Ansible,并讨论如何使用该软件的一些基本知识。
Ansible是如何工作的?
Ansible 通过从安装和配置了 Ansible 组件的计算机配置客户端机器。
它通过正常的 SSH 渠道进行通信,以便从远程机器中获取信息,发出命令和复制文件. 因此,Ansible 系统不需要在客户端计算机上安装任何额外的软件。
任何具有 SSH 端口曝光的服务器都可以被带入 Ansible 的配置伞中,无论其生命周期的哪个阶段。
您可以通过 SSH 管理的任何计算机,您也可以通过 Ansible 管理。
Ansible采用模块化方法,使其易于扩展,以使用主系统的功能来处理特定的场景。
配置文件主要以YAML数据序列化格式写作,因为其表达性质和与流行的标记语言的相似性,Ansible可以通过命令行工具或其称为Playbooks的配置脚本与客户端进行交互。
前提条件
要遵循本教程,您将需要:
- 一个 Ubuntu 16.04 服务器具有 sudo 非根用户和 SSH 密钥,您可以通过遵循 此初始服务器设置教程来设置,包括步骤 4
步骤 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.2
和192.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来自动配置您的远程计算机时。