Ansible自动化运维

本文详细介绍了Ansible这款开源运维自动化工具,包括其特点、使用者、工具集、配置方法、命令使用、模块详解以及playbook配置文件。Ansible基于Python,以简单易用和丰富的内置模块著称,适用于Linux和非Linux系统的主机管理。文章还涵盖了Ansible的配置、命令如ansible、ansible-doc、ansible-playbook和ansible-console,以及常用模块如command、shell、copy、hostname、yum、service和user。此外,还解析了playbook的执行配置文件、触发器和角色的使用。
摘要由CSDN通过智能技术生成

一、Ansible概述

Ansible是近年越来越火的一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为的失误。Ansible通过本身集成的非常丰富的模块实现各种管理任务,其自带模块超过上千个。更为重要的是,它的操作非常简单,即使新手也比较容易上手,但它提供的功能却非常丰富,在运维领域,它几乎可以做任何事情。

1. Ansible特点

  • Ansible基于Python开发,运维工程师对其二次开发相对较容易
  • Ansibled丰富的内置模块,基本可以满足一切需求
  • 管理模式非常简单,一条命令可以影响上千台机器
  • 无客户端模式,底层通过SSH通信。
  • Ansible发布后,也陆续被AWS、Google Cloud Platform、Microsoft Azure、Cisco、HP、VMware、Twitter等大公司接纳并投入使用。

2. 使用者

Ansible 使用者可以采用多种方式和Ansible交互,图中为我们展示了四种方式:

  • CMDB:CMDB存储和管理着企业IT架构中的各项配置信息,是构建ITIL项目的核心工具,运维人员可以组合CMDB和Ansible,通过CMDB直接下发指令调用Ansible工具集完成操作者所希望达到的目标。

  • PUBLIC/PRIVATE方式:Ansible除了丰富的内置模块外,同时提供丰富的API语言接口,如PHP、Python、PERL等多种流行语言,基于PUBLIC/PRIVATE,Ansible以API调用的方式运行。

  • AD-Hoc命令集:Users直接通过AD-Hoc命令集调用Ansible工具集来完成任务。

  • PlayBooks:Users预先编写好Ansible Playbooks,通过执行Playbooks中预先编排好的任务集,按序执行任务。


 

3. Ansible工具集

Ansible工具集包含Inventory、Modules、Plugins和API。其中,Inverntory用来管理设备列表,可以通过分组实现,对组的调用直接影响组内的所有主机;Modules是各种执行模块,几乎所有的管理任务都是通过模块执行的;Plugins提供了各种附加功能;API为编程人员提供一个接口,可以基于此做Ansible的二次开发。具体表现如下。

  • Ansible Playbooks:任务脚本,编排定义Ansible 任务集的配置文件,由Ansible按序依次执行,通常是JSON格式的yml文件。
  • Inventory:Ansible管理水机清单
  • Modules:Ansible执行命令功能模块,多数为内置的核心模块,也可以自定义。
  • Plugins:模块功能的补充,如连接类型插件,循环插件、变量插件、过滤插件等,该功能不常用。
  • API:供第三方程序调用的应用程序编程接口
  • Ansible:该部分图中表示得不明显,组合Inventory、API、Modules、Plugins可以理解为是Ansible命令工具,其为核心执行工具。

4. 作用对象

Ansible的作用对象不仅仅是Linux和非Linux操作系统的主机,也可以作用于各类Public/Private,商业和非商业设备的网络设施。

二、Ansible的配置

演示环境

主机 系统 网卡 IP
Ansible Centos7 64bit vmnet1,桥接 vmnet1:192.168.100.100,Bridge:dhcp
Client Centos7 64bit vmnet1,桥接 vmnet1:192.168.100.101,Bridge:dhcp
  • 注:因安装Ansible采用网络源安装,所以需要网络支持

Ansible安装

#1.通过网络yum安装Ansible

#备份系统中的yum源
[root@ansible ~]# cd /etc/yum.repos.d/

[root@ansible yum.repos.d]# mkdir bak

[root@ansible yum.repos.d]# mv *.repo bak/

#下载阿里源
[root@ansible yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

#下载epel源
[root@ansible yum.repos.d]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

#YUM安装Ansible
[root@ansible yum.repos.d]# yum -y install ansible


创建SSH免交互登录

# 创建SSH密钥对
[root@ansible ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 			//密钥对存放位置,默认回车
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):			//输入私钥保护密码,默认回车 
Enter same passphrase again: 			//再次输入
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:2Rkt6cIRSlmwYwi1OOpoY/HrknxbcEnO32L/j6W2xbM root@ansible
The key's randomart image is:
+---[RSA 2048]----+
|  ... o+o        |
|   o +.o . o     |
|  o o.= . + .    |
| . .+..o = +     |
|.. . =  S +      |
|o o o . ..  .    |
|o=.. . + .   =   |
|o+..o . o  .= o  |
|  ++.    .o=oE   |
+----[SHA256]-----+


#复制秘钥对到客户端
[root@ansible ~]# ssh-copy-id root@192.168.100.101

#登录验证
[root@ansible ~]# ssh root@192.168.100.101

Last login: Tue Dec  1 16:32:18 2020 from 192.168.100.1
[root@client ~]# 

到此,已经完成Ansible的部署,下面就可以通过Ansible对设备进行管理了。

Ansible配置

Inventory 是Ansible管理主机信息的配置文件,相当于系统Hosts文件的功能,默认存放在/etc/ansible/hosts。在hosts文件中,通过分组来组织设备,Ansible通过Inventory来定义主机和分组,通过在Ansible命令中使用选项-i--inventory-file指定Inventory

可以将同一个主机同时归置在多个不同的组中

Inventory配置

#更改客户端分组
[root@ansible ~]# vim /etc/ansible/hosts 
......//省略部分内容

[testhost]			//分组名称
192.168.100.101		//客户端ip,也可以写主机名
192.168.100.102		//不存在的客户端,用于测试

Inventory使用

#指定Invertory配置文件
[root@ansible ~]# ansible -i /etc/ansible/hosts testhost -m ping

192.168.100.101 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
192.168.100.102 | UNREACHABLE! => {
    "changed": false, 
    "msg": "Failed to connect to the host via ssh: ssh: connect to host 192.168.100.102 port 22: No route to host", 
    "unreachable": true
}

#默认文件位置/etc/ansible/hosts,可省略
[root@ansible ~]# ansible testhost -m ping
192.168.100.101 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
192.168.100.102 | UNREACHABLE! => {
    "changed": false, 
    "msg": "Failed to connect to the host via ssh: ssh: connect to host 192.168.100.102 port 22: No route to host", 
    "unreachable": true
}

#只对192.168.100.101主机操作,通过IP限定主机的变更
[root@ansible ~]# ansible testhost -m ping --limit "192.168.100.101"
192.168.100.101 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值