前言
什么是自动化运维?
- 现如今的 IT 运维已经成为IT服务内涵中重要的组成部分。面对越来越复杂的业务,面对越来越多样化的用户需求,不断扩展的IT应用需要越来越合理的模式来保障IT服务能灵活便捷、安全稳定地持续保障,这种模式中的保障因素就是IT运维(其他因素是更加优越的IT架构等)。
- IT运维自动化是一组将静态的设备结构转化为根据IT服务需求动态弹性响应的策略,目的就是实现IT运维的质量,降低成本。可以说自动化一定是IT运维最高层面的重要属性之一,但不是全部。
下面 我们看看我们运维工程师需要干的事情
上图就是运维人员需要干的事情:N多开发工程师开发出一个游戏,经过不断完善,终于OK了,N多个测试工程师测试这个游戏有没有问题,比如:bug、稳定性等,如果有就返工,如果没有就是交给运维人员准备上线。
那么问题来了,如果有成千上万太服务器,要把服务挨个上线,那么我们运维人员就要累死了。有没有可以让我们偷懒的方法呢?
什么是 Ansible ?
1)ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
2)ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:
(1)、连接插件connection plugins:负责和被监控端实现通信;
(2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
(3)、各种模块核心模块、command模块、自定义模块;
(4)、借助于插件完成记录日志邮件等功能;
(5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。
Ansible的作用
- 比如:让你在100台服务器上搭建LAMP,可以用Ansible解决
- 比如:让你拷贝一个文件到这100台服务器,可以用Ansible解决
- 比如:让你对这100台服务器同时上线服务,可以用Ansible解决
- 当然,Ansible 的作用不止于此。只是举例说明具体干嘛用的!
Ansible的特性
* 模块化:调用特定的模块,完成特定的任务
* 有Paramiko、PyYAML、Jinja2(模板语言)三个关键模块
* 支持自定义模块
* 基于Python语言实现
* 部署简单,基于python和ssh(默认已安装),angentless
* 安全,基于openSSH
* 支持playbook编排任务
* 幂等性:一个任务执行1次和执行n遍效果一样,不会因为重复执行带来意外情况
* 无需代理,不需要PKI (ssl)
* 可使用任何编程语言写模块
* YAML格式,编排任务,支持丰富的数据结构
* 较强大的多层解决方案
Ansible架构
Ansible 工作原理
Ansible 安装
规划表格:
IP地址 | 系统版本 | 功能 |
192.168.154.131 | CenOS 7.4 | Ansible主控端 |
192.168.154.132 | CenOS 7.4 | 被控制端 |
192.168.154.133 | CenOS 7.4 | 被控制端 |
开始部署:
1·安装epel源、Ansible
[root@mange ~]# yum install epel-release -y
[root@mange ~]# yum install ansible -y
2·修改 Host 主机清单
[root@mange ~]# vim /etc/ansible/hosts
添加内容如下:
[webserver] //添加组
192.168.154.132 //组里面添加被控制端的IP
[mysql]
192.168.154.133
3·查看 Ansible 版本等信息
[root@mange ~]# ansible --version
4·设置ssh无密码登陆
[root@mange ~]# ssh-keygen -t rsa
[root@mange ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.154.132
[root@mange ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.154.133
5·到此 Ansible 部署完成,看看基础操作
[root@mange ~]# ansible all -m command -a 'date' ------(查看两台主机的时间)
192.168.154.132 | CHANGED | rc=0 >> //显示第一台被控主机时间
2018年 10月 17日 星期三 16:01:55 CST
192.168.154.133 | CHANGED | rc=0 >> //显示第二台被控主机时间
2018年 10月 17日 星期三 16:01:55 CST
6·以上命令参数解释:
all :是代表你 /etc/ansible/hosts 里的所有IP主机,当然也可以跟具体IP
-m:指定模块,command 模块是默认模块,之后会详解更过模块功能
-a:指定具体你要在被控制端的操作
Ansible 总结
* Ansible 是基于 “ 模块 ” 完成各种任务的,Ansible就相当于一个框架
* 所以学习Ansible的重点是学习它里面的功能模块
* 在配置过程中我们可以看出来Ansible是一款通过SSH协议就可以远程执行或下发配置的自动化环境部署软件!
* 在Ansible 架构图中可以看出它包括:Ansible core核心引擎、Host inventory 主机清单、Connect plugin 连接插件、Playbook剧本、Core modules 核心模块,Custom modules 自定义模块这及部分组成。
转载于:https://blog.51cto.com/13746824/2301282