前言:
ansible是新出现的自动化运维工具,基于Python的开发,集合
了众多运维工具(pupper、cfengine、chef、func、fabic)的优点,实现
了批量系统配置,批量程序部署,批量运行命令等功能,ansible是基
于模块工作的,本身没有批量部署的能力,真正具有批量部署能力的
是ansible所运行的模块,ansible只是一种框架。
ansible的特性:
模块化:调用定义的模块,完成特定任务,有Paramiko.PyYA
MLJinjja2(模版语言)。
三个关键模块:支持自定义模块,基于Python语言的实现,部
署简单,基于Python和SSH(默认系统已经安装),安全,基于OpenSSH
支持playbook编排任务。
兼等性:一个任务执行一边和执行n编的结果是一样的,不因重
复执行带来的意外情况,无需代理不依赖PKI(无需ssl),可以使用任何编程
语言写模块,YAML格式,编排任务,支持丰富的数据结构,较强大的多
层次的解决方案。
Ansible的架构:
由以下几个核心组件组成:
ansible(主体):ansible的核心程序,提供一个命令接口给用户对
ansible进行管理操作,Host inventory(主机清单):为Ansible定义了管理
主机策略,一般小型的环境下我们只需要在hosts文件中写入主机的IP地址
即可,但是到了大中型环境我们有可能需要使用静态的invenrory或者动态
主机清单来生成我们所需要执行的目标主机。
Core Modules(核心模块):Ansible执行命令的功能模块,多为内置的核心
模块,
Custom Module(拓展模块):如何ansible自带的模块无法满足我们的要求,
用户可自定义相应的模块来满足自己的需求。
Connection Plugins(连接插件):模块功能的补充,如连接类型的插件,循环
插件,变量插件,过滤插件等,该功能不太常用。
Playbook(任务剧本):编排自定义ansible任务集的配置文件,有ansbile顺序
执行,通常是JSON格式的*YML文件。
API:支持第三方程序调用的应用程序调用的应用程序编程接口。
ansible工作原理:
管理端支持local、ssh、zeronq三种连接方式连接被管理端,默认
使用ssh进行连接,这部分对应框架中的连接模块。
可以按应用类型等方式进行Host inventory(主机群)分类,管理节点通过
各类模块实现相应的操作----->单个模块,单条命令进行批量的执行,我们
可以称之为ad-hoc.
管理节点可以通过playbooks实现多个task的集合实现这一功能,如web
服务的安装部署,数据库服务器的批量部署备份等,playbooks我们可以简单
的理解为,系统通过组合多条ad-hoc操作的配置文件。
正文:
主控制机: 172.25.68.1
远程主机1: 172.25.68.2
远程主机2: 172.25.68.3
在控制主机上进行ansible软件的安装:
[root@server1 mnt]# ls
ansible-2.4.2.0-2.el7.noarch.rpm python-paramiko-2.1.1-4.el7.noarch.rpm
epel-release-7-11.noarch.rpm python-passlib-1.6.5-2.el7.noarch.rpm
python2-jmespath-0.9.0-3.el7.noarch.rpm sshpass-1.06-2.el7.x86_64.rpm
python-httplib2-0.9.2-1.el7.noarch.rpm
[root@server1 mnt]# yum install -y * ###进行软件的安装
在主控制机上进行用户的新建和密码的设定(使用ansible用户进行任务的推送)
useradd ansible ###进行用户的创建
passwd ansible ###进行用户密码的创建
进行用户的切换,在该用户下进行ansible主配置文件的建立和远程主机hosts文件的建立
su - ansible ###进行用户的切换
mkdir ansible ###进行主目录的建立
vim ansible.cfg ###进行配置文件的编辑(自己进行创建)
vim hosts ###进行远程主机请单文件的建立
配置文件:
用户主机请单:
在远程主机上进行ansible用户的建立并进行密码的设定
useradd ansible ###进行用户的建立
id ansible ###进行用户信息的查看
passwd ansible ###进行用户密码的设定
在主控制机上进行免密,并将公钥发送给远程主机
[ansible@server1 ansible]$ ssh-keygen ###进行密钥的生成
[ansible@server1 ansible]$ ssh-copy-id server2 ###进行密钥的发送
[ansible@server1 ansible]$ ssh-copy-id server3