自动化编排工具(Ansible)
利用自动化构建工具如npm、pip #生活技巧# #编程开发#
一、ansible介绍:
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行
命令等功能。支持linux、BSD、MacOS等, 支持openstack 、docker等结合使用。
Ansible核心组件说明:
Ansible:Ansible的核心程序
Host Inventory:记录了每一个由Ansible管理的主机信息,信息包括ssh端口,root帐号密码,ip地址等等。可以通过file来加载,可以通过CMDB加载
Playbooks:YAML格式文件,多个任务定义在一个文件中,使用时可以统一调用,“剧本”用来定义那些主机需要调用那些模块来完成的功能.
Core Modules:Ansible执行任何管理任务都不是由Ansible自己完成,而是由核心模块完成;Ansible管理主机之前,先调用core Modules中的模块,然后指明管理Host Inventory中的主机,就可以完成管理主机。
Custom Modules:自定义模块,完成Ansible核心模块无法完成的功能,此模块支持任何语言编写。
Connection Plugins:连接插件,Ansible和Host通信使用
ansible 特性:
①不需要安装客户端(支持ssh)
②不需要启动服务(ansible)
③基于模块工作,可以使用任意语言开发模块
④基于ssh工作( 基于密钥认证)
⑤YAML格式,编排任务,支持丰富的数据结构(剧本playbook)
⑥使用python编写,维护简单
二、Ansible的安装部署:
1.安装ansible:
[root@localhost ~]# yum install -y epel* [root@localhost ~]# yum install -y ansible [root@localhost ~]# rpm -qc ansible //查询到ansible的配置文件 /etc/ansible/ansible.cfg /etc/ansible/hosts 12345
2.配置ansible:
[root@localhost ~]# vim /etc/ansible/hosts //修改ansible的主配置文件 192.168.48.131 //添加一个被管理主机 [root@localhost ~]# ssh-keygen -t rsa //生成秘钥 [root@localhost ~]# ssh-copy-id -i 192.168.48.131 //把公钥拷贝给被管理端主机 [root@localhost ~]# ansible 192.168.48.131 -m ping //m表示模块名,ping代表ping模块 12345
如果有多台主机的话可以给它们加个标签:
然后直接用标签去连接:
[root@localhost ~]#ansible A -m ping //两台主机都ping通了 1
三、模块:
ansible中最主要的就是模块了:
[root@localhost ~]#ansible-doc -l //查看ansible中支持的所有模块 [root@localhost ~]#ansible-doc ping //查看ping模块的使用方法及基本介绍 12
①user模块:
管理远程主机上的用户的账号。常见参数有:
name= 指明要管理的账号名称 state=present|absent 指明是创建账号还是删除账号,present表示创建,absent表示删除 system=yes|no 指明是否为系统账号 uid= 指明用户UID group= 指明用户的基本组 groups= 指明用户的附加组 shell= 指明默认的shell home= 指明用户的家目录 move_home=yes|no 当home设定了家目录,如果要创建的家目录已存在,是否将已存在的家目录进行移动 password= 指明用户的密码,最好使用加密好的字符串 comment= 指明用户的注释信息 remove=yes|no 当state=absent时,也就是删除用户时,是否要删除用户的家目录 123456789101112
下面我们来看一个例子: [root@localhost ~]# ansible A -m user -a "name=rose uid=501 state=present comment='rose user'" //创建一个用户 12
[root@localhost ~]# ansible A -m user -a 'name=martin state=absent remove=yes' //移除用户及家目录 1
ansible创建用户时,无法添加密码的问题(解决方案):
(https://blog.51cto.com/10978134/2132334?source=dra)
②group模块:
用来添加或删除远端主机的用户组 常见参数有:
name= 被管理的组名 state=present|absent 是添加还是删除,不指名默认为添加 gid= 指明GID system=yes|no 是否为系统组 1234
例子:
[root@localhost ~]#ansible A -m group -a 'name=hr gid=2000 state=present' //创建一个hr组 1
③file模块:
用于设定远程主机上的文件属性,常见参数有:
path= 指明对哪个文件修改其属性 src= 指明path=指明的文件是软链接文件,其对应的源文件是谁,必须要在state=link时才有用 state= directory|link|absent 表示创建的文件是目录还是软链接 owner= 指明文件的属主 group= 指明文件的属组 mode= 指明文件的权限 创建软链接的用法: src= path= state=link 修改文件属性的用法: path= owner= mode= group= 创建目录的用法: path= state=directory 删除文件: path= state=absent 1234567891011121314
例子:
创建一个软连接: [root@localhost ~]#ansible A -m file -a 'src=/etc/passwd path=/tmp/passwd.link state=link' 删除文件: [root@localhost ~]#ansible A -m file -a 'path=/tmp/cc.txt state=absent' 修改文件属性: [root@localhost ~]#ansible A -m file -a 'path=/tmp/bb.txt mode=700 owner=root group=nobody' 123456
④copy模块:
拷贝ansible管理端的文件到远程主机的指定位置,常见参数:
dest= 指明拷贝文件的目标目录位置,使用绝对路径,如果源是目录,则目标也要是目录,如果目标文件已存在,会覆盖原有内容 src= 指明本地路径下的某个文件,可以使用相对路径和绝对路径,支持直接指定目录,如果源是目录,则目标也要是目录 mode= 指明复制时,目标文件的权限 owner= 指明复制时,目标文件的属主 group= 指明复制时,目标文件的属组 content= 指明复制到目标主机上的内容,不能与src一起使用,相当于复制content指明的数据,到目标文件中 123456
例子:
[root@localhost ~]#ansible A -m copy -a "src=/etc/hosts dest=/tmp mode=600 owner=rose group=root" //拷贝文件并指定属主和属组 1
⑤shell模块:(常用模块)
支持重定向,管道
[root@localhost ~]#ansible A -m shell -a "ps aux | grep nginx" 1
⑥yum模块:
基于yum机制,对远程主机管理程序包,常用参数有:
name=指明程序包的名称,可以带上版本号,不指明版本,就是默认最新版本 name=httpd name=httpd-2.2.15 state=present|lastest|absent 指明对程序包执行的操作,present表示安装程序包,latest表示安装最新版本的程序包,absent表示卸载程序包 disablerepo= 在用yum安装时,临时禁用某个仓库,仓库的ID 仓库id查看方式 (yum repolist) enablerepo= 在用yum安装时,临时启用某个仓库,仓库的ID conf_file= 指明yum运行时采用哪个配置文件,而不是使用默认的配置文件 disable_gpg_check=yes|no 是否启用gpg-check 12345678
卸载软件包: [root@localhost ~]# ansible A -m yum -a 'name=nmap state=absent' 安装软件包: [root@localhost ~]# ansible A -m yum -a 'name=nmap state=present' 安装httpd: [root@localhost ~]# ansible A -m yum -a 'name=httpd disable_gpg_check=yes disablerepo=yum state=present' 123456
⑦service模块:
用来管理远程主机上的服务的模块,常见参数有:
name= 被管理的服务名称(/etc/init.d) state=started|stopped|restarted 表示启动或关闭或重启 enabled=yes|no 表示要不要设定该服务开机自启动 runlevel= 如果设定了enabled开机自动启动,则要定义在哪些运行级别下自动启动 1234
例子:
[root@localhost ~]# ansible A -m service -a "name=httpd state=started" //启动httpd服务 [root@localhost ~]# ansible A -m shell -a "service httpd status" 12
⑧cron模块:
管理计划任务的模块,常见参数有:
minute= 指明计划任务的分钟,支持格式:0-59,*,*/2等,与正常cron任务定义的一样的语法,省略时,默认为*,也就是每分钟都执行 hour= 指明计划任务的小时,支持的语法:0-23,*,*/2等,省略时,默认为*,也就是每小时都执行 day= 指明计划任务的天,支持的语法:1-31,*,*/2等,省略时,默认为*,也就是每天都执行 month= 指明计划任务的月,支持的语法为:1-12,*,*/2等,省略时,默认为*,也就是每月都执行 weekday= 指明计划任务的星期几,支持的语法为:0-6,7 ,*等,省略时,默认为*,也就是每星期几都执行 reboot 指明计划任务执行的时间为每次重启之后 name= 给该计划任务取个名称,必须要给明。每个任务的名称不能一样。 job= 执行的任务是什么,当state=present时才有意义 state=present|absent 表示这个任务是创建还是删除,present表示创建,absent表示删除,默认是present 123456789
例子:
[root@localhost ~]# ansible A -m cron -a "name=date job='/usr/bin/rdate -s 192.168.48.133 &> /dev/null' state=present minute=*/2" //每两分钟向133服务器同步一次时间 1
⑨hostname模块:
管理远程主机上的主机名,常用参数有:
name= //指明主机名 1
例子:
[root@localhost ~]# ansible test -m hostname -a "name=jack.host" //永久修改主机名 1
⑩fetch模块:
从远程主机拉取文件到本地。一般情况下,只会从一个远程节点拉取数据,常见参数有:
src= 指明远程主机上要拉取的文件,只能是文件,不能是目录 dest= 从远程主机上拉取的文件存放在本地的位置,一般只能是目录 12
例子:
[root@localhost ~]# ansible A -m fetch -a 'src=/etc/passwd dest=/tmp' 1
四、ansible playbook:
简单来说,playbooks 是一种简单的配置管理系统与多机器部署系统的基础.与现有的其他系统有不同之处,且非常适合于复杂应用的部署.
Playbooks 可用于声明配置,更强大的地方在于,在 playbooks 中可以编排有序的执行过程,甚至于做到在多组机器间,来回有序的执行特别指定的步骤.并且可以同步或异步的发起任务.
Playbooks 的格式是YAML(详见:YAML 语法),语法做到最小化,意在避免 playbooks 成为一种编程语言或是脚本,但它也并不是一个配置模型或过程的模型.
playbook 由一个或多个 ‘plays’ 组成.它的内容是一个以 ‘plays’ 为元素的列表.
在 play 之中,一组机器被映射为定义好的角色.在 ansible 中,play 的内容,被称为 tasks,即任务.在基本层次的应用中,一个任务是一个对 ansible 模块的调用
playbook的基础组件: Playbook 文件必须是*.yml结尾。 hosts:运行指定任务的目标主机,多个主机用:冒号分隔 remote_user:在远程主机上执行任务的用户;可以全局指定,也可以单个任务指定 sudo_user:表示以sudo方式运行任务时,切换为哪个用户身份运行 tasks: 任务列表 123456
简单案例:
测试文件语法 [root@localhost ~]# ansible-playbook --syntax-check test.yml 测试执行 [root@localhost ~]# ansible-playbook --check test.yml 1234
网址:自动化编排工具(Ansible) https://www.yuejiaxmz.com/news/view/577498
相关内容
Ansible 自动化运维工具详解【补充】Python的自动化工具Ansible
Ansible: 简单而强大的IT自动化工具
带你了解Linux自动化运维工具——ansible
适用于 Linux 的六种优秀自动化和编排工具
十个值得推荐的自动化和编排工具
自动化运维:使用Ansible简化日常任务
使用 Ansible 和 Github 的工作流程自动化和测试点文件
自动化运维工具
用 Ansible 自动化系统管理员的 5 个日常任务 | Linux 中国