ansible自动化管理

目录

一、ansible自动化运维

人工运维时代

自动化运维时代

自动化运维趋势

自动化运维的好处

二、ansible介绍

ansible特点

三、安装ansible

​编辑四 、修改主机清单

1、首先做主控端到被控端ssh免密操作

2、添加被控制端主机IP

​编辑

 五、ansible模块

1、command ---- 远程主机执行命

1.1切换到/data目录下执行ls

 1.2如果不存在/data目录 执行ls

 1.3如果存在/data目录 执行ls

 1.4只能执行简单命令,shell不执行

2、shell----支持shell特性的command

2.1查看所有主机boot分区的磁盘使用率

​编辑

3、script ---- 运行shell脚本

3.1输入hello world到远程主机的/opt/test.txt文件中

 4、copy ---- 复制文件到远程主机

4.1复制本地的test.sh到远程主机,强制覆盖并备份

5、fetch ---- 从主机提取文件到主控端

5.1不指定 flat 会在dest指定目录下创建一个目录,以主机名命名

6、file ---- 设置文件属性

6.1在/data/目录下新建data目录并新建文件 1.txt 属主为mysql 属组为root,没有/data/data则新建

​编辑

7、archive ---- 压缩

7.1压缩/data/data目录,并删除/data/data目录下文件

​编辑

8、unarchive ---- 解压缩

8.1打包本机/data目录,上传到远程主机并解压

六、playbook

1、核心元素


一、ansible自动化运维

人工运维时代

运维人员早期需要维护数量众多的机器,一次需要执行反复,重复的劳动力,很多机器需要同时部署相同的服务器或是执行相同的命令,还得反复登录不同的机器,执行重复的动作

自动化运维时代

早期运维人员会结合ssh免密登录以及shell脚本来完成自动化的部署操作。

系统管理员面临的问题主要是配置管理系统,远程执行命令,批量安装服务,启停服务等

后来也就诞生了众多的开源软件,自动化运维软件

- fabric
- puppet
- saltstack
- chef
- Ansible

其中有两款软件是基于python语言开发的,saltstack、ansible都是基于python编写

自动化运维趋势

人力运维>自动化运维>数据化运维,可视化运维>人工智能运维,devops

自动化运维的好处


- 将提高工作效率,减少重复性的劳动力操作
- 大大的减少了人为出错的可能性
- ansible支持数据化管理,数据化追源,找到问题的来源点

二、ansible介绍

ansible是一个同时管理多个远程主机的软件,必须是任意可以通过ssh登录的机器,因此可以管理的机器如

- 远程虚拟机
- 物理机
- 也可以直接管理本机机器

ansible通过ssh协议实现了,管理节点(安装了ansible服务的机器),被管理节点(被管理机器的节点)的通信。

只能是通过ssh协议登录的主机,就可以完成ansible自动化部署操作

- 批量文件分发
- 批量数据复制
- 批量数据修改、删除
- 批量自动化安装软件服务
- 批量服务启停
- 脚本化,自动批量服务部署

ansible特点

ansible的编排引擎可以出色的完成各种任务配置管理,ansible在流程控制,资源部署等方面很强大,并且ansible无需安装客户端软件,管理简介,使用yaml配置文件语法,功能强大,便于维护

ansible是基于python语言开发的,主要由python的两个ssh处理模块,paramiko以及PyYAML模块

- 安装部署简单
- 管理主机便捷、支持多台主机并行管理
- 无需安装被管理节点的客户端(no agent),且无需占用客户端的其他端口,仅仅使用ssh服务即可
- 不仅仅支持python,还支持其他语言的二次开发
- 不用root用户也可执行,降低系统权限

 

三、安装ansible

yum -y install epel-release && yum -y install ansible

ansible自动化管理_第1张图片四 、修改主机清单

1、首先做主控端到被控端ssh免密操作

ssh-keygen

ansible自动化管理_第2张图片

2、添加被控制端主机IP

vi /etc/ansible/hosts

ansible自动化管理_第3张图片

ssh 192.168.127.129 ##首次通信需要留下指纹,可以手动ssh一次,也可以修改配置文件
ansible all -m authorized_key -a "user=root key='{{ lookup('file','/root/.ssh/id_rsa.pub') }}'" -k   批量推公钥
all:主机列表 -m:指定模块 -a:执行模块使用的参数(指定参数)

ansible client2 -m ping #验证ansible是否可用

ansible自动化管理_第4张图片

ansible自动化管理_第5张图片

 五、ansible模块

1、command ---- 远程主机执行命

使用 command 模块在远程主机中执行命令时,不会经过远程主机的 shell 处理,在使用 command 模块时,如果需要执行的命令中含有重定向、管道符等操作时,这些符号也会失效。

相关选项如下:
creates:创建一个文件名,当该文件存在,则该命令不执行
free_form:要执行的linux指令,这里的free_form不需要写成赋值的形式,直接写要执行的命令即可,ansible -a代替
chdir:在执行指令之前,先切换到该目录
removes:移动一个文件名,当该文件不存在,则该选项不执行
executable:切换shell来执行指令,该执行路径必须是一个绝对路径

1.1切换到/data目录下执行ls

all:主机列表 -m:指定模块 -a:执行模块使用的参数(指定参数)

ansible all -m command -a 'chdir=/data ls'

ansible自动化管理_第6张图片

 1.2如果不存在/data目录 执行ls

ansible all -m command -a 'creates=/data ls'

ansible自动化管理_第7张图片

 1.3如果存在/data目录 执行ls

ansible all -m command -a 'removes=/data ls'

ansible自动化管理_第8张图片

 ansible自动化管理_第9张图片

 1.4只能执行简单命令,shell不执行

ansible all -m command -a ' ls | grep rc'

ansible自动化管理_第10张图片

2、shell----支持shell特性的command

在远程主机执行命令,相当于调用远程主机的shell进程,然后在该shell下打开一个子shell运行命令(支持管道符号等功能)

2.1查看所有主机boot分区的磁盘使用率

ansible all -m shell -a ' df -h | grep boot'

ansible自动化管理_第11张图片

3、script ---- 运行shell脚本

实现远程批量运行本地的 shell 脚本

3.1输入hello world到远程主机的/opt/test.txt文件中

echo 'echo "hello world" > /opt/test.txt ' > test.sh
ansible all -m script -a "test.sh"

ansible自动化管理_第12张图片

 4、copy ---- 复制文件到远程主机

相关选项如下:
backup:在覆盖之前,将源文件备份,备份文件包含时间信息。有两个选项:yes|no
content:用于替代“src”,可以直接设定指定文件的值
dest:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录
directory_mode:递归设定目录的权限,默认为系统默认权限
force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes
others:所有的file模块里的选项都可以在这里使用
src:被复制到远程主机的本地文件,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用“/”来结尾,则只复制目录里的内容,如果没有使用“/”来结尾,则包含目录在内的整个内容全部复制,类似于rsync
owner    文件复制到远程并设定属主,默认为root
group    文件复制到远程并设定属组,默认为root
mode    文件复制到远程并设定权限,默认file=644,directory=755

4.1复制本地的test.sh到远程主机,强制覆盖并备份

ansible client1 -m copy -a "src=/root/test.sh dest=/root/ backup=yes force=yes"

ansible自动化管理_第13张图片

 ansible client1 -m copy -a "content=/root/test.sh dest=/root/test.sh backup=yes force=yes"

ansible自动化管理_第14张图片

5、fetch ---- 从主机提取文件到主控端

该模块用于从远程某主机获取(复制)文件到本地。有两个选项:
dest:用来存放文件的目录
src:在远程拉取的文件,并且必须是一个file,不能是目录

5.1不指定 flat 会在dest指定目录下创建一个目录,以主机名命名

ansible client1 -m fetch -a "src=/root/test.sh dest=/root/ flat=yes"
ansible client1 -m fetch -a "src=/root/test.sh dest=/data/"
ls /data/

ansible自动化管理_第15张图片

6、file ---- 设置文件属性

file模块用来设置文件属性,并且创建或者删除目录,创建连接。
相关选项如下:
force:需要在两种情况下强制创建软链接,一种是源文件不存在,但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no
group:定义文件/目录的属组
mode:定义文件/目录的权限
owner:定义文件/目录的属主
path:必选项,定义文件/目录的路径
recurse:递归设置文件的属性,只对目录有效
src:被链接的源文件路径,只应用于state=link的情况
dest:被链接到的路径,只应用于state=link的情况
state:
 directory:如果目录不存在,就创建目录       
 file:即使文件不存在,也不会被创建
 link:创建软链接
 hard:创建硬链接       
 touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
 absent:删除目录、文件或者取消链接文件

6.1在/data/目录下新建data目录并新建文件 1.txt 属主为mysql 属组为root,没有/data/data则新建

ansible client1 -m file -a 'path=/data/data/1.txt owner=mysql group=root state=directory'
ansible client1 -m command -a "ls -l /data/data"


ansible自动化管理_第16张图片

7、archive ---- 压缩

path    远程主机上需要被打包/压缩的源文件(可以是文件列表,支持glob模式)
dest    打包/压缩后的包文件路径(包文件的父目录必须存在);如果包文件已存在,则会被覆盖。
format    指定压缩类型,包括:bz2、gz(默认)、tar、xz、zip
owner    指定属主
group    指定属组
mode    指定权限
remove    yes|no,默认为no,在打包/压缩后,不删除源文件。

7.1压缩/data/data目录,并删除/data/data目录下文件

ansible client1 -m archive -a 'path=/data/data dest=/data/data.gz format=gz remove=yes'
ansible client1 -m command -a "ls -l /data/data"

ansible自动化管理_第17张图片

8、unarchive ---- 解压缩

用于解压文件,模块包含如下选项:
copy:在解压文件之前,是否先将文件复制到远程主机,默认为yes。若为no,则要求目标主机上压缩包必须存在。
creates:指定一个文件名,当该文件存在时,则解压指令不执行
src:如果copy为yes,则需要指定压缩文件的源路径
dest:远程主机上的一个路径,即文件解压的路径
owner:解压后文件或目录的属主
group:解压后的目录或文件的属组
mode:解压后文件的权限
list_files:如果为yes,则会列出压缩包里的文件,默认为no,2.0版本新增的选项

8.1打包本机/data目录,上传到远程主机并解压

tar cfP data.tar.gz /data
ansible client1 -m unarchive -a 'src=/root/data.tar.gz dest=/data copy=yes'

ansible自动化管理_第18张图片

六、playbook

1、核心元素

name 唯一id,用来标识这个play主要用来干什么
hosts 列出这个play会在远程的哪些host上执行
remote_user 指定远程host执行用户
become_method 用于指定切换账号时使用的特权账号,如su和sudo
become 用于设置是否切换账号运行,如果没有设置become_method,则使用sudo进行账号切换
become_user 用于指定使用sudo进行账号切换时具体切换到哪个账号,使用这个参数时需要become为true,对于become_method可设置也可不设置,如果不设置,使用默认的sudo账号进行账号切换
ignore_errors 用于控制当play中的某一个task执行失败时,是否继续执行后面的task
pre_tasks 用于指定在roles定义的tasks之前执行的tasks,具体可参考ansible playbook play执行顺序
roles 列出这个play会引入哪些roles,可与pre_tasks,post_tasks和tasks一起控制play执行顺序
post_tasks 用于指定所有task执行之后的任务,跟pre_tasks一样也可以用来控制执行顺序
tasks     用于指定一系列要执行的task列表,跟pre_tasks, post_tasks和roles一起控制play执行顺序
run_once   用于控制对于相同的host是否对相同任务执行多次,默认是false
timeout 设置每个task最多执行时间,超时则task执行失败,返回错误
vars  使用Dictionary格式定义play级别变量,可参考ansible变量详解
vars_files 引入包含当前play变量的文件列表
gather_facts 设置是否需要收集远程host的fact变量结果
handlers 被tasks调用的任务列表

你可能感兴趣的:(ansible,自动化,linux)