【假装正经的前言】
想要做一名优秀的运维师,首先要时刻铭记的就是效率!效率!效率!同样的一份工作,你拼死拼活做了一小时,人家做了10分钟,而且完美,你说你气不气,你说老板给不给人家加鸡腿。至于你,还是顶着老板的白眼多学习吧。所以,这篇博文就来介绍一个自动化运维工具,让你嗑着瓜子喝着茶分分钟搞定工作!
【严肃的说】
先来介绍一些自动化运维常用工具:
场景 | 工具 | 用途 |
---|---|---|
安装系统 | pxe/cobbler | 安装系统 |
虚拟化系统 | kvm/xen/vmware | 虚拟机 |
应用部署 | puppet/ansible/saltstack | 中大型规模 |
命令执行 | ansible/fabric/ffunc/shell | 中小型 |
ansible聚集以上部署和命令执行于一身,能够完整轻易的实现应用部署和批量命令功能,适用于主机数量中型规模,再大的使用puppet。
【自动化运维之ansible】
ansible是新出现的自动运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置,批量程序部署、批量运行命令等功能。
ansible是基于paramiko开发的,并且基于模块化工作,本身没有批量部署的能力。真正具备批量部署的是ansible所运行的模块,ansible只是提供一种框架。ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。目前已经被红帽官方收购。
【ansible特点】
1、部署简单,只需在主控制端部署ansible环境,被控制端无需做任何操作;
2、默认使用ssh协议对设备进行管理
3、有大量常规运维操作模板,可实现日常绝大部分操作。
4、配置简单、功能强大、扩展性强
5、支持API及自定义模块,可通过Python轻松扩展
6、通过playbooks来定制强大的配置、状态管理;
7、轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可。
8、提供一个功能强大、操作性强的web管理界面REST API接口—AWX平台
[ansible任务执行模式]
ad-hoc和playbook
ad-hoc:
ad-hoc模式使用单个模块,支持批量执行单条命令。ad-hoc命令是一种可以快速输入的命令,而且不需要保存起来的命令。相当于bash中的一句shell。
playbook:
playbook模式是ansible主要管理方式,也是ansible功能强大的关键所在。playbook通过多个task集合完成一类功能,如web服务的安装部署、数据库服务器的批量备份等。可以简单地把playbook理解为通过组合多条ad-hoc操作的配置文件。
本篇就先来介绍ad-hoc模式。
[ansible命令执行过程]
1、加载自己的配置文件,默认/etc/ansible/ansible.cfg
2、查找对应的主机配置文件,找到要执行的主机或者组。
3、加载自己对应的模块文件,如command
4、通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器
5、对应执行用户家目录的.ansible/tmp/XXX/XXX.PY文件
6、给文件+x执行
7、执行并返回结果
8、删除临时py文件,sleep 0 退出。
【ansible安装方式】
ansible安装常用两种方式,yum安装和pip程序安装
1、使用yum安装
yum install epel-release -y
yum install ansible –y
2、使用pip(python的包管理模块)安装
pip install ansible
如果没pip,需先安装pip.yum可直接安装:
yum install python-pip
pip install ansible
安装后来看一下ansible的配置文件:
[root@centos7 ansible]# vim /etc/ansible/ansible.cfg
[defaults]
# some basic default values...
#inventory = /etc/ansible/hosts
#library = /usr/share/my_modules/
#remote_tmp = ~/.ansible/tmp
#local_tmp = ~/.ansible/tmp
#forks = 5
#poll_interval = 15
#sudo_user = root
#ask_sudo_pass = True
#ask_pass = True
#transport = smart
#remote_port = 22
#module_lang = C
#module_set_locale = False
#这里只截取了小段,并不是全部的文档
既然ansible要管理节点,那么就需要定义被管理节点的地址,此项要在/etc/ansible/hosts文件中定义:
可以直接知名主机地址或者定义一个主机组两种方法都可以。
[root@centos7 ansible]# vim /etc/ansible/hosts
[web] #定义主机组
192.168.64.129 #被管理节点
192.168.64.130 #被管理节点
ansible还有一些常用命令,例如
/usr/bin/ansible和/usr/bin/ansible-doc
/usr/bin/ansible是临时命令执行工具&#x