Ansible是什么?
随着移动互联、物联网、互联网+、大数据、以及云计算等大规模应用的催生推动,以及人们日常的生活的互联网化 互联网的发展不仅冲击了影响着整个经济体,更对人们的生活理念影响深远,在体验到互联网到来的便利和舒适的同时,人们也不在满足于“可以用”而是用的爽。
在互联网迅猛发展的同时,运维这个工种也会走向公众视野,被更多人所知晓,早期的公司业务有数十台,上百台服务器已经是非常庞大的规模。每个运维同时操作10-20台机器,忙碌的奔波于个电脑之间的配置重启服务,无法保证操作能准确无误,更何况随着互联网的迅猛发展,一个公司拥有几十台上百台的机器已经不是什么稀奇事情,巨型公司数万台机器不在话下。如果在用老一套的办法一台台人工配置已经不现实,这时候就需要自动化安装,简单的说,运维自动化就是将日常重复性的工作通过规则设定使在指定的范围时间内自动化运行,但是整个过程不需要人工参与而Ansible就是帮助运维人员实现的自动化的工具之一。
为什么要选择Ansible
Ansible完全基于Python开发,而DevOps在宫内已经是一种趋势,Python被逐步普及,运维人员自己开发工具的门槛逐步降低,得益于此,方便对Ansible二次开发;
Ansible丰富的内置模块,甚至还有专门为商业平台开发的功能模块,近600个模块完全可以满足日常功能所需;
在Ansible去中心化概念下,一个简单的复制操作即可完成配置管理中心的迁移;
Agentless(无客户端)客户端无须任何的配置,由管理端配置好后即可使用,这点非常诱人。
Ansible是如何工作的
Ansible没有客户端,因此底层通信依赖于系统软件,Linux系统下基于OpenSSH通信Windows系统下基于PowerShell,管理端必须是Linux系统,使用者认证通过后再管理节点通过Ansible工具调用各应用模块,将指令推送至被管理端执行,并在执行完毕后自动删除产生的临时文件。Ansible具体的工作机制官方有专栏介绍:https://www.ansible.com/how-ansible-works
Ansible的应用场景
Ansible底层基于Python,以简单著称,配置文件的格式也以INI和YAML为主,与其他的管理工具相比,学习成本较低,学习曲线也很平滑,无论是基础运维人员还是资深运维工程师都可以较快的上手,稍加练习便可以熟练掌握。如果具备Dev基础,熟悉Python以及PHP等主流的语言,基于Ansible开放APL接口做二次开发,可以灵活有效的发挥其价值,Ansible自身也包括非常丰富的内置模块,从windows系统到开源Linux系统,从文件同步到命令执行,从软件的安全升级到配置的维护变更,等等。。几乎有了运维日常所以的技术应用,系统下所有的操作系统从运维操作角度分为两类
文件传输:文件的本地传输和异地传输,所有文件的空间形态,时间形态变化构成了文件传输类的操作。
命令执行:终端所有的操作对系统来讲都是指令的组成,最终转换为基础硬件可接受的电信号完成任务集。对运维操作的用户行来讲,除文件传输以外的其他操作可称为命令执行
从自动化工作类型角度归类如下:
1)应用部署
现今的应用功能越来越强大,同步应用部署过程的依赖和规则也很复杂,但是对应用运维的要求没有降低,有效快速正确的平滑的应用部署要求强烈,Ansible内置网络,应用,系统,第三方云平台扩展等完善的功能模块,协助运维快速完成应用的安装、卸载、升级、启停、配置等部署类的工作,即使对跨平台或知名的商业硬件也是同样支持
2)配置管理
配置管理是通过技术或行政手段对软件产品及其开发过程和生命周期进行控制、规范的一系列措施,配置管理的目标是记录软件产品的演化过程。确保软件开发者在软件生命周期中各个阶段都能得到精确的产品配置,在日益复杂的IT环境和用户的需求下,Ansible内置File、Template、结合Jinja、Lineinfile等内置的模块,同时无缝集合GitHub、GitLab、Git、Jenkins等主流版本控制和CI持续集成的工具,助理配置管理自动化
3)有效保证Tasks任务流按既定规则和顺序完成事先定制的目标和计划,同时Roles编排方式又能在一定的程序上从书写习惯和代码层编排上保证整体项目的可架构性和规范性,协助控制项目维护成本不致过高
如上场景适用于网络管理员,系统运维,应用运维,桌面运维,DevOps。基础架构运维等行业,开发人员经过简单的了解即可初步上手,同样也适用于中大型公司,可以投入人力,精力,财力对Ansible进行二次开发等。
Ansible的安装部署
Ansible的安装部署很简单,其依赖于Python和SSH,而系统默认已经安装,除windows外,Redhat、Centos、OSX、Debian可作为管理节点部署Ansible。
Ansible被Redhat收购后,其安装源被收录在EPEL中,如果已经安装EPEL可以直接Yum或者APT安装,通过PIP和easy_install和Python第三方包管理器也可以安装Ansible
1、PIP安装方式
ansible底层也是基于Python编写,所以直接可以通过PIP方式安装Ansible
1)安装EPEL
[root@ansible-yankerp ~]# yum -y install epel-release
2)安装Ansible服务(安装GCC等支持包)
[root@ansible-yankerp ~]# yum install gcc glibc-devel zlib-devel rpm-build openssl-devel -y
[root@ansible-yankerp ~]# yum install python-pip python-devel -y
升级PIP至最新版本
[root@ansible-yankerp ~]# pip install --upgrade pip Collecting pip Downloading pip-9.0.1-py2.py3-none-any.whl (1.3MB) 100% |████████████████████████████████| 1.3MB 711kB/s Installing collected packages: pip Found existing installation: pip 8.1.2 Uninstalling pip-8.1.2: Successfully uninstalled pip-8.1.2 Successfully installed pip-9.0.1
安装Ansible服务
[root@ansible-yankerp ~]# pip install ansible --upgrade Collecting ansible Downloading ansible-2.4.2.0.tar.gz (6.5MB) 100% |████████████████████████████████| 6.5MB 144kB/s Collecting jinja2 (from ansible) Downloading Jinja2-2.10-py2.py3-none-any.whl (126kB) 100% |████████████████████████████████| 133kB 376kB/s Collecting PyYAML (from ansible) Downloading PyYAML-3.12.tar.gz (253kB) 100% |████████████████████████████████| 256kB 270kB/s Collecting paramiko (from ansible) Downloading paramiko-2.4.0-py2.py3-none-any.whl (192kB) 100% |████████████████████████████████| 194kB 273kB/s Collecting cryptography (from ansible) Downloading cryptography-2.1.4-cp27-cp27mu-manylinux1_x86_64.whl (2.2MB) 100% |████████████████████████████████| 2.2MB 187kB/s
安装结束后可以使用ansible –version查看
到这里ansible已经安装成功
首先需要安装epel源后可找到并安装Ansible如下:
[root@ansible-yankerp ~]# sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak [root@ansible-yankerp ~]# sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo [root@ansible-yankerp ~]# sudo wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-7.repo
建立YUM缓存
[root@ansible-yankerp ~]# yum clean all [root@ansible-yankerp ~]# yum makecache
安装Ansible
[root@ansible-yankerp ~]# yum install ansible
安装结束后,查看Ansible版本
[root@ansible-yankerp ~]# ansible --version
3、Python多环境扩展管理
众所周知,Python发展至今,版本众多,部分版本功能差异较大,在使用过程中经常遇到第三方库依赖的Python版本和系统Python版本不一致的情况。同时又因系统底层需要调用当前版本Python,所以不能随意变更当前系统Python的版本。如此情景就会有Python多版本的情况,于是Python多环境管理工具应用而生。这里为大家介绍两款工具,分别是pyenv和Virtualenv。Pyenv和Virtualenv都是Python管理工具,不同的是,前者是对Python的版本进行管理,实现不同版本之间的切换和使用;而后者通过创建虚拟环境,实现与系统环境及其他的Python环境隔离,避免相互干扰。
[root@ansible-yankerp ~]# yum install git -y
2)下载pyenv
[root@ansible-yankerp ~]# git clone git://github.com/yyuu/pyenv.git ~/.pyenv Cloning into '/root/.pyenv'... remote: Counting objects: 15828, done. remote: Compressing objects: 100% (25/25), done. Receiving objects: 11% (1742/15828), 348.01 KiB | 118.00 KiB/s
3)修改环境变量
[root@ansible-yankerp ~]# echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc [root@ansible-yankerp ~]# echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc [root@ansible-yankerp ~]# echo 'eval "$(pyenv init -)"' >> ~/.bashrc
设置完环境变量后重启当前的shell
[root@ansible-yankerp ~]# exec $shell -l
查看Pyenv版本
[root@ansible-yankerp ~]# pyenv --version pyenv 1.2.0-8-g785738d
4、Vitualenv的部署与使用
1)部署
[root@ansible-yankerp ~]# pip install virtualenv Downloading/unpacking virtualenv Downloading virtualenv-15.1.0-py2.py3-none-any.whl (1.8MB): 1.8MB downloaded Installing collected packages: virtualenv Successfully installed virtualenv Cleaning up...
2)通过Virtualenv管理多Python版本
Virtualenv不是通过多版本管理的方式来实现系统同时兼容多Python环境的,而是通过在工作目录中虚拟完整的Python环境来实现Python多环境的并存,接下来我们看Virtualenv的使用方式
Virtualenv [OPTIONS] DEST_DIR
中括号OPTIONS表示参数选项,是可选项,即可有可无; DEST_DIR表示命令要执行的目录如:
//创建 /data/yankerp的虚拟目录
[root@ansible-yankerp ~]# virtualenv /data/yankerp/ Using base prefix '/root/.pyenv/versions/3.4.1' New python executable in /data/yankerp/bin/python3.4 Also creating executable in /data/yankerp/bin/python Installing setuptools, pip, wheel...done.
可用的OPTIONS选项如下:
–version 显示当前版本号
-h,–help 显示帮助信息
-v,–verbose 显示详细信息
-q,–quiet 不显示详细信息
切换到虚拟环境/data/yankerp如下:
[root@ansible-yankerp ~]# source /data/yankerp/bin/activate
(yankerp) [root@ansible-yankerp ~]#
退出虚拟目录curl+d