一、ansible简介
ansible是一款由python语言编写的一款自动化运维工具,它集合了众多运维工具(puppet、cfengine、chef、func、fabric)优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。它的创始人,Michael DeHaan(cobbler与Func软件的作者),他在2012年3月9日发布了ansible 0.01版。2015年10月17日被RedHat宣布收购。
二、ansible的特点
1、无客户端,只需安装SSH、python即可,其中python建议版本2.6.6以上
2、基于openssh通信,底层基于ssh协议(Windows基于powershell)
3、支持密码和SSH认证,因可以通过系统帐户密码认证或公钥私钥认证,所以整个过程简单、方便、安全。
4、支持Windows,但仅支持被管理端是Windows,管理端必须是Linux系统
5、模块化:调用特定的模块,完成特定任务
6、支持playbook编排任务(类似shell中的脚本)
7、幂等性:一个任务执行一遍和执行N遍的效果一样,不因重复执行带来意外情况
8、可以使用任何编程语言编写模块(python可以调用其他语言的库)
9、YAML格式,编排任务,支持丰富的数据结构
三、ansible是如何工作的?
Ansible没有客户端,因此底层通信依赖系统软件,在Linux系统下基于openssh通信,在Windows下基于powershell,管理端必须是Linux系统,使用者认证通过后在管理节点通过ansible工具调用各应用模块指令推送至被管理端执行,并在执行完毕后自动删除产生的临时文件。
实验准备:
两台主机:
一台管理机(192.168.6.129)
一台客户机(192.168.6.130)
自动化安装httpd服务并且开机自动启动
一:管理机(192.168.6.129)
1.安装ansible服务
yum -y install ansible
2.yum 仓库配置
[base]
name=cdrom repo
baseurl=file:///mnt/cdrom
enabled=1
gpgcheck=1
gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-CentOS-7
3.配置清单
/etc/ansible/ #目录
/etc/ansible/hosts #主机清单
/etc/ansible/ansible.cfg #主配置文件
4.实现远程主机的连接 (在192.168.6.129主机上)
ansible支持密码和SSH认证,因可以通过系统帐户密码认证或公钥私钥认证,所以整个过程简单、方便、安全,因此这里可以通过基于ssh 的Key认证来实现远程连接
ssh-genkey
ssh-copy-id 192.168.6.129(主机端)
scp -r .ssh 192.168.6.130:~/
5.配置主机清单
Vim /etc/ansible/ansible/hosts
[websrvs] #组名
192.168.6.130 #远程主机IP
测试:
先尝试下是否ping通192.168.6.130服务器
[root@Centos7 ansible]# ansible websrvs -m ping
成功:
6.配置自动化部署脚本 install_httpd.yml (对格式敏感)
---
- hosts: websrvs # /etc/ansible/hosts 文件配置中的websrvs
remote_user: root # 用那个用户执行操作
tasks:
- name: copy epel file # 简介
copy: src=/etc/yum.repos.d/test.repo dest=/etc/yum.repos.d/test.repo #模块操作
- name: clean yum # 简介
shell: yum clean all #模块操作
- name: flush yum # 简介
shell: yum repolist #模块操作
- name: install httpd # 简介
yum: name=httpd #模块操作
- name: start httpd # 简介
service: name=httpd state=started enabled=yes #模块操作
测试:
[root@Centos7 ansible]# ansible-playbook -C install_httpd.yml
7. 自动化安装ansible 服务
查看ss -ntl 状态
80端口没开 httpd 服务是80端口的
80端口没开 httpd 服务是80端口的
安装服务
ansible-playbook install_httpd.yml
查看客户机(192.168.6.130)80端口已开