Ansible概述:

  1. Ansible是一款开源的、简单的运维自动化工具,是企业当中应用非常广的,自动化统一配置管理工具。
  2. Ansible没有使用C/S架构,而是直接通过ssh协议来进行系统管理、自动化执行命令、部署等操作和任务。
  3. Ansible的自动化主要体现在Ansible集成了丰富模块以及功能组件…… Ansible可以通过一个命令完成一系列的操作,进而能减少重复性的工作和维护成本,可以提高工作效率。
  4. Ansible可以同步或异步完成playbook任务,默认是同步进行,但需要的话也可以在playbook中指定为异步模式。

ansible shell追加到文件 ansible执行shell脚本_ansible shell追加到文件

Ansible的特点:

  1. Ansible不需要单独安装客户端,也不需要启动任何服务
  2. Ansible是python中的一套完整的自动化执行任务模块
  3. Ansible playbook剧本采用yaml配置,对于自动化任务的执行过程一目了然

Ansible的功能:

  1. 远程执行批量执行远程命令,可以对多台主机进行远程操作
  2. 配置管理批量配置软件服务,可以进行自动化方式配置,服务的统一配置管理,和启停
  3. 事件驱动通过Ansible的模块,对服务进行不同的事件驱动,比如: 1)修改配置后重启。 2)只修改配置文件,不重启。 3)修改配置文件后,重新加载。 4)远程启停服务管理
  4. 任务编排可以通过playbook的方式来统一管理服务,并且可以使用一条命令,实现一套架构的部署
  5. 跨平台,跨系统几乎不受到平台和系统的限制,比如安装apache和启动服务

Ansible和其他管理软件的对比:

ansible shell追加到文件 ansible执行shell脚本_运维_02

Ansible的架构图及执行流程:

  1. Ansible读取playbook剧本,剧本中会记录对哪些主机执行哪些任务。
  2. 首先Ansible通过主机清单找到要执行的主机,然后调用具体的模块,将前面的信息加载到模块当中。
  3. 然后Ansible会通过连接插件 (Ansible通过SSH进行远程链接) 连接对应的主机并推送对应的任务列表。
  4. 最后被管理的主机,会将Ansible发送过来的任务进行解析,然后以本地Shell命令的方式执行完毕。

Ansible:

  • 核心:ansible 核心模块(Core Modules):这些都是ansible自带的模块
  • 扩展模块(Custom Modules):如果核心模块不足以完成某种功能,可以添加扩展的自定义模块(这些模块是开发人员补充完成)
  • 插件(Plugins):完成模块功能的补充
  • 剧本(Playbooks):ansible的任务配置文件,将多个任务定义在剧本中,由ansible自动执行
  • 连接插件(Connectior Plugins):ansible基于连接插件连接到各个主机上,虽然ansible是使用ssh连接到各个主机的,但是它还支持其他的连接方法,所以需要有连接插件
  • 主机群(Host Inventory):定义ansible管理的主机

使用shell脚本一键式部署Ansible

准备两台机器:

控制节点:node1:192.168.40.134

受管节点:node2:192.168.40.134

编写脚本:

#!/bin/bash

#判断本地仓库是否存在
if [ -f /etc/yum.repos.d/yum.repo ]
#存在
then
#挂载本地仓库
mount /dev/sr0

#不存在
else
#删除系统默认仓库
rm -rf /etc/yum.repos.d/*
#编写本地仓库
cat >/etc/yum.repos.d/yum.repo <<EOF
[yum]
name=centos
enabled=1
gpgcheck=0
baseurl=file:///mnt
EOF
#挂载本地仓库
mount /dev/sr0 /mnt
fi

#设置开机自启
echo " /etc/yum.repos.d/ " >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local

#--------------------------------------------------------------

#下载网络仓库配置文件
wget -O /etc/yum.repos.d/epel-7.repo    https://mirrors.aliyun.com/repo/epel-7.repo
wget -O /etc/yum.repos.d/CentOS-Base.repo     http://mirrors.aliyun.com/repo/Centos-7.repo

#清除现有缓存,构建新的仓库缓存
yum clean all && yum makecache

#Ansible-控制节点,安装ansible
yum install -y ansible

#Ansible主控节点,在/etc/hosts文件,做主机名与IP地址映射
echo "192.168.40.134 node1" >> /etc/hosts
echo "192.168.40.135 node2" >> /etc/hosts


#编写主机清单
cat >> /etc/ansible/hosts << EOF
[web]
node1
node2
EOF

#安装expect包
yum  install  -y  expect

#非交互式生成密钥对
expect <<EOF
spawn  ssh-keygen
expect {
	"(/root/.ssh/id_rsa):"    { send  "\r";exp_continue }
	"(empty for no passphrase):"  { send "\r";exp_continue }
	"again:"  { send "\r";exp_continue }
}
EOF

#循环传输密钥
for i in `seq 2`
do
expect <<EOF
spawn ssh-copy-id node$i
expect {
	"(yes/no)?"   { send "yes\r";exp_continue }
	"password:"   { send "123456\r";exp_continue }
}
EOF
done

验证即可: