Ansible-介绍-工作原理-安装-配置-常用模块使用
1. Ansible是什么?
关于Ansible
Ansible是一种IT自动化工具。它可以帮助我们批量配置系统,部署软件以及协调更高级的IT任务,例如连续部署或零停机滚动更新。
Ansible的主要目标是让工作变得简单和易操作,它同时也非常关注安全性和可靠性,传输过程是基于openssh来实现的,保证了传输的数据的安全性!大大降低安全风险!
2. Ansible的特点
l Ansible采用无代理方式(agentless)管理机器,因为Ansible的通信是通过openssh来实现的,所以你无需考虑如何远程升级受管机器的代理程序!
只要可以保证openssh可以正常通信即可!因为现在几乎所有的Linux平台都自带了openssh,Ansible在部署阶段无需考虑在远程机器上安装客户端软件!
这样极大的减少了前期部署的工作! Ansible有丰富的模块可以让你直接使用,当然在Ansible的社区也有很多优秀的开发者在贡献新的模块,
所以你总会找到适合自己的模块,当然你也可以自己开发模块!Ansible是使用python开发,所以关于Ansible的二次开发和模块开发成本相对较低
3. Ansible的工作流程

4. Ansible的一些基本概念
想要了解更多模块信息可以访问官方模块列表地址:https://docs.ansible.com/ansible/latest/modules/modules_by_category.html#modules-by-category
l 控制节点
任何装有Ansible的机器都可以叫做控制节点。您可以从任何控制节点调用/usr/bin/ansible执行一条任务,或执行/usr/bin/ansible-playbook命令读取剧本执行多个任务
l 托管节点
使用Ansible管理的的网络设备和服务器,都可以叫做托管节点!托管节点有时也可以叫做“主机“,托管节点无需安装ansible
l 清单( inventory )
托管节点的列表。Ansible在管理某个节点前,需要先将节点添加到清单文件中!清单文件有时也称为“主机清单文件”。
清单文件可以为每个托管节点指定信息,例如IP地址、端口等信息!也可以把主机分成主机组管理!
l 模块(Modules)
Ansibe执行代码的单位。Ansible自带了很多模块,每个模块都有特定的用途。我们可以通过任务调用单个模块,例如shell模块,可以调用shell命令在管理主机执行。
也可以在剧本中调用多个不同的模块!
l 任务(Tasks)
Ansible执行的单位,可以使用临时命令一次执行一个任务
l 剧本(Playbooks)
任务的有序列表文件,所以我们可以重复读取剧本文件重复运行剧本内的任务!这个是我们执行任务的主要方式
5. 临时命令简介(ad-hoc commands)
Ansible ad-hoc命令使用/usr/bin/ansible命令行工具对一个托管节点或多个托管节点一次执行一个任务!临时命令既快速又简单,但不可重复使用!
l 为什么要用临时命令(ad-hoc commands)
临时命令非常适合您很少重复执行的任务。例如,如果您想在圣诞节假期关闭实验室中所有机器的电源,则可以在Ansible中执行快速一线操作而无需编写剧本。临时命令如下所示:
$ ansible [pattern] -m [module] -a "[module options]"
临时任务可用于重新引导服务器,复制文件,管理程序包和用户等。您可以在临时任务中使用任何Ansible模块。
6. 使用剧本(Playbook)
剧本是Ansible的配置,部署和编排语言。与临时任务(ad-hoc)执行模式相比,剧本是使用ansible的完全不同的方式,并且功能特别强大。
Ansible安装:
控制节点: 安装 yum -y install ansible 配置ssh无密码登录 生成 ssh-keygen -t rsa 复制公钥到远程主机
例如: ssh-copy-id root@192.168.189.161 清单文件中添加主机组 vim /etc/ansible/hosts 定义一个组 例如: [webservers] 192.168.189.161 192.168.189.162 执行一个任务,测试ansible主机是否可以ping通目标主机
例如: ansible webservers -m ping -m 是指定调用什么模块 安装一下httpd
例如: ansible webservers -m shell -a 'yum -y install httpd' -a 是模块的选项参数
1. Ansible的配置文件
Ansible中的某些设置可以通过配置文件(ansible.cfg)进行调整,对于大多数环境默认配置就足够使用了,但是也可能会有一些特殊的原因我们需要修改这些配置参数!
l 配置文件路径
在Centos上yum安装的ansible,默认的配置文件路径如下:
配置文件:/etc/ansible/ansible.cfg
ping ping模块用来检查目标主机是否在线 例子:ansible webserver -m ping yum yum模块用来在Centos系统上使用yum命令安装软件包 选项: name: 指定安装包的名字 state:latest 安装最新版 present 默认安装 installed 安装 absent 卸载 removed 卸载 例子:ansible webservers -m yum -a ‘name=httpd state=latest’ command command模块用来执行系统命令,但是不支持shell下的特殊符号 如:| &&等 例子:ansible webservers -m command -a ‘echo 李想’ shell shell模块和command模块使用方法基本一致,但是他可以支持shell的特殊符号,如: | && 等 例子:ansible webservers -m shell -a “cd /opt/ && touch lixiang” service service模块用来管理centos上的服务的启动、关闭、重启和重载 选项: name: 服务名字 state: started(启动) stopped(停止) restarted(重启) reloaded(重载) enabled: 默认是no,将服务设置为开机自启 file file模块用来创建文件、目录、链接文件 选项: group:定义文件/目录的属组 mode:定义文件/目录的权限 owner:定义文件/目录的属主 path:必选项,定义文件/目录的路径 recurse:递归的设置文件的属性,只对目录有效 src:要被链接的源文件的路径,只应用于state=link的情况 dest:被链接到的路径,只应用于state=link的情况 state: directory:如果目录不存在,创建目录 file:即使文件不存在,也不会被创建 link:创建软链接 hard:创建硬链接 touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间 absent:删除目录、文件或者取消链接文件 user user模块用来创建用户 选项: home: 指定创建的家目录 groups:指定用户组 uid:指定UID password:设置密码,密码必须是密文 Openssl passwd name:创建的用户名字 createhome:是否创建家目录(yes/no) state: 是创建还是删除。(present,absent),默认是创建 shell: 指定用户登录的shell环境 remove:删除用户家目录,默认为no group group用来创建用户组 选项 gid:指定用的gid。 name:指定用户名。 state:是创建还是删除。(present,absent) copy copy模块用来复制文件至目标主机 选项: src:文件在管理主机的据对路径或者相对路径 dest:将文件复制到目标主机的路径 backup:是否将目标主机的同名文件备份,默认为no mode: 授权 directory_mode:递归授权 例子: ansible webservers -m copy -a ‘src=/root/nginx.sh dest=/opt/’ unarchive unarchive模块用来解压文件 选项: copy:在解压文件之前,是否先将文件复制到远程主机,默认为yes。若为no,则要求目标主机上压缩包必须存在 creates:指定一个文件名,当该文件存在时,则解压指令不执行 dest:远程主机上的一个路径,即文件解压的绝对路径。 group:解压后的目录或文件的属组 mode:解压后文件的权限 src:如果copy为yes,则需要指定压缩文件的源路径 owner:解压后文件或目录的属主 例子: ansible webservers -m unarchive -a ‘src=/root/nginx.tar.gz dest=/opt/ group=www ower=www mode=777 ’ get_url get_url模块,该模块主要用于从http、ftp、https服务器上下载文件(类似于wget 选项: url: 指定要下载的文件的URL地址 例子: ansible webservers -m get_url -a ‘url= http://nginx.org/download/nginx-1.15.7.tar.gz dest=/root/’ synchronize 使用rsync同步文件,将主控方目录推送到指定节点的目录下,使用此模块需要先安装rsync delete: 删除不存在的文件,delete=yes 使两边的内容一样(即以推送方为主),默认no src: 要同步到目的地的源主机上的路径; 路径可以是绝对的或相对的。如果路径使用”/”来结尾,则只复制目录里的内容,如果没有使用”/”来结尾,则包含目录在内的整个内容全部复制 dest:目的地主机上将与源同步的路径; 路径可以是绝对的或相对的。 dest_port:默认目录主机上的端口 ,默认是22,走的ssh协议。 mode: push或pull,默认push,一般用于从本机向远程主机上传文件,pull 模式用于从远程主机上取文件。 rsync_opts:通过传递数组来指定其他rsync选项。 fetch fetch模块它用于从远程机器获取文件,并将其本地存储在由主机名组织的文件树中。 选项: src:远程系统上要获取的文件。 这必须是一个文件,而不是一个目录。 后续版本可能会支持递归提取。 dest:保存文件的目录 setup setup 模块用于收集远程主机的一些基本信息。 选项: filter参数:用于进行条件过滤。如果设置,仅返回匹配过滤条件的信息。 常用的过滤关键词: ansible_all_ipv4_addresses:仅显示ipv4的信息 ansible_devices:仅显示磁盘设备信息 ansible_distribution:显示是什么系统,例:centos,suse等 ansible_distribution_major_version:显示是系统主版本 ansible_distribution_version:仅显示系统版本 ansible_machine:显示系统类型,例:32位,还是64位 ansible_eth0:仅显示eth0的信息 ansible_hostname:仅显示主机名 ansible_kernel:仅显示内核版本 ansible_lvm:显示lvm相关信息 ansible_memtotal_mb:显示系统总内存 ansible_memfree_mb:显示可用系统内存 ansible_memory_mb:详细显示内存情况 ansible_swaptotal_mb:显示总的swap内存 ansible_swapfree_mb:显示swap内存的可用内存 ansible_mounts:显示系统磁盘挂载情况 ansible_processor:显示cpu个数(具体显示每个cpu的型号) ansible_processor_vcpus:显示cpu个数(只显示总的个数) ansible_python_version:显示python版本 例子: 获取目标主机的ipv4地址 ansible webservers -m setup -a 'filter=ansible_all_ipv4_addresses'