所在位置:

如何在 CentOS 7 安装和配置 Ansible【翻译】

简介

配置管理系统被用来为管理员和运营团队更容易地控制大量的服务器。它们允许你从一个中心位置使用自动化来控制许多不同的系统。在 Linux 系统中有许多多流行的配置管理系统可用,例如 Chef 和 Puppet,但它们通常要比许多人想要或者需要的更复杂。Ansible 是这些选项中比较好的一个选择,因为它的学习成本更低。

Ansible通过配置安装和配置Ansible组件的计算机配置客户端计算机。它能通过正常的 SSh 隧道进行通信以便可以从远程主机上检索信息,一些命令和复制文件。因为这个, Ansible 系统不会要求在客户端电脑上安装任何额外的软件。这是 Ansible 管理机器最简单的一种方式。无论你处于生命周期的哪一个阶段,任何公开 SSH 端口的服务都可以通过 Ansible 的配置文件来配置

Ansible 使用模块化的方法,可以更容易地扩展用主系统的功能来处理特定情况。模块可以用任何语言来编写并通过标准的 JSON 来通信。配置文件主要是由 YAML 的数据序列化格式来写的,因为它的表现性和流行的标记语言更相似。Ansible 能够通过命令行工具或者通过一个叫 PlayBooks脚本的配置 来跟客户端进行交互。

在这个教程里,我们将会在 CentOS 7 服务器上安装 Ansible,并学习如果使用这个软件的一些基本知识。

准备工具

要学习这个教程,你需要:

第一步 — 安装 Ansible

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

为了获取 CentOS 7 的 Ansible,首先我要确定 CentOS 7 的 EPEL 仓库是否已经安装:

sudo yum install epel-release

一旦安装了仓库,可以使用 yum 来安装 Ansible:

sudo yum install ansible

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

第二步 — 配置 Ansible 的 主机

Ansible 能够通过 "hosts" 文件来跟踪它所知道的所有服务器。在我们开始跟其它电脑进行通信的之前,我们需要先设置这个文件。

使用 root 的权限打开这个文件,像这样:

sudo vi /etc/ansible/hosts

你将会看到这个文件有大量的示例配置被注释掉的。如果你想在以后实现更复杂的场景,把这些示例放到这个文件中能帮你学习 Ansible's 的配置。

这个 hosts 文件是相当灵活的,并且可以用各种方式来进行配置。我们使用的语法,看起来像这个:

[group_name]
alias ansible_ssh_host=your_server_ip

这人 group_name 是一个组织的标签能够让你用一个单词来引用在列表里的任何一台服务器。这个别名就是引用这个服务器的名字。

想像一下你想用 Ansible 来控制三台服务器。 Ansible 通过 SSH 跟 客户端进行通信,因些你可以输入以下命令从Ansible服务器上来访问每一台你想管理的服务器。

ssh root@your_server_ip

你不应该被提示输入密码。虽然 Ansible 有能力能够处理基于密码的 SSH 身份认证,但 SSH 密钥能帮你你简化操作。如果你还没有的话,你可以按照下面的 如何在 DigitalOcean Droplets 使用SSH 密钥 的教程来为每台主机设置 SSH keys。

我们假定我们的服务器 IP 地址是 192.0.2.1,192.0.2.2,192.0.2.3。让我们来设置,以便我们可以把它们叫做 host1,host2,和 host3,或者将一个组作为服务器。为了配置这些,你应该添加这一块到你的 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 默认会通过当前的用户去连接远程的主机。如果这个用户在远程主机是上不存在的,连接将会发生这样的错误:

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

让我们特别地告诉 Ansible 应该要用在 "servers" 组里的 sammy 用户去连接服务器。在 Ansible 配置结构中的创建一个叫 group_vars 的目录。

sudo mkdir /etc/ansible/group_vars

在这个目录里,我们能够为每一个我们配置的组创建一个YAML 格式的文件

sudo nano /etc/ansible/group_vars/servers

添加这些代码到这个文件:

---
ansible_ssh_user: sammy

YAML 文件是以 "---" 开始的,所以请确保不要忘记了这一部分。

完成的保存并关闭。现在 Ansible 将会一直为 servers 的组使用 sammy 用户,无论当前如何。

如果你想为每一台服务器指定配置的详情,不用理会组的关联,你可以把这些详情放到 /etc/ansible/group_vars/all 文件中。单独的主机通过在 /etc/ansible/host_vars 目录创建的文件进行配置。

使用简单的 Ansible 命令

既然我们设置了主机,并且有足够的配置细节来让我们成功地连接我们的主机,现在尝试一下第一条命令:

输入下面的命令来 Ping 你已经配置好的所有服务器:

ansible -m ping all

Ansible 将会返回这种:

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

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

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

这是一个基本的测试来保证 Ansible 能够连接所有的主机。

这个 -m ping 是 Ansible 指令使用 "ping" 模块的一部分命令。这些最基本的命令你可以在远程的主机上运行。这个 ping 模块操作在很多方式上跟在Linux上正常的 ping 工具差不多的,但是他会检查 Ansible 的连接。

这个 all 部分意味着 "all hosts",你可以很容易指定一个组:

ansible -m ping servers

你也可以指定单独的主机:

ansible -m ping host1

你能使用冒号把多个主机分开:

ansible -m ping host1:host2

这个 shell 模块能够让我们发送一条终端命令到远程主机,并返回结果。例如,找出我们的 host1 机器上的内存使用情况,你可以使用:

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

像你看到的,你可以使用 -a 开关来传递参数到脚本。这里输出的结果:

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最强大的特性:Playbooks。 您已经通过Ansible为您的服务器配置了一个很好的基础,这样你下一步就可以学习如何使用 Playbooks 来为你完成一些繁重的工作。你可以在 Configuration Management 101 Writing Ansible Playbooks 中学习更多和 如何在 Ubuntu中创建 Ansible Playbook 来实现自动系统配置

原文

https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-ansible-on-centos-7

【上一篇】ansible的playbook模式

【下一篇】ranger 工具的使用