一、初识Ansible

Ansible是一个简单的自动化引擎,可完成配置管理,应用部署,服务编排以及其他各种IT需求。Ansible也是一款使用Python语言开发实现的开源软件,其依赖Jinja2,Paramiko和PyYAML这几个库

Ansbile的优点:

  • 安装部署简单: Ansible只需要在主控端部署Ansible环境,被控端无须任何操作。
  • 基于SSH进行配置管理,不依赖于客户端,直接使用SSH进行配置管理
  • Ansible不需要守护进程。
  • 日志集中存储。
  • Ansible简单易用。
  • Ansible功能强大,Ansible通过模块来实现各种功能
  • Ansblie设计优秀,便于分享。
  • Ansible对云计算和大数据平台都有很好的支持。

Ansible作为自动化系统运维的一大利器,在构建整个体系过程中有着举足轻重的地位。其简单易用,易于安装,功能强大,便于分享,内含大量模版等都是它的魅力所在,再加上易封装,接口调用方便,Ansible正在被越来越多的大公司采用。

二、Ansible的架构

Ansilbe管理员节点和远程主机节点通过ssh协议进行通信。

Ansible配置的时候只需要与被控端做免密即可。

三、Ansible基础使用

安装

# Redhat/CentOS Linux上,Ansible目前放在的epel源中
# Fedora默认源中包含ansible,直接安装包既可
[root@master ~]# yum install epel-release
[root@master ~]# yum install ansible -y

配置Linux不同机器间免密 略...

主机清单

什么是Host Invenory(主机目录,主机清单)?

Host Inventory是配置文件,用来告诉Ansible需要管理那些主机。并且把这些主机根据需分类。

默认的配置文件是:/etc/ansible/hosts

最简单的host文件:

192.168.32.130

管理主机

Ansible 提供了一个命令行工具

ansible命令的格式是:

ansible <host-pattern> [options]
  • 检查ansible安装环境

    [root@192.168.32.130 /etc/ansible]$ ansible all -m ping -u root
    192.168.32.130 | SUCCESS => {
    "changed": false,
    "ping": "pong"
    }
  • 执行命令

    [root@192.168.32.130 /etc/ansible]$ ansible all -a "ls /etc/ansible"
    192.168.32.130 | SUCCESS | rc=0 >>
    ansible.cfg
    hosts
    hosts.py
    roles
  • 拷贝文件

    [root@192.168.32.130 /tmp]$ ansible all -m copy -a "src=/etc/ansible/hosts dest=/tmp/"
    192.168.32.130 | SUCCESS => {
    "changed": true,
    "checksum": "2e304266c75c95987fb111c5482443bb41408cd7",
    "dest": "/tmp/hosts",
    "gid": 0,
    "group": "root",
    "md5sum": "827317b4e0cd727bf245f2044319d31d",
    "mode": "0644",
    "owner": "root",
    "secontext": "unconfined_u:object_r:admin_home_t:s0",
    "size": 15,
    "src": "/root/.ansible/tmp/ansible-tmp-1572083478.93-155762973748871/source",
    "state": "file",
    "uid": 0
    }
  • 安装包

    [root@192.168.32.130 /tmp]$ ansible all -m shell -a "yum -y install nc"
    
    192.168.32.130 | SUCCESS | rc=0 >>
    Loaded plugins: fastestmirror, refresh-packagekit, security
    Setting up Install Process
    Loading mirror speeds from cached hostfile
    * base: mirrors.cn99.com
    * extras: ftp.sjtu.edu.cn
    * remi-safe: ftp.riken.jp
    * updates: mirrors.163.com
    Package nc-1.84-24.el6.x86_64 already installed and latest version
    Nothing to do
  • 添加用户

    [root@192.168.32.130 /tmp]$ ansible all -m shell -a "useradd jack"
    192.168.32.130 | SUCCESS | rc=0 >>
  • 并行执行

    # 开启10个线程执行
    [root@192.168.32.130 /tmp]$ ansible all -a "ip addr" -f 10
    192.168.32.130 | SUCCESS | rc=0 >>
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
    valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:b8:5c:ad brd ff:ff:ff:ff:ff:ff
    inet 192.168.32.130/24 brd 192.168.32.255 scope global eth0
    inet6 fe80::20c:29ff:feb8:5cad/64 scope link
    valid_lft forever preferred_lft forever
    3: pan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN
    link/ether 16:86:d7:59:08:da brd ff:ff:ff:ff:ff:ff # 查看远程主机的全部系统信息
    [root@192.168.32.130 /tmp]$ ansible all -m setup

四、Ansible用脚本管理主机

只有脚本才可以重用,避免总敲重复的代码

Ansible脚本的名字叫 Playbook,使用YAML的格式,文件以yml结尾

YAML 和 JSON 类似,是一种表示数据的格式

执行脚本的方法:[root@192.168.32.130 /tmp]$ ansible-playbook xxx.yml

yml文件的功能可以写一些部署、启停服务逻辑,例如:安装Apache,步骤如下:

1、 安装Apache包

2、 拷贝配置文件httpd,并保证拷贝文件后,apache服务会被重启

3、 拷贝默认的网页index.html

4、 启动Apache服务

yml文件包含以下几个关键字:

  • hosts:主机ip,或者主机组名,或者关键字all
  • remote_user:以哪个用户执行
  • vars:变量
  • tasks:任务,定义顺序执行的动作
  • action:
  • handers:event

示例:

- hosts: web
vars:
http_port: 80
max_clients: 200
remote_user: root
tasks:
- name: ensure apache is at the latest version
yum: pkg=httpd state=latest
- name: Write the configuration file
template: src=templates/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
notify:
- restart apache
- name: Write the default index.html file
template: src=templates/index.html.j2 dest=/var/www/html/index.html
- name: ensure apache is running
service: name=httpd state=started
handlers:
- name: restart apache
service: name=httpd state=restarted

不懂yml没有关系,上面的yml格式可以转化为json格式:

[
{
"hosts": "web",
"vars": {
"http_port": 80,
"max_clients": 200
},
"remote_user": "root",
"tasks": [
{
"name": "ensure apache is at the latest version",
"yum": "pkg=httpd state=latest"
},
{
"name": "Write the configuration file",
"template": "src=templates/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf",
"notify": [
"restart apache"
]
},
{
"name": "Write the default index.html file",
"template": "src=templates/index.html.j2 dest=/var/www/html/index.html"
},
{
"name": "ensure apache is running",
"service": "name=httpd state=started"
}
],
"handlers": [
{
"name": "restart apache",
"service": "name=httpd state=restarted"
}
]
}
]

playbook 是指一个可以被ansible执行的yml文件

五、Ansible模块Module

module就是Ansible的“命令”,即执行任务的方式,常见的module有yum、copy、shell

  • -m:后面跟上module的名字
  • -a:后面接调用module的参数

例如使用mudule copy拷贝文件

六、Ansible常用的module介绍

  • ping:检测连通性
  • debug:打印输入信息,和linux 上echo命令很像
  • copy:拷贝文件
  • template:
  • file:设置远程机器行文件相关的操作比如权限
  • user:为远程主机新增或删除账户
  • yum:管理远程主机的Linux上的安装包
  • service:管理远程节点上的服务
  • firewalld:为某服务和端口添加firewalld规则
  • shell:通过/bin/sh在远程节点上执行命令
  • command:在远程节点上执行命令。和Shell Module类似,不过不支持$HOME and operations like “<”, “>”, “|”, “;” and “&”。

七、Ansible进阶

Ansible配置文件

主机目录的文件,远程机的临时文件存储位置,管理机的临时文件存储文件

[root@192.168.32.130 /etc/ansible]$ vim ansible.cfg

inventory      = /etc/ansible/hosts
library = /usr/share/my_modules/
remote_tmp = ~/.ansible/tmp
local_tmp = ~/.ansible/tmp

连接端口号"accelerate_port",超时时间等。

accelerate_port = 5099
accelerate_timeout = 30
accelerate_connect_timeout = 5.0
accelerate_daemon_timeout = 30
accelerate_multi_key = yes

Ansible主机目录

主机目录管理,告诉ansible需要管理那些server,和server的分类和分组信息

# 默认文件
/etc/ansible/hosts # 修改主机目录的配置文件 ...
inventory = /etc/ansible/hosts
... # 命令行中传递主机目录配置文件
$ ansible-playbook -i hosts site.yml
或者参数—inventory-file
$ ansible-playbook --inventory-file hosts site.yml

远程主机的分组([]内是组名):

[webservers]
foo.example.com [databases]
db-[a:f].example.com

指定Server的连接参数,包括连接方法、用户等

Ansible的脚本

执行playbook的语法

ansible-playbook  deploy.yml

查看输出的细节

ansblie-playbook playbook.yml --verbose

查看该脚本影响哪些hosts

ansible-playbook  playbook.yml  --list-hosts

并行执行脚本

ansible-playbook  playbook.yml  -f 10

最基本的playbook脚本分为三个部分:

在什么机器上以什么身份执行

  • hosts
  • users
  • tasks:任务都有什么
  • handlers。。。

自动化运维工具Ansible工具的更多相关文章

  1. 自动化运维之ansible

    第三十九课 自动化运维之ansible 目录 十五. ansible介绍 十六. ansible安装 十七. ansible远程执行命令 十八. ansible拷贝文件或目录 十九. ansible远 ...

  2. Ansible_自动化运维《Ansible之初识-1》

    1.Ansible简介 1.1 Ansible介绍 Ansible 是一个简单的自动化运维管理工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fab ...

  3. 自动化运维利器Ansible要点汇总

    由于大部分互联网公司服务器环境复杂,线上线下环境.测试正式环境.分区环境.客户项目环境等造成每个应用都要重新部署,而且服务器数量少则几十台,多则千台,若手工一台台部署效率低下,且容易出错,不利后期运维 ...

  4. 自动化运维之Ansible入门

    Ansible简介 Ansible是什么? Ansible 简单的说是一个配置管理系统(ConfiGuration Management System).你只需要可以使用ssh访问你的服务器或设备.它 ...

  5. 简单聊一聊Ansible自动化运维

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

  6. 一文详解 Ansible 自动化运维

    开源Linux 一个执着于技术的公众号 一.Ansible 概述 Ansible 是近年来越来越火的一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为失误 ...

  7. 自动化运维:(1)认识 Shell

    目录 (一)运维是什么? (二)什么是 Shell? (三)Shell的分类 (四)Shell脚本 (五)Shell的变量 (六)表达式 (七)Linux常见符号 (八)常见命令 (一)自动化运维是什 ...

  8. 自动化运维工具Ansible详细部署 (转载)

    自动化运维工具Ansible详细部署 标签:ansible 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://sofar.blog. ...

  9. 自动化运维工具之 Ansible 介绍及安装使用

    一.初识Ansible 介绍: Absible 使用 模块(Modules)来定义配置任务.模块可以用标准脚本语言(Python,Bash,Ruby,等等)编写,这是一个很好的做法,使每个模块幂等.A ...

  10. 自动化运维工具之ansible

    自动化运维工具之ansible   一,ansible简介 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fab ...

随机推荐

  1. Vue学习笔记——Vue-router

    转载:https://blog.csdn.net/guanxiaoyu002/article/details/81116616 第1节:Vue-router入门 .解读router/index.js文 ...

  2. ASP.NET的底层体系1

    文章引导 1.ASP.NET的底层体系1 2.ASP.NET的底层体系2 引言: 学习ASP.NET,要想做的更好,不了解ASP.NET是不行的.一个有理想的程序员都会像挤压海绵一样,努力的去学习和获 ...

  3. jquery 表单验证插件

    其他: <form action=""> First name: <input type="text" name="FirstNam ...

  4. 数组,List,Set相互转化

    1.数组转化为List: String[] strArray= new String[]{"Tom", "Bob", "Jane"}; Li ...

  5. 关于Button控件的CommandName属性用法的一个实例

    注:本文分享于悠闲的博客,地址:http://www.cnblogs.com/9999/archive/2009/11/24/1609234.html 1.前台的代码 <%@ Page Lang ...

  6. 洛谷P3239 [HNOI2015]亚瑟王

    题目描述 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑.他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂亮.众所周知,亚瑟王是一个看脸的游戏,技能 ...

  7. Android开发 Tablayout的学习

    前言 Tablayout一般做主页底下的导航栏开发或者上面的选择栏开发,就个人感觉Tablayout用于主页导航栏会比BottomNavigationView更好,自定义方面也更容易.缺点是没有动画也 ...

  8. Python-进程(1)

    目录 操作系统发展史 穿孔卡片 联机批处理系统 统计批处理系统 单道 多道技术 空间上复用 时间上复用 并行与并发 进程 程序与进程 进程调度 进程的三个状态 就绪态 运行态 阻塞态 同步和异步 阻塞 ...

  9. 二分+2-sat——hdu3062

    hdu3622升级版 注意要保留两位小数 /* 给定n对圆心(x,y),要求从每对里找到一个点画圆,不可相交 使得最小半径最大 二分答案,设最小半径为r 然后两两配对一次进行判断,在2-sat上连边即 ...

  10. QQ交流群