文章目录

  • Ansible基本概述
  • ansible简述
  • 自动化运维
  • 自动化运维工具优势
  • ansible的功能及优点
  • Ansible的架构
  • ansible的执行流程
  • Ansible lnventory
  • 案例


Ansible基本概述

ansible简述

  • Ansible是一个自动化统一配置管理工具,自动化主要体现在Ansible集成了丰富模块以及功能组件,可以通过一个命令完成一系列的操作,进而能减少重复性的工作和维护成本,可以提高工作效率。

自动化运维

  • 应用一:批量命令执行
  • 应用二:批量安装服务
  • 应用三:批量配置同步
  • 应用四:批量任务执行
  • 应用五:批量代码部署
自动化运维工具优势

1.提高工作效率
2.提高工作准确度
3.减少维护成本
4.减少重复性工作

ansible的功能及优点

1.远程执行
批量执行远程命令,可以对多台主机进行远程操作
2.配置管理
批量配置软件服务,可以进行自动化方式配置,服务的统一配置管理和启停
3.事件驱动
通过Ansible的模块,对服务进行不同的事件驱动
比如:
1)修改配置后重启
2)只修改配置文件,不重启
3)修改配置文件后,重新加载
4)远程启停服务管理
4.管理公有云
通过API接口的方式管理公有云,不过这方面做的不如saltstack.
saltstack本身可以通过saltcloud管理各大云厂商的云平台
5.二次开发
因为语法是python,所以便于运维进行二次开发
6.任务编排
可以通过playbook的方式来统一管理服务,并且可以使用一条命令,实现一套架构的部署
7.跨平台,跨系统
几乎不受到平台和系统的限制,比如安装apache和启动服务
在ubuntu上安装apache服务名字叫apache2
在Centos上安装apache服务名字叫httpd
在Centos6上启动服务器使用命令:/etc/init.d/nginx start
在Centos7上启动服务器使用命令:systemctl start nginx

Ansible的架构

1.连接插件(connection plugins)用户连接主机,用来连接被管理端
2.核心模块(core modules)连接主机实现操作,它依赖于具体的模块来做具体的事情
3.自定义模块(custom modules) 根据自己的需求编写具体的模块
4.插件(plugins)完成模块功能的补充
5.剧本(playbook)ansible的配置文件,将多个任务定义在剧本中,由ansible自动执行
6.主机清单(inventory)定义ansible需要操作主机的范围
*ansible是模块化的,它所有的操作都依赖于模块

开源的ansible平台_自动化运维

ansible的执行流程

1.Ansible读取playbook剧本,剧本中会记录对哪些主机执行哪些任务
2.首先Ansible通过主机清单找到要执行的主机,然后调用具体的模块。
3.其次Ansible会通过连接插件来连接对用的主机并推送对应的任务列表
4.最后被管理的主机会将Ansible发送过来的任务解析为本地Shell命令执行

Ansible lnventory

/etc/ansible/hosts是ansible默认主机资产清单文件,用于定义被管理主机的认证信息,如:ssh登录用户名,密码以及key相关信息。lnventory文件中填写需要被管理的主机与主机组信息,还可以自定义lnventory主机清单的位置。
ansible --help:查看一些参数用法
如:

开源的ansible平台_自动化运维_02


开源的ansible平台_自动化运维_03

  • 配置SSH免密秘钥登录
•  ssh-keygen
 ssh-copy-id 172.16.1.31
 ssh-copy-id 172.16.1.41
  • 配置ansible主机清单
•  [root@m01 ~]# cat /etc/ansible/hosts
 [web]
 172.16.1.7
 172.16.1.8
  • 测试所有主机 方法1:执行命令组名写all代表执行所有主机 方法2:一个IP可以属于多个组
•  [root@m01 ~]# cat /etc/ansible/hosts
 [web]
 172.16.1.7
 [nfs]
 172.16.1.31
 [backup]
 172.16.1.41
 [zabbix]
 172.16.1.7
 172.16.1.31
 172.16.1.41
  • SSH使用密码连接并且端口号不是22
•  [nfs:vars]
 ansible_ssh_port=9999
 ansible_ssh_user=root
 ansible_ssh_pass=‘123456’
 [all:vars]
 ansible_ssh_port=9999
 ansible_ssh_user=root
 ansible_ssh_pass=‘123456’
  • 同组主机SSH端口不一样,账号密码一样
•  [zabbix]
 172.16.1.31 ansible_ssh_port=8888
 172.16.1.41 ansible_ssh_port=9999
 [zabbix:vars]
 ansible_ssh_user=root
 ansible_ssh_pass=‘123456’
[lb02]
172.16.1.6 ansible_ssh_user=root ansible_ssh_port=22 ansible_ssh_pass='123456'
  • 同一组连续的IP
    [nfs]
    172.16.1.[30:45]
  • 主机组使用方式
•  [root@m01 ~]# vim hosts
 [db_group]
 db01 ansible_ssh_host=10.0.0.51
 db02 ansible_ssh_host=10.0.0.52
 [web_group]
 web01 ansible_ssh_host=10.0.0.7
 web02 ansible_ssh_host=10.0.0.8
 #查看指定组内主机数量
 [root@m01 ~]# ansible web_group -m ping -i ./hosts --list-host
 hosts (2):
 web01
 web02
 [root@m01 ~]# ansible db_group -m ping -i ./hosts --list-host
 hosts (2):
 db01
 db02
 #方式一、主机组变量+主机+密码 主机组支持指定变量[group_name:vars],同时支持嵌套组[game:children]
 [db_group]
 db01 ansible_ssh_host=10.0.0.51
 db02 ansible_ssh_host=10.0.0.52
[db_group:vars]
 ansible_ssh_pass=‘1’
 #方式二、主机组变量+主机+密钥
 [web_group]
 web01 ansible_ssh_host=10.0.0.7
 web02 ansible_ssh_host=10.0.0.8
 #定义多组,多组汇总整合
 lnmp组包括两个子组[db,web]
[lnmp:children]
 db_group
 web_group
 #最终配置文件
 [root@m01 ~]# cat hosts
 [db_group]
 db01 ansible_ssh_host=10.0.0.51
 db02 ansible_ssh_host=10.0.0.52
 [web_group]
 web01 ansible_ssh_host=10.0.0.7
 web02 ansible_ssh_host=10.0.0.8
 [lnmp:children]
 db_group
 web_group
 #查看多组
 [root@m01 ~]# ansible all -m ping -i ./hosts --list-host
 hosts (4):
 db01
 db02
 web01
 web02
 [root@m01 ~]# ansible lnmp -m ping -i ./hosts --list-host
 hosts (4):
 db01
 db02
 web01
 web02

案例

  • 如果控制端和被控制端第一次通讯,需要确认指纹信息,如果机器特别多少的情况下怎么办?

将 Ansible 配置文件中的 host_key_checking = False 参数注释打开即可。 但要注意ansible.cfg文件的读取顺序。

[root@m01 project1]# vim /etc/ansible/ansible.cfg
将 Ansible 配置文件中的 host_key_checking = False 参数注释打开

man ansible:查看帮助手册

开源的ansible平台_Ansible_04

要查看完整列表,请访问https://docs.ansibe.com/或使用ansibe-config命令。
/etc/ansible/ansible.cfg 配置文件,如果存在则使用
~/.ansible.cfg 用户配置文件,覆盖默认配置(如果存在)
&/ansible.cfg 本地配置文件(在当前工作目录中)假定为(aqproject-specific)(aq,如果存在,则重写其余文件)。
如上所述,ANSIBLE_CONFIG环境变量将覆盖所有其他环境变量。
顺序:
1)$ANSIBLE_CONFIG
2)./ansible.cfg
3)~/.ansible.cfg
4)/etc/ansible/ansible.cfg