自动化运维管理工具——Ansible

目录

一、概述

(一)特点

(二)工作特性

二、运行机制

三、安装

(一)配置源

(二)安装ansible

(三)查看相关文件

(四)配置文件

1、主配置文件

2、部署端的hosts

3、Playbook相关

四、命令相关

(一)ansible

1、参数

2、语法

(二)ansible-doc

1、选项

2、举例

(1)列出所有模块名称

(2)查看模块的简短文档

(3)查看模块的完整文档

(4)指定额外的模块路径

(5)以JSON格式显示文档信息

(三)ansible-playbook(用于执行Ansible Playbook的命令)

1、语法

2、选项

 3、示例:

(1)执行Playbook

(2)指定主机清单文件

(3)仅运行指定标签的任务

(4)覆盖变量文件中的变量值

(5)检查Playbook的语法是否正确

(6)列出Playbook中的所有任务

(7)从指定任务开始执行Playbook

(8)逐步询问每个任务是否要执行

(9)增加详细度

(10)模拟执行Playbook

五、主机组配置

(一)基本配置

1、vim /etc/ansible/hosts

2、配置/etc/hosts

3、设置SSH密钥对验证登录

(二)也可以定义范围主机

六、简单案例

(一)连通性测试

1、ansible  192.168.115.131 -m ping   ​编辑

 2、ansible webServers -m ping

(二)主机信息查看

1、ansible webServer -m shell -a "ls -l /root"

2、ansible webServer -m shell -a "hostname"

 (三)安装服务

七、常见模块

(一)command(执行命令,但是命令中不能包含"< > | &")

(二)shell(执行命令,基于/bin/sh,也可执行远程主机已经存在的脚本文件)

(三)raw(执行命令,不需要远程主机安装python环境)

(四)script(拷贝ansible端的shell脚本至远程主机并执行,执行完毕后删除远程主机的脚本文件)

(五)ping(测试连通性)

(六)file(对远程主机进行文件操作)

1、参数

2、案例:

(七)copy(拷贝文件至远程主机)

1、参数

2、案例:复制文件并设置权限

(八)service(对远程主机的服务进行管理)

1、参数

2、案例

(九)cron(管理远程主机的计划任务)

1、参数

2、案例

(十)yum(管理远程主机的软件包)

1、参数

2、案例

(十一)user与group(管理远程主机的用户与组)

1、参数

(十二)synchronize(管理远程主机数据同步,调用rsync)

1、参数:

(十三)setup(查看远程主机信息)

1、参数

2、案例

(十四)get_url(使远程主机下载文件(http、https、ftp),类似于wget)

1、参数

2、案例:通过以下步骤实现

(十五)unarchive(解压缩)

1、参数

2、案例

(十六)archive(归档压缩)

1、参数

2、案例

(十七)template(Templat模板使用jinjia2语言进行配置,模板文件的后缀名为.j2)

八、剧本(ansible变量)

(一)格式

(二)返回状态

(三)核心元素

1、 Hosts:主机组

2、Tasks:任务列表

3、Variables:变量,设置方式有四种

4、 Handlers:由特定条件触发的任务。

5、Templates:包含了模块语法的文本文件

(四)案例

1、vim   mariadb.yml

 2、运行剧本

(五)roles

(六)批量创建目录结构


一、概述

(一)特点

1、部署简单,没有客户端,只需在主控端部署Ansible环境,被控端无需做任何操作;

2. 模块化:调用特定的模块,完成特定任务

3. 默认使用SSH协议对设备进行管理;

4. 主从集中化管理;

5、配置简单、功能强大、扩展性强;

6、支持API及自定义模块,可通过Python轻松扩展;

7、通过Playbooks来定制强大的配置、状态管理

8. 对云计算平台、大数据都有很好的支持;

9. 具有幂等性:一个操作在一个主机上执行一遍和执行N遍的结果是一样的

(二)工作特性

1、连接插件connection plugins:负责和被监控端实现通信;

2、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;

3、各种模块核心模块、command模块、自定义模块;

4、借助于插件完成记录日志邮件等功能;

5、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务

二、运行机制

1、Ansible: ansible的核心模块

2、Host Inventory:主机清单,也就是被管理的主机列表

3、Playbooks:ansible的剧本,可想象为将多个任务放置在一起,一块执行

4、Core Modules:ansible的核心模块

5、Custom Modules:自定义模块

6、Connection Plugins:连接插件,用于与被管控主机之间基于SSH建立连接关系

7、Plugins:其他插件,包括记录日志、邮件等

三、安装

(一)配置源

命令:yum install -y epel-release

(二)安装ansible

命令:yum install -y ansible

(三)查看相关文件

命令:rpm  -ql  ansible

安装目录:/etc/ansible

(四)配置文件

1、主配置文件

/etc/ansible/ansible.cfg

2、部署端的hosts

/etc/ansible/hosts

3、Playbook相关

/etc/ansible/roles

四、命令相关

(一)ansible

1、参数

(1)-v              详细模式,如果执行成功,输出详细结果
(2)-i              指定host文件路径,默认在/etc/ansible/hosts
(3)-f,              -forks=NUM    NUM默认是整数5,指定fork开启同步进程的个数
(4)-m             指定使用的module名称,默认command模块
(5)-a              指定模块的参数
(6)-k              提示输入SSH密码,而不是使用基于ssh密钥认证
(7)-sudo        指定使用sudo获取root权限
(8)-K              提示输入sudo密码
(9)-u              指定移动端的执行用户
(10)-C            测试命令执行会改变什么内容,不会真正的去执行
(11)all --list     显示hosts清单

2、语法

ansibe -i [filePath] -m [moduleName] -a [arguments]

(二)ansible-doc

ansible-doc是用于查阅Ansible模块文档的命令。该命令可用于列出安装在本地系统中的所有模块,并提供文档以及示例。

1、选项

(1)-l        列出所有模块名称

(2)-s        查看指定模块

(3)--help        显示帮助信息。

(4)--version        显示版本信息

(5)-a        显示模块的完整文档

(6)-M        指定额外的模块路径

(7)--json        以JSON格式显示文档信息

2、举例

(1)列出所有模块名称

命令:ansible-doc    -l

(2)查看模块的简短文档

命令:ansible-doc   -s  module_name       

其中module_name替换为要查询的模块名称。

(3)查看模块的完整文档

命令:ansible-doc -a module_name

(4)指定额外的模块路径

ansible-doc -M /path/to/extra/module_dir module_name

其中/path/to/extra/module_dir替换为包含自定义模块的目录路径,module_name替换为要查询的模块名称。

(5)以JSON格式显示文档信息

命令:ansible-doc --json module_name

(三)ansible-playbook(用于执行Ansible Playbook的命令)

1、语法

ansible-playbook [选项] playbookName

2、选项

(1)-e :外部变量传递

(2)-i: 指定主机清单文件

(3)-l: 跟随由逗号分隔的主机名称列表限制作用的主机

(4)-e: 覆盖变量文件中的变量值

(5)-t: 仅运行指定标签的任务

(6)--skip-tags: 跳过指定标签的任务

(7)--syntax-check: 检查Playbook的语法是否正确

(8)--list-tasks: 列出Playbook中的所有任务

(9)--start-at-task: 从指定的任务开始执行Playbook

(10)--step: 逐步询问每个任务是否要执行

(11)-v: 增加详细度,可多次使用增加级别

(12)--check: 运行模拟模式,只测试任务是否需要执行,不会真正执行任务

 3、示例:

(1)执行Playbook

命令:ansible-playbook playbook.yml

其中playbook.yml替换为要执行的Playbook的文件名。

(2)指定主机清单文件

命令:ansible-playbook -i inventory.ini playbook.yml

其中inventory.ini替换为要使用的主机清单文件的路径。如果未指定该选项,则默认为/etc/ansible/hosts。

(3)仅运行指定标签的任务

命令:ansible-playbook -i inventory.ini playbook.yml -t task1,task2

其中task1,task2替换为要运行的任务的标签名称。

(4)覆盖变量文件中的变量值

命令:ansible-playbook -i inventory.ini playbook.yml -e "foo=bar"

其中foo替换为要覆盖的变量名,bar替换为要设置的新值。

(5)检查Playbook的语法是否正确

命令:ansible-playbook --syntax-check playbook.yml

该命令将检查Playbook的语法是否正确,并显示任何错误信息。

(6)列出Playbook中的所有任务

命令:ansible-playbook --list-tasks playbook.yml

该命令将列出Playbook中的所有任务。

(7)从指定任务开始执行Playbook

命令:ansible-playbook -i inventory.ini playbook.yml --start-at-task="task3"

其中task3替换为要从其开始执行的任务名称。

(8)逐步询问每个任务是否要执行

命令:ansible-playbook -i inventory.ini playbook.yml --step

该命令将在运行每个任务之前询问用户是否要执行该任务。

(9)增加详细度

命令:ansible-playbook -i inventory.ini playbook.yml -v

使用该选项可增加命令的详细度。可多次使用此选项以增加日志详细度。

(10)模拟执行Playbook

命令:ansible-playbook -i inventory.ini playbook.yml --check

使用该选项可进行模拟运行,以测试所有任务是否需要执行,而不实际执行任务。

五、主机组配置

(一)基本配置

1、vim /etc/ansible/hosts

[webServers]
192.168.115.131
192.168.115.132

2、配置/etc/hosts

vim   /etc/hosts
192.168.115.131     server1
192.168.115.132     server2

3、设置SSH密钥对验证登录

(二)也可以定义范围主机

[webServers]
192.168.115.13[1:2]

六、简单案例

(一)连通性测试

1、ansible  192.168.115.131 -m ping
   

 2、ansible webServers -m ping

(二)主机信息查看

1、ansible webServer -m shell -a "ls -l /root"

2、ansible webServer -m shell -a "hostname"

 (三)安装服务

ansible webServer -m shell -a "yum  -y  install  vsftpd"

七、常见模块

(一)command(执行命令,但是命令中不能包含"< > | &"

 案例:ansible webServer -m command -a "netstat  -anptul"

(二)shell(执行命令,基于/bin/sh,也可执行远程主机已经存在的脚本文件)

案例:ansible webServer -m shell -a "netstat  -anptul  |  grep  vsftb"

(三)raw(执行命令,不需要远程主机安装python环境)

案例:ansible webServer -m raw -a "ls  -l"

(四)script(拷贝ansible端的shell脚本至远程主机并执行,执行完毕后删除远程主机的脚本文件)

语法: ansible  all -m script -a "chdir=/opt 脚本名"

chdir                切换脚本运行结果的目录

(五)ping(测试连通性)

(六)file(对远程主机进行文件操作)

1、参数

(1)force(强制创建软连接)

①yes|no

②用于使用ansible编译安装软件后的命令优化

(2)group(文件属组)

(3)owner(文件属主)

(4)mode(文件权限)

(5)path(文件路径)

(6)state(文件类型)

①directory(目录)

②link

③hard

④touch(文件)

⑤absent

2、案例:

ansible 192.168.115.131 -m file -a "path=/opt/t1 state=directory mode=0700 owner=juexing group=juexing"

(七)copy(拷贝文件至远程主机)

1、参数

(1)backup

若目标文件存在,则覆盖前是否进行备份,yes|no

(2)content(等效于src)

(3)src

要复制文件在本地的路径,若复制目录则需要在目录名称结尾处添加/

(4)dest

复制文件到远程主机的绝对路径,若复制源是目录,则目录也必须是目录

(5)directory_mode(采用递归的形式设置目录权限)

(6)force(  是否进行强制覆盖,yes|no)

2、案例:复制文件并设置权限

命令:ansible webServer -m copy -a "src=/etc/yum.repos.d/epel.repo dest=/opt/epel.repo mode=0444 owner=juexing group=juexing "

(八)service(对远程主机的服务进行管理)

1、参数

(1)enabled(开机自启,yes|no)

(2)name(服务名称)

(3)parttern(定义模式)

(4)sleep(若执行了restarted,该时间设置stop到start 的间隔时间)

(5)state

①started(开启)

②stopped(关闭)

③restarted(重启)

④reloaded(平滑重启)

2、案例

ansible 192.168.115.131 -m service -a "name=httpd state=started"

(九)cron(管理远程主机的计划任务)

1、参数

(1)backup(备份冲突计划任务,yes|no)

(2)cron_file(指定计划任务存储路径,/etc/cron.d)

(3)minute(0~59,*,*/2)

(4)hour(0~23,*,*/2)

(5)day(1~31)

(6)mouth(1~12)

(7)weekly(0~7,0和7都是周日)

(8)job(执行的任务,依托于state=present)

(9)state

①present(创建)

②absent(删除)

(10)name(描述信息)

(11)user(执行job的用户)

(12)special_time(指定执行的时间)

参数:

①reboot(重启)

②annually(每年)

③mouthly(每月)

④weekly(每周)

⑤daily(每天)

⑥hourly(每小时)

2、案例

命令:ansible 192.168.115.131 -m cron -a "name=backup state=present minute=10 hour=15 job=whoami"

 在文件vim  /var/spool/cron/root中查看

(十)yum(管理远程主机的软件包)

1、参数

(1)config_file(yum源的配置文件)

(2)disable_gpg_check(关闭gpgcheck)

(3)disablerepo(不启用某个源)

(4)enablerepo(启用某个源)

(5)name(安装软件的名称)

(6)state

①present(安装)

②installed(安装)

③latest(安装最新版本)

④absent(删除)

⑤removed(删除)

2、案例

ansible webServer -m yum -a "name=ftp  state=present"

(十一)user与group(管理远程主机的用户与组)

1、参数

(1)name(指定用户名)

(2)group(指定组名)

(3)groups(指定附加组)    注意:指定多个附加组用“,”隔开

(4)shell(指定登录shell)

(5)state

①present(创建)

②absent(删除)

(6)remove(递归删除用户家目录及邮件,state=absent)

(7)password(指定用户密码(md5加密的密码))

(十二)synchronize(管理远程主机数据同步,调用rsync)

1、参数:

(1)archive(归档)

(2)checksum(数据验证,默认关闭)

(3)compress(是否压缩,默认开启)

(4)copy_links(复制链接文件,默认关闭)

(5)delete(删除不存在的文件,默认是no)

(6)src(源文件)

(7)dest(目标路径)

(8)dest_port(目标端口,默认22)

(9)mode

①push(推送,文件上传)

②pull(拉取,文件下载)

(十三)setup(查看远程主机信息)

1、参数

file(指定要查看的内容)

(1)ansible_all_ipv4_addresses:仅显示ipv4的信息。

(2)ansible_devices:仅显示磁盘设备信息。

(3)ansible_distribution:显示是什么系统,例:centos,suse等。

(4)ansible_distribution_major_version:显示是系统主版本。

(5)ansible_distribution_version:仅显示系统版本。

(6)ansible_machine:显示系统类型,例:32位,还是64位。

(7)ansible_eth0:仅显示eth0的信息。

(8)ansible_hostname:仅显示主机名。

(9)ansible_kernel:仅显示内核版本。

(10)ansible_lvm:显示lvm相关信息。

(11)ansible_memtotal_mb:显示系统总内存。

(12)ansible_memfree_mb:显示可用系统内存。

(13)ansible_memory_mb:详细显示内存情况。

(14)ansible_swaptotal_mb:显示总的swap内存。

(15)ansible_swapfree_mb:显示swap内存的可用内存。

(16)ansible_mounts:显示系统磁盘挂载情况。

(17)ansible_processor:显示cpu个数(具体显示每个cpu的型号)。

(18)ansible_processor_vcpus:显示cpu个数(只显示总的个数)。

2、案例

(1)返回远程主机的所有信息

ansible servers -m setup

(2)ansible servers -m setup  -a "filter=ansible_all_ipv4_addresses"

(十四)get_url(使远程主机下载文件(http、https、ftp),类似于wget)

1、参数

(1)url(指定下载路径)

(2)dest(指定下载位置)

(3)url_username(指定登录用户名)

(4)url_password(指定用户密码)

2、案例:通过以下步骤实现

(1)ansible 192.168.115.131 -m service -a "name=httpd state=started"

(2)systemctl  start httpd

(3)cd  /var/www/html

(4)echo  111 >t2

(5)ansible 192.168.115.132 -m get_url -a "url=http://192.168.115.131/t2 dest=/opt"

(6)

(十五)unarchive(解压缩)

1、参数

(1)copy

从ansible服务器复制文件到远程主机,默认yes。

设置为no,需要使用src指定远程主机中包的存在位置

(2)src(指定远程主机软件包位置)

(3)dest(解压后的软件存储位置)

(4)mode(解压后的文件权限)

2、案例

ansible all -m unarchive -a 'copy=no src=/mnt/etc.tar.gz dest=/mnt mode=777’

(十六)archive(归档压缩)

1、参数

(1)path      打包目录名称

(2)dest       声称打包文件名称

(3)format   打包格式

(4)owner    指定文件属主

(5)mode    指定文件权限

2、案例

ansible all -m archive -a 'path=/etc dest=/mnt/etc.tar.gz format=gz owner=devops mode=777'

(十七)template(Templat模板使用jinjia2语言进行配置,模板文件的后缀名为.j2)

八、剧本(ansible变量)

(一)格式

1、文件的第一行应该以“---”(三个连字符)开始,表明YAML文件的开始。

2、在同一行中,#之后的内容表示注释,类似于shell,python和ruby。

3、YAML中的列表元素以“-”开头并且跟着一个空格。后面为元素内容。

4、同一个列表之中的元素应该保持相同的缩进,否则会被当做错误处理。
   注意: 缩进不能使用tab键

5、playbook中hosts、variables、roles、tasks等对象的表示方法都是键值中间以“:”分隔表示,并且“:”之后要加一个空格。

(二)返回状态

绿色代表执行成功,系统保持原样。黄色代表系统状态发生改变。红色代表执行失败,显示错误输出。

(三)核心元素

1、 Hosts:主机组

2、Tasks:任务列表

(1)name(任务名)

(2)模块(模块名)

(3)notify(触发任务,与handlers名称一致)

(4)tags(任务执行标签)

3、Variables:变量,设置方式有四种

(1)vars

(2)外部传递:ansible-playbook  xxx.yml -e var=value

(3)内部定义

4、 Handlers:由特定条件触发的任务。

5、Templates:包含了模块语法的文本文件

(1)template

(2)拷贝模板文件

(四)案例

1、vim   mariadb.yml

 2、运行剧本

命令:ansible-playbook   mariadb.yml
   

(五)roles

1、roles/

2、mysql/:mysql服务的yml文件

3、httpd/:apached服务的yml文件

4、nginx/:nginx服务的yml文件

5、files/:存储由copy或者script等模块调用的文件或者脚本;

6、tasks/:此目录中至少应该有一个名为main.yml的文件,用于定义各个task;其他文件需要由main.yml进行包含调用;

7、handlers/:此目录中至少应该有一个名为main.yml的文件,用于定义各个handler;其他文件需要由main.yml进行包含调用;

8、vars/:此目录至少应该有一个名为main.yml的文件,用于定义各个variable(变量);其他的文件需要由main.yml进行包含调用;

9、templates/:存储由templates模块调用的模板文件;

10、meta/:此目录中至少应该有一个名为main.yml的文件,定义当前角色的特殊设定以及依赖关系,其他文件需要由main.yml进行包含调用;

11、defaults/:此目录至少应该有一个名为main.yml的文件,用于设定默认变量;

(六)批量创建目录结构

mkdir -p {nginx,mysql,tomcat}/{tasks,files,hanlders,vars,templates,meta,defaults}

本文链接:https://my.lmcjl.com/post/1525.html

展开阅读全文

4 评论

留下您的评论.