介绍
配置管理系统旨在让管理员和操作团队轻松控制大量服务器,它们允许您从一个中心位置自动控制许多不同的系统,尽管Linux系统中有许多受欢迎的配置管理系统,如 Chef 和 Puppet,但这些系统往往比许多人想要或需要的更为复杂。
Ansible 通过从安装和配置 Ansible 组件的计算机配置客户端机器工作,它通过正常的 SSH 渠道进行通信,以便从远程计算机中获取信息,发出命令和复制文件. 因此, Ansible 系统不需要在客户端计算机上安装任何额外的软件。
Ansible采用模块化方法,使其易于扩展,以便使用主系统的功能来处理特定场景。模块可以用任何语言编写,并以标准的JSON进行通信。配置文件主要以YAML数据序列化格式编写,因为其表达性质和与流行的标记语言相似。
在本指南中,您将在 CentOS 7 服务器上安装 Ansible,并了解如何使用该软件的一些基本知识。
前提条件
要遵循本教程,您将需要:
- One CentOS 7 服务器. 按照 初始服务器设置与 CentOS 7中的步骤创建一个非根用户,并确保您可以连接到服务器没有密码。
步骤 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.2
和192.0.2.3
。让我们将此设置设置为单独称为host1
,host2
和host3
,或者作为一个组称为服务器
。
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来自动化系统配置