了解 Ansible ——:
1、ansible是目前企业用的最多的自动化运维工具之一,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
2、ansible是基于 paramiko 开发的,并且基于模块化工作,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。
一张表带你了解ansible的使用率:
官网对ansible的定义就是:Ansible is a radically simple IT automation engine(Ansible是一款极其简单的IT自动化工具)
所以,ansible就是,简单容易上手,但是功能丰富而强大。
优点:
- 基于 python 开发的,而现在python又是运维工程师必不可少的技能之一,支持API及自定义模块;
- 丰富的内置模块,可以用 ansible-doc -l 去查看可用的模块;
- 无客户端,即无需在被控制主机上配置 client/agents,主要是通过ssh来和远程主机通信;
- 批量部署,这个是自动化运维必不可少的;
- 通过 Playbooks 来定制强大的配置、状态管理;
- 提供了一个功能强大、操作性强的 Web 管理界面和 rest api 接口 —— AWX 平台
缺点:
- ansible 是一个相对较完美的自动运维工具,要说缺点就是,对windows被管节点需要加强、执行效率相对较低。
工作原理:
一台管理主机,根据定义的 Inventory host 清单或者 playbook,来调用特定的模块通过 openssh 协议在远程主机上执行相关命令并返回结果。
以下是 ansible 官网的工作流程图:
- ansible inventory:管理的主机清单;
- ansible playbook:剧本,即编排任务,自定义自己的任务列表,然后交给 ansible 按照定义的顺序依次执行;
- modules ansible:核心模块的集合;
- plugins:作为模块的补充,定义额外的插件;
- api:供第三方调用,作为后续的运维平台开发作用很大;
- ansible:是一个命令,十分重要,大部分的自动化管理都是用 ansible 这个命令来实现的。
总之,ansible是一个无需安装客户端的自动化管理工具,它包括了很多的模块来帮助我们来处理工作,强大的playbook可以帮助我们实现自动部署 LNMP等环境。
一张表带你了解三大主流自动运维工具(ansible、saltstack、puppet)的优缺点 ——:
部署实例 ——:
环境准备:
只需要在管理主机上面安装 ansible 即可。
角色 | 组名 |
管理主机(192.168.220.131) | |
被管理主机01(192.168.220.140) | aaa |
被管理主机02(192.168.220.136) | bbb |
//首先安装 :
yum install -y epel-release ##首先安装 epel源
yum install ansible -y
//查看版本:
[root@localhost ~]# ansible --version
//主要配置文件:
[root@localhost ~]# tree /etc/ansible/ ##树状结构展示文件夹
/etc/ansible/
├── ansible.cfg ##ansible的配置文件
├── hosts ##ansible的主仓库,用于存储需要管理的远程主机的相关信息
└── roles ##角色
1 directory, 2 files
---接下来是在管理端上的部署:
[root@localhost ~]# cd /etc/ansible
[root@localhost ansible]# vim hosts
添加组名和对应的ip地址:
[aaa]
192.168.220.140
[bbb]
192.168.220.136
//配置密钥对验证:
[root@localhost ansible]# ssh-keygen -t rsa
[root@localhost ansible]# ssh-copy-id root@192.168.220.140
[root@localhost ansible]# ssh-copy-id root@192.168.220.136
做了密钥对验证之后,我们的管理端,就可以控制两台被管理端的两台主机了,接下来做一些简单的操作:
//查看第一台被管理的主机容器:
命令格式:ansible [主机] [-m 模块] [-a 命令]
[root@localhost ansible]# ansible aaa -m command -a 'date'
192.168.220.140 | CHANGED | rc=0 >>
Mon Feb 10 14:29:25 CST 2020
[root@localhost ansible]# ansible bbb -m command -a 'date'
192.168.220.136 | CHANGED | rc=0 >>
Mon Feb 10 14:32:30 CST 2020