介绍
配置管理系统旨在使管理员和操作团队能够轻松地控制大量服务器。它们允许您从一个中心位置以自动方式控制许多不同的系统。虽然有许多流行的配置管理系统可用于Linux系统,如Chef和Puppet,但这些系统通常比许多人想要或需要的更复杂。 Ansible是一个伟大的选择这些选项,因为它有一个更小的开销开始。 Ansible通过从安装了Ansible组件的计算机配置客户端计算机来工作。它通过普通SSH通道进行通信,以便从远程计算机检索信息,发出命令和复制文件。因此,Ansible系统不需要在客户端计算机上安装任何其他软件。这是Ansible简化服务器管理的一种方法。任何暴露了SSH端口的服务器都可以被带到Ansible的配置伞下,无论它的生命周期处于什么阶段。 Ansible采用模块化方法,使其易于扩展以使用主系统的功能来处理特定场景。模块可以用任何语言编写,并以标准JSON进行通信。配置文件主要是以YAML数据序列化格式编写的,因为它具有表达性和与流行标记语言的相似性。 Ansible可以通过命令行工具或通过其名为Playbooks的配置脚本与客户端进行交互。 在本指南中,您将在CentOS 7服务器上安装Ansible,并了解如何使用软件的一些基础知识。先决条件
要遵循本教程,您需要:- 一个CentOS 7服务器。按照步骤与CentOS 7初始服务器设置来创建一个非root用户,并确保您可以连接到该服务器没有密码。
第1步 - 安装Ansible
要开始探索Ansible作为管理我们的各种服务器的方法,我们需要在至少一台机器上安装Ansible软件。 要为CentOS 7获取Ansible,首先请确保已安装CentOS 7 EPEL存储库:sudo yum install epel-release
一旦安装了资源库,与安装Ansible
yum
:
sudo yum install ansible
我们现在拥有通过Ansible管理我们的服务器所需的所有软件。
第2步 - 配置Ansible主机
Ansible通过“hosts”文件跟踪它所知道的所有服务器。我们需要先设置此文件,然后才能开始与我们的其他计算机通信。 使用root权限打开文件,如下所示:sudo vi /etc/ansible/hosts
您将看到一个包含大量示例配置的文件已注释掉。如果您希望在将来实现更复杂的场景,请在文件中保留这些示例以帮助您了解Ansible的配置。 hosts文件相当灵活,可以通过几种不同的方式进行配置。我们将使用的语法看起来像这样:
主机文件示例
[group_name]
alias ansible_ssh_host=your_server_ip
该
group_name
是一个组织的标签,让您参考用一个词在它列出的任何服务器。别名只是一个引用该服务器的名称。 想象一下,你有三个服务器要用Ansible控制。 Ansible通过SSH与客户端计算机通信,因此要通过Ansible服务器访问要管理的每个服务器,请键入以下内容:
ssh root@your_server_ip
不应提示您输入密码。虽然Ansible确实有能力处理基于密码的SSH身份验证,SSH密钥帮助保持简单。您可以按照教程
如何使用DigitalOceanDropletSSH密钥设置SSH密钥在每个主机上,如果你还没有。 我们假设我们的服务器的IP地址是
192.0.2.1
,
192.0.2.2
和
192.0.2.3
。 让我们来设置这使我们可以把这些单独的
host1
,
host2
和
host3
,或作为一个群体的
servers
。要配置此,您将添加此块到您的hosts文件:
/ etc / ansible / 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 errorhost1 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh.",
"unreachable": true
}
让我们明确告诉Ansible,它应该与
sammy用户连接到服务器的“服务器”组中。 创建于Ansible配置结构称为目录
group_vars
。
sudo mkdir /etc/ansible/group_vars
在此文件夹中,我们可以为要配置的每个组创建YAML格式的文件:
sudo nano /etc/ansible/group_vars/servers
将此代码添加到文件:
/ etc / ansible / group_vars / servers
---
ansible_ssh_user: sammy
YAML文件以“---”开头,因此请确保不要忘记该部分。 保存并在完成后关闭此文件。现在Ansible将始终使用
sammy用户的
servers
组,而不考虑当前的用户。 如果你想为每个服务器指定配置细节,而不管组关联的,你可以在把这些信息在一个文件中
/etc/ansible/group_vars/all
。 单个主机可以通过在目录下创建文件进行配置
/etc/ansible/host_vars
。
第3步 - 使用简单的Ansible命令
现在我们已经设置了主机和足够的配置详细信息,以允许我们成功连接到我们的主机,我们可以尝试我们的第一个命令。 通过键入以下命令来ping您配置的所有服务器:ansible -m ping all
Ansible将返回如下输出:
Outputhost1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
host3 | SUCCESS => {
"changed": false,
"ping": "pong"
}
host2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
这是一个基本测试,以确保Ansible已连接到其所有主机。 该
-m ping
命令的部分是Ansible指令使用“平”模块。这些基本上是可以在远程主机上运行的命令。 ping模块以很多方式运行,就像Linux中的正常ping实用程序一样,而是检查Ansible连接。 在
all
部分的意思是“所有主机”。你可以很容易地指定一个组:
ansible -m ping servers
您还可以指定单个主机:
ansible -m ping host1
您可以通过使用冒号分隔多个主机来指定多个主机:
ansible -m ping host1:host2
该
shell
模块让我们发送终端命令到远程主机并检索结果。例如,要找出我们的host1机器上的内存使用情况,我们可以使用:
ansible -m shell -a 'free -m' host1
正如你所看到的,您可以通过使用参数传递到脚本
-a
开关。下面是输出可能是什么样子:
Outputhost1 | 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为您提供繁重的服务。您可以了解更多的
配置管理101:写作Ansible Playbook和
如何创建Ansible Playbook在Ubuntu自动化系统配置