Ansible--快速入门

介绍

Ansible是一款简单的运维自动化工具,只需要使用ssh协议连接就可以来进行系统管理,自动化执行命令,部署等任务。

Ansible的特点

1、ansible不需要单独安装客户端,也不需要启动任何服务
2、ansible是python中的一套完整的自动化执行任务模块
3、ansible playbook 采用yaml配置,对于自动化任务执行过一目了然

Ansible组成结构

  • Ansible
    Ansible的命令工具,核心执行工具;一次性或临时执行的操作都是通过该命令执行。

  • Ansible Playbook
    任务剧本(又称任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,yaml格式。

  • Inventory
    Ansible管理主机的清单,默认是/etc/ansible/hosts文件。

  • Modules
    Ansible执行命令的功能模块,Ansible2.3版本为止,共有1039个模块。还可以自定义模块。

  • Plugins
    插件,模块功能的补充,常有连接类型插件,循环插件,变量插件,过滤插件,插件功能用的较少。

  • API
    提供给第三方程序调用的应用程序编程接口。

环境准备

IP 系统 主机名 描述
192.168.1.30 CentOS7 ansible ansible管理节点
192.168.1.31 CentOS7 linux.node01.com 被管理节点1
192.168.1.32 CentOS7 linux.node02.com 被管理节点2
192.168.1.33 CentOS7 linux.node03.com 被管理节点3
192.168.1.36 CentOS6 linux.node06.com 被管理节点6

Ansible安装

1)配置epel

[root@ansible ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo[root@ansible ~]# yum clean all
[root@ansible ~]# yum makecache

2)安装ansible

[root@ansible ~]# yum -y install ansible

# 查看ansible版本
[root@ansible ~]# ansible --version
ansible 2.8.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Aug  4 2017, 00:39:18) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)]

Ansible Inventory文件

Inventory中文文档

Inventory文件通常用于定义要管理的主机的认证信息,例如ssh登录用户名、密码以及key相关信息。可以同时操作一个组的多台主机,组与主机组之间的关系都是通过inventory文件配置。配置文件路径为:/etc/ansible/hosts

基于密码连接

[root@ansible ~]# vim /etc/ansible/hosts
# 方法一 主机+端口+密码
[webserver]192.168.1.31 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="123456"192.168.1.32 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="123456"192.168.1.33 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="123456"192.168.1.36 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="123456"# 方法二 主机+端口+密码
[webserver]192.168.1.3[1:3] ansible_ssh_user=root ansible_ssh_pass="123456"# 方法二 主机+端口+密码
[webserver]192.168.1.3[1:3]
[webserver:vars]
ansible_ssh_pass="123456"

基于秘钥连接

基于秘钥连接需要先创建公钥和私钥,并发送给被管理机器

1)生成公私钥

[root@ansible ~]# ssh-keygen[root@ansible ~]# for i in {1,2,3,6}; do ssh-copy-id -i 192.168.1.3$i ; done

2)配置连接

[root@ansible ~]# vim /etc/ansible/hosts
# 方法一 主机+端口+密钥
[webserver]192.168.1.31:22192.168.1.32192.168.1.33192.168.1.36# 方法一 别名主机+端口+密钥
[webserver]
node1 ansible_ssh_host=192.168.1.31 ansible_ssh_port=22node2 ansible_ssh_host=192.168.1.32 ansible_ssh_port=22node3 ansible_ssh_host=192.168.1.33 ansible_ssh_port=22node6 ansible_ssh_host=192.168.1.36 ansible_ssh_port=22

主机组的使用

# 主机组变量名+主机+密码
[apache]192.168.1.36192.168.1.33[apache.vars]
ansible_ssh_pass='123456'# 主机组变量名+主机+密钥
[nginx]192.168.1.3[1:2]

# 定义多个组,把一个组当另外一个组的组员
[webserver:children]  #webserver组包括两个子组:apache nginx
apache
nginx

临时指定inventory

1)先编辑一个主机定义清单

[root@ansible ~]# vim /etc/dockers
[dockers]192.168.1.31 ansible_ssh_pass='123456'192.168.1.32192.168.1.33

2)在执行命令是指定inventory

[root@ansible ~]# ansible dockers -m ping -i /etc/dockers -o
192.168.1.33 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}192.168.1.32 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}192.168.1.31 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}

Inventory内置参数

Ansible Ad-Hoc

Ad-Hoc中文文档

ad-hoc —— 临时的,在ansible中是指需要快速执行,并且不需要保存的命令。说白了就是执行简单的命令——一条命令。对于复杂的命令则为playbook,类似于saltstackstate sls状态文件。

ansible命令格式

1)常用命令参数

[root@ansible ~]# ansible -h
Usage: ansible <host-pattern> [options]-a MODULE_ARGS   #模块参数-C, --check  #检查语法-f FORKS #并发--list-hosts #列出主机列表-m MODULE_NAME #模块名字-o 使用精简的输出

2)示例

[root@ansible ~]# ansible webserver -m shell -a 'uptime' -o192.168.1.36 | CHANGED | rc=0 | (stdout)  13:46:14 up 1 day,  9:20,  4 users,  load average: 0.00, 0.00, 0.00192.168.1.33 | CHANGED | rc=0 | (stdout)  21:26:33 up 1 day,  8:51,  3 users,  load average: 0.00, 0.01, 0.05192.168.1.31 | CHANGED | rc=0 | (stdout)  21:26:33 up 1 day,  8:50,  3 users,  load average: 0.00, 0.01, 0.05192.168.1.32 | CHANGED | rc=0 | (stdout)  21:26:33 up 1 day,  8:59,  3 users,  load average: 0.00, 0.01, 0.05

3)命令说明

host-pattern格式

目标target主机,主机组匹配方式

主机的匹配

#  一台目标主机
[root@ansible ~]# ansible 192.168.1.31 -m ping# 多台目标主机
[root@ansible ~]# ansible 192.168.1.31,192.168.1.32 -m ping# 所有目标主机
[root@ansible ~]# ansible all -m ping

组的匹配

# 组的配置信息如下:这里定义了一个nginx组和一个apache组
[root@ansible ~]# ansible nginx --list
  hosts (2):192.168.1.31192.168.1.32[root@ansible ~]# ansible apache --list
  hosts (3):192.168.1.36192.168.1.33192.168.1.32# 一个组的所有主机匹配
[root@ansible ~]# ansible apache -m ping# 匹配apache组中有,但是nginx组中没有的所有主机
[root@ansible ~]# ansible 'apache:!nginx' -m ping -o192.168.1.36 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}192.168.1.33 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}

# 匹配apache组和nginx组中都有的机器(并集)
[root@ansible ~]# ansible 'apache:&nginx' -m ping -o192.168.1.32 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}

# 匹配apache组nginx组两个组所有的机器(并集);等于ansible apache,nginx -m ping[root@ansible ~]# ansible 'apache:nginx' -m ping -o192.168.1.32 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}192.168.1.31 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}192.168.1.33 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}192.168.1.36 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
(0)

相关推荐

  • 自动化运维工具-Ansible

    时间主题12.25(周三)20:00 自动化运维工具-Ansible 在这周三的测试运维试听课程中,芒果给大家介绍了自动化运维工具-Ansible的使用,这里我们来做个小总结.Ansible介绍ans ...

  • 使用pscp实现Windows 和 Linux服务器间远程传递文件

    一.PSCP简介 PSCP (PuTTY Secure Copy client)是PuTTY 提供的文件传输工具,通过SSH连接,在两台机器之间安全的传输文件,可以用于任何SSH(包括SSH v1.S ...

  • 干货丨关于飞凌嵌入式i.MX6Q开发板那点事儿

    FETMX6Q-C核心板 iMX6Q系列作为明星产品深受大家的追捧,其性能强悍,使用稳定,多种显示支持,接口丰富.广泛适用于工控.医疗.多媒体.安防 .车载.金融.教学.电力.通讯.充电桩.智能家居. ...

  • Ansible Inventory

    Ansible是一个开源配置管理工具,可以使用它来自动化任务,部署应用程序实现IT基础架构.比如,服务器的初始化配置.安全基线配置.更新和打补丁系统,安装软件包等.作为一个架构简单但是功能强大的自动化 ...

  • Ansible-上部

    Ansible概述 Ansible是一个配置管理系统configuration management system python 语言是运维人员必须会的语言 ansible 是一个基于python 开 ...

  • 自动化运维工具

    目录 ansible 简介 ansible 是什么? ansible 特点 ansible 架构图 ansible 任务执行 ansible 任务执行模式 ansible 执行流程 ansible 命 ...

  • 在alpine镜像中添加ansible服务的方法

    今天小编就为大家分享一篇关于在alpine镜像中添加ansible服务的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧使用apk add ansible ...

  • Ansible-安装配置

    主机规划 主机名称 操作系统版本 内网IP 外网IP(模拟) 安装软件 ansi-manager CentOS7.5 172.16.1.180 10.0.0.180 ansible ansi-hapr ...

  • docker部署zabbix ansile批量部署自动发现

    docker部署zabbix ansile批量部署自动发现

  • 别让运维太忙,一文详解 Ansible 的自动化运维

    一.Ansible 概述 Ansible 是近年来越来越火的一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为失误.Ansible 通过本身集成的非常丰富 ...

  • ANSIBLE安装和常用模块模块使用详细教程

    安装配置ANSIBLE 下载ANSIBLE [root@ansible ~]#yum install ansible 确认安装 [root@ansible ~]#ansible --versionan ...

  • Jenkins+Ansible+GitLab持续交付平台搭建-第3篇

    Ansible安装配置管理 Ansible优势和应用场景 Ansible:开源部署工具 开发语言:Python 特点:ssh协议通讯,全平台,无需编译,模块化部署管理 作用:推送playbook进行远 ...