前言

什么是自动化运维?

  1. 现如今的 IT 运维已经成为IT服务内涵中重要的组成部分。面对越来越复杂的业务,面对越来越多样化的用户需求,不断扩展的IT应用需要越来越合理的模式来保障IT服务能灵活便捷、安全稳定地持续保障,这种模式中的保障因素就是IT运维(其他因素是更加优越的IT架构等)。
  2. IT运维自动化是一组将静态的设备结构转化为根据IT服务需求动态弹性响应的策略,目的就是实现IT运维的质量,降低成本。可以说自动化一定是IT运维最高层面的重要属性之一,但不是全部。

下面 我们看看我们运维工程师需要干的事情
自动化运维-Ansible(第一部:部署)_第1张图片
上图就是运维人员需要干的事情:N多开发工程师开发出一个游戏,经过不断完善,终于OK了,N多个测试工程师测试这个游戏有没有问题,比如:bug、稳定性等,如果有就返工,如果没有就是交给运维人员准备上线。自动化运维-Ansible(第一部:部署)_第2张图片

那么问题来了,如果有成千上万太服务器,要把服务挨个上线,那么我们运维人员就要累死了。有没有可以让我们偷懒的方法呢?

什么是 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的作用

  1. 比如:让你在100台服务器上搭建LAMP,可以用Ansible解决
  2. 比如:让你拷贝一个文件到这100台服务器,可以用Ansible解决
  3. 比如:让你对这100台服务器同时上线服务,可以用Ansible解决
  4. 当然,Ansible 的作用不止于此。只是举例说明具体干嘛用的!

Ansible的特性

*  模块化:调用特定的模块,完成特定的任务
*  有Paramiko、PyYAML、Jinja2(模板语言)三个关键模块
*  支持自定义模块
*   基于Python语言实现
*  部署简单,基于python和ssh(默认已安装),angentless
*  安全,基于openSSH
*  支持playbook编排任务
*  幂等性:一个任务执行1次和执行n遍效果一样,不会因为重复执行带来意外情况
*   无需代理,不需要PKI (ssl)
*   可使用任何编程语言写模块
*   YAML格式,编排任务,支持丰富的数据结构
*   较强大的多层解决方案

Ansible架构

自动化运维-Ansible(第一部:部署)_第3张图片

Ansible 工作原理

自动化运维-Ansible(第一部:部署)_第4张图片

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 自定义模块这及部分组成。