专栏首页云计算教程系列如何在CentOS上安装和配置Ansible
原创

如何在CentOS上安装和配置Ansible

介绍

配置管理系统目的是让使管理员和运营团队轻松控制大量服务器。它们允许您从一个服务器以自动方式控制许多不同的系统。虽然有许多流行的配置管理系统可用于Linux系统,例如ChefPuppet,但这些系统比较复杂。Ansible是这些选项的绝佳替代品,因为服务开销小很多,软件又非常易用。

Ansible的工作原理是从安装Ansible组件的计算机配置客户端计算机。它通过普通的SSH通道进行通信,以便从远程计算机检索信息,发出命令并且复制文件。因此,Ansible系统不需要在客户端计算机上安装任何其他软件。这是Ansible简化服务器管理的一种方式。任何暴露了SSH端口的服务器都可以置于Ansible的配置。

Ansible采用模块化方法,可以轻松扩展以使用主系统的功能来处理特定的场景。模块可以用任何语言编写,并以标准JSON进行通信。配置文件主要以YAML数据序列化格式编写,因为它具有表现性和与流行标记语言的相似性。Ansible可以通过命令行工具或通过名为Playbooks的配置脚本与客户端进行交互。

在本教程中,您将在CentOS服务器上安装Ansible,并了解如何使用该软件的一些基础知识。

准备

要学习本教程,您需要:

  • 一台CentOS 7服务器,没有服务器的同学可以在这个页面购买。我建议您使用腾讯云免费开发者实验室进行试验。

第一步、安装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的配置。

hosts文件非常灵活,可以通过几种不同的方式进行配置。使用的语法看起来像这样:

[group_name]
alias ansible_ssh_host=your_server_ip

group_name是一个组织标记,允许您使用一个单词引用其下列出的任何服务器。别名只是引用该服务器的名称。如果您想使用Ansible控制三台服务器。Ansible通过SSH与客户端计算机进行通信,因此您可以通过输入以下内容从Ansible服务器访问要管理的每个服务器SSH能否正常访问:

ssh root@your_server_ip

我们建议您使用密钥进行配置,配置相关密钥在您购买配置腾讯云CVM服务器的时候应该会有相应设置,如果您设置的是密码,希望您更改为密钥配置。

我们假设我们的服务器的IP地址是192.0.2.1192.0.2.2192.0.2.3。让我们来设置它以便我们可以将它们分别称为host1host2host3,组为一组的servers。您可以将此块添加到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将尝试使用您当前的用户名连接到远程主机。如果远程系统上不存在该用户,则连接尝试将导致此错误:

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

让我们告诉Ansible它应该使用sammy用户连接到[servers]组中的服务器。在Ansible配置结构中创建一个名为group_vars的目录

sudo mkdir /etc/ansible/group_vars

在此文件夹中,我们可以为要配置的每个组创建YAML格式的文件:

sudo nano /etc/ansible/group_vars/servers

将此代码添加到文件中:

---
ansible_ssh_user: sammy

YAML文件以“---”开头,请确保您不要忘记该部分。

完成后保存并关闭此文件,现在Ansible将始终将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表示“所有主机”。您可以轻松指定一个组:

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命令远程执行简单任务的每个主机进行通信。

我们在本文中没有介绍Ansible最强大的功能:Playbooks。Playbooks。您已经通过Ansible配置了与服务器配合使用的良好基础,因此下一步是学习如何使用Playbooks为您完成复杂的工作。更多Linux教程请前往腾讯云+社区学习。


参考文献:《How to Install and Configure Ansible on CentOS 7》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python3 与 NetCore 基础语法对比(就当Python和C#基础的普及吧)

    VSCode设置python3的开发环境(linux下默认是python2)https://www.cnblogs.com/dotnetcrazy/p/9095...

    逸鹏
  • 关于线程死锁问题

    死锁是多线程编程里面非常常见的一个问题,作为一个中高级开发者是必须掌握的内容,今天我们来学习一下死锁相关的知识。

    我是攻城师
  • [linux][nginx]nginx的graceful shutdown和worker shutdown timeout

    前言: 某大佬问作者,nginx做proxy的时候,重新加载配置的时候,会不会影响已有的连接? 作者基于too young too simple的认知:clie...

    皮振伟
  • Python截屏扩展库pyscreenshot安装与使用

    PIL是非常成熟的Python图像处理扩展库,但只支持Python 2.x,另一个同样功能的扩展库pillow完美支持Python 3.x。然而,这两个库的部分...

    Python小屋屋主
  • 仿人机器人的视觉伺服控制系统

     视觉是人类感知外界信息的重要手段,视觉伺服系统是机器人获取环境信息的关键组成部分。本文主要讨论仿人机器人BHR-1的视觉伺服系统。首先介绍机器人头部的视觉总体...

    机器人网
  • Ubuntu 16.04 部署MySQL服务

    MySQL是一款开源的关系型数据库管理系统,大量公司都在使用它,或是在它的基础上做二次开发。有时,我们会需要在Linux系统上部署MySQL服务用于测试。

    drunkdream
  • 让事件飞——Linux eventfd 原理

    目前越来越多的应用程序采用事件驱动的方式实现功能,如何高效地利用系统资源实现通知的管理和送达就愈发变得重要起来。在Linux系统中,eventfd是一个用来通知...

    怕冷的阳阳
  • Linux包系列的知识(附:Ubuntu16.04升级到18.04的案例)

    Linux基础:https://www.cnblogs.com/dunitian/p/4822808.html#linux

    逸鹏
  • 灭霸级IPFS矿机来袭:千亿金矿我来了!

    最近搜IPFS矿机,我们关注到百度上有一篇叫做《一文带你细数IPFS矿机的种种坑》的热文,引起了国内IPFS矿工朋友们的强烈的反响。这篇文章将目前鱼龙混杂的IP...

    区块链领域
  • Git简洁教程-本地项目推送到GitHub

    Git是当今最流行的版本控制软件,它包含了许多高级工具,这里小编就讲一下Git的安装和使用,怎样推送到自己的远程仓库。

    用户1093975

扫码关注云+社区

领取腾讯云代金券